Compilation de la version GIT de FFmpeg sur Ubuntu 11.10, 12.04 et 12.10.

L’installation d’outils ou de logiciels de conversion audio et vidéo nécessitant des options indisponibles dans la version de FFmpeg proposée dans les dépôts officiels Ubuntu j’ai choisi de compiler la version GIT. De nombreux PPAs proposent des versions empaquetées de FFmpeg en version GIT ou Nightly mais, à la suite de quelques déconvenues, je ne les utilise plus.

Ce tutoriel s’applique aux distributions Ubuntu 12.10 Quantal Quetzal, Ubuntu 12.04 Precise Pangolin, et Ubuntu 11.10 Oneiric Ocelot. Il est basé sur le guide Compile FFmpeg on Ubuntu proposé sur le Wiki FFmpeg. Il fournit la dernière version de FFmpeg.
Des guides distincts (en anglais) sont disponibles pour Ubuntu 10.04 Lucid Lynx et Ubuntu 8.04 Hardy Heron.

Sommaire

Je vous propose de compiler et d’installer diverses bibliothèques externes d’encodage et de décodage telles que fdk-aac (encodeur AAC), libfaac (encodeur AAC), libmp3lame (encodeur MP3), libopencore-amr (encodeur/décodeur AMR), librtmp (pour d’autres protocoles RTMP), libtheora (codeur Theora), libvorbis (codeur Vorbis), libvpx (codeur/décodeur VP8), et libx264 (encodeur H.264). Certaines bibliothèques sont indispensables pour la compilation de FFmpeg, d’autres sont optionnelles et peuvent être omises. Mais bon ! Pour autant faire, autant installer la totale.
Notez que pour chaque bibliothèque ou codec compilé, checkinstall créer un paquet DEB facilitant ainsi la désinstallation.

Ce guide va également installer de nombreux filtres, y compris les filtres de sous-titres qui permettent de coder les sous-titres. Voir la liste de filtres dans le Guide de filtrage.

FFmpeg

Préparation.
J’ai réalisé cette compilation sous Ubuntu 12.04 Precise Pangolin sans rencontrer de problème. Pour info je n’ai pas testé ce tutoriel sous Ubuntu 12.10 Quantal et 11.10 Oneiric, mais, selon le guide officiel, ces distributions sont censées supporter cette procédure de compilation.

Image PNG du Terminal

Note sur les commandes exécutées dans un Terminal.
Cette note est destinée aux utilisateurs novices car il serait fastidieux que je répète le même propos pour chaque commande.
Vous devez copiez et collez le code complet des lignes de commande pour chaque étape dans un Terminal, puis appuyez sur l’Entrée de votre clavier, entrez votre mot de passe quand il est requis et appuyez de nouveau sur Entrée. Patientez pendant l’exécution de la commande et attendez d’être revenu au prompt pour exécuter une nouvelle commande.

Pour copier « stricto sensu » le code sans les numéros de ligne, cliquez sur l’icône SyntaxHighlighter++ de la boite de dialogue qui apparaît lors du survol de la ligne de commande. Copiez le code affiché dans la fenêtre.

Mise à jour du fichier sources.list.
Décommentez les lignes de la section multiverse¹ ainsi que les lignes deb-src² dans les dépôts officiels Ubuntu :

sudo gedit /etc/apt/sources.list

Enlevez le ou les dièses (#) qui se trouvent au début de toutes les lignes des sections deb http://… incluant la référence multiverse.
Enlevez le ou les dièses (#) qui se trouvent au début de toutes les lignes des sections commençant par deb-src.

Enregistrez et fermez le fichier.

Quote

¹) La section multiverse des dépôts officiels contient des paquets maintenus par la communauté. La Fondation Ubuntu ne contrôle pas ces paquets. Ils sont analysés par un comité d’utilisateurs. La section multiverse contient uniquement des paquets non-libres
²) Les lignes deb-src désignent les paquets sources uniquement utiles si vous souhaitez compiler un programme.

 

Mise à jour des dépôts officiels :

sudo apt-get update && sudo apt-get upgrade

 

Supression de paquets.
Pour éviter des conflits certains paquets nécessitent d’être désinstallés :

sudo apt-get remove --purge ffmpeg x264 libav-tools libvpx-dev libx264-dev yasm

 

Installation des outils nécessaires à la compilation et des dépendances (1 seule ligne de commande) :

sudo apt-get -y install autoconf build-essential checkinstall git libass-dev libfaac-dev \
libgpac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev \
librtmp-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev \
libx11-dev libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev

 

