3
253

Transcoder des fichiers audio et vidéo

Vous voulez regarder un film extrait d'un DVD sur votre mobile, copier votre collection de CD sur votre PC, voir un programme téléchargé sur internet sur votre TV ou diffuser une vidéo personnelle sur le web ? Apprenez l'art de convertir les formats audio et vidéo.

Introduction

Les programmes libres pour transformer des fichiers audio et vidéo sont ffmpeg et mplayer. Chacun est capable de lire et d'écrire des contenus audio et vidéo dans beaucoup de formats différents avec beaucoup d'options différentes. mplayer a plus de filtres que ffmpeg pour transformer un flux vidéo ou une piste audio. ffmpeg supporte plus de formats en entrée et en sortie, y compris la lecture des fichiers WMA de Windows et l'écriture des conteneurs MP4 et 3GP courants dans les téléphones mobiles. Tous les deux ont tellement de paramètres que chercher la bonne combinaison pour obtenir un résultat précis peut devenir une véritable épreuve. Cet article vous permettra de trouver la bonne commande et vous mettra en confiance pour aller plus loin.

Les lois régissant les brevets et les droits d'auteur varient d'un pays à l'autre. Vous êtes prié de vérifier si un brevet ou une restriction d'utilisation d'un format média s'applique légalement dans votre pays de résidence.

Installation

Linux

Ajoutez le dépôt Videolan à votre système et ajoutez à votre trousseau la clé GPG nécessaire à l'authentification des paquets :

$ wget -O - http://download.videolan.org/pub/debian/videolan-apt.asc | sudo apt-key add -
$ sudo apt-get -q update

Installez les codecs :

$ sudo apt-get install w32codecs

ou

$ sudo apt-get install w64codecs

Pour lire un DVD, le paquet libdvdcss2 est essentiel :

$ sudo apt-get install libdvdcss2

Installez mencoder avec mplayer :

$ sudo apt-get install mplayer mencoder

Ajoutez les outils de création et de manipulation des fichiers audio MP3 ou Vorbis, des flux OGM et des conteneurs Matroska et MP4 :

$ sudo apt-get install lame vorbis-tools ogmtools mkvtoolnix mkvtoolnix-gui gpac

Installez ffmpeg avec les librairies pour l'encodage de l'audio en AAC et de la vidéo en H.264 :

$ sudo apt-get install ffmpeg ffprobe libavcodec-extra-53 libavutil-extra-53

Vérifiez si une audio peut être encodée en AAC :

$ ffmpeg -formats | grep -i aac
 D      aac             raw ADTS AAC
 D A    aac             Advanced Audio Coding
  EA    libfaac         libfaac AAC (Advanced Audio Codec)

La dernière ligne avec un E indique que ffmpeg est effectivement compilé avec libfaac qui supporte l'encodage d'une piste sonore en AAC.

Si ffmpeg est compilé avec la librairie libfdk_aac, vous avez l'affichage suivant :

D  aac             raw ADTS AAC (Advanced Audio Coding)
  E adts            ADTS AAC (Advanced Audio Coding)

NOTE : Si la commande ne liste aucune librairie AAC, essayez de remplacer -formats par -codecs :

$ ffmpeg -codecs | grep -i aac
 DEA.L. aac                  AAC (Advanced Audio Coding) (encoders: aac libfaac )

Avec la librairie libfdk_aac :

$ ffmpeg -codecs | grep -i aac
 DEA.L. aac                  AAC (Advanced Audio Coding) (decoders: aac aac_fixed libfdk_aac ) (encoders: aac libfdk_aac )

Vérifiez aussi qu'une vidéo peut être encodée en H.264 :

$ ffmpeg -formats | grep 264
 DE h264                raw H.264 video format
  E ipod                iPod H.264 MP4 format
 D V D  h264            H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
 D V D  h264_vdpau      H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration)
  EV    libx264         libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10

Vous utiliserez libx264 pour encoder un flux vidéo en H.264.

NOTE : Si la commande ne liste pas libx264, essayez de remplacer -formats par -codecs :

$ ffmpeg -codecs | grep 264
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (encoders: libx264 libx264rgb )

Windows

Téléchargez et installez le dernier K-Lite Codec Pack.

Créez un dossier appelé ffmpeg dans C:\Program Files.

Allez sur le site Zeranoe FFmpeg builds. Téléchargez la dernière archive statique 32 bits ou 64 bits dans C:\Program Files\ffmpeg et dépliez son contenu avec 7zip. Téléchargez MPlayer and MEncoder builds for Windows et copiez les programmes dans C:\Program Files\ffmpeg\bin.

Les commandes ffmpeg, ffplay, mplayer et mencoder sont dans C:\Program Files\ffmpeg\bin. Démarrez le processeur de commandes et ajoutez ce répertoire à la variable du système PATH :

C:\> set PATH=%PATH%;"C:\Program Files\ffmpeg\bin"
C:\> cd C:\Documents and Settings\frasq\Mes documents\Mes vidéos
C:\Documents and Settings\frasq\Mes documents\Mes vidéos\> ffmpeg -version

Alternatives
SDL

SDL (Simple DirectMedia Layer) est une librairie qui donne un accès de bas niveau au matériel audio, clavier, souris, joystick, 3D via OpenGL, et au tampon vidéo 2D. Elle est utilisée par beaucoup de développeurs de jeux. Elle est au cœur de mplayer et ffplay.

Pour installer la version du système :

$ sudo apt-get install libsdl-dev

Pour fabriquer le paquet, téléchargez SDL et tapez les commandes suivantes :

$ cd SDL-1.2.15
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

NOTE : Avant de lancer configure, installez la librairie ESD et libxv pour développeurs avec sudo apt-get install libxv-dev libesd0-dev.

MP3

Pour installer la version du système :

$ sudo apt-get install libmp3lame-dev

Pour fabriquer le paquet, téléchargez lame et tapez les commandes suivantes :

$ cd lame-3.99.5
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
AAC

Pour installer la version du système :

$ sudo apt-get install libfaac-dev

Pour fabriquer le paquet, téléchargez faac et tapez les commandes suivantes :

$ cd faac-1.28
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

