ffmpeg, encodeur-décodeur vidéo en ligne de commande

LE monde des fichiers «multimédia» est assez complexe, avec ses containeurs et ses formats d'image, de son, de sous-titres… ffmpeg est un programme en ligne de commande qui en permet les conversions.

Le logiciel ffmpeg n'est pas inclus dans les dépôts de Debian parce que toutes ses composantes ne sont pas libres. Il figure sur le dépôt deb-multimedia, à activer sur votre système, dépôt qui contient également l'installation de la librairie libmp3lame0, pour le codec mp3.

Cette page explique le minimum à connaître sur un système GNU/Linux (ligne de commande, système de fichiers…).

2014.10.03 – rév. 2019.03.17

Informations

Prise en main

La forme la plus simple d'utilisation est

ffmpeg -i fichier_original.flv fichier_produit.mp4

L'option -i précède le fichier original ; la chaîne non précédée d'une option est le fichier de sortie. Les options et paramètres destinés au fichier d'entrée doivent figurer avant -i, les paramètres à appliquer au fichier de sortie doivent figurer avant son nom:

ffmpeg -ss 3.14 -i zouc.mov -vf "transpose=1" zouc.webm

passe (-ss) 3,14 secondes du premier fichier avant de commencer le transcodage en format webm, avec une rotation d'un quart de tour (voir Miroirs et rotations). Le format webm est directement utilisable en HTML5 avec la balise <video> :

<video src="zouc.webm" width="300" height="400" controls="true" type="video/webm; codecs='vp8,vorbis'">
</video>

Note: beaucoup de «formats» ne sont que des conteneurs, une façon d'organiser l'image, un ou plusieurs flux audio, des sous-titres… sans préjuger de l'encodage du son (wav, mp3, Vorbis…) ni de l'image (vp8, H.264, Theora, MPEG-1…): une extension (MP4, AVI, MOV…) n'implique donc pas nécessairement les types d'encodages utilisés.

ffmpeg -formats liste les formats connus.

-target x spécifie le type de média à créer en fonction de son utilisation: vcd, svcd, dvd, dv ou dv50, qui peuvent être préfixé de pal-, ntsc- ou film-. Les formats seront alors alignés sur les standards.

Il peut y avoir plusieurs fichiers en entrée, par exemple pour mixer son, image et sous-titre :

ffmpeg -i audio.mp3 -i video.mpg -i sstitres.ass sortie.mp4

Pour extraire chaque image d'une (petite) vidéo:

ffmpeg -i video.flv image%d.jpg

Assurez-vous de disposer de suffisamment de place sur votre disque si vous appliquez cette commande sur un gros fichier, la compression vidéo étant en général bien plus efficace que la compression de chaque image produite. %d est nécessaire pour la numérotation des photos.

Codecs et bitrates

Codecs

L'extension utilisée permet en général à ffmpeg de choisir automatiquement l'encodage (ici, libvorbis):

ffmpeg -i original.wav sortie.ogg

Mais les conteneurs admettent parfois plusieurs encodages et il peut être nécessaire de le(s) spécifier:

ffmpeg -i original.mkv -acodec ac3 sortie.mpg

ffmpeg -codecs liste les codecs utilisables. Parmi ceux-ci:

Pour réduire une vidéo à un fichier son:

ffmpeg -i original.mp4 sortie.mp3

Pour forcer le codec:

ffmpeg -i original.mp4 -acodec libvorbis sortie.oga

Pour supprimer le son, utiliser -an

ffmpeg -i original.avi -an sortie.mpg

-vn peut être utilisé pour supprimer l'image d'une vidéo, mais autant produire alors un fichier audio.

Débits audio et vidéo (bitrate): -b:a et -b:v

-b:a n permet de préciser le débit audio (en bps, 128k par défaut):

ffmpeg -i original.wav -b:a 64k sortie.mp3

-b:v n permet de préciser le débit audio, également exprimé en kbps. Cela s'applique au ficher de sortie. Pour forcer l'encodage en mpg à 64kbps (audio) et 1000kbps (vidéo):

ffmpeg -i original.avi -b:a 64k -b:v 1m sortie.mpg

Il ne sert à rien de tenter d'augmenter cette précision si le fichier de départ est de mauvaise qualité.

Note: -b:a et -b:v (en bps : préciser k et M) remplacent -ab et -b, en désuétude et donc peut-être prochainement supprimés.

Dimensions et sens

Dimensions et proportion

-s 400x300 précise la largeur et la hauteur de l'image, mais en fait, la hauteur dépend de la largeur, ce paramètre ne modifiant pas la proportion (ratio).

-aspect 16:9 ou -aspect 16:9 précise un ratio largeur/hauteur; le plus courant étant 4:3

Miroirs et rotations

-vf définit les filtres vidéos (video-filters)

-vf vflip miroir vertical de l'image
-vf hflip miroir horizontal de l'image

-vf "transpose=1" rotation de l'image d'un quart de tour, sens horaire
-vf "transpose=2" rotation de l'image d'un quart de tour, sens trigonométrique
-vf "transpose=3" rotation de l'image d'un quart de tour, sens horaire et miroir vertical

Temporalité

Pour choisir une image par seconde:

ffmpeg -r 25 -i original.avi -r 1 sortie.avi

considère les 25 fps du fichier original.avi, et en affiche une par seconde dans le fichier de sortie. -r est utilisé deux fois: la première avant le fichier original et l'autre avant le fichier de sortie.

-r 50 -i original.mp4 -r 25 sortie.mp4

double la vitesse de l'image: à 50 images du fichier original correspondent 25 dans le fichier de sortie. Le son ne change pas: les images vont deux fois plus vite que le son.

-fs n s'arrête lorsque le fichier de sortie atteint n octets
-t n s'arrête après n secondes ; accepte la forme 00:03:45

-ss n laisse tomber les n premières secondes (accepte la forme 00:03:45).
-sseof n compte le nombre de secondes en commençant par la fin du fichier

-ss et -sseof peuvent être placés avant -i, les n premières secondes seront simplement ignorées. Après -i original.ext, les n premières secondes sont traitées mais non enregistrées, ce qui apporte plus de sécurité dans le traitement.

ffmpeg -i original.mov -vf trim=443:512 sortie.mov coupe ce qui précède la seconde 443 et ce qui excède la seconde 512