Objetivo

En esta sección, se proporcionan recomendaciones para la configuración de codificación VP9 cuando se realiza una codificación basada en archivos (es decir, no publicada).

Estas recomendaciones están diseñadas para los siguientes objetivos:

  • Equilibrio entre calidad y velocidad de codificación
  • La tasa de bits mínima para lograr una calidad razonable
  • Configuración para adaptarse a una gran variedad de tipos de contenido

Estas recomendaciones no hacen lo siguiente:

  • Dirección para la codificación en vivo
  • Optimizar tipos de contenido específicos (p.ej., imágenes de deportes en movimiento)
  • Ajusta la configuración para requisitos específicos de red o del dispositivo

Codificación de resolución única

VP9 es compatible con una variedad de tamaños de fotogramas, desde resoluciones pequeñas hasta 4K. Los tamaños de fotogramas más grandes proporcionan una calidad más alta, pero requieren más ancho de banda para la entrega y más potencia de procesamiento a fin de decodificar.

Si creas una resolución única, el formato de 640 x 480 es seguro para una amplia variedad de dispositivos web y de dispositivos móviles. Los siguientes parámetros de la línea de comandos de FFmpeg te permiten crear un archivo de resolución única a 750 kbps.

-vf scale=640x480 -b:v 750k -quality good -speed 0 -crf 33 \
  -c:v libvpx-vp9 -c:a libopus output.webm

Codificación con varias resoluciones

Si planeas orientar varias resoluciones o si la red de entrega tiene un ancho de banda variable, se recomienda crear varias resoluciones. El reproductor podrá controlar la resolución que se envía al usuario.

Con frecuencia, se codifican los videos de varias resoluciones en la transmisión de tasa de bits adaptable, en la que el reproductor de video cambia de una resolución a otra en tiempo real según el ancho de banda del usuario. Por ejemplo, Shaka Player te permite reproducir codificaciones de varias resoluciones, en las que cada codificación VP9 está en un archivo separado y un manifiesto DASH proporciona información sobre cada codificación.

Para obtener más información sobre cómo empaquetar videos en formatos de transmisión adaptables, consulta Shaka Packager. Esta guía se centrará en la configuración de codificación de VP9 en varias resoluciones.

Todos los parámetros de configuración que se muestran a continuación se pueden usar para archivos individuales de varias resoluciones. Juntos proporcionan un conjunto integral adecuado para la transmisión adaptable. Ten en cuenta que la versión de 640 x 480 tiene dos versiones, una de baja calidad (LQ) y otra de calidad media (MQ).

Tasa de bits

Se recomienda el modo de calidad restringida (CQ) cuando se codifican archivos VP9 para la visualización a pedido. Este modo de codificación te permite especificar una tasa de bits promedio objetivo y controlar la calidad máxima del video y la tasa de bits mínima y máxima.

Las siguientes tasas de bits se sugieren como modelos de referencia para la distribución web y de dispositivos móviles. Estas sugerencias minimizan la tasa de bits que logran una calidad de video adecuada para la distribución web y de dispositivos móviles de los consumidores. Piensa en ellas como una recomendación de tasa de bits baja que puede alcanzar una calidad razonable.

Para los ejemplos anteriores, se recomienda establecer una tasa de bits mínima del 50% y una tasa máxima del 145% del objetivo.

Tamaño y velocidad de fotogramas Tasa de bits objetivo (VOD, kbps) Tasa de bits mínima (50%) Tasa de bits máxima (145%)
320 x 240p a 24,25,30 150 75 218
640 x 360p a 24,25,30 276 138 400
640 x 480p a 24,25,30 512 (LQ), 750 (MQ) 256 (LQ) 375 (MQ) 742 (LQ) 1088 (MQ)
1280 x 720 p a 24,25,30 1,024 512 1485
1280 x 720 p a 50,60 1,800 900 2610
1920 x 1080p a 24,25,30 1,800 900 2610
1920 x 1080p a 50,60 3,000 1,500 4350
2560 x 1440p a 24,25,30 6,000 3,000 8700
2560 x 1440 a 50,60 píxeles 9000 4,500 13050
3840 x 2160p a 24,25,30 12.000 6,000 17400
3840 x 2160p a 50,60 18000 9000 26100

Figura 2a: Tasas de bits de VOD recomendadas

En FFmpeg, la tasa de bits se controla con los siguientes comandos:

FFmpeg
-b:v <arg> Establece la tasa de bits (p.ej., 500,000)
-minrate <arg>
-maxrate <arg>
Establece una tasa de bits mínima y máxima.

Por ejemplo, cuando codificas contenido de 640 x 480, puedes usar la línea de comandos -b:v 750k -minrate 375 -maxrate 1088.

