Table des matières

, , , , , ,

 Logo de ffmpeg

FFmpeg

FFmpeg est une application de lecture et encodage de vidéo. Très puissante comme son alter ego Mencoder, il assure en ligne de commande la possibilité de convertir les fichiers vidéo d'un format à un autre, dont le mts et m2ts.

Utilisation graphique

Il existe des interfaces graphiques permettant de simplifier grandement le transcodage de fichiers :

D'autres interfaces graphiques ont été créées pour répondre à des attentes spécifiques :

D'autres applications permettent de faire des modifications plus profondes à la vidéo et utilisent FFMpeg pour rendre la vidéo finale :

Installation

Installer le paquet ffmpeg

Utilisation

Tout ce qui suit parlera de la partie manipulation de fichier Audio - Video.

Cependant, il est utile de savoir que ffmpeg intègre par défaut un lecteur minimaliste audio-video ffplay utilisable depuis le terminal.

Attention, minimaliste ne veut pas dire peu performant.
Avec toutes les possibilités de ffmpeg vous pouvez aller bien plus loin que n'importe quel lecteur.
Seul ressource pour cela … connaitre les arguments à entrer dans la commande terminal.

En bref : plus léger, plus simple et plus qualitatif par défaut. Par choix, plus tout ce que vous voulez pour aller plus loin.

Utilisation pour lire UN SEUL fichier Audio ou Video

Tapez dans le terminal ce qui suit et appuyez sur la touche "Entrée" du clavier

Pour un fichier video