Compilation de Yasm (indispensable).
Yasm est un logiciel qui essaie de réécrire dans son intégralité l’assembleur NASM. Il est recommendé pour x264 and FFmpeg. Sous une version modifiée de la license BSD, il est actuellement développé par Peter Johnson et Michael Urman. En général, Yasm et NASM sont interchangeables. Yasm supporte les architectures x86 et 64 bits.

cd && wget -q http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz && tar xzvf yasm-1.2.0.tar.gz
cd yasm-1.2.0 && ./configure
make
sudo checkinstall --pkgname=yasm --pkgversion="1.2.0" --backup=no \
  --deldoc=yes --fstrans=no --default

Le paquet est construit dans le dossier yasm-1.2.0 puis installé.
Si vous voulez déplacer et mettre de côté ce paquet DEB vous devez récupérer les droits¹ qui appartiennent présentement à ROOT :

cd ~/yasm-1.2.0 && sudo chown $USER:`id -gn $USER` yasm_*.deb

¹) Cette commande générique assigne le fichier à l’utilisateur en cours, propriétaire de $HOME (dossier personnel) et au groupe affilié.

Lien.
Yasm, le site officiel.

 

Compilation de x264 (indispensable).
x264 est une bibliothèque libre sous licence publique générale GNU issue du projet VideoLAN permettant de coder des flux vidéo H.264 (ou MPEG-4 AVC).

cd && git clone --depth 1 git://git.videolan.org/x264.git
cd x264 && ./configure --enable-static
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | \
  awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes \
  --fstrans=no --default

Le paquet est construit dans le dossier x264 puis installé.
Si vous voulez déplacer et mettre de côté le paquet DEB créé lors de la compilation vous devez récupérer les droits¹ qui appartiennent présentement à ROOT :

cd ~/x264 && sudo chown $USER:`id -gn $USER` x264_*.deb

¹) Cette commande générique assigne le fichier à l’utilisateur en cours, propriétaire de $HOME (dossier personnel) et au groupe affilié.

Liens.
FFmpeg and x264 Encoding Guide.
x264 sur VideoLAN.
x264 sur Wikipedia-fr.

 

Compilation de fdk-aac.
AAC, Advanced Audio Coding est le nouveau format MP3, défini MPEG-4. Il est souvent utilisé dans les conteneurs MP4 ainsi que pour les fichiers audio supportant l’extension M4A. Il est aussi utilisé dans les fichiers MKV (Matroska) car il propose un meilleur support pour les sous-titres.
FFmpeg peut supporter quatre encodeurs AAC-LC (aac, libfaac, libfdk_aac, libvo_aacenc) et deux encodeurs au format AAC-HC (libaacplus et libfdk_aac). libaacplus, libfaac et libfdk_aac sont considérés comme « non-free » et sont donc non redistribuables. Vous pourriez avoir du mal à trouver une version empaquettée de FFmpeg qui prend en charge ces derniers. Bien sûr, vous pouvez résoudre ce problème en compilant ffmpeg.

cd && git clone --depth 1 git://github.com/mstorsjo/fdk-aac.git
cd fdk-aac && autoreconf -fiv && ./configure --disable-shared
make
sudo checkinstall --pkgname=fdk-aac --pkgversion="$(date +%Y%m%d%H%M)-git" --backup=no \
  --deldoc=yes --fstrans=no --default

Le paquet est construit dans le dossier fdk-aac puis installé.
Si vous voulez déplacer et mettre de côté le paquet DEB créé lors de la compilation vous devez récupérer les droits¹ qui appartiennent présentement à ROOT :

cd ~/fdk-aac && sudo chown $USER:`id -gn $USER` fdk-aac_*.deb

¹) Cette commande générique assigne le fichier à l’utilisateur en cours, propriétaire de $HOME (dossier personnel) et au groupe affilié.

Liens.
FFmpeg and AAC Encoding Guide.
Site Officiel de Fraunhofer Institut für Integrierte Schaltungen (Fraunhofer IIS), centre de recherche initial du projet AAC.
AAC, Advanced Audio Coding sur Wikipedia-fr.

 

Compilation de libvpx (indispensable).
Encodeur et décodeur vidéo VP8, un codec qui est au centre du format vidéo WebM.

cd && git clone --depth 1 http://git.chromium.org/webm/libvpx.git
cd libvpx && ./configure --disable-examples --disable-unit-tests
make
sudo checkinstall --pkgname=libvpx --pkgversion="1:$(date +%Y%m%d%H%M)-git" --backup=no \
  --deldoc=yes --fstrans=no --default

Le paquet est construit dans le dossier libvpx puis installé.
Si vous voulez déplacer et mettre de côté le paquet DEB créé lors de la compilation vous devez récupérer les droits¹ qui appartiennent présentement à ROOT :

cd ~/libvpx && sudo chown $USER:`id -gn $USER` libvpx_*.deb

