Compiler et installer ffmpeg sur Debian 7

Un gros tutoriel pour montrer comment compiler sur Debian (et par extension sous tous les Linux et même OSX) ffmpeg ainsi que ses dépendances. Pourquoi ? et bien cela est important de savoir le faire quand vous avez besoin d’une option non disponible dans la version fournie par la distribution que vous utilisez.

Publié le

Prérequis : savoir ce qu’est un shell Linux, savoir s’en servir, savoir éditer un fichier texte, avoir du temps devant soit, et beaucoup de patience.

Installer les outils systèmes de base

C’est facile, les versions actuelles fonctionnent très bien.

# apt-get install make gcc g++ unzip git autoconf automake libtool

Préparer les dossiers de travail et de destination

J’ai choisi de m’installer dans /opt/local. Vous pouvez vous mettre ou vous voulez. Même dans votre dossier utilisateur. Vous n’avez même plus besoin de rester root à partir de maintenant. Je ne préfère pas installer le tout directement à la racine, car en cas de problème, c’est facile de nettoyer. Et puis je ne risque pas d’avoir des confits.

Si vous utilisez un autre chemin que /opt/local pensez changer la valeur de –prefix dans vos configurations de compilation (voir plus bas).

Je constitue ma petite structure. Un peu comme un mini /. Tous les fichiers compilés et installés iront ici, et nulle par ailleurs.

mkdir /opt/local
mkdir /opt/local/etc
mkdir /opt/local/var
mkdir /opt/local/usr
mkdir /opt/local/bin
mkdir /opt/local/include
mkdir /opt/local/info
mkdir /opt/local/lib
mkdir /opt/local/man
mkdir /opt/local/share
mkdir /opt/local/var/src
cd /opt/local/var/src/

Définir les variables de compilation

Afin que les outils sachent que l’on travaille dans un sous dossier, je prépare un script à lancer une fois par session, avant de compiler quoi que se soit.

vi/nano/emacs/notepad.exe prepare.sh
#!/bin/bash
export LDFLAGS="-L/opt/local/lib $CFLAGS"
export CFLAGS="-I/opt/local/include $LDFLAGS"
export LD_LIBRARY_PATH="/opt/local/lib"

Puis

chmod +x prepare.sh 
. prepare

Et c’est tout.

Vérifiez qu’avec un export (tout seul), vous voyez bien ces variables. Si vous avez des problèmes plus tard, vérifiez bien que ces variables soient bien déclarés.

Téléchargement et compilation des dépendances

Accrochez vous, c’est parti.

Si les URL ne correspondent plus, improvisez avec ce que vous avez de plus proche sur le site du développeur. Attention aux versions !

Adaptez –prefix=/opt/local avec votre chemin racine choisi.

La compilation est toujours impressionnante, mais sans douleur. Si cela ce termine par un message d’erreur, réfléchissez. C’est toujours un problème de votre coté et rarement un bug. Le fichier config.log peut vous y aider.

Les options –disable-shared –enable-static permettent aux compilateurs de ne pas générer de fichiers de bibliothèques externes. Les exécutables sont plus lourds mais sont autonomes (vous pouvez les embarquer sur une autre machine après la compilation).

En cas de problème avec make, faites un make clean pour nettoyer ce qui à été généré.

L’option make -j 8 compile 8 éléments en même temps (8 fois plus vite si vous avez 8 coeurs/threads). A adapter si vos CPUs sont moins nombreux. -j est facultatif.

YASM (compilateur assembleur)

wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar xvfz yasm-1.2.0.tar.gz 
cd yasm-1.2.0/
ls
./configure --prefix=/opt/local
make -j 8
make install
cd ..

FLAC (codec audio)

wget http://downloads.xiph.org/releases/flac/flac-1.3.0.tar.xz
unxz flac-1.3.0.tar.xz 
tar xvf flac-1.3.0.tar 
cd flac-1.3.0/
./configure --disable-shared --enable-static --prefix=/opt/local --disable-debug --disable-asm-optimizations --enable-sse
make -j 8 && make install
cd ..

Libaacplus (codec audio AAC+)

wget http://217.20.164.161/~tipok/aacplus/libaacplus-2.0.2.tar.gz
tar xvfz libaacplus-2.0.2.tar.gz 
cd libaacplus-2.0.2/
./autogen.sh
./configure --disable-shared --enable-static --prefix=/opt/local
make
make install
cd ..

Lame (codec mp3)

