Comprendre le bitrate et les options d'encodage avec ffmpeg
Il est important de comprendre comment les bons paramètres ffmpeg
influencent la qualité de la vidéo. En général, plus le bitrate est élevé, meilleure sera la qualité. À bitrate égal, une vidéo encodée en H.265 sera de meilleure qualité que son équivalent en H.264.
Dans cette note, on va s’intéresser à ce paramètre avec l’encodeur x264
, ainsi qu’aux différentes options pour bien manipuler la compression vidéo avec ce codec.
C’est quoi le bitrate ?
Le bitrate, c’est la quantité de données par seconde. Plus il est élevé, meilleure est la qualité… mais aussi plus grande sera la taille du fichier. Par exemple, 1 mégaoctet par seconde correspond à un bitrate de 8 mégabits par seconde (8 Mbps). Une vidéo YouTube en 1080p tourne autour de 8 Mbps, un DVD autour de 6 Mbps.
Choisir le bon bitrate, c’est choisir le bon équilibre entre qualité et poids du fichier.
Choisir le bon bitrate
L’appareil cible a un rôle à jouer : smartphone, TV, web, etc. On distingue deux types de bitrate :
- CBR (Constant Bitrate) : débit constant, utile pour les lives ou les diffusions par satellite.
- VBR (Variable Bitrate) : s’adapte à la complexité de la scène, meilleure qualité à taille équivalente.
VBR est recommandé pour la plupart des usages car il permet une meilleure gestion de la qualité selon les moments clés de la vidéo.
Par défaut, ffmpeg
utilise le CRF (voir plus bas). Si vous ne spécifiez rien, vous aurez :
-crf 23
preset medium
profile high
Encoder en CBR
ffmpeg -i video.mp4 -c:v libx264 -b:v 1500k -minrate 1000k -maxrate 2000k -bufsize 60k output.mp4
Le paramètre -bufsize
est souvent : bitrate / fps
. Le CBR n'est jamais totalement constant avec x264
, mais on s'en approche.
Le CRF
ffmpeg -i video.mp4 -c:v libx264 -crf 23 output.mp4
Le CRF (Constant Rate Factor) permet d’équilibrer qualité et taille automatiquement. Voici quelques repères :
crf 0
→ sans perte, mais fichiers énormescrf 18-23
→ excellent équilibrecrf > 23
→ plus de compression, moins de qualité
Un changement de ±6 double ou divise la taille du fichier.
Les presets
Un preset influe sur la vitesse d'encodage et la compression :
veryslow
→ encodage lent, fichier plus petitfast
→ encodage rapide, fichier plus gros
Choisissez selon votre priorité : temps ou taille.
Les profiles
Les profils assurent la compatibilité :
baseline
→ anciens appareils, fonctions limitéesmain
,high
→ plus de fonctionnalités, meilleure qualité
Le Tune
Un tune
adapte l’encodage au contenu :
film
,animation
,stillimage
,zerolatency
...
Ces paramètres activent des filtres anti-blocs pour améliorer la qualité visuelle.
Encodage en Two-Pass
Si vous visez une taille de fichier précise, utilisez le two-pass :
Exemple de calcul :
Fichier de 200 Mo pour une vidéo de 300 secondes :
(200 × 8192) / 300 ≈ 5461 kbps
Exemple de commandes :
1ère passe :
ffmpeg -i video.mp4 -pix_fmt yuv420p -vsync 1 -sn -r 25 -threads 0 -c:v libx264 \
-b:v 5461k -bufsize 218k -maxrate 6000k -minrate 4000k -an -pass 1 -preset slow \
-profile:v high -g 48 -tune film -x264opts no-scenecut -f mp4 -y /dev/null
2ème passe :
ffmpeg -i video.mp4 -pix_fmt yuv420p -vsync 1 -sn -r 25 -threads 0 -c:v libx264 \
-b:v 5461k -bufsize 218k -maxrate 6000k -minrate 4000k -an -pass 2 -preset slow \
-profile:v high -g 48 -tune film -x264opts no-scenecut -f mp4 -y output.mp4
Ne changez aucune valeur entre les deux passes.
Et voilà ! Avec ces bases, vous êtes prêt à dompter le bitrate et encodages vidéo avec ffmpeg
.
- ← Précédent
Conversion vidéo en lot avec ffmpeg - Suivant →
Configurer un serveur MQTT avec Raspberry Pi