ffplay "le_chemin_du_fichier_que_je_veux_lire.mkv" (ou .mp4, etc.;l'extension du fichier à lire)

Pour un fichier audio

ffplay "le_chemin_du_fichier_que_je_veux_lire.wav" (ou .aac, etc.;l'extension du fichier à lire)

NB les guillemets sont importants car ils vous éviteront une erreur si le chemin a des espaces ou des caractères spéciaux

Pour arrêter la lecture appuyer sur "Echap" ou "q"
IMPORTANT Quitter proprement le terminal en tapant exit une fois pour terminer le processus son, et une autre fois pour fermer le terminal

Utilisation pour lire plusieurs fichiers audio ou video CONTENUS DANS UN SEUL ET MEME REPERTOIRE

Tapez dans le terminal ce qui suit et appuyez sur la touche "Entrée" du clavier

cd /le_chemin_de_votre_repertoire_contenant_les_fichiers_a_lire

puis

for f in *.wav ; do ffplay -hide_banner -nodisp -autoexit "$f"; done

si vous lisez une video supprimez dans la commande ci-dessus l'option -nodisp qui indique de ne pas afficher la fenêtre du graph audio
-hide_banner bloque l'affichage des infos sur ffmpeg
-autoexit ferme ffplay quand le fichier est lu
(.wav à remplacer par votre format .flac .ogg .mp3 .mp4 .m4a .aac .opus .mkv .webm etc.)

Ctrl + C pour passer au morceau suivant
Ctrl + Z pour arrêter
IMPORTANT Quitter proprement le terminal en tapant exit une fois pour terminer le processus son, et une autre fois pour fermer le terminal

Utilisation pour lire TOUT LE CONTENU D'UN RÉPERTOIRE contenant PLUSIEURS DOSSIERS avec des fichiers audio

find /chemin_du_repertoire/ma_musique/ -type f > filelist.txt && while [ 1 ]; do SDL_AUDIODRIVER=alsa AUDIODEV=hw:2,0 ffplay -hide_banner -nodisp -autoexit "`shuf -n 1 filelist.txt`"; done


NB SDL_AUDIODRIVER=alsa AUDIODEV=hw:2,0 sert à contourner le mixeur du PC pour envoyer cela directement sur la sortie USB, ici hw:2,0; trouvez la vôtre avec la commande

cat /proc/asound/cards

Ctrl + C pour passer au morceau suivant
Ctrl + Z pour arrêter
IMPORTANT Quitter proprement le terminal en tapant exit une fois pour terminer le processus son, et une autre fois pour fermer le terminal

J'invite les pros de ffmpeg à ajouter une rubrique à la fin de cette page pour les commandes détaillées de ffplay en ce qui concerne les fichiers videos et la sélection directe des langues et sous-titres ainsi que l'augmentation du format pour supprimer les bandes noires et utiliser tout l'écran.

Commencer sur une bonne base

Toutes les instructions se passent de la même façon. Par exemple pour -vcodec copy taper dans un terminal:

ffmpeg -vcodec copy

Pour identifier le format d'un fichier multimedia (audio et/ou video), tapez :

ffmpeg -i fichier 2>&1 | grep -E "Seems|Input|Duration:|Stream"
Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1)
Input #0, asf, from 'fichier':
  Duration: 00:01:19.50, start: 4.000000, bitrate: 389 kb/s
    Stream #0.0: Audio: wmav2, 44100 Hz, stereo, s16, 64 kb/s
    Stream #0.1: Video: wmv3, yuv420p, 320x240, 323 kb/s, 25 tbr, 1k tbn, 1k tbc

Le nombre d'instructions à passer peut être grand, il faudra en ajouter bout à bout et au final vous finirez par créer vous-même une commande correspondant à vos besoins ! Une commande finale ressemblera à ça :

ffmpeg -i "vidéo d'entrée.avi" -threads 4 -f matroska -vcodec libvpx -vb 1350000 -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 15 -qmax 30 -acodec libvorbis -ab 128k -ar 44100 -ac 2 "vidéo de sortie.mkv"

Voici un exemple concret qui converti un fichier mts en avi :

ffmpeg -i input.mts -vcodec mjpeg -b 100M -acodec pcm_s16be output.avi

Connaître FFmpeg

Ces instructions n'ont rien à voir avec l'encodage, elles servent à savoir ce que contient FFMpeg !

Connaître les conteneurs installés

Il est important de savoir ce que FFmpeg est capable de lire et d'écrire ! Si vous ne le savez pas, c'est simple ! Vous ne pouvez rien faire ! Depuis un terminal, lancez la commande :

ffmpeg -formats

Après avoir appuyé sur la touche "Entrée", vous devez avoir une longue liste de formats (conteneurs) que reconnaît ffmpeg. Cette liste est organisée de manière simple, la première colonne indique si l'on peut lire (D) ou écrire (E) le format en question.

DE matroska        Matroska file format

Veut simplement dire que l'on peut à la fois lire et écrire les fichiers .mkv avec ffmpeg.

Connaître les codecs installés

Comme pour les conteneurs, vous pouvez avoir la liste des codecs disponibles. Pour ceci, dans un terminal faites :

ffmpeg -codecs

Vous aurez une liste avec là aussi les fameux D et E. Mais aussi des V, A ou S qui vous permettent de savoir si un codec concerne la vidéo, le son ou les sous-titres.

Vous pouvez voir les codecs étranges comme libquelquechose. Ce sont des codecs externes pour ffmpeg.

Vous trouverez par exemple vorbis et libvorbis. Le codec est le même, il s'agit juste de deux encodeurs différents. Si la qualité est importante pour vous, préférez les libquelquechose aux quelquechose eux-mêmes.

Par exemple préférez libvorbis à vorbis, libfaac à aac, car la qualité s'en ressentira…

Instruction générale

Utilisation Multithreads

Si FFmpeg est compilé avec la possibilité de faire du multithreading (la version par défaut d'Ubuntu le permet par exemple), il permet sans aucune difficulté d'utiliser les processeurs actuels à leur plein potentiel pour encoder un fichier, il suffit de passer l'instruction threads à ffmpeg à chaque encodage :

-threads 0

Vous pouvez spécifier le nombre de threads à utiliser comme ceci :

-threads N

N étant le nombre de threads à utiliser. Vous pouvez donc en utiliser seulement 3 sur un processeur Quad Core pour garder une grande réactivité sur une autre tâche.

Vous pouvez ensuite compléter par n'importe quelles instructions, et si le codec supporte le multithreading il utilisera automatiquement au mieux votre installation.

Fichiers d'entrée et de sortie

Le fichier d'entrée est spécifié par l'option -i, suivi du fichier à encoder. Pour aller plus vite vous pouvez taper "-i", espace, et glisser le fichier à encoder dans le terminal.

Ce qui donne :

-i "/home/vous/fichier vidéo.avi"

Pour donner le nom de votre fichier de sortie, il faudra juste le taper à la fin de votre commande ffmpeg.

ffmpeg -bla bla -bla bla "/home/vous/fichier vidéo de sortie.mkv"

Attention ! À moins de savoir exactement ce que vous faites, vous ne devez rien mettre après le nom du fichier final.

Choisir le conteneur

Le conteneur est choisi automatiquement via l'extension du fichier. C'est-à-dire que si le fichier final se termine par .mkv le format sera automatiquement mis en matroska sans vous demander votre avis.

Mais vous pouvez vous exprimer haut et fort (!) en précisant le format via l'option -f. Vous pouvez faire suivre "-f" de tous les formats que vous voulez suivant la liste que vous donne ffmpeg -formats. Par exemple :

-f matroska
-f avi

Extraction de la bande Audio

Tapez la commande :

ffmpeg -i <nom du fichier video> -vn -acodec libmp3lame bande_son
Cette commande n'extraira pas la piste audio originale, mais la transcodera en mp3, ce qui a des effets néfastes sur la qualité (mais peut servir un intérêt de compatibilité).

On lui préférera de manière générale cette méthode pour extraire la piste audio originale (sans transcodage) de la vidéo :

ffmpeg -i <votre vidéo>
N'oubliez pas que vous pouvez glisser-déposer votre fichier dans le terminal plutôt que de recopier entièrement son chemin d'accès. Cela limite le risque d'erreurs avec les espaces etc. ;-)

Et regarder l'avant-dernière ligne de ce qui ressort, par exemple :

...
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 69 kb/s
At least one output file must be specified
ffmpeg -i <votre fichier video> -vn -acodec copy '(destination et) nom du fichier audio créé'.EXTENSION

Remplacer EXTENSION par :

Attention à ne pas mettre ".aac" comme extension, sous peine d'avoir un fichier en raw aac qui ne sera pas (ou problématiquement) lisible. Le AAC doit être placé dans un conteneur pour être lu, d'où le ".m4a" qui est la version audio du MP4 (qui pourrait convenir aussi, mais bon… Vous voulez un fichier audio, donc autant faire les choses bien :-D).

Extraction de la bande Video

Tapez la commande :

ffmpeg -i '(chemin et)nom du fichier video' -an -vcodec copy '(chemin et) nom de la bande video extraite'.EXTENSION
Cette commande ne fonctionnera pas tant que vous ne préciserez pas l'extension du fichier à créer, à savoir son conteneur. Ici cependant, on peut se contenter d'utiliser la même extension que le fichier source (.mkv, .ogm, .avi, etc), ou encore changer de conteneur (passer de .flv à .mkv par exemple) sans pour autant transcoder le flux vidéo, ce qui est bien pratique.

Remarque: bien que ffmpeg fasse très bien les choses, pour certains formats et en particulier le MKV, il est recommandé d'utiliser les outils dédiés tels que mkvtoolnix.

Instructions d'encodage Audio

Il faut paramétrer le son. Et c'est très simple !

-acodec "nom du codec"

Vous permet de choisir le codec.

-ab 128000

ou

-ab 128k

Vous permet de choisir le bitrate à utiliser pour le son.

Si vous préférez choisir une qualité plutôt qu'un bitrate, utilisez :

-aq 4

Les paramètres suivants sont optionnels (si l'on ne précise rien, les caractéristiques seront identiques au fichier d'origine).

Vous pouvez choisir la fréquence d'échantillonnage comme ceci :

-ar 44100

Le nombre de canaux (stereo/mono/surround) :

-ac 2

2 étant le nombre de voies (2 : stéréo, 6 : 5.1, etc …)

Pour supprimer l'audio

-an

Instructions d'encodage vidéo

C'est là où ça se complique car il y a plein de codecs vidéo, et ils ont souvent des instructions obscures, même pour les utilisateurs les plus avertis… Ce qui est… Déroutant…

Mais ne vous inquiétez pas, nous allons vous expliquer comment éviter les plus gros pièges !

Le codec vidéo se choisit avec l'instruction :

-vcodec

Les codecs sont nombreux, et il faudra ajouter pas mal d'instructions pour que le codec ne fasse pas n'importe quoi.

Codec libx264

Le codec libx264 a besoin d'une instruction supplémentaire obligatoire.

Si vous souhaitez l'utiliser, il est fortement conseillé d'utiliser les preset fournis par ffmpeg. Ce sont des "packs" d'options pré-configurées.

-vpre

suivi d'un preset qui donnera les paramètres par défaut de l'encodeur à ffmpeg suivant plusieurs profils.

Les presets gérant la complexité et les features activés dans le fichier vidéo de sortie :

Le profile high n'est pas disponible en option car il est le preset par défaut.

Les presets gérant le temps nécessaire à l'encodage :

Les presets gérant le temps nécessaire à un encodage sans aucune perte de qualité d'image :

** lossless_ultrafast

Par exemple, la ligne suivante permet de spécifier que le fichier de sortie doit pouvoir être lu sur à peu près n'importe quel appareil (cela donnera une moins bonne qualité d'image ou un fichier de sortie plus gros) et un encodage très lent (pour essayer de maximiser la qualité d'image) :

-vcodec libx264 -vpre baseline -vpre veryslow

Il ne reste plus qu'à dire au codec la qualité ou le débit que l'on attend pour la vidéo finale.

codec libvpx

Le codec libvpx (c'est-à-dire VP8) propose des options par défaut de très mauvaise qualité… Il va falloir préciser quelques options non obligatoires, mais grandement conseillées.

-rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116

Encodage à bitrate constant - CBR

Faire une vidéo en bitrate (débit) constant revient à rendre les scènes en mouvement moins belles que les scènes statiques, ce type d'encodage n'est pas conseillé !

Pour choisir un bitrate, il suffit de le préciser après l'instruction :

-b

Le bitrate peut être précisé en bits/s ou en kbits/s :

-b 2700000
-b 2700k

Encodage à qualité constante

Faire une qualité constante est très simple, il suffit de choisir un quantiser identique pour la qualité maximale et minimale de la vidéo avec les instructions suivantes :

-qmin 20 -qmax 20

Voilà, c'est tout ! Vous pouvez changer le nombre par un plus élevé (moins bonne qualité) ou plus bas (meilleure qualité)

Vous pouvez mixer ces paramètres avec un bitrate pour créer un bitrate constant avec des limites de qualité minimum et maximum.
avec libx264

Pour un encodage en h264, il est conseillé d'utiliser l'option -crf (non décrite dans le manuel) plutôt que "-qmin" et "-qmax".

-crf 20

Encodage 2-pass

L'encodage double passe, multi-passes, 2pass ou autres, est une technique d'encodage qui mêle les deux techniques d'encodage précédentes.

Cette technique permet d'encoder une première fois à bitrate constant pour faire un index des moments qui vont être encodés avec une qualité exécrable. Ensuite lors du deuxième encodage, la qualité sera équilibrée en baissant la qualité globale des meilleures scènes pour augmenter la qualité des plus mauvaises, ce qui revient quasiment au même que d'avoir une qualité constante. Au final on aura donc une vidéo plus uniforme niveau qualité, tout en ayant le contrôle via un bitrate.

Pour lancer un encodage 2 passes il faut préciser beaucoup de paramètres et lancer l'encodage deux fois.

-b 2700000 -qmin 1 -qmax 31 -minrate 0 -maxrate 9000000 -pass 1 -passlogfile pass1.fpf

Les paramètres sont simples : on choisit le bitrate moyen voulu, le bitrate minimum (-minrate) que l'on peut atteindre (pourquoi pas 0), et le bitrate maximum (-maxrate) (là aussi, si la vidéo n'a rien à voir avec le streaming, mettez le plus haut possible). Il faut aussi préciser un quantiser minimum et maximum ! Pourquoi ? Parce que certains codecs comme le VP8 ont des bugs si on ne le fait pas…

Certains codecs ont leur maxi à 31 d'autres plus haut. Comme le VP8 et le x264 qui vont jusqu'à 51.

Ensuite, -pass 1 signifie que nous sommes en train d'effectuer la première passe. et passlogfile est le fichier "pass" que l'on écrira temporairement.

Pour la seconde passe, utilisez les mêmes paramètres à une exception ! (vous pouvez utiliser la flèche de haut pour retourner dans l'historique du terminal)

La seule chose à modifier est le paramètre -pass 1 à changer en -pass 2.

Fini !

De par mon expérience, si vous utilisez un encodage en h264 et que vous visez une certaine qualité d'image et non une taille de fichier, utilisez l'option -crf sans spécifier de bitrate.

Si, en revanche, vous voulez une taille de fichier final bien précise, utilisez un encodage en 2 passes.

Voir : Encodage DVD → MKV

Transformer la vidéo

Vous pouvez transformer la vidéo avec ffmpeg, modifier la résolution, changer l'aspect ratio (4/3, 16/9), couper autour de l'image, etc.

Bon pour la découpe… c'est clair c'est plus simple avec un outil graphique comme Handbrake, mais ne sous estimez pas la puissance de la ligne de commande hein ! :-D

Changer la résolution

Vous pouvez changer la résolution avec -s et en spécifiant la résolution. Vous pouvez spécifier manuellement (1280x720) ou automatiquement (hd720)

Voici la liste des abréviations :

sqcif qcif cif 4cif 16cif
128x96 176x144 352x288 704x576 1408x1152
qqvga qvga vga svga wvga
160x120 320x240 640x480 800x600 852x480
xga uxga sxga wxga wsxga wuxga qxga woxga qsxga wqsxga wquxga
1024x768 1600x1200 1280x1024 1366x768 1600x1024 1920x1200 2048x1536 2560x1600 2560x2048 3200x2048 3840x2400
hsxga whsxga whuxga
5120x4096 6400x4096 7680x4800
cga ega
320x200 640x350
hd480 hd720 hd1080
852x480 1280x720 1920x1080

Changer le nombre d'images par seconde

Le framerate, ou FPS se change comme ceci :

-r FPS

Par exemple :

-r 25

Changer l'aspect ratio

-aspect aspect

Aspect étant 4:3, 16:9 ou 1.3333, 1.7777. Vous pouvez faire des aspects spéciaux si vous le voulez.

Stabiliser la vidéo

Pour réduire en post-production les tremblements de la caméra lors de la prise de vue.

Prérequis : la bibliothèque vidstab doit être intégrée à la configuration de ffmpeg.

Pour le vérifier :

$ ffmpeg
ffmpeg version n7.0.1 Copyright (c) 2000-2024 the FFmpeg developers
  built with gcc 14.1.1 (GCC) 20240522
  configuration: 
  ... --enable-libvidstab ...

ffmpeg effectue la stabilisation d'une vidéo en deux passes :

  1. une passe d'analyse de la vidéo qui produit un fichier nommé transforms.trf
  2. une passe de traitement qui exploite ce fichier et produit la vidéo stabilisée.

La bibliothèque vidstab utilise de nombreux paramètres pour analyser les tremblements. Dans une approche simplissime, on peut se reposer sur les valeurs par défaut de ceux-ci.

Supposons que la vidéo à stabiliser se nomme inputFile et qu'on souhaite encoder la version stabilisée avec le codec vidéo x264 et une qualité crf=20 et l'audio avec le codec aac avec une bande passante de 192 kbit/s. On saisira les deux lignes ci-dessous :

ffmpeg -i inputFile -vf vidstabdetect -f null transforms.trf
ffmpeg -i inputFile -vf vidstabtransform=:input=transforms.trf -c:v libx264 -crf 20 -c:a aac -ab 192k output.mp4

Si le résultat de la stabilisation ne paraît pas suffisant mais si on ne souhaite pas se confronter à la complexité du traitement, on peut se limiter à jouer sur le seul paramètre de lissage (smoothing) qui peut montrer une bonne efficacité. Sa valeur par défaut est 10. On peut tenter de l'augmenter sensiblement et visualiser l'effet.

Ainsi pour lui donner une valeur de 40, par exemple, on saisira les lignes suivantes (première ligne inchangée donc optionnelle si elle a déjà été exécutée) :

ffmpeg -i inputFile -vf vidstabdetect -f null transforms.trf
ffmpeg -i inputFile -vf vidstabtransform=smoothing=40:input=transforms.trf -c:v libx264 -crf 20 -c:a aac -ab 192k output.mp4

À noter que le processus de stabilisation applique une certaine valeur de zoom à l'image pour pouvoir la décaler sans faire apparaître de bordures noires.

Si on ne souhaite pas de ré-encodage de l'audio : remplacer
"-c:a aac -ab 192k" par "-c:a copy"

Faire des essais de conversion avec FFmpeg sur une portion de fichier

La commande ci dessous permet de faire un essai d'encodage :

ffmpeg -ss 80 -t 60 -i videoInput.mpg -s 240x180 -b 380k -ab 64k videoOutput.flv

Cette commande convertit la portion commençant à t0 = 80 secondes (option -ss) et s'étendant sur une durée de 60 secondes (option -t) du fichier d'entrée "videoInput.mpg" codé en MPEG. Le fichier produit sera encodé en Flash, la taille d'image sera de 240×180, le débit engendré par son affichage de 380 kbps et le débit audio de 64 kbps.

Exemple pour sortir un fichier AVI en qualité moyenne, à partir d'un fichier OGG Theora :

ffmpeg -ss 4518 -t 1100 -b 768k -ab 128k -i videoInput.ogv -f avi videoOutput.avi

Exemples de conversions

Convertir un fichier video pour faciliter le partage sur les clouds, réseaux sociaux et messageries

Cette conversion est utile pour réduire de façon drastique la taille des fichiers en conservant une qualité suffisante pour le regarder sur un téléphone.

ffmpeg -i FichierSource.MOV -vcodec libx264 FichierResultat.mp4

Si la source est en HD, vous pouvez réduire la définition pour réduire de façon importante la taille du fichier :

ffmpeg -i FichierSourceHD.MOV -s wvga -vcodec libx264 FichierResultat.mp4

(on peut remplacer wvga par hd720, cf. Format_d'affichage_vidéo… ou définir la taillex×y, mais attention de respecter le ratio

Convertir une vidéo en WebM (VP8+Vorbis) en deux passes

Ces deux commandes permettent d'encoder en deux passes un fichier WebM. Pour que cela fonctionne vous devez avoir minimum FFMpeg 0.6 !

avconv -i 'fichier source' -threads 0 -vcodec libvpx -b 1500k -minrate 0 -maxrate 9000k -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 1 -qmax 51 -an  -pass 1 -passlogfile pass1.fpf pass1.webm
avconv -i 'fichier source' -threads 0 -vcodec libvpx -b 1500k -minrate 0 -maxrate 9000k -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 1 -qmax 51 -acodec libvorbis -ab 192k -pass 2 -passlogfile pass1.fpf "fichier final.webm"

Convertir un fichier webm en .mp4

Le format webm est largement utilisé sur internet, en particulier pour youtube. Vous pouvez télécharger ces vidéos de différentes façons, par exemple via youtube-dl. Pour voir ces vidéos sur une télévision, il vous faudra sans doute modifier le format (il n'est généralement pas reconnu). Pour passer la vidéo webm en .mp4 :

ffmpeg -i ma-video.webm ma-video.mp4

La qualité de sortie est alors en qualité moyenne.

Vous pouvez spécifier une autre qualité de sortie avec l'option -crf. "0" donne la meilleur qualité (et le plus gros fichier), "51" donne la moins bonne qualité (et le plus petit fichier). Pour une qualité maximum (mais le fichier peut-être 10 fois plus gros que le webm initial !) :

ffmpeg -i ma-video.webm -crf 0 ma-video.mp4

Convertir une vidéo en x264 en qualité constante

Cette commande permet d'encoder un fichier vidéo en H.264 en qualité constante :

ffmpeg -threads 0 -i "fichier d'origine" -f matroska -vcodec libx264 -vpre normal -crf 20 -acodec libvorbis -ab 192k -ar 44100 -ac 2 "fichier final.mkv"

Convertir le format FLV en AVI

Cette conversion est utile si vous téléchargez des vidéos en streaming (YouTube, Google Video, framatube.org !-), etc.).

ffmpeg -i nom_du_fichier.flv -f avi nom_du_fichier.avi

Si vous voulez télécharger une vidéo depuis Youtube ou d'autres sites, voir aussi : telecharger_streaming

Convertir le format AVI en MPEG

Un exemple de commande, et d'options, pour faire un DVD (donc un format MPEG) depuis un fichier avi :

ffmpeg -i ma_video.avi -target pal-dvd -aspect 16:9 -qscale 0 mon_dvd_video.mpg

Où :

Convertir le format AVI en DV

Cette conversion est utile pour faire du montage vidéo, dans Kino par exemple.

ffmpeg -i video.avi -target pal-dv video.dv

Attention, ici le chemin n'est pas précisé. Le fichier doit se trouver dans votre dossier personnel pour que cela fonctionne.

Convertir un grand nombre de fichiers Vidéo vers le format MP3

Ce script permet d'automatiser la conversion de vidéos de plusieurs formats ( Mpeg4, Avi, Flv etc… ) vers le format MP3. Plusieurs formats de vidéos peuvent se trouver dans le même dossier au moment de la conversion.

videos_to_mp3_converter.sh
#!/bin/bash
 
echo videos to mp3 converter!
 
VIDEO_DIR="$HOME/Vidéos" # mettez le chemin vers votre dossier de vidéos
MUSIQUE_DIR="$HOME/Musique" # mettez le chemin vers votre dossier de musiques/sons
 
cd "$VIDEO_DIR" || exit 1
 
for FILE in *.*; do
	if file --mime-type "$FILE" | grep -qF video; then
		echo -e "Processing file '$FILE'"
		ffmpeg -i "${FILE}" -vn -ab 128k -ar 44100 -y "$MUSIQUE_DIR""/""${FILE%.*}.mp3" 2> /dev/null
	fi
done

Convertir tous les fichiers Windows Media Audio ( WMA ) en mp3

Dans un dossier contenant des fichiers au format wma. La boucle for lance la conversion des fichiers. Il suffira de supprimer les fichier wma une fois la conversion terminée.

for i in *.wma; do ffmpeg -i "$i" -ab 256k "${i%wma}.mp3"; done

Convertir le format AVI en MP4 (PSP)

Cette conversion est utile pour lire vos vidéos sur une console portable PSP. En ligne de commande, tapez :

ffmpeg -i video.avi -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 480x160 m4v00001.mp4 

Attention, si vous générez plusieurs fichiers vidéos, ceux-ci doivent avoir un nommage particulier pour pouvoir être lus sur votre console (m4v00001.mp4, m4v00002.mp4, m4v00003.mp4, et ainsi de suite).

Si vous encodez une vidéo qui est au format 4/3, choisissez une taille de 320×240 pour conserver les proportions.

Pour avoir une bonne qualité avec une résolution 480×272, avec un débit de 768 kbps, firmware conseillé 3.71 ou supérieur :

ffmpeg -i video_en_entrée.avi -r 29.97 -vcodec h264 -s 640x480 -aspect 16:9 -flags +loop -cmp +chrom

Convertir un mkv en gif animé

ffmpeg -i input.mkv -pix_fmt rgb24 -r 10 -s 320x240 output.gif

Résumé des options

-pix_fmt rgb24 pour 'encoder' le gif.

-r 10 pour avoir 10 images par seconde.

-s 320x240 pour avoir une résolution de sortie de 320x240.

Vous pouvez également choisir de découper une portion de vidéo avec les options -ss et -t. Par exemple :

ffmpeg -i input.mkv -ss 00:01:00.00 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.00 output.gif

Permet de convertir 10 secondes de vidéo à partir de 1 minute.

Réaliser une rotation d'une vidéo

Une vidéo pourtant prise en "paysage" se visualisait en mode "portrait". Pour réaliser la rotation, on utilise l'option filtergraph (-vf) avec transpose.
Le chiffre passé avec transpose correspond à:

chiffre filtrage appliqué désignation en anglais
0-90° (sens anti-horaire) puis symétrie verticale (par défaut)90CounterClockwise and Vertical Flip (default)
190° (sens horaire) 90Clockwise
2-90° (sens anti-horaire)90CounterCLockwise
390° (sens horaire) puis symétrie verticale90Clockwise and Vertical Flip (default)

Voici la commande pour -90°:

ffmpeg -i vidéo_originale.mp4 -vf "transpose=2" vidéo_correctement_orienté.mp4

du fait du codec audio utilisé, aac, une erreur est survenu en précisant d'ajouter -strict -2, ce qui donne:

ffmpeg -i vidéo_originale.mp4 -strict -2 -vf "transpose=2" vidéo_correctement_orienté.mp4

Effectuer une capture vidéo (screencast) de l'écran

Après avoir exécuté cette commande, appuyez sur q pour arrêter la capture.

ffmpeg -f x11grab -s 1920x1080 -r 25 -i :0.0 screencast.mp4

-f force la capture de l'écran (x11grab)
-s définit la taille de la capture, doit être inférieur ou égale à la taille réelle d'affichage!
-r définit le nombre d'images par seconde : 12.5, 25, 30 sont les plus courants, pour un screencast de tutoriel, on peut descendre à 5, mais du fait de la compression, l'économie sur la taille mémoire n'est pas proportionnel.
-i:0:0 correspond au nombre du serveur X11, peut permettre de définir un offset auquel cas, il faut réduire la taille d'autant avec l'option -s

Si une autre session est active (ou l'a été) il se peut que ça ne fonctionne pas avec -i:0:0, en effet, le premier nombre correspond au numéro de session qui s'affiche entre parenthèse dans ce que retourne la commande who et qui correspond à l'ordre d'ouverture de session (:0 pour le premier connecté, :1 pour le deuxième …). Si c'est le cas, vous pouvez utiliser la commande ci-dessous qui ajuste le numéro de session:
ffmpeg -f x11grab -s 1920x1080 -r 25 -i $(who | awk '{print substr($5,2,2)}').0 screencast.mp4

Pour une capture d'écran Hi-Fi, son et vidéo sans perte, avec Pulse Audio comme serveur de son :

ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 25 -s 1024x768 -i :0.0 -acodec flac -vcodec libx264 -preset ultrafast -qn 0 output.mkv

NB1 vous pouvez changer flac par aac ou ac3 ou mp3 etc. Testez car selon votre PC cela joue sur la qualité et fluidité globales lors de la restitution.

NB2 pour la même raison que NB1 vous pouvez aussi changer l'extension .mkv du fichier en .mp4 .avi etc.. Une fois de plus, testez et voyez.

PROBLEME DE CAPTURE ECRAN SANS L'AUDIO

Dans le terminal lancez la commande alsamixer

Appuyez sur F6 et choisissez default (normalement c'est la première ligne)

Si vous utilisez une carte son, après avoir fait F6 choisissez là afin de vérifier-ajuster le volume à son maximum. Ensuite esc et retapez dans le terminal alsamixer puis F6 pour choisir la valeur default puis esc

Ensuite toujours dans le terminal tapez pavucontrol Vérifiez que vous avez bien choisi la source de sortie que vous utilisez habituellement, déconnectez toutes les autres, micro inclus puis allez à l'onglet gestion des entrée. Vérifiez qu'il affiche un élément actif pour la source d'entrée retenue avec le volume à 100. Si non, activez le en cliquant sur l'icone d'un haut-parleur (en haut à droite juste au-dessus de la ligne concernée) et ajustez si besoin le volume à 100.

ENFIN, redémarrez votre PC car j'ai relevé que sur certains PC tout devenait fonctionnel après un redémarrage (???). Ne me demandez pas pourquoi je ne suis pas un expert hardware-software bas/moyen-niveau donc je n'aurai aucune réponse à vous donner.

Pour créer une vidéo à partir de photos

À partir des images img001.png, img002.png, img003.png:
FIXME (le code ci-dessous ne fonctionne pas sous Jammy

ffmpeg -framerate 24 -i img%03d.png output.mp4

Explication pour créer une vidéo à partir de photo (animation) (en)
Alternative 1) :

ffmpeg -framerate 1 -pattern_type glob -i 'img*.png' -c:v libx264 -pix_fmt yuv420p output.mp4
le framerate est le nombre d'images pas seconde en entrée (ips)… si vous avez 24 images et définissez 24… vous n'aurez qu'une seconde de vidéo et n'aurez pas le temps de voir les images si elles sont très différentes. Pour 10 secondes de vidéo à 24 ips, il faut donc 240 images ! Il est possible d'avoir un framerate sur les images fournies en entrée et un fps en sortie différent, ffmpeg laissera la même image plusieurs fois ou au contraire en enlèvera 2)

Découper une vidéo

Découper la vidéo entre la 24ème minute et la 50ème plus 14 secondes (-c:v copy -c:a copy permettent de conserver le même encodeur vidéo et audio)

ffmpeg -i fichieradecouper.avi -ss 00:24:00.00 -to 00:50:14.00 -c:v copy -c:a copy  extrait.avi

Extraire une séquence de 12 mn 18.25 secondes à partir de la 18ème minute

ffmpeg -i fichieradecouper.avi -ss 00:18:00.00 -t 00:12:18.25 -c:v copy -c:a copy  extrait.avi
Insérer les balises de temps -ss, -to et -t avant -i permet d'éviter de ré-encoder les parties du fichier qui ne sont pas utilisées :
ffmpeg -ss 00:8:00.00 -t 00:12:18.25 -i fichieradecouper.avi -c:v copy -c:a copy  extrait.avi
L'utilisation de -c:v copy et -c:a copy permet une découpe très rapide car il n'y a pas de ré-encodage du fichier. Cependant la découpe est moins précise car calée sur l'image clé la plus proche de la borne de temps définie par l'utilisateur. L'utilisation de la syntaxe suivante permet une découpe plus précise mais prend davantage de temps car il y a ré-encodage de la séquence extraite :
ffmpeg -ss 00:18:00.00 -t 00:12:18.25 -i fichieradecouper.mp4 fichierdecoupe.mp4

Pivoter une vidéo

Utile par exemple pour redresser une vidéo réalisée avec un téléphone mobile tourné dans le mauvais sens

ffmpeg -i VideoInitiale.MOV -vf "transpose=1" VideoRedressee.MOV

L'option transpose supporte plusieurs paramètres selon la transformation à réaliser :

Option Effet
0 Rotation à 90° sens des aiguilles d'une montre et miroir vertical (défaut)
1 Rotation à 90° sens des aiguilles d'une montre
2 Rotation à 90° sens inverse des aiguilles d'une montre
3 Rotation à 90° sens inverse des aiguilles d'une montre et miroir vertical (défaut)

Concaténer plusieurs vidéos

Abouter (enfiler plusieurs vidéos successivement en une seule plus longue) plusieurs vidéos n'est pas l'opération la plus simple. Celle-ci dépend de la nature des fichiers à concaténer.

Concaténation simple

Quelques rares formats ("file level") acceptent la concaténation simple : MPEG-1, MPEG-2 PS, DV. Dans ce cas l'opération reste assez simple à réaliser.

cat fichier1.mpg fichier2.mpg > Fichier_concatene.mpg

ou

ffmpeg -i concat:"fichier1.mpg|fichier2.mpg" -c copy Fichier_concatene.mpg
Si la qualité des fichiers s'y prête, il peut être plus simple de convertir les fichiers à concaténer en mpg, de réaliser la concaténation en mpg puis de ré-encoder le fichier concaténé dans votre format de prédilection.

Avec concat

Le filtre concat opère sur des segments synchrones de flux vidéo et audio. Tous les segments doivent avoir le même nombre de flux, qui sera également celui du fichier concaténé. Options du filtre :

Option Usage Valeur par défaut
n Nombre de segments à concaténer 2
v Nombre de flux vidéo (identique dans les sources et la destination) 1
a Nombre de flux audio (identique dans les sources et la destination) 0
unsafe Prévient l'échec de l'opération si les sources ne possèdent pas le même nombre de flux désactivé

Concaténer une ouverture, un milieu et une fin avec 2 pistes son

ffmpeg -i ouverture.avi -i milieu.avi -i fin.avi -filter_complex '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2] concat=n=3:v=1:a=2 [v] [a1] [a2]' -map '[v]' -map '[a1]' -map '[a2]' fichierfinal.avi

Autres cas et cas complexes

Voir la documentation (en anglais), notamment 3.14, 15.8 et 3.4

Méta-données

On peut visualiser quelques méta-données en exécutant :

ffmpeg -i ma_vidéo.AVI

qui va nous retourner l'appareil qui a créé la vidéo, la date de création, la durée, et des infos sur l'encodage de la vidéo et de la bande son.
Pour les méta-données, on peut aussi utiliser exiftool

Ajouter une piste son ainsi que des sous-titres

Dans cet exemple :

ffmpeg -i video.mp4 -i son_francais.aac -i st_ang.srt -i st_fr.srt -i image.jpg -map 0 -map 1 -map 2 -map 3 -map 4 -c copy -metadata comment="Paris brûle-t-il (1966) doublé 1080p x265" -metadata:s:a:0 title="Anglais (English)" -metadata:s:a:0 language=eng -metadata:s:a:1 title="Français (French)" -metadata:s:a:1 language=fra -metadata:s:v:0 title="Vidéo" -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=fra output.mp4
* -map 0 -map 1 -map 2 -map 3 -map 5 : applique le traitement aux 5 fichiers d'entrée définis avec -i
  • -c copy : copie sans réencoder
  • -metadata comment="Ceci est un commentaire 1080p x265" : modifie la métadonnée commentaire du fichier
  • -metadata title="Le titre de la vidéo" : modifie la métadonnée titre du fichier (en général s'affiche au lancement)
  • -metadata:s:a:0 title="Anglais (English)" : titre du premier flux (stream) audio (au cas d'espèces déjà dans le fichier)
  • -metadata:s:a:0 language=eng : langue du premier flux audio (anglais)
  • -metadata:s:a:1 title="Français (French)" : titre du deuxième flux audio (son_francais.aac)
  • -metadata:s:a:1 language=fra : langue du deuxième flux audio (français)
  • -metadata:s:v:0 title="Vidéo" : titre du premier flux vidéo
  • -c:s mov_text : convertit les fichiers srt en sous-titres mov_text pour mp4
  • -metadata:s:s:0 language=eng : métadonnée langue (anglais) du premier fichier de sous-titres (st_ang.srt)
  • -metadata:s:s:1 language=fra : métadonnée langue (français) du deuxième fichier de sous-titres (st_fr.srt)
  • output.mp4 : fichier de sortie

Pour consulter le manuel de FFmpeg

man ffmpeg

Pour une synthèse des options

ffmpeg -help long

Pour en savoir plus sur Internet


Contributeurs principaux : loup_74, ElGeneralMidi, Wido, Laurent Bellegarde, Isamaya (pour l'extraction des flux audio et vidéo).