Paramètres recommandés pour la VOD
Objectif
Cette section fournit des recommandations concernant les paramètres d'encodage VP9 lors de l'encodage basé sur des fichiers (c'est-à-dire non en direct).
Ces recommandations sont conçues pour atteindre les objectifs suivants :
- Équilibre entre qualité et vitesse d'encodage
- Débit minimal pour obtenir une qualité raisonnable
- Paramètres permettant de s'adapter à un large éventail de types de contenus
Ces recommandations ne :
- Aborder l'encodage en direct
- Optimiser pour des types de contenus spécifiques (par exemple, des séquences sportives à mouvements rapides)
- Configurer les paramètres pour répondre aux exigences spécifiques d'un appareil ou d'un réseau
Encodage à résolution unique
VP9 est compatible avec différentes tailles de frame, des résolutions les plus petites à la 4K. Les tailles de frame plus importantes offrent une meilleure qualité, mais nécessitent plus de bande passante pour la diffusion et plus de puissance de traitement pour le décodage.
Si vous créez une résolution unique, 640 x 480 est un bon choix pour une large gamme d'appareils Web et mobiles. Les paramètres de ligne de commande FFmpeg suivants vous permettent de créer un fichier à résolution unique à 750 kbit/s.
-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
-c:v libvpx-vp9 -c:a libopus output.webm
Encodage multirésolution
Si vous prévoyez de cibler plusieurs résolutions ou si votre réseau de diffusion dispose d'une bande passante variable, nous vous recommandons de créer plusieurs résolutions. Votre lecteur peut alors contrôler la résolution envoyée au spectateur.
Les encodages vidéo multirésolution sont souvent utilisés dans le streaming à débit binaire adaptatif, où le lecteur vidéo passe d'une résolution à l'autre en temps réel en fonction de la bande passante de l'utilisateur. Par exemple, Shaka Player vous permet de lire des encodages multirésolution, où chaque encodage VP9 se trouve dans un fichier distinct et où un fichier manifeste DASH fournit des informations sur chaque encodage.
Pour en savoir plus sur l'empaquetage de vidéos dans des formats de streaming adaptatif, consultez Shaka Packager. Ce guide se concentre sur les paramètres d'encodage pour VP9 dans plusieurs résolutions.
Paramètres recommandés
Tous les paramètres ci-dessous peuvent être utilisés pour des fichiers individuels à différentes résolutions. Combinés, ils fournissent un ensemble complet adapté au streaming adaptatif. Notez que la version 640x480 existe en deux qualités : basse (LQ) et moyenne (MQ).
Débit
Le mode Qualité contrainte (CQ) est recommandé pour encoder des fichiers VP9 destinés à être visionnés à la demande. Ce mode d'encodage vous permet de spécifier un débit moyen cible, tout en contrôlant à la fois la qualité maximale de la vidéo ainsi que le débit minimal et maximal.
Les débits suivants sont suggérés comme référence pour la distribution sur le Web et sur mobile. Ces suggestions minimisent le débit tout en offrant une qualité vidéo adaptée à la distribution sur le Web et les appareils mobiles grand public. Considérez-les comme des recommandations de débit "faible" qui permettent tout de même d'obtenir une qualité raisonnable.
Pour les exemples ci-dessus, il est recommandé de définir le débit minimal à 50 % du débit cible et le débit maximal à 145 % du débit cible.
Taille/Fréquence d'images | Débit cible (VOD, kbit/s) | Débit minimal (50 %) | Débit maximal (145 %) |
---|---|---|---|
320 x 240 p à 24, 25 ou 30 FPS | 150 | 75 | 218 |
640 x 360p à 24, 25 ou 30 fps | 276 | 138 | 400 |
640 x 480p à 24,25,30 fps | 512 (LQ), 750 (MQ) | 256 (LQ) 375 (MQ) | 742 (LQ) 1088 (MQ) |
1 280 x 720p à 24, 25 ou 30 fps | 1024 | 512 | 1485 |
1 280 x 720p à 50,60 | 1800 | 900 | 2610 |
1 920 x 1 080 p à 24, 25 ou 30 fps | 1800 | 900 | 2610 |
1 920 x 1 080p à 50 ou 60 Hz | 3000 | 1500 | 4350 |
2 560 x 1 440 p à 24, 25 ou 30 FPS | 6000 | 3000 | 8700 |
2 560 x 1 440 p à 50 ou 60 ips | 9000 | 4500 | 13050 |
3 840 x 2 160 p à 24, 25 ou 30 FPS | 12 000 | 6000 | 17400 |
3 840 x 2 160 p à 50,60 | 18000 | 9000 | 26100 |
Figure 2a : Débits recommandés pour la VOD
Dans FFmpeg, le débit binaire est contrôlé par les commandes suivantes :
FFmpeg | |
---|---|
-b:v <arg> |
Définit le débit (par exemple, 500 kbit/s) |
-minrate <arg> -maxrate <arg> |
Définit le débit minimal et maximal. |
Par exemple, lorsque vous encodez du contenu 640x480, vous pouvez utiliser la ligne de commande -b:v 750k -minrate 375 -maxrate 1088
.
Qualité
En mode CQ, vous définissez également le niveau de qualité maximal. Les niveaux de qualité suivants sont recommandés pour l'encodage VP9 basé sur des fichiers :
Hauteur du cadre | Qualité cible (CQ) |
---|---|
240 | 37 |
360 | 36 |
480 | 34 (LQ) ou 33 (MQ) |
720 | 32 |
1080 | 31 |
1440 | 24 |
2160 | 15 |
Dans FFmpeg, la qualité est définie avec la commande -crf
. Par exemple, pour définir la qualité sur 33, vous devez utiliser la commande -crf 33
.
Encodage multipasse et vitesse d'encodage
L'encodage basé sur des fichiers vous offre une grande flexibilité en termes de vitesse. Vous pouvez également effectuer plusieurs passes sur le même matériau pour améliorer la qualité et choisir la vitesse de chacune d'elles.
Lorsque vous encodez des fichiers VP9 dans FFmpeg, il est recommandé de définir le paramètre -quality
sur good
, puis de définir la vitesse de la première et de la deuxième passe en fonction du tableau ci-dessous avec le paramètre -speed
. Cela permet d'obtenir un bon équilibre entre le temps d'encodage et la qualité du résultat.
Hauteur du cadre | Vitesse (premier passage) | Vitesse (deuxième passe) |
---|---|---|
240 | 4 | 1 |
360 | 4 | 1 |
480 | 4 | 1 |
720 | 4 | 2 |
1080 | 4 | 2 |
1440 | 4 | 2 |
2160 | 4 | 2 |
Par exemple, une chaîne d'encodage de première passe dans FFmpeg peut inclure -quality good -speed 4
.
Espacement des images clés
Nous vous recommandons d'autoriser jusqu'à 240 images vidéo entre les images clés (8 secondes pour un contenu à 30 fps). Les images clés sont des images vidéo autonomes. Elles ne dépendent d'aucune autre image pour le rendu, mais elles ont tendance à être plus volumineuses que les autres types d'images. Pour la lecture sur le Web et sur mobile, un espacement généreux entre les images clés permet à l'encodeur de choisir le meilleur emplacement pour les images clés afin de maximiser la qualité.
Dans FFmpeg, l'espacement des images clés est contrôlé par la commande -g
, qui indique le nombre d'images. Pour 240 images, cela correspond à -g 240
.
Recommandations concernant le tiling et le threading
Le tiling divise le frame vidéo en plusieurs colonnes, ce qui réduit légèrement la qualité, mais accélère les performances d'encodage. Les tuiles doivent avoir une largeur d'au moins 256 pixels. Le nombre de tuiles utilisables est donc limité.
En fonction du nombre de tuiles et de la résolution du frame de sortie, il peut être utile d'utiliser davantage de threads de processeur. En règle générale, les threads multiples ont une valeur limitée lorsque la taille du frame de sortie est très petite.
Les paramètres suivants sont recommandés pour le tiling et le threading à différentes résolutions.
Taille de la trame | Nombre de colonnes de tuiles | Nombre de threads |
---|---|---|
320 x 240 | 1 (-tile-columns 0 ) |
1 |
640 x 360 | 2 (-tile-columns 1 ) |
2 |
640 x 480 | 2 (-tile-columns 1 ) |
2 |
1 280 x 720 | 4 (-tile-columns 2 ) |
4 |
1 920 x 1 080 | 4 (-tile-columns 2 ) |
4 |
2560x1440 | 8 (-tile-columns 3 ) |
8 |
3 840 x 2 160 | 8 (-tile-columns 3 ) |
8 |
Dans FFmpeg, le nombre de tuiles est contrôlé par le paramètre -tile-columns
et le nombre de threads par -threads
. Par exemple, un encodage 640x480 utiliserait la ligne de commande -tile-columns 1 -threads 2
.
Lignes de commande FFmpeg
En combinant les recommandations ci-dessus, les commandes FFmpeg suivantes peuvent être utilisées pour encoder du contenu VP9.
Notez que les commandes de première et de deuxième passe sont enchaînées. L'argument -y
de la commande de deuxième passe répond "Oui" lorsque FFmpeg demande à écraser le fichier de statistiques de la première passe avec la vidéo de sortie.
Notez également qu'une source 1080p est utilisée pour les encodages ciblant une sortie jusqu'à 1 280 x 720. Une source 4K est utilisée pour les sorties plus grandes.
320 x 240 (24, 25 ou 30 images par seconde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \ -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 1 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 1 -speed 4 tos-320x240.webm && \ ffmpeg -i tears_of_steel_1080p.webm -vf scale=320x240 -b:v 150k \ -minrate 75k -maxrate 218k -tile-columns 0 -g 240 -threads 1 \ -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \ -pass 2 -speed 1 -y tos-320x240.webm
- Fichier d'entrée : tears_of_steel_1080p.webm (1 920 x 800, 544,88 Mo)
- Fichier de sortie : tos-320x240.webm (320x240, 21,73 Mo)
640 x 360 (24, 25 ou 30 images par seconde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
-minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x360 -b:v 276k \
-minrate 138k -maxrate 400k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x360.webm
- Fichier d'entrée : tears_of_steel_1080p.webm (1 920 x 800, 544,88 Mo)
- Fichier de sortie : tos-640x360.webm (640 x 360, 31,53 Mo)
640 x 480 (basse qualité, 24, 25 ou 30 images par seconde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360-low.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 512k \
-minrate 256k -maxrate 742k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-low.webm
- Fichier d'entrée : tears_of_steel_1080p.webm (1 920 x 800, 544,88 Mo)
- Fichier de sortie : tos-640x480-low.webm (640 x 480, 51,18 Mo)
640 x 480 (qualité moyenne, 24, 25 ou 30 images par seconde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
-minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-640x360-medium.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 -b:v 750k \
-minrate 375k -maxrate 1088k -tile-columns 1 -g 240 -threads 2 \
-quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 1 -y tos-640x480-medium.webm
- Fichier d'entrée : tears_of_steel_1080p.webm (1 920 x 800, 544,88 Mo)
- Fichier de sortie : tos-640x480-medium.webm (640x480, 69,27 Mo)
1 280 x 720 (24, 25 ou 30 images par seconde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
-minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1280x720-24-30fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1024k \
-minrate 512k -maxrate 1485k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1280x720-24-30fps.webm
- Fichier d'entrée : tears_of_steel_1080p.webm (1 920 x 800, 544,88 Mo)
- Fichier de sortie : tos-1280x720-24-30fps.webm (1 280 x 720, 98,2 Mo)
1 280 x 720 (50 ou 60 images par seconde)
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1280x720-50-60fps.webm && \
ffmpeg -i tears_of_steel_1080p.webm -vf scale=1280x720 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2-y tos-1280x720-50-60fps.webm
- Fichier d'entrée : tears_of_steel_1080p.webm (1 920 x 800, 544,88 Mo)
- Fichier de sortie : tos-1280x720-50-60fps.webm (1 280 x 720, 157,1 Mo)
1 920 x 1 080 (24, 25 ou 30 images par seconde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1920x1080-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 1800k \
-minrate 900k -maxrate 2610k -tile-columns 3 -g 240 -threads 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-24-30fps.webm
- Fichier d'entrée : tearsofsteel_4k.mov (3840x1714, 6,76 Go)
- Fichier de sortie : tos-1920x1080-24-30fps.webm (1 920 x 1 080, 151,51 Mo)
1 920 x 1 080 (50 ou 60 images par seconde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 2 -g 240 -threads 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-1920x1080-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=1920x1080 -b:v 3000k \
-minrate 1500k -maxrate 4350k -tile-columns 3 -g 240 -threads 4 \
-quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-1920x1080-50-60fps.webm
- Fichier d'entrée : tearsofsteel_4k.mov (3840x1714, 6,76 Go)
- Fichier de sortie : tos-1920x1080-50-60fps.webm (1 920 x 1 080, 238,18 Mo)
2 560 x 1 440 (24, 25 ou 30 images par seconde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
-minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-2560x1440-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 6000k \
-minrate 3000k -maxrate 8700k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-24-30fps.webm
- Fichier d'entrée : tearsofsteel_4k.mov (3840x1714, 6,76 Go)
- Fichier de sortie : tos-2560x1440-24-30fps.webm 2 560 x 1 440, 533,54 Mo)
2 560 x 1 440 (50 ou 60 images par seconde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-2560x1440-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=2560x1440 -b:v 9000k \
-minrate 4500k -maxrate 13050k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-2560x1440-50-60fps.webm
- Fichier d'entrée : tearsofsteel_4k.mov (3840x1714, 6,76 Go)
- Fichier de sortie : tos-2560x1440-50-60fps.webm 2 560 x 1 440, 664,04 Mo)
3 840 x 2 160 (24, 25 ou 30 images par seconde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
-minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-3840x2160-24-30fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 12000k \
-minrate 6000k -maxrate 17400k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -speed 2 -y tos-3840x2160-24-30fps.webm
- Fichier d'entrée : tearsofsteel_4k.mov (3840x1714, 6,76 Go)
- Fichier de sortie : tos-3840x2160-24-30fps.webm 3 840 x 2 160, 1,03 Go)
3 840 x 2 160 (50 ou 60 images par seconde)
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
-quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 1 -speed 4 tos-3840x2160-50-60fps.webm && \
ffmpeg -i tearsofsteel_4k.mov -vf scale=3840x2160 -b:v 18000k \
-minrate 9000k -maxrate 26100k -tile-columns 3 -g 240 -threads 8 \
-quality good -speed 2 -crf 15 -c:v libvpx-vp9 -c:a libopus \
-pass 2 -y tos-3840x2160-50-60fps.webm
- Fichier d'entrée : tearsofsteel_4k.mov (3840x1714, 6,76 Go)
- Fichier de sortie : tos-3840x2160-50-60fps.webm 3840x2160, 1,56 Go)