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 :
FLAC | MP3 320 | MP3 256 | MP3 192 | MP3 128 |
22 kHz | 20,5 kHz | 20 kHz | 19 kHz | 16 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=n
où n
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 :
#
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 :
#
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 :
#
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 :
#
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 :
#
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 :
#
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=n
où n
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
#
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