La librairie AAC fournie par le Fraunhofer est plus récente. Pour fabriquer le paquet, tapez les commandes suivantes :

$ git clone git://github.com/mstorsjo/fdk-aac.git
$ cd fdk-aac
$ autoreconf -fiv
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

Si nécessaire, essayez la commande suivante pour installer libtoolize :

$ sudo apt-get install libtool
Ogg Vorbis

Pour installer la version du système :

$ sudo apt-get install libogg-dev libvorbis-dev

Pour fabriquer les paquets, téléchargez libogg et libvorbis, puis tapez les commandes suivantes :

$ cd libogg
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ cd libvorbis
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
AMR

Pour installer les versions du système du décodeur et de l'encodeur :

$ sudo apt-get install libopencore-amrwb-dev libvo-amrwbenc-dev

Pour installer les toutes dernières versions, téléchargez opencore-amr et vo-amrwbenc, puis tapez les commandes suivantes :

$ cd opencore-amr-0.1.3
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ cd vo-amrwbenc-0.1.3
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
H.264

Pour installer la version du système :

$ sudo apt-get install libx264-dev

Assurez-vous que l'assembleur Yasm est installé :

$ sudo apt-get install yasm

Pour télécharger et fabriquer Yasm, tapez les commandes suivantes :

$ git clone git://github.com/yasm/yasm.git
$ cd yasm
$ ./autogen.sh
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

Si la génération de configure échoue, installez autoconf :

$ sudo apt-get install autoconf

Pour télécharger et fabriquer le paquet, tapez les commandes suivantes :

$ git clone git://git.videolan.org/x264.git x264
$ cd x264
$ ./configure --prefix=/usr/local --enable-static --enable-shared
$ make
$ sudo make install install-lib-static

NOTE : Afin de compiler l'exécutable x264, assurez-vous que vous avez installé les dernières librairies livrées avec FFmpeg. Pour ne pas compiler l'exécutable, ajoutez l'option --disable-cli à configure.

VP8

Pour télécharger et fabriquer le paquet, tapez les commandes suivantes :

$ git clone https://chromium.googlesource.com/webm/libvpx libvpx
$ cd libvpx
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
Xvid

Pour installer la version du système :

$ sudo apt-get install libxvidcore-dev

Pour fabriquer le paquet, téléchargez xvidcore et tapez les commandes suivantes :

$ cd xvidcore/build/generic
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
MKV

Pour installer les versions du système :

$ sudo apt-get install libebml-dev libmatroska-dev

Pour fabriquer les paquets, téléchargez libebml et libmatroska puis tapez les commandes suivantes :

$ cd libebml-1.3.3/make/linux
$ make staticlib
$ sudo make install_staticlib install_headers
$ cd libmatroska-1.4.4/make/linux
$ make staticlib
$ sudo make install_staticlib install_headers
FFmpeg

Assurez-vous que l'éditeur de liens du système cherche les librairies dans /usr/local/lib en ajoutant les lignes suivantes dans /etc/ld.so.conf.d/libc.conf :

# libc default configuration
/usr/local/lib

Pensez à exécuter ldconfig à chaque fois que vous installez un fichier dans /usr/local/lib:

$ sudo ldconfig

Assurez-vous que la librairie X11 est installée :

$ sudo apt-get install libX11-dev

Pour télécharger et fabriquer le paquet, tapez les commandes suivantes :

$ git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
$ cd ffmpeg
$ ./configure --prefix=/usr/local \
--enable-gpl --enable-version3 --enable-nonfree \
--enable-postproc --enable-pthreads \
--enable-libfdk_aac --enable-libmp3lame --enable-libvorbis \
--enable-libvpx --enable-libx264 --enable-libxvid --enable-x11grab \
--enable-ffplay
$ make clean
$ make all
$ sudo make install

Installe ffmpeg, ffplay, ffprobe et ffserver.

Pour générer des fichiers AMR NB ou AMR WB, ajoutez les options --enable-libopencore_amrnb --enable-libvo-amrwbenc.

Pour fabriquer ffmpeg pour un serveur, activez moins d'options :

$ ./configure --prefix=/usr/local \
--enable-gpl --enable-version3 --enable-nonfree \
--enable-postproc --enable-pthreads \
--enable-libfdk_aac --enable-libmp3lame --enable-libvorbis --enable-libx264

Pour mettre ffmpeg à jour :

$ make clean
$ git pull

Terminez avec ./configure && make && sudo make install.

MPlayer

Téléchargez le code source :

$ svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer

N'oubliez pas d'installer libdvdread-dev :

$ sudo apt-get install libdvdread-dev

Configurez avec les options par défaut :

$ ./configure --prefix=/usr/local

NOTE : Laissez le configurateur télécharger une copie du code de FFmpeg. Si nécessaire, installez la librairie zlib pour développeurs avec sudo apt-get install zlib1g-dev.

Vérifiez la liste de pilotes optionnels qui sont pris en charge.

Compilez et installez les commandes mplayer et mencoder :

$ make clean
$ make all
$ sudo make install

IMPORTANT: Mettez le répertoire /usr/local/bin avant /usr/bin dans la variable PATH et /usr/local/lib avant /usr/lib dans la variable LD_LIBRARY_PATH ou désinstallez les versions officielles du système.

Lire un DVD

Commencez par localiser la vidéo que vous voulez sur le DVD :

$ mplayer dvd://1
...
There are 5 titles on this DVD.
...
audio stream: 0 format: ac3 (stereo) language: en aid: 128.
audio stream: 1 format: ac3 (stereo) language: fr aid: 129.
number of audio channels on disk: 2.
subtitle ( sid ): 0 language: en
subtitle ( sid ): 1 language: fr
number of subtitles on disk: 2
...
VIDEO:  MPEG2  720x576  (aspect 2)  25.000 fps  7500.0 kbps (937.5 kbyte/s)
...
Selected video codec: [ffmpeg2] vfm: ffmpeg (FFmpeg MPEG-2)
...
AUDIO: 48000 Hz, 2 ch, s16le, 192.0 kbit/12.50% (ratio: 24000->192000)
...
Selected audio codec: [a52] afm: liba52 (AC3-liba52)
...
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
...

