Login
blog > developpement > [Tuto] FFmpeg : encodage vidéo avec h264/AAC

[Tuto] FFmpeg : encodage vidéo avec h264/AAC

Posté par : Seb - Le Lundi 18 Mai 2009 à 21:10


Nous avons déjà vu comment extraire une image d'une vidéo avec FFmpeg dans le précédent tutoriel, cette fois ci nous allons nous pencher un peu plus en profondeur sur ce formidable outil. Notre objectif : disposer d'un outil capable d'encoder nos vidéos avec les meilleurs codecs actuels : h264 et AAC.


Cette fois nous allons devoir compiler nous même FFmpeg pour y intégrer certaines librairies externes. Pour notre but nous avons besoin de la librairie libre x264-encoder ainsi que libfaac.


x264 est la librairie libre référence pour l'encodage au format h264. Les spécifications de ce format ne sont pas récentes mais le récent support de ce format par Flash 9 en fait un choix très intéressant pour la diffusion de vidéos par internet, à la place du FLV. De même, depuis cette même version de Flash le codec audio AAC est supporté, ce format est reconnu pour son rendu de qualité supérieure au mp3, à bande passante équivalente. Nous allons utiliser la librairie libre libfaac pour encoder notre bande son dans ce format.


Installation de x264-encoder et libfaac

 Sous Gentoo :

emerge --sync
emerge faac x264-encoder

 

 

Sous Debian/Ubuntu

 sudo apt-get install faac x264

 

Manuellement :

git clone git://git.videolan.org/x264.git
cd x264
./configure --enable-shared
make
make install


wget http://downloads.sourceforge.net/faac/faac-1.28.tar.bz2
tar -xjvf faac-1.28.tar.bz2
cd faac-1.28
./configure && make
make install

 

 

Installation et compilation de FFmpeg

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-libfaac --enable-libx264 --enable-gpl --enable-pthreads
make
make install


Les options de compilation présentées ici sont épurées pour simplifier, il vous faudra probablement ajouter certains composants selon votre type de fichier en entrée.


Exécution

Il ne nous reste plus qu'à tester notre application :

ffmpeg -i video_in.avi -acodec libfaac -ar 44100 -ab 128k -ac 2
-vcodec libx264 -r 24 -s 640x360 -b 2496k -bt 1024k -y video_out.avi

 

Décomposons rapidement les options :

  • -i video_in.avi : vous permet de spécifier le fichier source
  • -acodec libfaac : définit la librairie libfaac come codec audio
  • -ar 44100 -ab 128k -ac 2: Fréquence audio de 48K et Bitrate audio de 128K sur 2 canaux
  • -vcodec : utilise le codec vidéo x264
  • -r 24 -s 640x360 : framerate fixé à 24 images/s et résolution de 640 x 360 px
  • -b 2496k -bt 1024k : bitrate vidéo variable à 2496k (plus ou moins 1024k)
  • -y video_out.avi : spécifié le fichier de sortie

 

Utiliser les processeurs multi-coeur

Puisque vous avez compilé avec l'option --enable-pthreads, si votre processeur est multithreadé (processeurs multi-coeur ou disposant de l'hyper-threading) vous pouvez en profiter dans l'encodage x264. Pour ce faire rajoutez simplement l'option " -threads 0 " dans votre ligne de commande.

 

Conclusion

Voilà, vous devriez maintenant être capable d'encoder vos vidéos dans un format de compression performant, le tout grâce à des systèmes libres et gratuits ! Si vous rencontrez des difficultés ou si vous avez des suggestions d'améliorations n'hésitez pas à partager votre expérience dans les commentaires de ce billet.

 

Références

 



Article précédant :
Un objet qui se dirige vers un point
Article suivant :
Media Player Classic : pixel shaders pour les dbutants!






Commentaires 4 commentaires

farwarx le 19 Mai 2009 à 11:05

Sympa le tuto ;)
Combien de temps ça prend la conversion?
La vidéo en entrée est de quel format?
Quel est le ratio taille avant / taille après?

Seb le 19 Mai 2009 à 13:01

Comme souvent dans ce cas, la réponse risque d'être inutile : ça dépend !

Le temps d'encodage est déterminée par les réglages et la puissance disponible. Sur mon RPS, avec un Atom 230, un encodage d'une vidéo HD 720 de 3 minutes mettra environ 5/6 minutes à être disponible.

C'est beaucoup plus qu'avec l'ancien format flash (.flv), c'est même environ le double. Mais le rendu à bitrate équivalent est nettement supérieur.

La vidéo en entrée peut-être de n'importe quel format. Ffmpeg intègre d'origine les libraires libavcodec, libavtools, libavutils ... qui permettent de supporter la plupart des codecs standarts : avi, wmv ... mais la tâche se complique avec certains wmv9 ou mov, souvent au niveau de la piste audio. C'est pour ça qu'il est parfois nécessaire de recompiler en incluant la bonne librairie.

Le ratio taille, là encore tout dépend du format en entrée et du contenu de la vidéo (beaucoup d'animations ou pas). J'avais fait quelques comparatifs au moment où j'ai migré le serveur, mais les données se sont probablement envolées avec le reste du wiki : /

cnelson le 18 Février 2011 à 16:44

Bonjour,
Billet fort intéressant... Bravo
La version compilée est-elle utilisable sur PC windows ?
Est-il possible de compiler aussi simplement sur un PC ?

Seb le 20 Février 2011 à 17:49

Bonjour cnelson,
Il existe des versions pré-compilées pour Windows ( par exemple ici : http://www.01net.com/telecharger/windows/Multimedia/codecs/fiches/49137.html ). Pour la compilation sous Windows c'est possible mais un peu plus délicat. Il vous faudra utiliser Cygwin ou MinGW ou utiliser les version pré-compilées disponibles sur le net. Vous devriez trouver votre bonheur par ici : http://ffmpeg.arrozcru.org



.laisser un commentaire




Codes html interdits. Les liens sont convertis automatiquement.

Réalisation

Code & Design : Sébastien Cardona

Page générée en : 0.028994s