[Tuto] FFmpeg : encodage vidéo avec h264/AAC
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
- Faac : audiocoding.com/faac
- Faad : audiocoding.com/faad2
- x264 : videolan.org/developers/x264
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 h264 aac tutoriel installation compilation configuration |
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