Objectif

Cette section fournit des recommandations pour les paramètres d'encodage VP9 lors de l'encodage basé sur les fichiers (c'est-à-dire non publié).

Ces recommandations sont conçues pour les objectifs suivants:

  • Équilibre entre qualité et vitesse d'encodage
  • Débit minimal pour une qualité raisonnable
  • Paramètres adaptés à un large éventail de types de contenus

Ces recommandations:

  • Encodage en direct de l'adresse
  • Optimiser pour des types de contenus spécifiques (par exemple, des séquences sportives animées)
  • Configurer des paramètres pour un appareil ou un réseau spécifique

Encodage à une seule résolution

Le format VP9 est compatible avec toutes les tailles d'images, des petites résolutions jusqu'à 4K. Les tailles de cadre plus importantes permettent d'obtenir une meilleure qualité, mais elles nécessitent plus de bande passante pour la diffusion et une puissance de traitement plus importante pour le décodage.

Si vous créez une résolution unique, la résolution 640 x 480 est un choix sûr pour un large éventail d'appareils mobiles et Web. 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 envisagez de cibler plusieurs résolutions ou si la bande passante de votre réseau de diffusion varie, nous vous recommandons d'en créer plusieurs. Votre lecteur peut ensuite contrôler la résolution envoyée au spectateur.

Les encodages vidéo multirésolutions sont souvent utilisés en streaming à débit adaptatif, lorsque 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ésolutions, où chaque encodage VP9 se trouve dans un fichier distinct, et un fichier manifeste DASH fournit des informations sur chaque encodage.

Pour en savoir plus sur l'intégration de vidéos dans des formats de streaming adaptatifs, consultez la page Shaka Packager. Ce guide porte sur les paramètres d'encodage du format VP9 pour plusieurs résolutions.

Tous les paramètres ci-dessous peuvent être utilisés pour des fichiers individuels avec diverses résolutions. Ils permettent de combiner un ensemble complet de fichiers adaptés au streaming adaptatif. Notez que la version 640x480 comporte deux versions : une basse qualité (LQ) et une autre de qualité moyenne (MQ).

Débit

Le mode de qualité limitée (CQ) est recommandé lors de l'encodage de fichiers VP9 pour un affichage à la demande. Ce mode d'encodage vous permet de spécifier un débit moyen cible, tout en contrôlant la qualité maximale de la vidéo ainsi que les débits minimal et maximal.

Les débits suivants sont suggérés en tant que références pour la distribution sur le Web et sur mobile. Ces suggestions permettent de minimiser le débit pour obtenir une qualité vidéo adaptée à la diffusion sur le Web et sur mobile. Elles sont considérées comme une recommandation de débit pouvant être raisonnable.

Pour les exemples ci-dessus, il est recommandé de définir le débit minimal sur 50 % du débit cible et sur le maximum de 145 %.

Taille de l'image/Fréquence d'images Débit cible (VOD, Kbit/s) Débit min. (50%) Débit maximal (145%)
320 x 240p à 24,25,30 150 75 218
640 x 360p à 24,25,30 276 138 400
640 x 480p à 24,25,30 512 (LQ), 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1 280 x 720p à 24,25,30 1 024 512 1485
1 280 x 720p à 50,60 1 800 900 2610
1 920 x 1 080p à 24,25,30 1 800 900 2610
1 920 x 1 080p à 50,60 3 000 1 500 4350
2560x1440p à 24,25,30 6 000 3 000 8700
2560 x 1440p à 50,60 9000 4500 13050
3840 x 2160p à 24,25,30 12000 6 000 17400
3840 x 2160p à 50,60 18000 9000 26100

Figure 2a: Débits de vidéo à la demande recommandés

Dans FFmpeg, le débit est contrôlé à l'aide des commandes suivantes:

FFmpeg
-b:v <arg> Débit (par exemple, 500 k)
-minrate <arg>
-maxrate <arg>
Définit le débit minimal et maximal.

Par exemple, lors de l'encodage de 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é de la cible (CQ)
240 37
360 36
480 34 (LQ) ou 33 (MQ)
720 32
1080 31
1440 24
2160 15

Dans FFmpeg, qualité est défini avec la commande -crf. Par exemple, pour définir la qualité sur 33, vous devez utiliser la commande -crf 33.

Encodage multi-pas et vitesse d'encodage

L'encodage basé sur les fichiers vous permet de gagner en rapidité. Vous pouvez également effectuer plusieurs tickets sur le même matériau pour améliorer la qualité, et choisir des vitesses pour chacun.

Lors de l'encodage des fichiers VP9 dans FFmpeg, nous vous recommandons de définir le paramètre -quality sur good, puis de définir la vitesse du premier et du deuxième passage selon le tableau ci-dessous comportant le paramètre -speed. Cela offre un bon équilibre entre le temps d'encodage et la qualité de la sortie.

Hauteur du cadre Vitesse (premier pas) Vitesse (deuxième passage)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

Par exemple, une première chaîne d'encodage de réussite 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 une vidéo à 30 fps). Les images clés sont autonomes. Elles ne s'appuient pas sur d'autres images pour s'afficher, mais elles ont tendance à être plus grandes que les autres. Pour la lecture sur le Web et sur mobile, l'espacement généreux entre les images clés permet à l'encodeur de choisir le meilleur emplacement d'images clés afin de maximiser la qualité.

L'espacement des images clés FFmpeg est contrôlé avec la commande -g, indiquant le nombre d'images. Pour 240 images, il s'agirait de -g 240.

Recommandations pour l'utilisation de mosaïques et de fils de discussion

L'emplacement fend le cadre vidéo en plusieurs colonnes, ce qui réduit légèrement la qualité tout en accélérant les performances de l'encodage. Les tuiles doivent être d'au moins 256 pixels de large. Vous ne pouvez donc pas en utiliser autant.

En fonction du nombre de tuiles et de la résolution du frame de sortie, d'autres threads de processeur peuvent s'avérer utiles. En général, l'intérêt est limité à plusieurs threads lorsque la taille de l'image de sortie est très petite.

Les paramètres suivants sont recommandés pour l'utilisation de mosaïques et de fils de discussion à différentes résolutions.

Taille du cadre Nombre de colonnes de tuiles Nombre de fils de discussion
320 x 240 1 (-tile-columns 0) 2
640 x 360 2 (-tile-columns 1) 4
640 x 480 2 (-tile-columns 1) 4
1 280 x 720 4 (-tile-columns 2) 8
1 920 x 1 080 4 (-tile-columns 2) 8
2560x1440 8 (-tile-columns 3) 16
3 840 x 2 160 8 (-tile-columns 3) 16

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 2 -threads 4.

Lignes de commande FFmpeg

En regroupant les recommandations ci-dessus, les commandes FFmpeg suivantes peuvent être utilisées pour encoder le contenu VP9.

Notez que les commandes de passage standard et de passage secondaire sont reliées entre elles. L'argument -y de la commande de passage secondaire répond à la condition suivante : lorsque FFmpeg demande d'écraser le fichier de statistiques du premier passage avec la vidéo de sortie.

Notez également qu'une source 1080p est utilisée pour encoder les résultats de ciblage jusqu'à 1 280 x 720. Une source 4K est utilisée pour augmenter la sortie.

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 2 \
  -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 2 \
  -quality good -crf 37 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 1 -y tos-320x240.webm

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 4 \
  -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 4 \
  -quality good -crf 36 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x360.webm

640 x 480 (faible 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 4 \
  -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 4 \
  -quality good -crf 34 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-low.webm

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 4 \
  -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 4 \
  -quality good -crf 33 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-640x480-medium.webm

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 8 \
  -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 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1280x720-24-30fps.webm

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 8 \
  -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 8 \
  -quality good -crf 32 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4-y tos-1280x720-50-60fps.webm

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 8 \
  -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 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-24-30fps.webm

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 8 \
  -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 8 \
  -quality good -crf 31 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-1920x1080-50-60fps.webm

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 16 \
  -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 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-24-30fps.webm

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 16 \
  -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 16 \
  -quality good -crf 24 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-2560x1440-50-60fps.webm

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 24 \
  -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 24 \
  -quality good -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -speed 4 -y tos-3840x2160-24-30fps.webm

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 24 \
  -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 24 \
  -quality good -speed 4 -crf 15 -c:v libvpx-vp9 -c:a libopus \
  -pass 2 -y tos-3840x2160-50-60fps.webm