Pour quitter le lecteur, appuyez sur q.

Les informations affichées par le programme sont abondantes. Ajoutez -identify pour un état encore plus complet. Notez le nombre de titres sur le DVD, la langue de chaque piste sonore avec son identifiant, son codec, le nombre de canaux de sous-titrage, s'il y en a, la fréquence d'image de la vidéo, son codec, sa taille et son rapport d'aspect.

Pour lire un fichier ISO :

$ mplayer -dvd-device file.iso dvd://1

Pour générer un fichier ISO à partir d'un répertoire :

$ genisoimage -iso-level 1 -dvd-video -volset-size 1 -o dvd.iso dvddir

Pour lire le second titre :

$ mplayer dvd://2

Pour lister les chapitres du troisième titre :

$ dvdxchap -t 3 /dev/dvd

Pour lire les trois premiers chapitres du second titre :

$ mplayer -chapter 1-3 dvd://2

Appuyez sur @ pour avancer au chapitre suivant. Appuyez sur ! pour reculer au chapitre précédent.

Extraire un DVD

Pour extraire un titre en particulier en VOB :

$ mplayer -dumpstream dvd://1 -dumpfile video.vob

Pour extraire juste quelques chapitres :

$ mplayer -chapter 2-5 -dumpstream dvd://1 -dumpfile video.vob

Pour combiner plusieurs fichiers VOB en un seul sous Linux :

$ cat VTS_01_1.VOB VTS_01_2.VOB VTS_01_3.VOB > video.vob

Sous Windows :

C:\> copy /b VTS_01_1.VOB + VTS_01_2.VOB + VTS_01_3.VOB video.vob

Pour trouver une piste sonore :

$ mplayer video.vob -v -vo null -ao null -frames 0 | grep "audio stream:"
==> Found audio stream: 128

Pour lire la vidéo avec une des pistes sonores :

$ mplayer video.vob -aid 128

Pour choisir les sous-titres :

$ mplayer video.vob -aid 128 -sid 1

Pour extraire la piste sonore en WAV :

$ mplayer video.vob -aid 128 -ao pcm:file=audio.wav -ao pcm:fast -vc null -vo null

Pour écouter la piste sonore :

$ mplayer audio.wav

Pour encoder la piste sonore en MP3 :

$ lame -V 6 audio.wav audio.mp3

Ajoutez l'option --scale 2 pour doubler le volume.

Pour extraire les sous-titres dans un fichier VOBSUB :

$ rm subtitles.idx subtitles.sub
$ mencoder video.vob -vobsubout subtitles -vobsuboutindex 0 -vobsuboutid en -sid 0 -o /dev/null -nosound -ovc frameno
$ mencoder video.vob -vobsubout subtitles -vobsuboutindex 1 -vobsuboutid fr -sid 1 -o /dev/null -nosound -ovc frameno

Chaque commande successive ajoute un flux de sous-titres dans les fichiers subtitles.sub et subtitles.idx.

Pour afficher une vidéo avec les sous-titres dans un fichier VOBSUB :

$ mplayer video.vob -noautosub -vobsub subtitles -vobsubid 1

L'option -vobsubid 1 sélectionne le flux de sous-titres avec l'index 1.

Pour convertir un VOBSUB en SRT, installez tesseract et vobsub2srt :

$ sudo apt-get install tesseract-ocr tesseract-eng tesseract-fra vobsub2srt

Pour générer le fichier subtitles.srt à partir des fichiers subtitles.idx et subtitles.sub :

$ vobsub2srt --lang fr subtitles

Si le fichier généré ne contient pas de texte, essayez de spécifier la couleur des sous-titres en ajoutant les lignes suivantes dans le fichier subtitles.idx :

palette: 000000, 828282, 828282, 828282, 828282, 828282, 828282, ffffff, 828282, bababa, 828282, 828282, 828282, 828282, 828282, 828282
custom colors: OFF, tridx: 1000, colors: 000000, bababa, 828282, 000000

NOTE : Utilisez VobSub sous Windows pour une approche plus interactive et plus précise.

Pour lire une vidéo avec un affichage réduit :

$ mplayer video.vob -vf scale=360:288 -nosound

Quand vous retaillez une vidéo, préservez son rapport d'aspect en divisant les deux dimensions par le même facteur.

Si l'affichage de la vidéo montre des bandes noires, recherchez la taille de la vidéo correctement recadrée :

$ mplayer video.vob -nosound -vo null -vf cropdetect
...
[CROP] Crop area: X: 4..711  Y: 0..575  (-vf crop=704:576:6:0).
...

Appuyez sur q pour quitter le lecteur dès que la sortie est stable.

Lisez la vidéo tout en recadrant l'affichage :

$ mplayer video.vob -vf crop=704:576:6:0 -nosound

Pour limiter la taille d'une vidéo, calculez son débit avec la formule suivante :

débit=(taille_du_fichier_en_mo - taille_de_l_audio_en_mo) * 1024 * 1024 / longueur_en_secs * 8 / 1000

Pour obtenir un fichier de 702 MO pour un film de 2 heures et un fichier audio de 60 MO, le débit est de

(702 - 60) * 1024 * 1024 / (120 * 60) * 8 / 1000 = 747kbps

Alternativement, vous pouvez plus simplement passer la taille de la vidéo en octets en argument négatif du paramètre de réglage du débit :

bitrate=-642000

Encodez la vidéo en H.264 en deux étapes :

$ mencoder video.vob -o video.avi -nosound -nosub -ovc x264 -x264encopts \
bitrate=800:frameref=8:mixed_refs:bframes=3:subq=3:weight_b:pass=1
$ mencoder video.vob -o video.avi -nosound -nosub -ovc x264 -x264encopts \
bitrate=800:frameref=8:mixed_refs:bframes=3:b_adapt:weight_b:partitions=all:8x8dct:me=umh:subq=7:trellis=2:pass=2

NOTE : Certains paramètres peuvent varier selon la version de l'encodeur.

Les statistiques de la vidéo sont enregistrées dans un journal durant la première passe. La deuxième passe reprend ce journal pour générer la vidéo avec précisément le débit demandé.