¹) Cette commande générique assigne le fichier à l’utilisateur en cours, propriétaire de $HOME (dossier personnel) et au groupe affilié.

Lien.
VP8 sur Wikipedia-fr.

 

Compilation de opus (optionel).
Encodeur et décodeur audio Opus. Opus, à l’origine Harmony3, est un format ouvert de compression audio avec pertes, libre de redevances, développé par l’Internet Engineering Task Force (IETF) dans le but d’être utilisé par des applications interactives sur Internet4.

cd && git clone --depth 1 git://git.xiph.org/opus.git
cd opus && ./autogen.sh && ./configure --enable-libopus --disable-shared
make
sudo checkinstall --pkgname=libopus --pkgversion="$(date +%Y%m%d%H%M)-git" --backup=no \
  --deldoc=yes --fstrans=no --default

Le paquet est construit dans le dossier opus puis installé.
Si vous voulez déplacer et mettre de côté le paquet DEB créé lors de la compilation vous devez récupérer les droits¹ qui appartiennent présentement à ROOT :

cd ~/opus && sudo chown $USER:`id -gn $USER` libopus_*.deb

¹) Cette commande générique assigne le fichier à l’utilisateur en cours, propriétaire de $HOME (dossier personnel) et au groupe affilié.

Lien.
Opus Interactive Audio Codec sur Wikipedia-fr.

 

Compilation de FFmpeg (indispensable).
FFmpeg est une solution complète et multi-plateformes pour enregistrer, convertir et lire des flux audio et vidéo.

cd && git clone --depth 1 git://source.ffmpeg.org/ffmpeg && cd ffmpeg
./configure --enable-gpl --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame \
  --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora \
  --enable-libvorbis --enable-libvpx --enable-x11grab --enable-libx264 --enable-nonfree --enable-version3
make
sudo checkinstall --pkgname=ffmpeg --pkgversion="7:$(date +%Y%m%d%H%M)-git" --backup=no \
  --deldoc=yes --fstrans=no --default
hash -r

Le paquet est construit dans le dossier ffmpeg puis installé.
Si vous voulez déplacer et mettre de côté le paquet DEB créé lors de la compilation vous devez récupérer les droits¹ qui appartiennent présentement à ROOT :

cd ~/ffmpeg && sudo chown $USER:`id -gn $USER` ffmpeg_*.deb

¹) Cette commande générique assigne le fichier à l’utilisateur en cours, propriétaire de $HOME (dossier personnel) et au groupe affilié.

Liens.
FFmpeg, le site officiel.
FFmpeg sur Wikipedia-fr.

L’installation est maintenant terminée et FFmpeg est prêt à être utilisé. Vous pouvez conserver les dossiers x264, fdk-aac, libvpx, opus et ffmpeg dans votre répertoire $HOME (dossier personnel) si vous prévoyez de mettre à jour ultérieurement.

 

Installation optionnelle.
Compilation de qt-faststart.
Il s’agit d’un outil utile si vous postez vos vidéos MP4 et H.264 sur le web. Il déplace certaines données, comme les entêtes et les metadata, au début du fichier video pour permettre à la lecture de commencer avant que le fichier ne soit entièrement téléchargé. Utilisation : qt-FastStart input.mp4 output.mp4.

cd ~/ffmpeg && make tools/qt-faststart
sudo checkinstall --pkgname=qt-faststart --pkgversion="$(date +%Y%m%d%H%M)-git" --backup=no \
  --deldoc=yes --fstrans=no --default install -Dm755 tools/qt-faststart \
  /usr/local/bin/qt-faststart

Le paquet est construit dans le dossier ffmpeg puis installé.
Si vous voulez déplacer et mettre de côté le paquet DEB créé lors de la compilation vous devez récupérer les droits¹ qui appartiennent présentement à ROOT :

cd ~/ffmpeg && sudo chown $USER:`id -gn $USER` qt-faststart_*.deb

¹) Cette commande générique assigne le fichier à l’utilisateur en cours, propriétaire de $HOME (dossier personnel) et au groupe affilié.

 

Ajout du support lavf pour x264.
Ce support permet à la bibliothèque x264 d’accepter à peu près n’importe quelle entrée que FFmpeg peut manipuler et est utile si vous souhaitez utiliser x264 directement. Voir une explication plus détaillée de ce que cela signifie.

cd ~/x264 && make distclean && ./configure --enable-static
make
sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | \
  awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes \
  --fstrans=no --default

 

Aide.
Si vous avez besoin d’aide, n’hésitez pas à poser vos questions sur le canal #ffmpeg IRC, sur la liste de diffusion ffmpeg-utilisateur ou sur le forum FFmpeg.

 

Posts relatifs

Les commentaires sont clôturés.