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:
- libvorbis pour oga, ogv et ogg
- mp3, libmp3lame0 pour mp3…
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