Adaptez le paramètre bitrate à la durée de la vidéo. Pour retailler la vidéo, ajoutez -vf scale=w:h. Pour recadrer la vidéo, ajoutez -vf crop=w:h:x:y. Si vous recadrez la vidéo, vous voudrez probablement la retailler à son rapport d'aspect d'origine. Par exemple, l'option -vf crop=704:480:8:0,scale=720:480 retirera une bande noire de 8 pixels à gauche et droite de la vidéo et la retaillera à son format d'origine de 720x480 pixels.

Regardez la vidéo :

$ mplayer video.avi
...
VIDEO:  [h264]  720x576  24bpp  25.000 fps  799.9 kbps (97.6 kbyte/s)
...

Pour incruster des sous-titres :

$ mencoder video.avi -nosound -ovc x264 \
-sub video.srt -utf8 -ffactor 1 -fontconfig -font Arial -subfont-text-scale 3 -o videosub.avi

Pour décaler les sous-titres, ajoutez l'option -subdelay sec ou sec est un nombre de secondes, positif pour retarder l'affichage ou négatif pour l'avancer.

Pour combiner la vidéo et l'audio :

$ mencoder video.avi -audiofile audio.mp3 -ovc copy -oac copy -o movie.avi

Encodez la vidéo en XVID pour un lecteur DVD :

$ mencoder video.vob -o divx.avi -ovc xvid -xvidencopts vhq=4:turbo:pass=1 -nosound
$ mencoder video.vob -o divx.avi -ovc xvid -xvidencopts bitrate=800:vhq=4:turbo:pass=2 -nosound

Regardez la vidéo :

$ mplayer divx.avi
...
VIDEO:  [XVID]  720x576  12bpp  25.000 fps  644.3 kbps (78.7 kbyte/s)
...

Pour encoder l'audio en Ogg Vorbis :

$ oggenc -q 3 audio.wav

Pour assembler le tout dans un conteneur Matroska :

$ mkvmerge -o video.mkv video.avi audio.ogg video.srt

Notez qu'un MKV peut contenir plusieurs flux vidéos et plusieurs bandes sonores dans différents codecs et plusieurs sous-titrages.

Pour extraire la première vidéo et la seconde piste sonore d'un MKV :

$ mkvextract tracks video.mkv 1:video.avi 3:audio.ogg

Pour assembler une vidéo encodée en plusieurs parties en un seul fichier :

$ mencoder -forceidx -ovc copy -oac copy -o video.avi video_1.avi video_2.avi ...

Pour extraire la vidéo d'un AVI :

$ mplayer -dumpvideo movie.avi -dumpfile video.avi

Pour extraire l'audio d'un AVI :

$ mplayer -dumpaudio movie.avi -dumpfile audio.mp3

Pour assembler une vidéo et une audio dans un AVI :

$ ffmpeg -i video.avi -i audio.ac3 -vcodec copy -acodec copy movie.avi

Pour encoder un VOB en MP4 avec la vidéo en H.264 et l'audio en AAC tout en supprimant des bandes noires de 8 pixels à gauche et droite puis en retaillant la vidéo de 720x480 pixels à 640x360 pixels en 16:9 :

$ ffmpeg -i video.vob -acodec libfdk_aac -vcodec libx264 -preset slow -vf crop=704:480:8:0,scale=640x360,setsar=1/1,setdar=16/9 -b:v 1600k -aspect 16/9 -f mp4 -y video.mp4

Pour obtenir 720x404 pixels en 2 passes :

$ ffmpeg -i video.vob -pass 1 -an -vcodec libx264 -preset slow -vf crop=704:480:8:0,scale=720x404,setsar=1/1,setdar=16/9 -b:v 1600k -aspect 16/9 -f mp4 -y /dev/null
$ ffmpeg -i video.vob -pass 2 -acodec libfdk_aac -vcodec libx264 -preset slow -vf crop=704:480:8:0,scale=720x404,setsar=1/1,setdar=16/9 -b:v 1600k -aspect 16/9 -f mp4 -y video.mp4

Extraire un CD

Pour localiser un titre en particulier sur un CD :

$ mplayer cdda://1

Pour extraire un titre en particulier en WAV :

$ mplayer cdda://1 -ao pcm:file=track1.wav

Pour encoder la piste audio en MP3 :

$ lame -V 6 track1.wav track1.mp3

Cette commande encode l'audio en VBR (Variable BitRate) avec un niveau de qualité 6. Spécifiez une valeur plus petite pour une meilleure qualité, si nécessaire.

Pour écouter la piste audio :

$ mplayer track1.mp3
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 44100 Hz, 2 ch, s16le, 128.0 kbit/9.07% (ratio: 16000->176400)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)

lame a des options intégrées :

$ lame -v --preset fast standard track1.wav track1.mp3

Cette version invoque le nouvel encodeur rapide VBR avec un niveau de qualité standard :

$ mplayer track1.mp3
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 44100 Hz, 2 ch, s16le, 128.0 kbit/9.07% (ratio: 16000->176400)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)

Essayez différents réglages de la qualité et optez pour le fichier le plus petit dont l'écoute est satisfaisante.

Pour encoder un WAV en Ogg Vorbis, utilisez oggenc :

$ oggenc -q 3 track1.wav

Écoutez le résultat :

$ mplayer track1.ogg
Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
AUDIO: 44100 Hz, 2 ch, s16le, 112.0 kbit/7.94% (ratio: 14000->176400)
Selected audio codec: [ffvorbis] afm: ffmpeg (FFmpeg Vorbis)

Pour encoder un OGG en MP3, passez par un WAV :

$ oggdec audio.ogg
$ lame -q2 audio.wav audio.mp3
$ rm audio.wav

Pour encoder tout un répertoire :

$ oggdec *.ogg
$ for f in *.wav; do lame -h --vbr-new "$f" "$(basename "$f" .wav).mp3"; done
$ rm *.wav

NOTE : N'oubliez pas de protéger les noms de fichier qui pourraient contenir des espaces avec des quotes doubles.

Pour convertir un WMA en WAV, utilisez ffmpeg :

$ ffmpeg -i audio.wma audio.wav

