Convertendo vídeo para WebM com ffmpeg / avconv


18

Enquanto tentava otimizar o tamanho dos meus vídeos caseiros , converti alguns deles para o WebM como teste, usando o Pitivi no Xubuntu. A diferença de tamanho é significativa. O arquivo webm resultante é apenas cerca de 10% do arquivo original, enquanto a qualidade da imagem é praticamente a mesma para mim.

Eu também tentei fazer a conversão usando avconvpara poder criar um script, mas o arquivo resultante parece muito ruim. Depois de analisar as configurações de renderização no Pitivi, tentei alguns parâmetros:, avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmmas a qualidade ainda parece uma porcaria, então parece que estou perdendo / usando alguns parâmetros errados. Alguém sabe quais são os parâmetros corretos para converter um filme h264 em um webm e obter a mesma qualidade do Pitivi?

Estas são as configurações no Pitivi: criando o projeto Pitivi Renderização para webm (vídeo html5) configuração de codec

Respostas:


53

Nota: Esta informação é baseada na codificação FFmpeg Wiki na VP9 . Consulte esse artigo para obter mais informações - ele será mantido e estendido continuamente. Para obter os melhores resultados, você deve usar o uma versão recente do ffmpegpor download a partir do seu site (uma compilação estático será suficiente, que contém o libvps-vp9encoder).

Taxa de bits variável

A codificação VBR oferece a melhor qualidade geral, pois o codificador pode escolher livremente quantos bits atribuir a um quadro. Escolha este modo, a menos que esteja preparando vídeos para streaming com taxa de bits constante.

Opção 1: Codificação de qualidade constante

Normalmente, se você não deseja segmentar um tamanho de arquivo específico, deixe a taxa de bits variar livremente, pois isso levará à mais alta qualidade. Você pode fazer isso definindo a taxa de bits como 0 e o fator de taxa constante ( CRF ) no nível de qualidade desejado:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

O valor do CRF pode ser de 0 a 63. Valores mais baixos significam melhor qualidade. Os valores recomendados variam de 15 a 35, sendo 31 recomendados para vídeo HD 1080p. O Google tem um guia com mais informações sobre isso .

Opção 2: codificação de duas passagens com uma taxa de bits de destino

Se você deseja que seu arquivo tenha uma taxa de bits ou tamanho de arquivo específico, é necessário especificar a taxa e usar a codificação de duas passagens (que garantirá uma distribuição de qualidade ideal). Aqui estamos escolhendo 5 MBit / s, o que deve ser suficiente para conteúdo em 1080p.

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Os usuários do Windows precisam usar em NULvez de /dev/nulle em ^vez de \.

Taxa de bits constante

Primeiro, a libvpx oferece modos de codificação de taxa de bits constante e taxa de bits variável . A taxa de bits constante deve ser evitada sempre que possível (a menos que você direcione um tamanho de arquivo específico ou cenário de streaming), pois a qualidade média por tamanho de arquivo será pior. Ainda assim, você pode tentar definir uma taxa de bits constante se nada mais funcionar para você, por exemplo, com 1 MBit / s:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

Observe a saída e aumente ou diminua a taxa de bits ao seu gosto (ou restrições de tamanho de arquivo). Por exemplo, você pode usar 500Kor 5M, etc.

Você tem que especificar -minrate, -maxratee a taxa de bits -b:vpara que o codificador para usar CBR. Todos eles precisam ter o mesmo valor - caso contrário, ele escolherá uma taxa de bits de destino diferente e fará a codificação VBR, mas com qualidade ruim.

Áudio

O codec de áudio atual escolhido para a codificação VP9 é o Opus. O FFmpeg escolherá o codificador necessário e suas opções por padrão. Se você deseja definir explicitamente -c:a libopus, também pode fazer isso. Consulte a libopusdocumentação para mais opções.


4
Atualmente, este é o melhor guia para codificar o VP8 em toda a Internet. Bem feito, eu gostaria de poder votar mais uma vez!
evilsoup 24/02

@evilsoup Obrigado. Ainda estou ajustando e adicionarei uma nova página no wiki do FFmpeg mais tarde.
slhck 24/02

Esta é realmente uma resposta maravilhosa! Agora entendo por que meu vídeo sempre teve a mesma baixa qualidade, porque na verdade eu estava sempre usando o padrão de 256 kBit / s. Muito obrigado!
jeroen

Quais foram os diferenciais de tamanho entre o mp4 original e o webm convertido?
switz

11
@ Dan Acabei de atualizar o guia - notei que estava um pouco desatualizado. Que bom que você achou útil.
slhck
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.