ffmpeg-php, manipuler les vidéos et sons avec PHP

Jusqu’ici, je ne m’étais frotté qu’à la manipulation d’images avec PHP. L’utilisation de vidéos avec ce langage me paraissait infaisable. Et pourtant …

 
ffmpeg-php est une extension de PHP qui permet d’ajouter une API dédiée à la manipulation et au contrôle de vidéo et de sons. Cette API de haut niveau permet d’accéder à des fonctions simples et compréhensibles afin d’extraire des informations des fichiers.

Ces méthodes permettent de récupérer notamment des « frames » comme des images. celles-ci deviennent à leur tour manipulables en utilisant la librairie GD.
ffmpeg-php est juste parfait pour créer des vignettes depuis une vidéo, ou pour automatiser l’extraction de méta-données (durée, bitrate, …).
Il est même possible de créer des GIF animés en extrayant plusieurs frames.

$ffmpeg = ‘encoderffmpeg’; //put the relative path to the ffmpeg.exe file
$second = 15; //specify the time to get the screen shot at (can easily be randomly generated)
$image = ‘thumbnails/sample.jpg’; //define the output file
//finally assemble the command and execute it
$command = "$ffmpeg  -itsoffset -$second  -i $video -vcodec mjpeg -vframes 1 -an -f rawvideo -s 150×84 $image";
exec($command);

Voici quelques exemples de méthodes :

<?php
extension_loaded('ffmpeg') or die('Error in loading ffmpeg');

$ffmpegInstance = new ffmpeg_movie('clock.avi');
echo "getDuration: " . $ffmpegInstance->getDuration() .
"getFrameCount: " . $ffmpegInstance->getFrameCount() .
"getFrameRate: " . $ffmpegInstance->getFrameRate() .
"getFilename: " . $ffmpegInstance->getFilename() .
"getComment: " . $ffmpegInstance->getComment() .
"getTitle: " . $ffmpegInstance->getTitle() .
"getAuthor: " . $ffmpegInstance->getAuthor() .
"getCopyright: " . $ffmpegInstance->getCopyright() .
"getArtist: " . $ffmpegInstance->getArtist() .
"getGenre: " . $ffmpegInstance->getGenre() .
"getTrackNumber: " . $ffmpegInstance->getTrackNumber() .
"getYear: " . $ffmpegInstance->getYear() .
"getFrameHeight: " . $ffmpegInstance->getFrameHeight() .
"getFrameWidth: " . $ffmpegInstance->getFrameWidth() .
"getPixelFormat: " . $ffmpegInstance->getPixelFormat() .
"getBitRate: " . $ffmpegInstance->getBitRate() .
"getVideoBitRate: " . $ffmpegInstance->getVideoBitRate() .
"getAudioBitRate: " . $ffmpegInstance->getAudioBitRate() .
"getAudioSampleRate: " . $ffmpegInstance->getAudioSampleRate() .
"getVideoCodec: " . $ffmpegInstance->getVideoCodec() .
"getAudioCodec: " . $ffmpegInstance->getAudioCodec() .
"getAudioChannels: " . $ffmpegInstance->getAudioChannels() .
"hasAudio: " . $ffmpegInstance->hasAudio();
?> 

ffmpeg-php supporte un grand nombre de formats (mpeg, avi, wmv, mov, mp3, wma, …).

A titre d’exemple, Vimeo.com utilise ffmpeg-php pour créer ses vignettes. on peut donc penser que cette API est solide.

Téléchargez ffmpeg-php

A lire également