Pour directement convertir un WMA en MP3 :

$ ffmpeg -i audio.wma -acodec libmp3lame -ar 22050 -ab 64k audio.mp3

Cette commande règle la fréquence d'échantillonnage à 22050 Hz et le débit à 64k. Contrôlez le résultat :

$ mplayer audio.mp3
Opening audio decoder: [mp3lib] MPEG layer-2, layer-3
AUDIO: 22050 Hz, 2 ch, s16le, 64.0 kbit/9.07% (ratio: 8000->88200)
Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3)

Pour encoder en MP3 tout un répertoire en FLAC :

$ for f in *.flac; do ffmpeg -i "$f" -acodec libmp3lame -ar 44100 -ab 192k "$(basename "$f" .flac).mp3"; done

Pour encoder un répertoire en WMA, remplacer l'extension .flac par .wma.

Pour ajouter la pochette d'un album contenue dans le fichier Folder.jpg à tout un dossier MP3 :

$ for f in *.mp3; do ffmpeg -i "$f" -i Folder.jpg -map 0:0 -map 1:0 -c copy -id3v2_version 3 audio.mp3 && mv -f audio.mp3 "$f"; done

Pour extraire les pistes audio en FLAC d'un fichier APE avec un répertoire CUE :

$ sudo add-apt-repository -y ppa:flacon
$ sudo apt-get update
$ sudo apt-get install -y flacon
$ shntool split -f audio.cue -o flac -t '%n - %t' audio.ape

Convertir les fichiers audio et vidéo

Pour regarder un épisode de votre série préférée sur votre Android, obtenez d'abord les propriétés du AVI :

$ mplayer video.avi
VIDEO:  [XVID]  624x352  24bpp  23.976 fps  1000.0 kbps (122.1 kbyte/s)
AUDIO: 48000 Hz, 2 ch, s16le, 128.0 kbit/8.33% (ratio: 16000->192000)

Supposons que la vidéo affiche 624x352 pixels avec une fréquence de 24 images par seconde et un débit de 1000k et que l'audio ait une fréquence de 48000 Hz et un débit de 128k. Les débits binaires de l'audio et de la vidéo doivent être réduits pour que le fichier obtenu ne soit pas trop gros tout en conservant une qualité acceptable. Un débit audio de 64k avec une fréquence de 44100 Hz et un débit vidéo de 600k sont un bon compromis.

Le rapport d'aspect de la vidéo est de 624/352=1,77. L'écran du téléphone fait 480x320. On calcule la nouvelle hauteur de la vidéo en divisant la largeur de l'écran par le rapport d'aspect de la vidéo, soit 480/1.77=271, qu'on arrondit à 272 afin que la dimension soit un multiple de 16. La nouvelle largeur de la vidéo sera identique à celle de l'écran.

Si la hauteur calculée dépasse la hauteur de l'écran, multipliez la hauteur de l'écran par le rapport d'aspect de la vidéo pour calculer la nouvelle largeur de la vidéo. Sa hauteur sera identique à celle de l'écran. Par exemple, pour ajuster une vidéo de 720x576 à un écran de 480x320, diviser 480 par 1,25 (720/576) donne une hauteur de 384, trop grande, on va donc plutôt multiplier 320 par 1,25 pour obtenir une largeur de 400. La vidéo redimensionnée aura une taille de 400x320.

Pour ajuster une vidéo pour une taille d'affichage précise, recalculez sa largeur et sa hauteur en appliquant la formule suivante :

rapport_d_aspect_de_l_affichage = largeur_de_l_affichage / hauteur_de_l_affichage
rapport_d_aspect_de_la_video = largeur_de_la_video / hauteur_de_la_video
si rapport_d_aspect_de_la_video > rapport_d_aspect_de_l_affichage
alors hauteur = (hauteur_de_la_video / rapport_d_aspect_de_la_video) et largeur = largeur_de_l_affichage
sinon largeur = (hauteur_de_l_affichage x rapport_d_aspect_de_la_video) et hauteur = hauteur_de_l_affichage

N'oubliez pas d'arrondir la largeur et la hauteur de la vidéo à un multiple de 16.

Si lire une vidéo à une fréquence de 24 ou 25 fps n'est pas supporté par le lecteur vidéo du téléphone, ou pour encore réduire la taille du fichier, réglez la fréquence de l'image à 15 fps.

Convertissez le fichier vidéo avec ffmpeg en 3GP/AAC/H.264 avec la fréquence d'image correcte et le bon rapport d'aspect, la nouvelle taille, et des débits audio et vidéo plus bas pour le son et l'image :

$ ffmpeg -i video.avi -acodec libfdk_aac -ar 44100 -ab 64k \
-vcodec libx264 -aspect 1.77 -s 480x272 -r 24 -b 600k video.3gp
video.3gp
Le fichier en sortie dans un conteneur 3GP.
-f 3gp
Ajoutez ce paramètre optionnel pour spécifier le format du fichier.
-i video.avi
Le fichier en entrée.
-acodec libfdk_aac
L'audio est encodée en AAC.
-ar 44100
La fréquence audio est de 44100 Hz.
-ab 64k
Le débit binaire de l'audio est de 64k.
-vcodec libx264
La vidéo est encodée en H.264.
-vpre default
Réglages par défaut de l'encodeur vidéo.
-aspect 1.77
Le rapport d'aspect de la vidéo est de 1,77.
-s 320x240
La vidéo fait 480 sur 272 pixels.
-r 24
La fréquence d'image est de 24 fps.
-b 600k
Le débit de la vidéo est de 600k.

IMPORTANT : ffmpeg peut varier d'une version à l'autre. Si celle que vous avez installée n'est pas compilée avec libx264, remplacez -vcodec libx264 par -vcodec h264. Si ffmpeg vous demande de choisir une option d'encodage prédéfinie, ajoutez le paramètre -vpre default après -vcodec libx264. Les fichiers d'options sont dans le dossier /usr/share/ffmpeg.

Pour recadrer la vidéo, ajoutez -vf crop=w:h:x:y.

Pour diffuser la vidéo en streaming, ajoutez -movflags faststart afin de placer les metadonnées de l'audio et de la vidéo au début du conteneur.

