
L'application FFmpeg est un projet libre d'enregistrement et de conversion vidéo. Il repose sur l'utilisation de librairies grauites / libres comme libavcodec, libavformat, libavutils ...
Multi-plateforme, FFmpeg est utilisé dans de nombreux logiciels connus que ce soit sous Linux, MacOS X ou Windows tel Mplayer, Mencoder et même VLC ! Il dispose en outre d'un serveur de streaming (ffserver) pour ce qui souhaitent diffuser des flux vidéos sur le réseau.
FFmpeg dispose d'une librairie php nommée FFmpeg-php, laquelle permet d'accéder aux meta-données des fichiers vidéos pour faciliter les traitements ou générer des captures d'images à partir de vos vidéos (à destination de vignettes par exemple). Le principal défaut de FFmpeg-php est son manque de suivi. Régulièrement les mises à jour du logiciel base ne sont pas suivies par l'applicatif php et il est souvent très difficile de compiler deux versions compatibles des logiciels.
J'ai donc cherché comment contourner le problème, et ffmpeg est suffisament puissant pour faire tout le travail tout seul, à condition de disposer des accès systèmes sur sa machine.
Installer FFmpeg
Sous Windows téléchargez le binaire et exécutez le.
Sous Linux :
- Debian/Ubuntu : apt-get install ffmpeg
- Gentoo : emerge ffmpeg
- Autres : " svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg " + compilation
Si nécessaire je ferais un petit tutoriel pour la compilation du binaire avec les bonnes librairies (chaque codec peut-être géré indépendament). N'hésitez pas à me solliciter sur ce point.
Extraire une image d'une vidéo
Pour extraire une seule image à un instant donné de la vidéo voici la commande :
ffmpeg -i "fichier.avi" -vcodec mjpeg -vframes 1 -an -f rawvideo -s 640x360 -ss 20 "image.jpg"
Quelques explications :
-i "fichier.avi" : spécifie le fichier d'entrée
-vcodec mjpeg : Le codec de sortie sera "mjpeg" pour enregistrer l'image au format standart compressé
-vframes 1 : pour ne capturer qu'une image
-an : désactive le décodage du son
-f rawvideo : force l'utilisation du format en sortie
-s 640x360 : résolution de l'image capturée en sortie
-ss 20 : emplacement dans le temps de l'image à capturer
"image.jpg" : spécification du fichier de sortie
J'espère que cette commande vous sera utile. Elle m'a permis en tout cas de relancer mon service de vidéo malgrès les nombreux bugs de FFmpeg-php. En évitant le recours à cette librairie secondaire on obtient au final un code un poil plus complexe mais parfois plus rapide et surtout beaucoup plus facilement exportable puisqu'il ne nécessite plus de configuration particulière pour php.
Prochaine étape : compilation de FFmpeg avec x264 pour optimiser le rendu et la taille des vidéos.
Visiter le site officiel FFmpeg