Configurações recomendadas para VOD
Finalidade
Esta seção fornece recomendações para configurações de codificação VP9 ao realizar a codificação baseada em arquivos (ou seja, não ao vivo).
Essas recomendações foram criadas para as seguintes metas:
- Um equilíbrio entre qualidade e velocidade de codificação
- A taxa de bits mínima para alcançar uma qualidade razoável
- Configurações para acomodar uma ampla variedade de tipos de conteúdo
Essas recomendações não:
- Abordar a codificação ao vivo
- Otimizar para tipos de conteúdo específicos (por exemplo, filmagens de esportes com muito movimento)
- Configurar as definições para requisitos específicos de dispositivo ou rede
Codificação de resolução única
O VP9 é compatível com vários tamanhos de frame, desde resoluções pequenas até 4K. Tamanhos de frame maiores oferecem qualidade mais alta, mas exigem mais largura de banda para entrega e mais poder de processamento para decodificação.
Se você estiver criando uma única resolução, 640 x 480 é uma opção segura para uma ampla variedade de dispositivos móveis e da Web. Os parâmetros de linha de comando do FFmpeg a seguir permitem criar um arquivo de resolução ú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
Codificação de várias resoluções
Se você planeja segmentar várias resoluções ou se sua rede de entrega tem largura de banda variável, é recomendável criar várias resoluções. O player pode controlar qual resolução está sendo enviada ao espectador.
As codificações de vídeo com várias resoluções são usadas com frequência na transmissão adaptativa de taxa de bits, em que o player de vídeo alterna entre resoluções em tempo real com base na largura de banda do usuário. Por exemplo, o Shaka Player permite reproduzir codificações de várias resoluções, em que cada codificação VP9 está em um arquivo separado e um manifesto DASH fornece informações sobre cada codificação.
Para mais informações sobre como empacotar vídeos em formatos de streaming adaptável, consulte o Shaka Packager. Este guia vai se concentrar nas configurações de codificação para VP9 em várias resoluções.
Configurações recomendadas
Todas as configurações abaixo podem ser usadas para arquivos individuais em várias resoluções. Combinadas, elas oferecem um conjunto abrangente adequado para streaming adaptável. A versão 640x480 tem duas versões, uma de baixa qualidade (LQ) e outra de qualidade média (MQ).
Taxa de bits
O modo de qualidade restrita (CQ) é recomendado ao codificar arquivos VP9 para visualização sob demanda. Esse modo de codificação permite especificar uma taxa de bits média de destino, controlando a qualidade máxima do vídeo e a taxa de bits mínima e máxima.
As taxas de bits a seguir são sugeridas como valores de referência para distribuição na Web e em dispositivos móveis. Essas sugestões minimizam a taxa de bits, alcançando uma qualidade de vídeo adequada para distribuição na Web e em dispositivos móveis. Pense nelas como uma recomendação de taxa de bits "baixa" que ainda pode alcançar uma qualidade razoável.
Para os exemplos acima, recomendamos que a taxa de bits mínima seja definida em 50% da taxa de bits desejada e a máxima em 145% da desejada.
Tamanho do frame/frame rate | Taxa de bits de destino (VOD, kbps) | Taxa de bits mínima (50%) | Taxa de bits máxima (145%) |
---|---|---|---|
320x240p a 24,25,30 | 150 | 75 | 218 |
640 x 360p a 24,25,30 | 276 | 138 | 400 |
640x480p a 24,25,30 | 512 (LQ), 750 (MQ) | 256 (LQ) 375 (MQ) | 742 (LQ) 1088 (MQ) |
1280x720p a 24,25,30 | 1024 | 512 | 1485 |
1280x720p a 50,60 | 1800 | 900 | 2610 |
1920x1080p a 24,25,30 | 1800 | 900 | 2610 |
1920 x 1080p a 50,60 | 3000 | 1500 | 4350 |
2560x1440p a 24,25,30 | 6000 | 3000 | 8700 |
2560x1440p a 50,60 | 9000 | 4500 | 13050 |
3840x2160p a 24,25,30 | 12000 | 6000 | 17400 |
3840x2160p a 50,60 | 18000 | 9000 | 26100 |
Figura 2a: taxas de bits de VOD recomendadas
No FFmpeg, a taxa de bits é controlada com os seguintes comandos:
FFmpeg | |
---|---|
-b:v <arg> |
Define a taxa de bits (por exemplo, 500k) |
-minrate <arg> -maxrate <arg> |
Define a taxa de bits mínima e máxima. |
Por exemplo, ao codificar conteúdo de 640x480, use a linha de comando
-b:v 750k -minrate 375 -maxrate 1088
.
Qualidade
No modo CQ, você também define o nível máximo de qualidade. Os seguintes níveis de qualidade são recomendados para a codificação VP9 baseada em arquivos:
Altura do frame | Qualidade desejada (CQ) |
---|---|
240 | 37 |
360 | 36 |
480 | 34 (LQ) ou 33 (MQ) |
720 | 32 |
1080 | 31 |
1440 | 24 |
2160 | 15 |
No FFmpeg, a qualidade é definida com o comando -crf
. Por exemplo, para definir a qualidade como 33, use o comando -crf 33
Codificação multipassagem e velocidade de codificação
A codificação baseada em arquivos oferece flexibilidade na velocidade. Você também pode fazer várias passagens no mesmo material para aumentar a qualidade e escolher velocidades para cada uma.
Ao codificar arquivos VP9 no FFmpeg, é recomendável definir o parâmetro -quality
como good
e, em seguida, definir a velocidade da primeira e da segunda transmissão de acordo com a tabela abaixo com o parâmetro -speed
. Isso oferece um bom equilíbrio entre o tempo de codificação e a qualidade da saída.
Altura do frame | Velocidade (primeira passagem) | Velocidade (segunda passagem) |
---|---|---|
240 | 4 | 1 |
360 | 4 | 1 |
480 | 4 | 1 |
720 | 4 | 2 |
1080 | 4 | 2 |
1440 | 4 | 2 |
2160 | 4 | 2 |
Por exemplo, uma string de codificação de primeira transmissão no FFmpeg pode incluir
-quality good -speed 4
.
Espaçamento de frames-chave
Recomendamos permitir até 240 frames de vídeo entre os quadros-chave (8 segundos para conteúdo de 30 fps). Os quadros-chave são autossuficientes. Eles não dependem de outros quadros para serem renderizados, mas tendem a ser maiores do que outros tipos de quadros. Para reprodução na Web e em dispositivos móveis, um espaçamento generoso entre os frames-chave permite que o codificador escolha o melhor posicionamento para maximizar a qualidade.
No FFmpeg, o espaçamento dos frames-chave é controlado com o comando -g
, que indica o número de frames. Para 240 frames, seria -g 240
.
Recomendações de mosaico e threading
O mosaico divide o frame do vídeo em várias colunas, o que reduz um pouco a qualidade, mas acelera o desempenho da codificação. Os blocos precisam ter pelo menos 256 pixels de largura, então há um limite para quantos podem ser usados.
Dependendo do número de blocos e da resolução do frame de saída, mais linhas de execução da CPU podem ser úteis. Em geral, há pouco valor em várias linhas de execução quando o tamanho do frame de saída é muito pequeno.
As configurações a seguir são recomendadas para mosaicos e linhas de execução em várias resoluções.
Tamanho do frame | Número de colunas de blocos | Número de threads |
---|---|---|
320x240 | 1 (-tile-columns 0 ) |
1 |
640 x 360 | 2 (-tile-columns 1 ) |
2 |
640 x 480 | 2 (-tile-columns 1 ) |
2 |
1280 x 720 | 4 (-tile-columns 2 ) |
4 |
1920 x 1080 | 4 (-tile-columns 2 ) |
4 |
2560x1440 | 8 (-tile-columns 3 ) |
8 |
3840 x 2160 | 8 (-tile-columns 3 ) |
8 |
No FFmpeg, o número de blocos é controlado com o parâmetro -tile-columns
e o número de linhas de execução com -threads
. Por exemplo, uma codificação de 640x480 usaria a linha de comando -tile-columns 1 -threads 2
.
Linhas de comando do FFmpeg
Reunindo as recomendações acima, os seguintes comandos do FFmpeg podem ser usados para codificar conteúdo VP9.
Os comandos de primeira e segunda passagem são encadeados. O argumento -y
no comando de segunda passagem responde "Sim" quando o FFmpeg pede para substituir o arquivo de estatísticas da primeira passagem pelo vídeo de saída.
Uma fonte de 1080p é usada para codificações destinadas a uma saída de até 1280x720. Uma fonte 4K é usada para saídas maiores.
320 x 240 (24, 25 ou 30 quadros 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
- Arquivo de entrada: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Arquivo de saída: tos-320x240.webm (320x240, 21,73 MB)
640 x 360 (24, 25 ou 30 quadros 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
- Arquivo de entrada: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Arquivo de saída: tos-640x360.webm (640x360, 31,53 MB)
640 x 480 (baixa qualidade, 24, 25 ou 30 quadros 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
- Arquivo de entrada: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Arquivo de saída: tos-640x480-low.webm (640x480, 51,18 MB)
640 x 480 (qualidade média, 24, 25 ou 30 quadros 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
- Arquivo de entrada: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Arquivo de saída: tos-640x480-medium.webm (640x480, 69,27 MB)
1280x720 (24, 25 ou 30 quadros 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
- Arquivo de entrada: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Arquivo de saída: tos-1280x720-24-30fps.webm (1280x720, 98,2 MB)
1280x720 (50 ou 60 quadros 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
- Arquivo de entrada: tears_of_steel_1080p.webm (1920x800, 544,88 MB)
- Arquivo de saída: tos-1280x720-50-60fps.webm (1280x720, 157,1 MB)
1920x1080 (24, 25 ou 30 quadros 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
- Arquivo de entrada: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Arquivo de saída: tos-1920x1080-24-30fps.webm (1920x1080, 151,51 MB)
1920 x 1080 (50 ou 60 quadros 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
- Arquivo de entrada: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Arquivo de saída: tos-1920x1080-50-60fps.webm (1920x1080, 238,18 MB)
2560 x 1440 (24, 25 ou 30 quadros 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
- Arquivo de entrada: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Arquivo de saída: tos-2560x1440-24-30fps.webm 2560x1440, 533,54 MB)
2.560 x 1.440 (50 ou 60 quadros 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
- Arquivo de entrada: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Arquivo de saída: tos-2560x1440-50-60fps.webm 2560x1440, 664,04 MB)
3840 x 2160 (24, 25 ou 30 quadros 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
- Arquivo de entrada: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Arquivo de saída: tos-3840x2160-24-30fps.webm 3840x2160, 1,03 GB)
3840 x 2160 (50 ou 60 quadros 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
- Arquivo de entrada: tearsofsteel_4k.mov (3840x1714, 6,76 GB)
- Arquivo de saída: tos-3840x2160-50-60fps.webm 3840x2160, 1,56 GB)