Pour ajuster le volume audio, ajoutez -af volume=nn est une valeur positive ou négative en décibels (+3 double le volume).

Pour encoder l'audio en MP3, remplacez -acodec libfdk_aac par -acodec libmp3lame.

Si la vidéo et l'audio ne sont pas synchronisées, ajoutez l'option -itsoffset avec en paramètre le nombre de secondes de décalage entre la vidéo ou l'audio.

Si le programme se plaint des B-Frames, essayez d'ajouter -fflags +genpts avant le paramètre -i.

Pour encoder une vidéo en 2 passes, exécutez une première passe sans générer l'audio tout en jettant la sortie vidéo, puis exécutez la commande complète dans une seconde passe :

$ ffmpeg -i video.avi -pass 1 -an \
-vcodec libx264 -aspect 1.77 -s 480x272 -r 24 -b 600k -f mp4 -y /dev/null
$ ffmpeg -i video.avi -pass 2 -acodec libfdk_aac -ar 44100 -ab 64k \
-vcodec libx264 -aspect 1.77 -s 480x272 -r 24 -b 600k video.mp4

La même vidéo pour un iPhone avec quelques variations :

$ ffmpeg -i video.avi -acodec libfdk_aac -ab 128k \
-vcodec mpeg4 -g 300 -aspect 1.77 -r 25 -b 600k -s 480x272 video.mp4

NOTE : Ce format marche aussi bien pour un Android.

Si vous avez une PSP :

$ ffmpeg -i video.avi -acodec libfdk_aac -ab 32k -ar 24000 -vcodec libx264 -aspect 1.77 -b:v 300k -s 320x180 video.mp4

Encore une variante pour un iPad qui encode séparément le flux vidéo en H.264 et le flux audio en AAC :

$ ffmpeg -threads 4 -g 30 -partitions +parti4x4+parti8x8+partp8x8 -i_qfactor 0.71 -qcomp 0.6 \
-i video.avi -aspect 1.77 -y \
-f h264 -vcodec libx264 -qmax 27 -r 25 video.h264 \
-f adts -ar 48000 -f wav -ac 2 - | faac -b 96 -o audio.aac -

Remarquez que le flux audio est extrait en WAV et injecté en entrée à la commande faac. Comme l'écran d'un iPad est plus large, la vidéo n'est pas redimensionnée.

Assemblez les 2 fichiers video.h264 et audio.aac dans un conteneur MP4 avec le programme utilitaire MP4Box :

$ MP4Box -add video.h264 -add audio.aac video.mp4

Ajustez le paramètre -r selon la fréquence d'image de la vidéo à 24, 25 ou même 23.98.

Listez le contenu du MP4 :

$ ffprobe video.mp4

Pour convertir un WMV ou un FLV en préservant les paramètres de la vidéo et de l'audio, commencez par afficher les propriétés des 2 flux :

$ ffprobe video.wmv
  Stream #0:0(fre): Audio: wmav2 (a[1][0][0] / 0x0161), 48000 Hz, 2 channels, s16, 64 kb/s
  Stream #0:1(fre): Video: wmv3 (Main) (WMV3 / 0x33564D57), yuv420p, 640x360, 650 kb/s, 25 tbr, 1k tbn, 1k tbc

Encodez les 2 flux séparément :

$ ffmpeg -i video.wmv -aspect 1.77 -y \
-f h264 -vcodec libx264 -qmax 27 -r 25 -b:v 600k -s 640x360 video.h264 \
-f adts -ar 48000 -f wav -ac 2 - | faac -b 64 -o audio.aac -

Assemblez les 2 fichiers :

$ MP4Box -fps 25 -add video.h264 -add audio.aac video.mp4

Pour extraire une bande son AAC et l'insérer de nouveau en forçant la conversion au format MP4 :

$ MP4Box -raw 2 video.mp4 -out audio.aac
$ MP4Box -rem 2 video.mp4
$ MP4Box -add audio.aac video.mp4

Vérifiez le résultat avec ffplay :

$ ffplay video.mp4

Vous pouvez aussi utiliser mencoder si vous avez une version compilée avec le support MP4 et AAC :

$ mencoder -of lavf -lavfopts format=mp4 -sws 9 -af volnorm -srate 44100 -channels 2 -vf-add harddup \
-oac faac -faacopts br=96:mpeg=4:object=2:raw -ovc x264 -x264encopts \
bitrate=800:threads=auto:bframes=0:frameref=2:global_header:partitions=all \
-o video.mp4 video.avi

Appelez cette commande dans un script :

#! /bin/sh
#

faacopts="br=96:mpeg=4:object=2:raw"
x264encopts="bitrate=1000:threads=auto:bframes=0:frameref=2:global_header:partitions=all"

abort () {
  echo $1 >&2
  exit ${2-1}
}

for f in $*
do
    ext=`echo -n $f | sed 's/.*\.//'`
    if [ ! -f $f -o "$ext" != "avi" ]
    then
        abort "$f?"
    fi
   
    file=`basename $f .avi`
   
    mencoder -of lavf -lavfopts format=mp4 -sws 9 -af volnorm -srate 44100 -channels 2 -vf-add harddup \
    -oac faac -faacopts $faacopts \
    -ovc x264 -x264encopts $x264encopts \
    $f -o $file.mp4
   
    if [ $? -ne 0 ]
    then
        abort "$f?"
    fi
done

Copiez le script dans votre répertoire bin :

$ cp mp4avi ~/bin; chmod 755 ~/bin/mp4avi

Lancez-le dans le répertoire où vous avez enregistré les fichiers AVI :

$ mp4avi *.avi

Ajustez le paramètre bitrate selon le débit du flux vidéo en entrée et la qualité souhaitée en sortie.

Pour convertir un MP4 en AVI tout en redimensionnant la vidéo à 640x360 pixels :

$ ffmpeg -i video.mp4 -vcodec libxvid -s:v 640x360 -b:v 1200k -q:v 3 -acodec ac3 -ar 44100 -ab 192k -ac 2 video.avi

Adaptez les paramètres au format d'entrée et au résultat voulu.

Pour convertir un MKV en MP4 :

