Como codificar VP9 com o FFmpeg em 4 passos
- Verifique sua build do FFmpeg: execute
ffmpeg -encoderse procurelibvpx-vp9na lista. A maioria das builds o inclui. - Escolha uma qualidade:
-crf 30 -b:v 0é um bom ponto de partida para vídeo web em 1080p. Um CRF menor significa qualidade maior e arquivos maiores. - Escolha uma velocidade:
-cpu-used 3ou 4 com-row-mt 1mantém tempos de codificação razoáveis. - Adicione áudio Opus com
-c:a libopus -b:a 128ke salve a saída como.webm.
Modos de codificação VP9
Qualidade constante (CRF + b:v 0)
Nossa abordagem recomendada para conversão de arquivos. Defina um alvo de qualidade com CRF e deixe o codificador decidir o bitrate por quadro. A flag -b:v 0 é necessária para ativar o modo CRF puro (caso contrário o FFmpeg aplica um limite de bitrate padrão).
Comando: ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm
Qualidade restrita (CRF + limite de bitrate)
Combina o alvo de qualidade CRF com um bitrate máximo. Útil para streaming, quando é preciso ficar dentro dos limites de banda mantendo a qualidade.
Comando: ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 2M output.webm
Bitrate variável (VBR)
Aponta para um bitrate médio específico. Usado em broadcast e streaming, quando a banda precisa ser previsível.
Comando: ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 2M output.webm
Valores CRF para VP9
A escala CRF do VP9 vai de 0 (melhor) a 63 (pior qualidade). Números mais altos significam mais compressão e qualidade menor. Para compressão realmente sem perdas, é preciso usar -lossless 1.
| Faixa CRF | Qualidade | Caso de uso |
|---|---|---|
| 0 | Máxima qualidade com perdas | Arquivamento (use -lossless 1 para compressão realmente sem perdas) |
| 15–20 | Alta qualidade | Cópias master, entrega de alta qualidade |
| 30–35 | Bom equilíbrio (padrão) | Entrega web, uso geral |
| 40–50 | Qualidade inferior | Prévias, miniaturas |
| 50–63 | Qualidade ruim | Raramente útil |
Nosso padrão é CRF 30, que produz uma qualidade visual aproximadamente equivalente a H.264 CRF 23 com arquivos de 30 a 50% menores.
Configurações de velocidade (cpu-used)
O parâmetro cpu-used controla a relação entre velocidade de codificação e eficiência de compressão. Os valores de 0 a 5 são usados na codificação normal (boa qualidade); valores mais altos pertencem ao modo em tempo real.
| cpu-used | Velocidade relativa | Penalidade de compressão | Caso de uso |
|---|---|---|---|
| 0 | A mais lenta | Nenhuma (a melhor) | Processamento em lote offline |
| 1 | Lenta | Muito pequena | Codificação de alta qualidade |
| 3 | Média | Pequena | Conversores online (nossa configuração) |
| 5 | Rápida | Perceptível | Prévias rápidas |
| 8 | A mais rápida (modo em tempo real) | A maior | Tempo real / latência mínima |
Multithreading (row-mt)
A flag -row-mt 1 ativa o multithreading baseado em linhas, que pode acelerar a codificação várias vezes em sistemas multi-core com pouco ou nenhum impacto na qualidade. É um ganho de velocidade puro e deve estar sempre ativado.
Áudio: configurações do Opus
O WebM combina vídeo VP9 com áudio Opus, que é eficiente em todos os bitrates comuns:
- 64 kbps: bom para voz e podcasts
- 128 kbps: transparente para a maior parte do conteúdo (nosso padrão)
- 192 kbps: alta qualidade para música
Two-pass vs. single-pass
O CRF single-pass (nossa abordagem) produz a melhor relação qualidade/tamanho para conversão de arquivos. O codificador ajusta o bitrate por quadro com base na complexidade, resultando na melhor qualidade possível no CRF alvo.
A codificação two-pass só é necessária quando é preciso atingir um bitrate alvo específico (streaming, broadcast). A primeira passagem analisa o conteúdo e a segunda codifica com alocação ideal de bits.
O pipeline VP9 do nosso conversor
O comando FFmpeg principal que nosso conversor usa (ele também aplica as duas últimas flags da lista abaixo):
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -cpu-used 3 -row-mt 1 -c:a libopus -b:a 128k output.webm
Flag a flag:
-c:v libvpx-vp9— usar o codec de vídeo VP9-crf 30— alvo de qualidade (equivalente a H.264 CRF 23)-b:v 0— modo CRF puro, sem limite de bitrate-cpu-used 3— velocidade equilibrada para conversão online-row-mt 1— multithreading baseado em linhas para codificação mais rápida-c:a libopus— codec de áudio Opus-b:a 128k— qualidade de áudio transparente para a maior parte do conteúdo-pix_fmt yuv420p— cor 4:2:0 de 8 bits, que todo decodificador VP9 reproduz-vf scale=trunc(iw/2)*2:trunc(ih/2)*2— arredonda largura e altura para baixo, para números pares
Configurações sugeridas por resolução
| Resolução | CRF sugerido | Bitrate alvo (VBR) |
|---|---|---|
| 360p | 36–40 | 200–400 kbps |
| 480p | 33–36 | 500–900 kbps |
| 720p | 30–33 | 1–2 Mbps |
| 1080p | 28–32 | 2–4 Mbps |
| 2160p (4K) | 25–30 | 8–16 Mbps |
Codificação VP9 no HandBrake
- Abra o vídeo de origem.
- Na aba Resumo, defina o formato como WebM.
- Na aba Vídeo, escolha o codificador VP9 e defina a Qualidade constante. Assim como no CRF, um número RF mais alto significa um arquivo menor.
- Na aba Áudio, escolha Opus e clique em Iniciar codificação.
O HandBrake usa o mesmo codificador libvpx que o FFmpeg, então as recomendações de CRF e velocidade desta página também valem para ele.
VP9 de 10 bits e HDR
Para vídeo de 10 bits, adicione -pix_fmt yuv420p10le -profile:v 2. O HDR também precisa dos metadados de cor, por exemplo -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc. O conversor desta página gera 4:2:0 de 8 bits (yuv420p), que todo decodificador VP9 reproduz.