Debian l'intégriste... pour notre bien

Voila, je viens de recevoir une video avi d'un collègue que je voulais "flv-ïser" pour que tout le monde en profite sur un blog. Je prends donc mon ffmpeg préféré et lance la commande :

  1. [bash]
  2. ffmpeg -i inputfile.avi -s 320x240 -r 30 -ar 44100 -f flv outputfile.flv

et bien il me répond méchamment :

  1. [text]
  2. Unsupported codec (id=73728)
  3. Audio: mp4a / 0x6134706D

Après quelques recherches je tombe sur cette page qui m'apprend que ce type de codage est gérée par libfaad. faad est la librairie pour décoder et faac celle pour encoder.

Il me faut donc recompiler ffmpeg afin de lui ajouter le support de plusieurs codecs utiles pour pouvoir convertir les fichiers qui viendraient d'un autre système d'exploitation que notre tux adoré.

Et zou une autre page pour cela mais toujours en anglais.

Allez c'est parti.

Pour les réticents de la compilation

Si vous ne désirez pas recompiler les applications ou encore "polluer" votre installation avec des logiciels non "packagés", il existe des paquets ffmpeg pour Debian et Ubuntu qui intègrent le supports de codecs pas forcément libres. Il conviendra d'ajouter les dépôts dans le fichier /etc/apt/sources.list. Merci à Pouet pour les adresses :

Pour Debian

Source http://www.commentcamarche.net/faq/sujet-3326-multimedia-et-linux

Il faut d'abord configurer APT afin qu'il aille chercher les paquetq multimédia modifiés. Un dépôt APT est maintenu par Christian Marillat qui propose mplayer et autres logiciels

Ajouter la ligne suivante au fichier /etc/apt/sources.list (en fonction de votre version)

  1. [text]
  2. # Stable
  3. deb www.debian-multimedia.org sarge main # MPlayer et DVD::Rip
  4. # Testing
  5. deb www.debian-multimedia.org etch main #multimedia
  6. # Unstable
  7. deb www.debian-multimedia.org sid main #multimedia

Il ne reste plus qu'à relancer votre aptitude/synmaptic ou autre apt-get update pour installer les paquets modifiés.

Pour Ubuntu

http://www.commentcamarche.net/faq/sujet-5397-lire-tous-les-formats-video-les-mp3-et-les-dvd

Pour Ubuntu 7.10

- Tapez:

  1. [bash]
  2. sudo aptitude install linux-restricted-modules ubuntu-restricted-extras ffmpeg libdvdnav4

- Tapez :

  1. [bash]
  2. sudo /usr/share/doc/libdvdread3/install-css.sh
Pour Ubuntu 7.04

- Tout d'abord, activez les dépôts Universe et Multiverse. (Opération inutile pour Ubuntu 7.04 et suivants) - Tapez :

  1. [bash]
  2. sudo aptitude install ffmpeg gstreamer0.10-ffmpeg gstreamer0.8-ffmpeg gstreamer0.8-misc\
  3. mplayer vlc mozilla-mplayer xine xine-ui libdvdread3 libdvdplay0 libdvdnav4 flashplugin-nonfree

- Tapez :

  1. [bash]
  2. sudo /usr/share/doc/libdvdread3/install-css.sh

Pour les plus courageux...

Version svn de ffmpeg

Source de ffmpeg http://ffmpeg.sourceforge.net/

Dans un premier temps on va récupérer la version svn de ffmpeg et voir quelles sont les options disponibles. Si vous ne disposez par de subversion il suffit de l'installer par :

  1. [bash]
  2. apt-get install subversion

ensuite on crée la copie de travail locale de ffmpeg

  1. [bash]
  2. svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
  3. ....
  4. Actualisé à la révision 12442.

On va visualiser les options disponibles par :

  1. [bash]
  2. ./configure --help | more
  3. .....
  4. External library support:
  5. --enable-sunmlib use Sun medialib [default=no]
  6. --enable-liba52 enable GPLed liba52 support [default=no]
  7. --enable-liba52bin open liba52.so.0 at runtime [default=no]
  8. --enable-avisynth allow reading AVISynth script files [default=no]
  9. --enable-libamr-nb enable libamr-nb floating point audio codec
  10. --enable-libamr-wb enable libamr-wb floating point audio codec
  11. --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394
  12. and libraw1394 [default=no]
  13. --enable-libfaac enable FAAC support via libfaac [default=no]
  14. --enable-libfaad enable FAAD support via libfaad [default=no]
  15. --enable-libfaadbin open libfaad.so.0 at runtime [default=no]
  16. --enable-libgsm enable GSM support via libgsm [default=no]
  17. --enable-libmp3lame enable MP3 encoding via libmp3lame [default=no]
  18. --enable-libnut enable NUT (de)muxing via libnut,
  19. native demuxer exists [default=no]
  20. --enable-libtheora enable Theora encoding via libtheora [default=no]
  21. --enable-libvorbis enable Vorbis encoding via libvorbis,
  22. native implementation exists [default=no]
  23. --enable-libx264 enable H.264 encoding via x264 [default=no]
  24. --enable-libxvid enable Xvid encoding via xvidcore,
  25. native MPEG-4/Xvid encoder exists [default=no]
  26. .....