Calidad

En el modo CQ, también se establecerá el nivel de calidad máximo. Se recomienda usar los siguientes niveles de calidad para la codificación VP9 basada en archivos:

Altura de marco Calidad objetivo (CQ)
240 37
360 36
480 34 (LQ) o 33 (MQ)
720 32
1080 31
1440 24
2160 15

En FFmpeg, la calidad se establece con el comando -crf. Por ejemplo, para establecer la calidad en 33, debes usar el comando -crf 33.

Codificación de varios pases y velocidad de codificación

La codificación basada en archivos le brinda flexibilidad para aumentar la velocidad. También puedes realizar varios pases en el mismo material para aumentar la calidad y elegir velocidades para cada uno.

Cuando codificas archivos VP9 en FFmpeg, se recomienda establecer el parámetro -quality en good y, luego, establecer la velocidad del primer y el segundo pase de acuerdo con la tabla que aparece a continuación con el parámetro -speed. Esto proporciona un buen equilibrio entre la hora de codificación y la calidad del resultado.

Altura de marco Velocidad (primer pase) Velocidad (segundo pase)
240 4 1
360 4 1
480 4 1
720 4 2
1080 4 2
1440 4 2
2160 4 2

Por ejemplo, una string de codificación de primer pase en FFmpeg puede incluir -quality good -speed 4.

Espaciado de fotogramas clave

Se recomienda permitir hasta 240 fotogramas de video entre fotogramas clave (8 segundos para contenido de 30 FPS). Los fotogramas clave son fotogramas de video que son autosuficientes; no dependen de ningún otro fotograma para renderizarlos, pero tienden a ser más grandes que otros tipos de fotogramas. En la reproducción web y en dispositivos móviles, el espacio amplio entre los fotogramas clave permite que el codificador elija la mejor posición de fotogramas clave para maximizar la calidad.

En FFmpeg, el espaciado de fotogramas se controla con el comando -g, que indica la cantidad de fotogramas. Para 240 fotogramas, sería -g 240.

Recomendaciones de mosaicos y subprocesos

La división divide el fotograma del video en varias columnas, lo que reduce levemente la calidad, pero acelera el rendimiento de codificación. Los mosaicos deben tener al menos 256 píxeles de ancho, por lo que existe un límite para la cantidad de mosaicos que se pueden usar.

Según la cantidad de mosaicos y la resolución del marco de salida, más subprocesos de CPU pueden ser útiles. En general, hay un valor limitado para varios subprocesos cuando el tamaño del marco de salida es muy pequeño.

Se recomienda usar la siguiente configuración para mosaicos y subprocesos en varias resoluciones.

Tamaño del marco Cantidad de mosaicos y columnas Cantidad de subprocesos
320 x 240 1 (-tile-columns 0) 2
640 x 360 2 (-tile-columns 1) 4
640 × 480 2 (-tile-columns 1) 4
1280 × 720 4 (-tile-columns 2) 8
1920 × 1080 4 (-tile-columns 2) 8
2560x1440 8 (-tile-columns 3) 16
3840 × 2160 8 (-tile-columns 3) 16

En FFmpeg, la cantidad de mosaicos se controla con el parámetro -tile-columns y la cantidad de subprocesos mediante -threads. Por ejemplo, una codificación de 640 x 480 usaría la línea de comandos -tile-columns 2 -threads 4.

Líneas de comando de FFmpeg

Si unes las recomendaciones anteriores, puedes usar los siguientes comandos FFmpeg para codificar el contenido VP9.

Ten en cuenta que los comandos de primer y segundo pase están encadenados. El argumento -y del comando de segundo paso responde "Yes" cuando FFmpeg solicita reemplazar el archivo de estadísticas del primer pase por el video de salida.

Además, ten en cuenta que una fuente de 1080 p se usa para codificaciones orientadas a resultados de hasta 1280 x 720. Se usa una fuente 4K para obtener un resultado más grande.

320 x 240 (24, 25 o 30 fotogramas por segundo)

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 o 30 fotogramas por segundo)

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 (baja calidad, 24, 25 o 30 fotogramas por segundo)

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 (calidad media, 24, 25 o 30 fotogramas por segundo)

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

1280 x 720 (24, 25 o 30 fotogramas por segundo)

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

1280 x 720 (50 o 60 fotogramas por segundo)

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

1920 x 1080 (24, 25 o 30 fotogramas por segundo)

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

1920 x 1080 (50 o 60 fotogramas por segundo)

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

2560 x 1440 (24, 25 o 30 fotogramas por segundo)

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

2560 x 1440 (50 o 60 fotogramas por segundo)

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 o 30 fotogramas por segundo)

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 o 60 fotogramas por segundo)

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