Cette page sert juste de mémo pour moi pour quelques opérations de base pour ffmpeg (je n'arrête pas d'oublier les options). Notez que je ne suis pas un spécialiste de ffmpeg et qu'il y a probablement moyen de faire plus optimisé.
ffmpeg est parfois disponible sous le nom d'avconv, disponible dans le paquet libav-tools.
ffmpeg -i entree.avi sortie.mkv
-g 120. Cela permet d'insérer des images de références toutes les 120 images, ce qui permet aux lecteurs vidéo de faire un "seek" (déplacement rapide dans le flux vidéo) plus facilement.mkv en sortie. Ce conteneur supporte la vidéo, d'eventuelles multiples pistes audio et les sous-titres.ffmpeg -i input -b:v 1700k -b:a 192k output
ffmpeg -i entree.mp4 -f avi -vcodec libxvid -acodec mp3 -b:v 1700k -b:a 192k sortie.avi
ffmpeg -i entree.mp4 -f ogg -vcodec libtheora -acodec libvorbis -b:v 900k -b:a 128k sortie.ogv
-acodec copy
-vcodec copy
ffmpeg -i %1 -acodec copy -vcodec copy output.avi
ffmpeg -i entree.avi -aspect 704:300 -c copy sortie.mp4
ffmpeg -i %1 -f mp3 -acodec mp3 -b:a 196k %1.mp3
ffmpeg -i musique.mp3 musique.wav
ffmpeg -ss 00:02:58 -t 00:09:34 -i entree.webm -vcodec copy -acodec copy sortie.webm
-vf scale=640:480
-vf scale=-1:480
find -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 192k {}.mp3 \;
gifenc.sh:#!/bin/sh # Convert any video file to animated GIF palette=`mktemp --suffix=.png` filters="fps=15,scale=-1:-1" # No scaling. #filters="fps=15,scale=320:-1:flags=lanczos" # If you want to rescale video. ffmpeg -v warning -i "$1" -vf "$filters,palettegen" -y "$palette" ffmpeg -v warning -i "$1" -i $palette -lavfi "$filters [x]; [x][1:v] paletteuse" -y "$1-converted.gif" rm "$palette"
./gifenc.sh mavideo.mp4 sortira un fichier mavideo.mp4-converted.gif.AV1 est un codec vidéo moderne, libre et incroyablement performant. Il est plus efficace que H264 (le plus répandu) et même que H265:
J'ai commencé à ré-encoder une partie de ma bibliothèque de films Jellyfin afin de gagner de la place.
AV1 est lu nativement par les navigateurs, et de plus en plus de matériels savent décoder nativement l'AV1 (CPUs, smartphones, boitier GoogleTV, etc.). Pour le reste, Jellyfin me fait de toute manière du transcodage automatique pour les périphériques ne supportant pas AV1 (et le CPU de mon petit NAS sait décoder nativement l'AV1).
ffmpeg du le répertoire bin.
Voici comment je convertis mes vidéos en AV1 et l'explication des options utilisées.
ffmpeg -i entree.mkv -map 0:v -c:v libsvtav1 -preset 4 -crf 30 -tune 0 -pix_fmt yuv420p10le -g 120 -map 0:a? -c:a copy -map 0:s? -c:s copy sortie.mkv
-i entree.mkv : Nom du fichier en entrée. Vous pouvez lui donner à manger n'importe quel format vidéo (mp4, avi…)-map 0:v -c:v libsvtav1 : Pour la vidéo, utiliser l'encodeur svt-av1. Il existe plusieurs encodeurs av1 (aom-av1, rav1e…). svt-av1 est rapide (ou plus précisément: on peut ajuster sa vitesse.)-crf 30 : Taux de compression. Le CRF est la qualité visuelle souhaitée (le débit de la vidéo sera donc variable de manière à conserver une qualité visuelle constante). Une valeur plus faible veut dire meilleure qualité, mais fichier résultant plus gros. 30 me convient. Au delà de 36 la qualité commence à chuter assez rapidement.-tune 0 : Pour avoir une qualité constante, il faut un algorithme qui va mesurer cette qualité. En ajoutant cette option, cela sélectionne un algorithme qui est plus proche de la manière dont se comporte la vision humaine.-preset 4 : Le codec svt-av1 possède des tonnes de paramètres, et ce réglage "preset" permet de prendre des "raccourcis de calcul" afin de compresser plus vite (au détriment de la taille du fichier final). Ce réglage n'influe pas beaucoup sur la qualité de l'image, mais surtout sur la taille finale du fichier et le temps d'encodage. Plus la valeur est basse, plus le fichier obtenu est petit mais plus le temps de compression est important. Prenez la valeur la plus basse tolérable pour vous (en fonction de la puissance de votre CPU et du temps que vous êtes prêt⋅e à accorder à l'encodage). Notez que:-pix_fmt yuv420p10le : Par défaut les couleurs/luminosités sont encodées sur 8 bits. Cette option force l'encodage en 10 bits, ce qui aide à éliminer substantiellement les effets de "banding" dans les scènes sombres sans impacter notablement la taille du fichier.-g 120 : Ajoute une image de référence (I-Frame) toutes les 120 images. À 24 images par seconde, c'est toutes les 5 secondes. Les images de référence permettent aux lecteurs de faire plus facilement un "seek", c'est à dire de raccrocher immédiatement au flux vidéo quand vous déplacez le curseur de lecture. (Par défaut, ffmpeg met 9999, ce qui rend les vidéos très difficiles à naviguer.)-map 0:a? -c:a copy : Pour l'audio, copier toutes les pistes audio tel quel (sans ré-encoder). Vous pouvez bien entendu changer cela par exemple en utilisant l'excellent codec Opus (qui est à l'audio ce que AV1 est la vidéo).-map 0:s? -c:s copy : Copie également toutes les pistes de sous-titres. Le '?' sert à ne pas faire d'erreur s'il n'y aucune piste de sous-titres (idem pour l'audio).sortie.mkv : Je vous conseille les conteneurs mkv car ils sont capables de stocker le flux vidéo, mais aussi plusieurs flux audio et les sous-titres. Voici quelques exemples concrets de recompression (temps d'encodage sur un AMD Ryzen 7 5800H, crf 30, preset 6):
| Vidéo | Format | Vidéo d'origine | Encodé en AV1 | Gain (valeur faible=mieux) | Durée d'encodage |
|---|---|---|---|---|---|
| Dune (partie 1) (2021).mkv | 1280x536, 24fps, 2h35 | H264: 9,7 Go (9 666 174 331) | 2,6 Go (2 630 743 289) | 27,2% de l'original | 1h27 |
| Les Choristes (2004).mkv | 1920x1080, 24fps, 1h36 | H264 : 2,5 Go (2 501 588 213) | 1,2 Go (1 251 492 239) | 50% de l'original | 2h2 |
| Game of Thrones S02E01.mkv | 1920x1080, 24fps, 52 min. | H264 : 1,7 Go (1 739 024 679) | 762 Mo (761 769 394) | 43,8% de l'original | 1h8 |
| Dexter S03E01.avi | 624x352, 25fps, 54 min. | MPEG-4 : 586 Mo (586 187 670) | 215 Mo (215 725 098) | 36,8% de l'original | 25 min. |
| Le Voyage de Chihiro (2001).mkv | 1920x1036, 24fps, 2h04 | H264 : 3,6 Go (3 641 306 101) | 2,9 Go (2 903 465 871) | 79,7% de l'original | 3h11 |
| Destination finale: Bloodlines (2025).mkv | 1920x800, 24fps, 1h49 | H264 : 6,5 Go (6 505 703 740) | 1,9 Go (1 930 034 167) | 29,6% de l'original | (non noté) |
Si je me base sur ces quelques exemples, grâce à AV1 je peux virtuellement multiplier par deux le nombre de films que je peux stocker sur mon NAS. Au bas mot.
file:ffmpeg -i "$1" ...
mais
ffmpeg -i "file:$1" ...
(et même chose pour le fichier en sortie.)
:, ffmpeg essaiera d'interpréter ce qu'il y a avant les : comme un protocole, et ça tombera en erreur.Plus d'informations :