3
1 370

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

Installez les codecs :

$ sudo apt install ubuntu-restricted-extras

Pour lire un DVD :

$ sudo add-apt-repository multiverse
$ sudo apt install libdvd-pkg
$ sudo dpkg-reconfigure libdvd-pkg

NOTE : La librairie ibdvdcss2 de dépôt VLC est aussi installée.

Installez mencoder avec mplayer :

$ sudo apt 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 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 install ffmpeg

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

$ ffmpeg -formats | grep -i aac
 D  aac             raw ADTS AAC (Advanced Audio Coding)
  E adts            ADTS AAC (Advanced Audio Coding)

La dernière ligne avec un E indique que ffmpeg est compilé avec la librairie libfdk_aac.

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) (decoders: aac aac_fixed )
 D.A.L. aac_latm             AAC LATM (Advanced Audio Coding LATM syntax)

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

$ ffmpeg -formats | grep 264
 DE h264            raw H.264 video
  E ipod            iPod H.264 MP4 (MPEG-4 Part 14)

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 (decoders: h264 h264_v4l2m2m h264_cuvid ) (encoders: libx264 libx264rgb h264_nvenc h264_omx h264_v4l2m2m h264_vaapi nvenc nvenc_h264 )

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 install libsdl2-dev

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

$ cd SDL2-2.0.14
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
MP3

Pour installer la version du système :

$ sudo apt 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 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 install libtool
FLAC

Pour installer la version du système :

$ sudo apt install flac

Pour fabriquer le paquet, téléchargez libflac, puis tapez les commandes suivantes :

$ cd flac-1.3.2
$ ./configure --prefix=/usr/local --disable-thorough-tests
$ make 
$ sudo make install
Ogg Vorbis

Pour installer la version du système :

$ sudo apt install libogg-dev libvorbis-dev

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

$ cd libogg-1.3.5
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ cd libvorbis-1.3.7
$ ./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 install libopencore-amrnb-dev 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.5
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ cd vo-amrwbenc-0.1.3
$ ./configure --prefix=/usr/local
$ make
$ sudo make install
Opus

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

$ sudo apt install opus-tools
VMAF

Pour télécharger et installer la librairie VMAF de Netflix :

$ sudo apt install meson
$ sudo apt install doxygen
$ sudo apt install python-pip3
$ sudo pip3 install cython
$ sudo pip3 install numpy
$ git clone https://github.com/Netflix/vmaf.git
$ cd vmaf
$ make
$ sudo make install

NOTE : Après un git pull, entrez make clean.

H.264

Pour installer la version du système :

$ sudo apt install libx264-dev

Assurez-vous que Yasm et Nasm sont installés :

$ sudo apt install yasm nasm

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 install autoconf

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

$ wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.bz2
$ tar -xf nasm-2.13.01.tar.bz2
$ cd nasm-2.13.01
$ ./autogen.sh
$ ./configure --prefix=/usr/local/ 
$ make 
$ sudo make install

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

$ git clone https://code.videolan.org/videolan/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.

H.265

Pour installer la version du système :

$ sudo apt install libx265-dev

Assurez-vous que les commandes cmake et ccmake sont installées :

$ sudo apt install cmake cmake-curses-gui

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

$ git clone https://github.com/videolan/x265
$ cd x265
$ cmake source
$ make
$ sudo make install
VP8 - VP9

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 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 install libebml-dev libmatroska-dev

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

$ cd libebml-1.4.2
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
$ cd libmatroska-1.6.3
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
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 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-ffplay
$ make clean
$ make all
$ sudo make install

Installe ffmpeg, ffplay, ffprobe et ffserver.

Ajoutez l'option --enable-x265 pour ajouter l'encodeur H.265, l'option --enable-libvmaf pour l'encodeur VMAF.

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 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 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 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 laisser l'encodeur calculer le meilleur taux de compression pour une qualité donnée (Constant Rate Factor) :

ffmpeg -i video.vob -acodec libfdk_aac -vcodec libx264 -preset veryslow -crf 19 -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

Si ffmpeg suggère d'utiliser le filtre mpeg4_unpack_bframes :

