Codificação básica

Noções básicas sobre compactação de vídeo

Esta seção aborda as opções básicas de codificação VP9, incluindo tamanho do frame, controle de taxa de bits e qualidade básicos.

Se você não tem experiência com compactação de vídeo, assista este vídeo para saber mais sobre a necessidade e o funcionamento desse processo.

Uma codificação simples

O comando FFmpeg a seguir converte um arquivo de entrada em vídeo VP9 com áudio Opus. Essa é a codificação mais simples possível, que usa as configurações padrão.

ffmpeg -i tears_of_steel_1080p.webm -c:v libvpx-vp9 -c:a libopus output.webm

Essa codificação do FFmpeg usa os seguintes parâmetros de linha de comando:

FFmpeg
-i <filename> Especifica o nome do arquivo de entrada
-c:v libvpx-vp9 Diz ao FFmpeg para criar um vídeo VP9.
-c:a libopus Diz ao FFmpeg para criar áudio Opus.
output.webm Especifica o nome do arquivo de saída

O FFmpeg deduz o tipo de arquivo a ser criado com base no nome do arquivo de saída usado. Neste exemplo, o FFmpeg vai gerar um arquivo WebM porque pedimos output.webm.

Resolução

Todos os vídeos têm um tamanho de frame (indicando a largura e a altura em pixels). O parâmetro de linha de comando do FFmpeg a seguir pode ser usado para controlar o tamanho do frame do vídeo de saída para codificação VP9:

FFmpeg
-vf scale=<width>x<height> Largura e altura do frame

Por exemplo, o comando FFmpeg a seguir vai gerar um vídeo WebM VP9 de 640 x 480.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -c:v libvpx-vp9 -c:a libopus output.webm

Resoluções menores têm qualidade inferior, mas resoluções maiores exigem mais largura de banda e poder de processamento para decodificar, além de não serem compatíveis com dispositivos mais antigos. Para VP9, 640 x 480 é considerada uma resolução segura para uma ampla variedade de dispositivos móveis e da Web.

Taxa de bits

O VP9 é compatível com vários modos de taxa de bits diferentes:

modo
Quantizador constante (Q) Permite especificar um valor de quantizador fixo. A taxa de bits vai variar.
Qualidade restrita (CQ) Permite definir um nível máximo de qualidade. A qualidade pode variar dentro dos parâmetros de taxa de bits
Taxa de bits variável (VBR) Equilibra a qualidade e a taxa de bits ao longo do tempo dentro das restrições de taxa de bits
Taxa de bits constante (CBR) Tenta manter a taxa de bits constante enquanto a qualidade varia.

O modo CQ é recomendado para vídeos baseados em arquivos, e não para transmissões ao vivo. Os seguintes parâmetros de linha de comando do FFmpeg são usados para o modo CQ:

FFmpeg
-b:v <arg> Define a taxa de bits desejada (por exemplo, 500k)
-minrate <arg>
-maxrate <arg>
Define a taxa de bits mínima e máxima.
-crf <arg> Define o nível máximo de qualidade. Valores válidos: de 0 a 63. Números menores indicam qualidade maior.

Por exemplo, o comando FFmpeg a seguir cria um arquivo de vídeo de qualidade média de 640 x 480 usando o modo CQ, com uma taxa de bits média de 750 kbps e qualidade máxima restrita a 33.

ffmpeg -i tears_of_steel_1080p.webm -vf scale=640x480 \
  -b:v 750k -crf 33 -c:v libvpx-vp9 -c:a libopus output.webm

A taxa de bits varia de acordo com a qualidade que você quer alcançar e a resolução do vídeo. Confira aqui um conjunto completo de recomendações para taxas de bits em várias resoluções.

Configurações de qualidade e velocidade

A compactação de vídeo é um equilíbrio entre a qualidade da saída e o tempo necessário para criá-la. Em geral, você sempre pode ter uma qualidade melhor se permitir mais tempo para codificar, mas o tempo necessário para obter a qualidade mais alta possível pode ser impraticável.

O VP9 oferece várias configurações para equilibrar qualidade e velocidade:

  • A configuração de qualidade instrui o codificador sobre a abordagem que ele usa para compactar o vídeo. Os modos disponíveis são "best", "good" e "realtime".

  • As configurações de threading permitem que o codificador use várias threads de CPU para codificar o vídeo. Essas configurações podem reduzir um pouco a qualidade, mas melhoram significativamente a velocidade de codificação e decodificação.

Esses dois tipos de configurações são controlados por vários parâmetros de linha de comando:

FFmpeg
-threads Indica o número de linhas de execução a serem usadas durante a codificação.
-quality Pode ser definido como good, best ou realtime
-speed Esse parâmetro tem significados diferentes, dependendo de a qualidade estar definida como good ou realtime. As configurações de velocidade 0-4 se aplicam ao VoD no good e no best, sendo 0 a qualidade mais alta e 4 a mais baixa. Os valores válidos de Realtime são 5-8. Números menores significam maior qualidade.
-tile-columns O mosaico divide o vídeo em regiões retangulares, o que permite multithreading para codificação e decodificação. O número de blocos é sempre uma potência de dois. 0=1 bloco, 1=2, 2=4, 3=8, 4=16, 5=32.

O comando FFmpeg a seguir vai criar um arquivo de 640x480 com a qualidade definida como "boa" e a velocidade definida como 0 (alta qualidade):

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

As opções de qualidade e velocidade podem variar de acordo com a resolução e a capacidade de processamento disponível. Confira um conjunto completo de recomendações na próxima seção.