#! /bin/sh
#

abort () {
  echo $1 >&2
  exit ${2-1}
}

trap "rm -f video.h264 audio.aac" 0 1 2 3 15

for f in $*
do
    ext=`echo -n $f | sed 's/.*\.//'`
    if [ ! -f $f -o "$ext" != "mkv" ]
    then
        abort "$f?"
    fi
   
    file=`basename $f .mkv`

    mkvextract tracks $f 1:video.h264 2:audio.aac

    MP4Box -add video.h264 -add audio.aac $file.mp4

    if [ $? -ne 0 ]
    then
        abort "$f?"
    fi
done
$ cp mp4mkv ~/bin; chmod 755 ~/bin/mp4mkv
$ mp4mkv *.mkv

Si le programs se plaint qu'un flux est manquant, éditez le script et modifier les numéros de pistes :

mkvextract tracks $f 0:video.h264 1:audio.aac

Ajoutez le paramètre -fps à MP4Box pour forcer la fréquence. Si le rapport d'aspect est faux, corrigez le PAR avec la formule PAR = DAR ÷ SAR où DAR est généralement 1.78 (16:9) ou 1.33 (4:3) mais des valeurs comme 1.85:1 et 2.39:1 sont aussi courantes :

$ MP4Box -fps 23.98 -par 1=4:3 -add video.h264 -add audio.aac video.mp4

Pour convertir une audio AC3 en AAC :

$ ffmpeg -i audio.a3c -acodec libfdk_aac audio.aac

Pour convertir une audio DTS en AAC :

$ ffmpeg -i audio.dts -f adts -ar 48000 -f wav -ac 2 - | faac -b 96 -o audio.aac -

Pour fabriquer un MP4 à partir d'un WEBM contenant une vidéo en VP8 et une audio en OGG, copiez le script suivant dans votre répertoire bin :

#! /bin/sh
#

abort () {
  echo $1 >&2
  exit ${2-1}

}

trap "rm -f video.vp8 audio.ogg audio.wav video.h264 audio.aac" 0 1 2 3 15

for f in $*
do
    ext=`echo -n $f | sed 's/.*\.//'`
    if [ ! -f $f -o "$ext" != "webm" ]
    then
        abort "$f?"
    fi
   
    file=`basename $f .webm`

    fps=`ffprobe $f 2>&1 | grep "Stream #0:0" | sed "s/.*, \(.*\) fps.*/\1/"`;

    mkvextract tracks $f 1:video.vp8 2:audio.ogg

    ffmpeg -i video.vp8 -vcodec libx264 -r $fps video.h264

    oggdec audio.ogg
    faac -b 96 -o audio.aac audio.wav

    MP4Box -fps $fps -add video.h264 -add audio.aac $file.mp4

    if [ $? -ne 0 ]
    then
        abort "$f?"
    fi
done

Pour convertir un FLV contenant déjà une vidéo en H264 et une audio en AAC en MP4, comme une émission téléchargée en replay, copiez le script suivant dans votre répertoire bin :

#! /bin/sh
#

abort () {
  echo $1 >&2
  exit ${2-1}
}

trap "rm -f video.mp4 video.h264 audio.aac" 0 1 2 3 15

for f in $*
do
    ext=`echo -n $f | sed 's/.*\.//'`
    if [ ! -f $f -o "$ext" != "flv" ]
    then
        abort "$f?"
    fi
   
    file=`basename $f .flv`

    ffmpeg -i $f -acodec copy -vcodec copy -y video.mp4    

    MP4Box -raw 1 video.mp4 -out video.h264
    MP4Box -raw 2 video.mp4 -out audio.aac

    MP4Box -add video.h264 -add audio.aac $file.mp4
done
$ cp mp4flv ~/bin; chmod 755 ~/bin/mp4flv
$ mp4flv *.flv

Si le FLV contient une audio en MP3, sortez la vidéo tout en convertissant le MP3 en AAC :

$ ffmpeg -i video.flv -vcodec copy -y video.h264 -f adts -ar 44100 -f wav -ac 2 - | faac -b 128 -o audio.aac -

Pour ajuster le volume audio, ajoutez -af volume=nn est une valeur positive ou négative en décibels (+3 double le volume).

Assemblez le MP4 avec MP4Box :

$ MP4Box -add video.h264 -add audio.aac video.mp4

Pour rempaqueter un TS contenant aussi une vidéo en H264 et une audio en AAC dans un conteneur MP4, vous pouvez extraire les flux avec ffmpeg et construire le MP4 avec MP4Box. Commencez par afficher la fréquence d'image et le débit de la vidéo avec ffprobe. Passez le débit à ffmpeg avec le paramètre -bt et la fréquence à MP4Box avec le paramètre -fps :

$ ffprobe video.ts
...
Input #0, mpegts, from 'video.ts':
  Duration: 01:39:47.98, start: 0.100511, bitrate: 1678 kb/s
    Stream #0:0[0x100]: Video: h264 (Main), yuv420p, 852x480 [SAR 1:1 DAR 71:40], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc
    Stream #0:1[0x101]: Audio: aac, 44100 Hz, stereo, fltp, 130 kb/s
...
$ ffmpeg -i video.ts -an -vcodec copy -bt 1200k video.h264
$ ffmpeg -i video.ts -acodec copy -vn audio.aac
$ MP4Box -fps 29.97 -add video.h264 -add audio.aac video.mp4
#! /bin/sh
#

USAGE="`basename $0` [-h] -f fps -b bitrate file.ts..."

abort () {
  echo $1 >&2
  exit ${2-1}
}

trap "rm -f video.h264 audio.aac" 0 1 2 3 15

fps=
bt=

# parse command line
set -- `getopt b:f: $*`

if [ $? != 0 ]
then
  abort "$USAGE" 1
fi

while [ $1 != -- ]
do
  case $1 in
    -h)
    abort "$USAGE" 0
    ;;
    -f)
    fps="$2"
    shift
    ;;
    -b)
    bt="$2"
    shift
    ;;
  esac
  shift # next flag
done

if [ -z "$fps" -o -z "$bt" ]
then
  abort "$USAGE" 1
fi

shift   # skip --

