Encoder en flash video avec FFMPEG
Sommaire
Prérequis
Outre les outils de compilations usuels :
- Lame et liblame et sa version devel pour le support MP3.
- liba52
- libxvid
- faac et faad2
- x264 pour le support de MPEG4
- AMR pour le support de 3GP [1] [2]
x264 et AMR sont optionnels, a vous de voir quels formats vous souhaitez supporter.
Mise en place
Compilation de faac et faad2
Faac
Cette partie fait mention de faac' mais les étapes de compilation sont quasiment identiques pour faac' et faad2.
Télécharger l'archives des sources de faac''' puis faites :
tar -xvzf faac
chmod 0755 bootstrap
./bootstrap
./configure
make
sudo make install
Alors, attention, pour je ne sais quel raison, il semble que l'archive soit enregistré au format DOS (sic!), je cite :
Problem is that files are stored in DOS format. If you installing FAAC on Linux/Unix you should change files format.
Si en lancant bootstrap vous avez l'erreure suivante :
: bad interpreter: No such file or directory
C''est que vous avez ce problème.
Le plus simple est d'utiliser l'utilitaire Dos2Unix sur ces fichiers à la racine de l'archive décompressée :
- bootstrap
- configure.in
- Makefile.am
Faad2
Cette étape est la base identique à celle de Faac mais il y a un bug sur Faad2[3]
En résumé la solution c'est de faire la commande suivante après avoir décompressé votre archive de Faad2 et d'avoir fait un dos2unix :
tar xf faad2-2.5.tar.gz &&
cd faad2 &&
echo > plugins/Makefile.am &&
echo > plugins/xmms/src/Makefile.am &&
sed -i ''/E_B/d' configure.in &&
autoreconf -vif &&
./configure --prefix=/usr &&
make
Compilation de FFMPEG
[4]
Télécharger la dernière version de FFMPEG, la version svn est le meilleure choix.
Il vous faut un client SVN :
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
Puis lancer la configuration de compilation avec la commande suivante :
./configure --prefix=/usr --enable-shared --libdir=/usr/lib --enable-a52 --enable-pp --enable-gpl --enable-pthreads --enable-mp3lame --enable-faad --enable-faac --enable-x264 --enable-xvid
Rajoutez --enable-amr_nb avec un espace devant, juste à la fin de la ligne ci dessus si vous avez compilé AMR pour le support de 3GP.
Lame et liblame sont nécessaires pour faire la compression en Mp3, car la bande son des vidéos Flash est en Mp3.
Après le make et make install, testez tout de suite la commande :
ffmpeg -formats
Vérifiez qu'il y a la plupart des formats connus en DEA, ou D indique qu'il est apte à décoder ce format, et E qu'il est apte à encoder dans ce format. Vérifiez aussi que le Codec pour mp3 est bien en DEA, si il n'est qu'en D A c'est que vous avez un problème avec l'activation de Lame.
Utilisation
Encodage en FLV
ffmpeg -i INPUT -acodec mp3 -ab 32 -f flv -s 320x240 -ar 22050 -aspect 4:3 -pass 1 -y OUTPUT
- INPUT : le fichier à encoder
- OUTPUT : le fichier de sortie pour la vidéo en FLV
- -acodec mp3 : indique qu'on encode la piste son en mp3, c'est essentiel sinon il n'y aura pas de son dans la vidéo
- -s 320x240 : la taille du fichier final
On peut aussi préciser :
- -b 256 : le bitrate max de la vidéo
- -r 15 : le frame rate de la vidéo finale
Mais ça dégradera presque forcément la qualité de la vidéo, à vous de voir selon votre utilisation de la vidéo Flash.
On est aussi censé pouvoir faire une "seconde passe" d'encodage pour avoir un encodage optimisé en qualité mais chez moi ça n'a pas fonctionné à cause d'un bug. Suivant la ligne vue plus haut, voila ce qu'il aurait fallu entre pour lancer une seconde passe :
ffmpeg -i INPUT -acodec mp3 -ab 32 -f flv -s 320x240 -ar 22050 -aspect 4:3 -pass 2 -y OUTPUT
Sans faire de seconde passe et sans changer le bitrate ou framerate, on atteind 25% de gains en taille de fichier.
Faire une vignette d'aperçu
ffmpeg -y -i INPUT -vframes 1 -ss 00:00:02 -an -vcodec png -f rawvideo OUTPUT
- INPUT : la vidéo source, pas celle en FLV
- OUTPUT : le fichier de sortie pour l'image
- -ss 00:00:02 : Indique à quelle position on capture l'aperçu
Erreurs
Si vous voyez un message comme ceci :
Unsupported codec for output stream #1
Cest surement qu'il y a un problème avec lame qui soccupe du son, testez l'encodage sans l'option -acodec mp3, cela devrait fonctionner en faisant une vidéo FLV correcte mais sans le son. Si c'est le cas c'est donc bien un problème avec Lame.
Notes
[1] Une astuce pour le compiler : http://www.aozeo.com/blog/40-linux-convertir-videos-3gp-ffmpeg-telephone-portable
[2] Un petit lien utile http://www.portableaudiodevice.com/2005/12/converting-movies-to-3gp-for-your.html
[3] Problème avec Faad2 : http://www.audiocoding.com/modules/newbb/viewtopic.php?topic_id=487&forum=2
[4] Larticle qui ma permit d'y aboutir : http://www.cyrilgodefroy.com/fr/index.php/2005/12/23/20-ffmpeg-avec-mp3-et-aac
[5] Article à l'initiative de ce document : http://blog.go4teams.com/?p=56
[6] Un peu plus de détails http://www.cyrilgodefroy.com/fr/index.php/2005/11/28/11-convertir-ses-videos-en-flash-avec-ffmpeg
Dernière édition le Tuesday 05 May 2009 à 19:30