La partie la plus intéressante concerne le support des librairies. Les librairies faad vorbis a52 gsm theora dc1394 faadbin peuvent être installées à partir des dépôts debian (ne pas oublier d'installer les paquets de développement). Par contre pour faac xvid et lame nous allons les installer à partir des sources.

Installation de Lame

Lame est un encoder MPEG 3 ( LAME Ain't an Mp3 Encoder). L'utilisation de Lame dans un logiciel peut requérir le paiement d'une patente dans certain pays. C'est pourquoi, cette librairie n'est pas intégrée dans ffmpeg.

On récupère les sources à l'adresse suivante [http://sourceforge.net/projects/lame], puis on exécute

  1. [bash]
  2. tar xzf lame-3.97.tar.gz
  3. cd lame-3.97
  4. $ ./configure
  5. $ make
  6. # make install

Le make install se fait bien sur en root

Installation de xvid

Xvid est une implémentation de la norme MPEG-4 (partie 2) de codage vidéo et distribué sous licence publique générale GNU (GPL). À l'origine basé sur OpenDivX, Xvid fut développé par un groupe de volontaires après que les sources de OpenDivX n'aient plus été disponibles. (source Wikipédia)

On récupère les sources à l'adresse http://www.xvid.org/, et on exécute :

  1. [bash]
  2. $ tar xzf xvidcore-1.1.3.tar.gz
  3. $ cd xvidcore-1.1.3/
  4. $ cd build/generic/
  5. $ ./configure
  6. $ make
  7. # make install

Le make install se fait bien sur en root

Installation de faac

FAAC est un encodeur AAC MPEG-4 et MPEG-2 AAC opensource. Désigné pour être le successeur du MP3, le format AAC permet d'obtenir une meilleure qualité de son.

On récupère les sources à l'adresse http://www.audiocoding.com/downloads.html et on exécute :

  1. [bash]
  2. $ tar xzf faac-1.26.tar.gz
  3. $ cd faac/
  4. $ ./bootstrap
  5. $ ./configure
  6. $ make
  7. # make install

Le make install se fait bien sur en root

Installation de ffmpeg

Nous avons déjà créé notre copie de travail pour ffmpeg. Nous allons donc le configurer et la compiler. C'est la ligne de configure qui est la plus importante. Voici la mienne pour ma debian lenny:

  1. [bash]
  2. ./configure --enable-libmp3lame --enable-gpl --enable-shared --enable-libfaad \
  3. --enable-libfaac --enable-libvorbis --enable-libxvid --enable-pthreads --enable-liba52 \
  4. --enable-libgsm --enable-libtheora --disable-debug --enable-libdc1394 --enable-swscale \
  5. --enable-avfilter --enable-avfilter-lavf --enable-libfaadbin

en voici une autre pour une gutsy (ajout du support x264) :

  1. [bash]
  2. ./configure --enable-libmp3lame --enable-gpl --enable-shared --enable-libfaad \
  3. --enable-libfaac --enable-libvorbis --enable-libxvid --enable-pthreads --enable-liba52 \
  4. --enable-libgsm --enable-libtheora --disable-debug --enable-libdc1394 --enable-swscale \
  5. --enable-avfilter --enable-avfilter-lavf --enable-libfaadbin --enable-libx264

Il ne reste plus qu'à compiler et installer :

  1. [bash]
  2. $ make
  3. # make install

Erreur au lancement de ffmpeg

Tout fier je lance ffmpeg et j'obtiens l'erreur suivante :

  1. [text]
  2. ffmpeg: error while loading shared libraries: libavformat.so.0: \
  3. cannot open shared object file: No such file or directory

En fait par défaut si vous n'avez rien précisé, ffmpeg s'installe dans /usr/local/bin et les librairies dans /usr/local/lib. Ce dernier répertoire n'est pas, par défaut, dans la liste des répertoires qui contiennent des librairies. Il faut donc l'ajouter pour que le système aille récupérer de dont il a besoin.

Ceci se fait en éditant le fichier /etc/ld.so.conf (en root) et on y ajoute la ligne :

  1. [text]
  2. /usr/local/lib

Puis on relance le configuration de l'éditeur de liens dynamique par

  1. [bash]
  2. # ldconfig

On peut aussi relancer le configure et lui ajouter l'option --prefix=/usr afin de l'obliger à s'installer dans /usr. Dans ce cas commencer par désinstaller ffmpeg, puis refaites la procédure d'installation

  1. [bash]
  2. # make uninstall
  3. $make distclean
  4. $ ./configure --enable-libmp3lame --enable-gpl --enable-shared --enable-libfaad \
  5. --enable-libfaac --enable-libvorbis --enable-libxvid --enable-pthreads --enable-liba52 \
  6. --enable-libgsm --enable-libtheora --disable-debug --enable-libdc1394 --enable-swscale \
  7. --enable-avfilter --enable-avfilter-lavf --enable-libfaadbin --prefix=/usr
  8. $ make
  9. #make install

Il ne devrait plus y avoir de problème avec le chargement des librairies dynamiques.

Conversion de fichiers en flv

Je vous renvoie vers la page Des flashs pour votre site web.

Sources