if [ $# = 0 ]
then
  abort "$USAGE" 1
fi

for f in $*
do
    ext=`echo -n $f | sed 's/.*\.//'`
    if [ ! -f $f -o "$ext" != "ts" ]
    then
        abort "$f?"
    fi
   
    file=`basename $f .ts`

    ffmpeg -i $f -an -vcodec copy -bt $bt video.h264
    ffmpeg -i $f -acodec copy -vn audio.aac

    MP4Box -add video.h264 -add audio.aac $file.mp4

    if [ $? -ne 0 ]
    then
        abort "$f?"
    fi
done

Pour partager vos films enregistrés avec un caméscope sur YouTube, convertissez les vidéos en Flash Video :

$ ffmpeg -i video.mpg -acodec libmp3lame -ar 22050 -ab 32K -vcodec flv -aspect 1.33 -s 320x240 -r 25 -b 600k video.flv
video.flv
Le fichier en sortie dans un conteneur Flash Video.
-f flv
Ajoutez ce paramètre optionnel pour spécifier le format du fichier.
-i video.mpg
Le fichier en entrée.
-acodec libmp3lame
L'audio est encodée en MP3.
-ar 22050
La fréquence audio est de 22050 Hz.
-ab 32k
Le débit binaire de l'audio est de 32k.
-vcodec flv
La vidéo est encodée en Flash Video.
-aspect 1.33
Le rapport d'aspect de la vidéo est de 1,33.
-s 320x240
La vidéo fait 320 sur 240 pixels.
-r 25
La fréquence d'image est de 25 fps.
-b 600k
Le débit de la vidéo est de 600k.

Pour prendre une image fixe d'une vidéo, disons environ 5 minutes après le début, générez une série d'instantanés à la bonne dimension après un décalage de 300 secondes :

$ ffmpeg -i video.flv -ss 300 -s 320x240 -r 1 snap-%03d.jpg

Appuyez sur q pour arrêter le programme après un court instant et choisissez une des images snap-*.jpg.

Pour extraire une audio en WAV :

$ ffmpeg -i video.flv -vn -f wav audio.wav

Pour encoder une audio en AAC dans un conteneur M4A :

$ faac -w -b 128 -o audio.m4a audio.wav

Pour extraire une audio et l'encoder en MP3 :

$ ffmpeg -i video.flv -vn -acodec libmp3lame -ar 44100 -ab 64K audio.mp3

Pour extraire une audio déjà encodée en MP3 :

$ ffmpeg -i video.flv -vn -acodec copy audio.mp3

Pour extraire une vidéo déjà encodée en MP4 :

$ ffmpeg -i video.flv -an -vcodec copy video.mp4

Pour mixer une vidéo et une audio :

$ ffmpeg -i audio.mp3 -acodec copy -i video.mp4 -vcodec copy video.flv

Pour tronquer une vidéo, découper un extrait :

$ ffmpeg -i video.mp4 -ss 00:00:45 -t 30 -vcodec copy -acodec copy clip.mp4

Pour retirer le titre d'une vidéo :

$ ffmpeg -i video.mp4 -metadata title='' -metadata comment='' -acodec copy -vcodec copy video2.mp4

Pour convertir un média pour le HTML5 :

$ ffmpeg -i video.flv -vn -f wav audio.wav
$ ffmpeg -i video.flv -an -vcodec copy video.mp4
$ oggenc -q3 audio.wav
$ ffmpeg -i audio.ogg -acodec copy -i video.mp4 -vcodec libvpx -aspect 1.77 -s 480x272 -r 24 -b:v 300k -quality good -cpu-used 0 -qmin 10 -qmax 42 video.webm

Pour retourner un WEBM à un client web, ajoutez la ligne suivante dans le fichier /etc/mime.types et redémarrez Apache :

video/webm	webm

Si vous ne pouvez pas modifier les fichiers du système, ajoutez la ligne suivante dans un fichier .htaccess dans le répertoire contenant la vidéo :

AddType video/webm	webm

Lisez l'article Diffuser une vidéo sur un site web pour apprendre comment insérer un média dans un site web.

Commentaires

Le 8 décembre 2011 à 14:57 par frasq 

Avidemux est un éditeur et un convertisseur de vidéos avec une interface graphique disponible sur Linux et Windows. Commencez par lire ce manuel illustré (en anglais) : Floss Manual on Avidemux.

Le 29 décembre 2011 à 15:50 par frasq 

Le bon format (dénominateur commun) pour diffuser une vidéo sur le web pour tous les systèmes :

Container : MP4, headers at the beginning of the file
    Video : H.264, 480x272 pixels, 600 kbps
    Audio : AAC, 44.1 kHz stereo, 96 kbps

Le 22 janvier 2012 à 15:34 par frasq 

Pour partager des vidéos, de la musique ou des photos sur votre réseau depuis votre PC, installez ushare :

$ sudo apt-get install ushare

Éditez le fichier /etc/ushare.conf. Mettez le paramètre USHARE_DIR à la liste des répertoires que vous voulez partager.

Le 2 février 2013 à 13:16 par frasq 

minidlna diffuse correctement les fichiers .srt et pas besoin de le redémarrer quand le contenu d'un répertoire a changé.

Créez un dossier /minidlna. Ajoutez des liens sur les différents dossiers contenant des fichiers vidéo ou audio. Éditez le fichier de configuration /etc/minidlna.conf et ajoutez les lignes suivantes :

media_dir=V,/minidlna
media_dir=A,/minidlna

Le 17 mars 2013 à 15:22 par frasq 

Pour générer une vignette pour chacune des vidéos, installez ffmpegthumbnailer :

$ sudo apt-get install ffmpegthumbnailer

Copiez le script suivant dans un fichier appelé thumbnail dans le dossier ~/bin :

#! /bin/bash

IFS=$(echo -en "\n\b")

for f in $*
do
    ext=`echo -n $f | sed 's/.*\(\..*\)$/\1/'`
    name=`basename $f $ext`
    dir=`dirname $f`

    ffmpegthumbnailer -i $f -o ${dir}/${name}.jpg
done
$ thumbnail *.avi

Pour ajouter un commentaire, cliquez ici.