Générer des vignettes de vidéos avec FFmpeg
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.
Article précédant :
Un objet qui se dirige vers un pointArticle suivant :
Media Player Classic : pixel shaders pour les débutants!
Billets similaires | Tagsffmpeg vignettes video extraire encodage image jpg |
Commentaires 6 commentaires
farwarx le 20 Avril 2009 à 8:56
Simple et efficace!!!Je rajouterai: Mandriva: urpmi ffmpeg; RedHat/CentOS: yum install ffmpeg.
Seb le 20 Avril 2009 à 10:40
ça pour être efficace, c'est de la petite bombe ce logiciel.Merci pour ces précisions farwarx.
farwarx le 20 Avril 2009 à 10:45
Attention néanmoins à ne pas créer une faille dans ton code php.L'utilisation de commande système dans un code php doit être très vérifié et contrôlé.
Et surtout ne pas utiliser les variables GET et POST pour une commande système.
Il existe un super plugin Firefox pour voir tout ça...
Seb le 20 Avril 2009 à 11:29
Pas de soucis de ce côté là, ne serait-ce que parce que le script n'est pas accessible à tout le monde et que je traite les données de toute façon.Seb le 09 Avril 2010 à 7:54
Monsieur Buzz > Ah ça je n'en doute pas, surtout dans ton domaine ;)