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

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

L

E monde du multimédia est assez complexe, avec ses containeurs et ses formats image et son. ffmpeg est un programme en ligne de commande qui permet les conversions.

Pour quelque raison, ffmpeg n'est pas inclus dans les versions Debian 8 Jessie ni Debian 9 Stretch. Il est possible de l'installer en utilisant le dépôt deb-multimedia.

Page en cours d'écriture. 2014.10.03

Prise en main

La forme la plus simple d'utilisation est

ffmpeg -i fichier_a_transcoder.flv fichier_produit.mp4

-i précède fichier d'origine ; la seule chaîne qui n'est pas précédée d'un mot-clé "-xxx" est le fichier de sortie. Les paramètres destinés au fichier d'entrée doit figurer avant -i, ceux au fichier de sortie doivent figurer avant son nom.

ffmpeg -ss 1 -i p1100547.mov -vf "transpose=1" test.webm

attend 1 seconde avant de commencer le transcodage du fichier p1100547.mov en format "webm", avec une rotation d'un quart de tour (sens horaire ; "transpose=2" pour le sens trigonométrique). Le format webm est directement utilisable en html5 avec la balise <video>.

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

Attention: beaucoup de «formats» ne sont que des conteneurs, une façon d'organiser le son, un ou plusieurs flux d'images, 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 pas souvent les encodages.

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 n'en gère pas la proportion (ratio).

-aspect 16:9 précise un ratio largeur/hauteur, en général 4:3, 16:9 ; peut être codé 1.7777

Miroirs et rotations

Temporalité

-r fps (image par seconde)

Pour choisir une image par seconde:

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

considère les 25 fps du fichier origine.avi, et en affiche une par seconde dans le fichier de sortie. -r est utilisé deux fois: la première avant le fichier d'origine 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 d'origine 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 ne fait que les n premières secondes (accepte la forme 00:03:45)
-ss n laisse tomber les n premières secondes (accepte la forme 00:03:45). Si avant -i, skippe directement les n premières secondes. Après -i origine.ext, les n premières secondes sont traitées mais pas enregistrées (plus sûr)

Pour couper les parties avant la seconde 443 et après la seconde 512:

ffmpeg -i Fichier.mov -vf trim=443:512

Codecs et bitrate

L'extension permet normalement ffmpeg à choisir l'encodage:

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

Pour forcer un encodage mp3 à 192kbps (kilobit par seconde):

ffmpeg -i original.wav -ab 192 sortie.mp3

Pour supprimer le son, utiliser -an

ffmpeg -i original.avi -an -b 1200 sortie.mpg

Pour réduire une vidéo à un fichier son (oga pour ogg-audio):

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

Pour forcer l'encodage avi en mp4 à 64kbps0 (audio) et 1200 (vidéo):

ffmpeg -i original.avi -ab 64 -b 1200 sortie.mpg