Parfois avec mon appareil numérique dont les vidéos sont au format .mov, je suis obligé de faire la conversion suivante pour parvenir au flv
[.mov] -->mencoder-->[.avi]-->ffmpeg-->[.flv]
Tenter de faire la conversion directement à partir de ffmpeg se solde par l'erreur:
Audio resampler only works with 16 bits per sample, patch welcome
Ceci est due à un souci concernant la version de lame. Il faut compiler ffmpeg en prenant la version 3.97 de lame. Ici je vais compiler lame et recompiler ffmpeg sur mon serveur à Montpellier et le rapatrier chez moi à Antibes pour faire des tests.
0. Téléchargement d'une version full static corrigeant le problème
Je dispose maintenant d'une version de ffmpeg qui marche bien qu'on peut télécharger à http://www.davidgis.fr/download/ffmpeg-fullstatic-svn13000.tar.bz2
1. Compilation de lame 3.97
On télécharge, on compile mais pas besoin d'installer
wget http://freefr.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz -O - | tar xzf -
cd lame-3.97
./configure --enable-shared --enable-static
make
PAS DE MAKE INSTALL !!!
2. Compilation de ffmpeg en full static révision 13000
C'est la plus appropriée apparemment selon http://drupal.org/node/364269
On récupère donc la version
svn checkout --revision 13000 svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg-13000
Un petit configure pour la route avec quelques options dont --enable-libmp3lame
./configure --enable-libmp3lame --enable-libamr-nb --enable-libamr-wb --enable-libxvid --enable-nonfree \
--enable-gpl --enable-static --disable-shared
make
PAS DE MAKE INSTALL !!!
On localise la ligne responsable pour l'édition de liens pour ffmpeg et on fait les remplacement adéquate (sinon on peut aussi modifier la ligne EXTRALIBS=... dans le fichier config.mak
Et une dernière commande pour la route
gcc -L"/mnt/ffmpeg-repository/ffmpeg-13000"/libavdevice -L"/mnt/ffmpeg-repository/ffmpeg-13000"/libavformat \
-L"/mnt/ffmpeg-repository/ffmpeg-13000"/libavcodec -L"/mnt/ffmpeg-repository/ffmpeg-13000"/libavutil -rdynamic\
-export-dynamic -Wl,--warn-common -Wl,--as-needed -Wl,-rpath-link,"/mnt/ffmpeg-repository/ffmpeg-13000"/libavcodec \
-Wl,-rpath-link,"/mnt/ffmpeg-repository/ffmpeg-13000"/libavformat -Wl,-rpath-link,"/mnt/ffmpeg-repository/ffmpeg-13000"/libavutil \
-Wl,-Bsymbolic -o ffmpeg_g ffmpeg.o cmdutils.o -lavdevice -lavformat -lavcodec -lavutil /usr/lib/libz.a /usr/lib/libm.a \
/usr/local/lib/libamrnb.a /usr/lib/libm.a /usr/local/lib/libamrwb.a /usr/lib/libm.a /root/lame-3.97/libmp3lame/.libs/libmp3lame.a /usr/lib/libm.a /usr/local/lib/libxvidcore.a -ldl -ldl
On vérifie les dépendances
root@olivia:/mnt/ffmpeg-repository/ffmpeg-13000# ldd ffmpeg_g
linux-gate.so.1 => (0xffffe000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7eeb000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7ed3000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d88000)
/lib/ld-linux.so.2 (0xb7f0f000)
Bingo
!
3. Réception sur Antibe et tests
On rapatrie le binaire tout chaudement compilé o coup de scp et on le teste sur un fichier .mov
./ffmpeg_g -i Desktop/tmp/PICT0952.MOV -acodec libmp3lame -ab 48k -ac 1 -ar 44100 -f flv \
-deinterlace -nr 500 -croptop 4 -cropbottom 4 -cropleft 8 -cropright 8 -aspect 4:3 -r 25 -b 270k \
-me_range 25 -i_qfactor 0.71 -g 500 Desktop/tmp/denise-bmp8807.flv
Nickel on a le son et la vidéo!