PHP – Convertir des vidéos avec FFMPEG Linux

FFmpeg

Il y a quelques temps j’ai développé une galerie vidéos en PHP. Le plus gros problème de cette galerie était qu’il fallait encoder les vidéos en FLV avant de les déposer sur le site et pour les miniatures des vidéos, il fallait également les créer à la mano… Bref le site perdait vite de son attrait tellement il était fastidieu de déposer une nouvelle vidéo.

Avec FFMPEG installé sur le serveur d’hébergement, il est maintenant possible d’encoder et de générer les miniatures à la volée !

Pour l’installation de FFMPEG un simple “apt-get install FFMPEG” pourrait suffire seulement si vous voulez encoder avec des codecs particuliers tel que le H.264 bah il vaut mieux l’installer à la mano à partir des sources :

Pour installer FFMPEG avec le codec H.264 je vous renvoi vers cet article très bien fait : ici

Ensuite il y a PHP5-FFMPEG, pour l’installer : apt-get install php5-ffmpeg.

Cette classe permet, entre autres, de récupérer toutes es informations d’une vidéo, comme la durée, les codecs audio et vidéo, le bitrate…

Afficher les informations d’une source vidéo

Exemple :

<?php
// Ce code vous retournera la durée, le bitrate, le nombre d'images, le codec Audio et vidéo, ainsi que le nombre de canaux audio de la vidéo.
$mov = new ffmpeg_movie("mavideo.mov");
echo "<ul><li>Durée : ".$mov->getDuration()."</li>";
echo "<li>Bitrate : ".$mov->getBitRate()."</li>";
echo "<li>Images : ".$mov->getFrameCount()."</li>";
echo "<li>Codec Vidéo : ".$mov->getVideoCodec()."</li>";
echo "<li>Codec Audio : ".$mov->getAudioCodec()."</li>";
echo "<li>Cannaux : ".$mov->getAudioChannels()."</li></ul>";
?>

Encoder une vidéo

Exemple :

<?php
//Encode un fichier .mov en fichier .mp4 avec le codec H.264
$res= system("ffmpeg -i source.mov -vcodec mpeg4 -b 1400k -s 320x240 -y -f mp4 -acodec aac -ar 24000 -ab 32k destination.mp4", $res_var);

//Encode un fichier .mov en fichier .FLV
$res = system ("ffmpeg -i source.mov -ar 22050 -ab 32k -b 1400k -y -f flv destination.flv", $res_var);
?>

Capturer une image de la video

Exemple :

<?php
//Ce code permet de capturer une image à 15 secondes du début de la video
$secondes ="15";
$src="/CHEMIN_COMPLET/source.mov";
$dst="/CHEMIN_COMPLET/destination.jpg";

$mov = new ffmpeg_movie($src);
//On calcule le nombre d'images par seconde
$img_par_s=$mov->getFrameCount()/$mov-&gt;getDuration();

// Récupère l'image
$frame = $mov->getFrame($secondes*$img_par_s);
// Transforme la frame récupérée au dessus en ressource GD
$img = $frame->toGDImage();
ImageJpeg($img, $dst);

?>

Sinon il y a aussi...