Configuración recomendada para el VOD
Objetivo
En esta sección, se proporcionan recomendaciones para la configuración de codificación de VP9 cuando se realiza la codificación basada en archivos (es decir, no en vivo).
Estas recomendaciones se diseñaron para los siguientes objetivos:
- Un equilibrio entre la calidad y la velocidad de codificación
- La tasa de bits mínima para lograr una calidad razonable
- Configuración para adaptarse a una amplia variedad de tipos de contenido
Estas recomendaciones no hacen lo siguiente:
- Dirección de codificación en vivo
- Optimizar para tipos de contenido específicos (p.ej., videos de deportes con mucho movimiento)
- Configura los parámetros para cumplir con los requisitos específicos de un dispositivo o una red
Codificación de resolución única
VP9 admite una variedad de tamaños de fotogramas, desde resoluciones pequeñas hasta 4K. Los tamaños de fotogramas más grandes ofrecen mayor calidad, pero requieren más ancho de banda para la entrega y más potencia de procesamiento para la decodificación.
Si creas una sola resolución, 640 x 480 es una apuesta segura para una amplia variedad de dispositivos web y móviles. Los siguientes parámetros de 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 de múltiples resoluciones
Si planeas segmentar tu contenido para varias resoluciones o si tu red de entrega tiene un ancho de banda variable, te recomendamos que crees varias resoluciones. Luego, tu reproductor puede controlar qué resolución se envía al usuario.
Las codificaciones de video en varias resoluciones se suelen usar en la transmisión con tasa de bits adaptable, en la que el reproductor de video cambia de resolución 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 de VP9 se encuentra en un archivo independiente y un manifiesto de DASH proporciona información sobre cada codificación.
Para obtener más información sobre cómo empaquetar videos en formatos de transmisión adaptable, consulta Shaka Packager. En esta guía, nos centraremos en la configuración de codificación de VP9 en múltiples resoluciones.
Configuración recomendada
Todos los parámetros de configuración que se indican a continuación se pueden usar para archivos individuales en varias resoluciones. En conjunto, 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, así como la tasa de bits mínima y máxima.
Las siguientes tasas de bits se sugieren como valores de referencia para la distribución en la Web y dispositivos móviles. Estas sugerencias minimizan la tasa de bits, lo que permite lograr una calidad de video adecuada para la distribución web y móvil para el consumidor. Piénsalas como una recomendación de tasa de bits "baja" que aún puede lograr una calidad razonable.
En los ejemplos anteriores, se recomienda que la tasa de bits mínima se establezca en el 50% de la tasa de bits objetivo y la máxima en el 145% de la tasa objetivo.
Tamaño y velocidad de fotogramas | Tasa de bits objetivo (VOD, kbps) | Tasa de bits mínima (50%) | Tasa de bits máx. (145%) |
---|---|---|---|
320 × 240 p a 24, 25 y 30 FPS | 150 | 75 | 218 |
640 × 360 p a 24, 25 y 30 FPS | 276 | 138 | 400 |
640 × 480 p a 24, 25 y 30 FPS | 512 (LQ), 750 (MQ) | 256 (LQ) y 375 (MQ) | 742 (LQ) y 1088 (MQ) |
1280 x 720 p a 24, 25 y 30 FPS | 1024 | 512 | 1485 |
1280 x 720 p a 50 y 60 fps | 1800 | 900 | 2610 |
1920 x 1080 p a 24, 25 y 30 FPS | 1800 | 900 | 2610 |
1920 x 1080 p a 50 y 60 FPS | 3000 | 1500 | 4350 |
2560 x 1440 p a 24, 25 y 30 fps | 6000 | 3000 | 8700 |
2560 x 1440 p a 50 y 60 fps | 9000 | 4,500 | 13050 |
3840 x 2160 p a 24, 25 y 30 fps | 12000 | 6000 | 17400 |
3840 x 2160 p a 50 y 60 fps | 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 k) |
-minrate <arg> -maxrate <arg> |
Establece la 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 de CQ, también establecerás el nivel de calidad máximo. Se recomiendan los siguientes niveles de calidad para la codificación VP9 basada en archivos:
Altura del marco | Calidad del 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, usarías el comando -crf 33
.
Codificación de múltiples pasos y velocidad de codificación
La codificación basada en archivos te permite tener flexibilidad en la velocidad. También puedes realizar varias pasadas en el mismo material para aumentar la calidad y elegir velocidades para cada una.
Cuando codifiques archivos VP9 en FFmpeg, te recomendamos que establezcas el parámetro -quality
en good
y, luego, configures la velocidad de la primera y la segunda pasada según la siguiente tabla con el parámetro -speed
. Esto proporciona un buen equilibrio entre el tiempo de codificación y la calidad del resultado.
Altura del 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 cadena de codificación de primer paso en FFmpeg podría incluir -quality good -speed 4
.
Espaciado de fotogramas clave
Se recomienda permitir hasta 240 fotogramas de video entre fotogramas clave (8 segundos para el contenido de 30 FPS). Los fotogramas clave son fotogramas de video autosuficientes; no dependen de ningún otro fotograma para renderizarse, pero tienden a ser más grandes que otros tipos de fotogramas. Para la reproducción en la Web y en dispositivos móviles, el espaciado generoso entre los fotogramas clave permite que el codificador elija la mejor ubicación de los fotogramas clave para maximizar la calidad.
En FFmpeg, el espaciado de fotogramas clave se controla con el comando -g
, que indica la cantidad de fotogramas. Para 240 fotogramas, sería -g 240
.
Recomendaciones de segmentación y subprocesos
La división en mosaicos divide el fotograma de video en varias columnas, lo que reduce ligeramente la calidad, pero acelera el rendimiento de la codificación. Los mosaicos deben tener al menos 256 píxeles de ancho, por lo que hay un límite en la cantidad de mosaicos que se pueden usar.
Según la cantidad de mosaicos y la resolución del fotograma de salida, puede ser útil tener más subprocesos de CPU. En general, no es muy útil usar varios subprocesos cuando el tamaño del fotograma de salida es muy pequeño.
Se recomienda usar los siguientes parámetros de configuración para la segmentación y el subprocesamiento en varias resoluciones.
Tamaño del marco | Cantidad de columnas de mosaicos | Cantidad de subprocesos |
---|---|---|
320 x 240 | 1 (-tile-columns 0 ) |
1 |
640 × 360 | 2 (-tile-columns 1 ) |
2 |
640 × 480 | 2 (-tile-columns 1 ) |
2 |
1280 × 720 | 4 (-tile-columns 2 ) |
4 |
1920 × 1080 | 4 (-tile-columns 2 ) |
4 |
2560x1440 | 8 (-tile-columns 3 ) |
8 |
3840 × 2160 | 8 (-tile-columns 3 ) |
8 |
En FFmpeg, la cantidad de mosaicos se controla con el parámetro -tile-columns
y la cantidad de subprocesos con -threads
. Por ejemplo, una codificación de 640 x 480 usaría la línea de comandos -tile-columns 1 -threads 2
.
Líneas de comandos de FFmpeg
Si se combinan las recomendaciones anteriores, se pueden usar los siguientes comandos de FFmpeg para codificar contenido VP9.
Ten en cuenta que los comandos de primer y segundo paso se encadenan. El argumento -y
en el comando de segundo paso responde "Sí" cuando FFmpeg solicita sobrescribir el archivo de estadísticas del primer paso con el video de salida.
También ten en cuenta que se usa una fuente de 1080 p para las codificaciones que se segmentan para una salida de hasta 1280 x 720. Se usa una fuente 4K para una salida 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 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
- Archivo de entrada: tears_of_steel_1080p.webm (1920 × 800, 544.88 MB)
- Archivo de salida: tos-320x240.webm (320 x 240, 21.73 MB)
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 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
- Archivo de entrada: tears_of_steel_1080p.webm (1920 × 800, 544.88 MB)
- Archivo de salida: tos-640x360.webm (640 x 360, 31.53 MB)
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 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
- Archivo de entrada: tears_of_steel_1080p.webm (1920 × 800, 544.88 MB)
- Archivo de salida: tos-640x480-low.webm (640 x 480, 51.18 MB)
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 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
- Archivo de entrada: tears_of_steel_1080p.webm (1920 × 800, 544.88 MB)
- Archivo de salida: tos-640x480-medium.webm (640 x 480, 69.27 MB)
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 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
- Archivo de entrada: tears_of_steel_1080p.webm (1920 × 800, 544.88 MB)
- Archivo de salida: tos-1280x720-24-30fps.webm (1280 × 720, 98.2 MB)
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 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
- Archivo de entrada: tears_of_steel_1080p.webm (1920 × 800, 544.88 MB)
- Archivo de salida: tos-1280x720-50-60fps.webm (1280 x 720, 157.1 MB)
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 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
- Archivo de entrada: tearsofsteel_4k.mov (3840 x 1714, 6.76 GB)
- Archivo de salida: tos-1920x1080-24-30fps.webm (1920 x 1080, 151.51 MB)
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 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
- Archivo de entrada: tearsofsteel_4k.mov (3840 x 1714, 6.76 GB)
- Archivo de salida: tos-1920x1080-50-60fps.webm (1920 x 1080, 238.18 MB)
2,560 x 1,440 (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 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
- Archivo de entrada: tearsofsteel_4k.mov (3840 x 1714, 6.76 GB)
- Archivo de salida: tos-2560x1440-24-30fps.webm 2560 x 1440, 533.54 MB)
2,560 x 1,440 (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 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
- Archivo de entrada: tearsofsteel_4k.mov (3840 x 1714, 6.76 GB)
- Archivo de salida: tos-2560x1440-50-60fps.webm 2560 x 1440, 664.04 MB)
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 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
- Archivo de entrada: tearsofsteel_4k.mov (3840 x 1714, 6.76 GB)
- Archivo de salida: tos-3840x2160-24-30fps.webm 3840 x 2160, 1.03 GB)
3840 x 2160 (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 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
- Archivo de entrada: tearsofsteel_4k.mov (3840 x 1714, 6.76 GB)
- Archivo de salida: tos-3840x2160-50-60fps.webm 3840 x 2160, 1.56 GB)