wget http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz/download
mv download lame-3.99.5.tar.gz
tar xvfz lame-3.99.5.tar.gz 
cd lame-3.99.5/
./configure --disable-shared --enable-static --prefix=/opt/local
make 
make install
cd ..

Openjpg

wget https://openjpeg.googlecode.com/files/openjpeg-1.5.1.tar.gz
tar xvfz openjpeg-1.5.1.tar.gz 
cd openjpeg-1.5.1/
./configure --disable-shared --enable-static --prefix=/opt/local
make
make install
cd ..

Ogg (container)

wget http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz
tar xvf libogg-1.3.1.tar.gz 
cd libogg-1.3.1/
./configure --disable-shared --enable-static --prefix=/opt/local
make && make install
cd ..

Vorbis (codec audio)

wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
tar xvfz libvorbis-1.3.3.tar.gz 
cd libvorbis-1.3.3/
./configure --disable-shared --enable-static --prefix=/opt/local
make && make install
cd ..

Theora (codec vidéo)

wget http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
bunzip2 libtheora-1.1.1.tar.bz2 
tar xvf libtheora-1.1.1.tar 
cd libtheora-1.1.1/
./configure --disable-shared --enable-static --prefix=/opt/local
make -j 8
make install
cd ..

Towlame (codec audio)

C’est le codec du MPEG layer 2, appelé aussi Musicam, l’ancêtre du mp3 que l’on trouve parfois dans des fichiers MPEG 2.

wget http://downloads.sourceforge.net/twolame/twolame-0.3.13.tar.gz
tar xvf twolame-0.3.13.tar.gz 
cd twolame-0.3.13/
./configure --disable-shared --enable-static --prefix=/opt/local
make -j 8
make install
cd ..

VPX (codec vidéo VP8/VP9)

git clone http://git.chromium.org/webm/libvpx.git
cd libvpx/
./configure --disable-shared --enable-static --prefix=/opt/local
make -j 8
make install
cd ..

x264 (codec h264)

wget ftp://ftp.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
bunzip2 last_x264.tar.bz2 
tar xvf last_x264.tar 
cd x264-snapshot-20130813-2245/
ls
./configure --disable-shared --enable-static --prefix=/opt/local
make -j 8
make install
cd ..

XVID (codec vidéo XVID/DIVX 4/MPEG 4 part 2)

wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
tar xvfz xvidcore-1.3.2.tar.gz 
cd xvidcore/build/generic
./configure --disable-shared --enable-static --prefix=/opt/local
make -j 8
make install
cd ..
cd ..
cd ..

FAAC (codec AAC)

wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
tar xvfz faac-1.28.tar.gz 
cd faac-1.28/
./configure --disable-shared --enable-static --prefix=/opt/local

Avec celui ci, il y a un problème, enlevez la ligne 126 de ce fichier : common/mp4v2/mpeg4ip.h

Puis

make
make install
cd ..

ffmpeg (avec ffprobe)

wget http://www.ffmpeg.org/releases/ffmpeg-2.0.1.tar.gz
tar xvfz ffmpeg-2.0.1.tar.gz 
cd ffmpeg-2.0.1/
./configure --prefix=/opt/local --enable-gpl --enable-version3 --enable-nonfree --enable-runtime-cpudetect --as=yasm --disable-shared --enable-static --enable-libfaac --enable-libmp3lame --enable-libx264 --enable-libaacplus --enable-libopenjpeg --enable-libtheora --enable-libvorbis --enable-libtwolame --enable-libvpx --enable-libxvid
make -j 8
make install

Puis qt-faststart

cd tools/
cc qt-faststart.c -o qt-faststart
mv qt-faststart ../../../../bin/
cd ..
cd ..

Soyez libres d’installer d’autres dépendances à ffmpeg si vous le désirez. Vous avez compris le principe je pense…

Utilisation

/opt/local/bin/ffmpeg

Ajoutez à votre ~/.profile

export PATH="/opt/local/bin:$PATH"

Fermez la session, et rouvrez là. Tout ce que vous avez compilé est dispo !

Et sous OSX ?

Sous OSX, compilez (après avoir installé XCode), git, autoconf, automake, libtool, et utilisez curl à la place de wget.

Installez aussi le pkg-config qui existe pour OSX.

Votre prepare.sh doit être un peu adapté avec DYLD :

export DYLD_LIBRARY_PATH="/opt/local/lib"

A vous la dernière version de ffmpeg !