$ ffmpeg -i video.avi -acodec copy -vcodec copy -bsf:v mpeg4_unpack_bframes video2.avi

Extraire un CD

Nous entendons les fréquences allant de 20 Hz (grave) à 20 kHz (aigus) - de 10 Hz à 25 kHz au mieux et pas plus de 18 kHz en vieillissant. La limite théorique dans le haut du spectre de l'encodeur en FLAC et en MP3 selon le débit binaire :

FLACMP3 320MP3 256MP3 192MP3 128
22 kHz20,5 kHz20 kHz19 kHz16 kHz

Un WAV vu par l'analyseur de spectre acoustique Spek :

Ce WAV encodé en FLAC :

Le même encodé en MP3 320 kbps :

Et maintenant en MP3 192 kbps :

Et encore en AAC 320 kbps :

Et enfin en OGG 320 kbps :

Le MP3 320, le AAC 320 et le OGG 320 sont 2 fois plus petits que le FLAC qui est 2 fois plus petit que le WAV.

Pour localiser un titre en particulier sur un CD :

$ mplayer cdda://1

NOTE : Si le CD a été monté par le système, vous pouvez simplement copier les pistes sur le disque.

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 encoder un WAV en FLAC:

$ ffmpeg -i audio.wav -af aformat=s16:44100 audio.flac

Encode l'audio en 16-bit et 44,1 kHz.

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

NOTE : Pour une meilleure qualité, remplacez les paramètres -ar 44100 -ab 192k par -ar 48000 -ab 320k.

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

Ajoutez l'option -map a pour ne copier que le flux audio sans aucun autre contenus comme des images.

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 un dossier FLAC :

$ metaflac --import-picture-from=Folder.jpg *.flac

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 update
$ sudo apt install -y flacon
$ shntool split -f audio.cue -o flac -t '%n - %t' audio.ape

Remplacez audio.ape par audio.wav ou audio.flac si le fichier est en WAV ou en FLAC.

Si l'audio est encodée en FLAC 24 bits, convertissez-la d'abord en FLAC 16 bits :

$ ffmpeg -i audio24.flac -af aformat=s16:44100 audio16.flac

Pour un fichier audio.m4a, convertissez d'abord le ALAC en WAV :

$ alac-decoder -f audio.wav audio.m4a

Pour encoder tout un répertoire extrait d'un CD en FLAC :

$ for f in *.wav; do ffmpeg -i "$f" -af aformat=s16:44100 "$(basename "$f" .wav).flac"; done

Si tous les fichiers sont au format APE :

$ for f in *.ape; do ffmpeg -i "$f" -af aformat=s16:44100 "$(basename "$f" .ape).flac"; done

Si le WAV est dans un WV :

$ wvunpack audio.wv

Pour lister toutes les étiquettes dans un FLAC :

$ metaflac --export-tags-to=- audio.flac

Pour retirer une étiquette de tous les FLAC dans un dossier :

$ metaflac --remove-tag=ARTISTSORT *.flac

Pour ajouter un numéro de piste à tous les FLAC dans un dossier :

$ n=1; for f in *.flac; do metaflac --remove-tag=TRACKNUMBER --set-tag=TRACKNUMBER=`printf '%02d' $n` "$f"; n=$((n+1)); done

Pour convertir tout un jeu de fichiers FLAC en MP3 en les tronquant à 30 secondes avec un effet de fondu de 2 secondes :

$ for f in *.flac; do ffmpeg -i "$f" -vn -acodec libmp3lame -ab 192k -t 30 -filter_complex "[0:a]afade=t=out:d=2:st=28" "$(basename "$f" .flac).mp3"; done

Pour éditer les informations d'une piste audio ou de plusieurs pistes d'un coup, utilisez EasyTag.

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 programme 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.ac3 -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 extraire des sous-titres encodés en ASS et les convertir en SRT :

$ mkvextract tracks video.mkv 2:subtitles.ass
$ ffmpeg -i subtitles.ass subtitles.srt

Si le MKV contient une vidéo encodée en H265, un format qui n'est pas encore supporté par votre TV, transcodez la vidéo en H264 :

