Outils pour utilisateurs

Outils du site


informatique:ffmpeg:convertir_une_video_en_av1

Convertir une vidéo en AV1

Source

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:
    • Les valeurs 4 à 6 donnent de bons résultats avec des temps d'encodage décents.
    • Prendre des valeurs inférieures à 4 allonge énormément le temps de compression pour un gain négligeable. Déjà entre 4 et 6 la différence est faible. Pour plus d'informations, voir cette page.
    • La chose qui peut être intéressante dans le preset 4 (si vous êtes prêt⋅e à le supporter) est qu'à partir de ce seuil, le Global motion compensation est activé, ce qui peut être un avantage dans les films où il y a beaucoup de mouvement.
    • Au delà de 7, la qualité va tout de même commencer à souffrir. Les presets élevés sont plutôt conçus pour l'encodage en temps réel.
  • -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.

Pour pouvoir lancer ça rapidement, j'en ai fait une fonction bash :

function convert-to-av1 {
  ffmpeg -i "file:$1" -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 "file:$2"
}
informatique/ffmpeg/convertir_une_video_en_av1.txt · Dernière modification : de alexis