#! /bin/sh
#

USAGE="`basename $0` [-h] [-a] file.mkv..."

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

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

ac3=0

# parse command line
set -- `getopt ah $*`

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

while [ $1 != -- ]
do
  case $1 in
    -h)
    abort "$USAGE" 0
    ;;
    -a)
    ac3=1
    ;;
  esac
  shift # next flag
done

shift   # skip --

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

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

    if [ $ac3 ]
    then
        mkvextract tracks $f 0:video.h265 1:audio.ac3
        ffmpeg -i audio.ac3 -acodec libfdk_aac audio.aac
    else
        mkvextract tracks $f 0:video.h265 1:audio.aac
    fi

    ffmpeg -i video.h265 -c:v libx264 -preset medium video.h264

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

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

Si l'audio dans le MKV est en AC3, ajoutez l'option -a pour la convertir en AAC.

Pour générer un MKV, remplacez la commande MP4Box par mkvmerge :

$ mkvmerge -o video.mkv video.h264 --aac-is-sbr 0 audio.aac

Si la vidéo dans le MKV est encodée avec un rapport d'aspect et un rapport d'affichage que votre TV n'interprète pas correctement, retaillez la vidéo avec un SAR 1x1 tout en conservant les autres flux :

$ ffmpeg -i video.mkv -acodec copy -scodec copy -vcodec libx264 -b:v 1000k -vf scale=720:404,setsar=1/1,setdar=16/9 -aspect 16/9 -y video2.mkv

Adaptez le paramètre -b:v 1000k à la source.

Pour ajouter des sous-titres dans un MKV :

$ ffmpeg -i video.mkv -i video.srt -vcodec copy -acodec copy -scodec copy video2.mkv

Pour tout un dossier :

$ for f in *.mkv; do ffmpeg -i "$f" -i "$(basename "$f" .mkv)".srt -map_metadata -1 -vcodec copy -acodec copy -scodec copy video.mkv && mv video.mkv "$f"; done

Pour supprimer des sous-titres dans un MKV :

$ mkvmerge -S video.mkv -o video2.mkv

Pour ajouter un SRT :

$ mkvmerge video.mkv video.srt -o video2.mkv

Pour un MP4 :

$ ffmpeg -i video.mp4 -i video.srt -map 0 -map 1 -c copy -c:s mov_text -metadata:s:1 language=eng -metadata:s:2 language=eng video2.mp4

Plus simplement avec MP4Box :

$ MP4Box -add video.srt video.mp4

Pour extraire un sous-titre en SRT d'un MP4 :

$ ffmpeg -i video.mp4 -vn -an -codec:s srt video.srt

Pour convertir un MP4 en MKV :

#! /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" != "mp4" ]
    then
        abort "$f?"
    fi
   
    file=`basename $f .mp4`

    MP4Box -raw 1:output=video.h264 $f
    MP4Box -raw 2:output=audio.aac $f

    if [ -f $file.srt ]
    then
        mkvmerge --disable-track-statistics-tags -o $file.mkv video.h264 --aac-is-sbr 0 audio.aac $file.srt
    else
        mkvmerge --disable-track-statistics-tags -o $file.mkv video.h264 --aac-is-sbr 0 audio.aac
    fi

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

NOTE : mkvmp4 fusionnera automatiquement un SRT avec le même nom que le MP4.

mkvmerge est capable de gérer directement tous les formats en entrée :

$ mkvmerge --disable-track-statistics-tags -o video.mkv video.mp4 video.srt

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

Si le WEBM contient une vidéo encodée en VP9 ou une audio au format OPUS, remplacez video.vp8 par video.vp9 et audio.ogg par audio.opus dans le script, et pour décoder l'audio en WAV, utilisez la commande opusdec audio.opus.

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:h $*`

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 découper la vidéo au segment le plus proche, spécifiez l'option -ss avant l'option -i :

$ ffmpeg -ss 00:00:45 -t 30 -i video.mp4 -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 retirer les métadonnées :

$ ffmpeg -i video.mkv -map_metadata -1 -c copy -map 0 video2.mkv

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
Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].