Convertendo vídeo para WebM com ffmpeg / avconv

18

Enquanto tentando otimizar o tamanho dos meus vídeos caseiros Eu converti alguns deles para o WebM como um 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 parece praticamente a mesma para mim.

Eu também tentei fazer a conversão usando avconv para que eu pudesse fazer o script, mas o arquivo resultante parece muito ruim. Depois de olhar as configurações de renderização no Pitivi eu tentei alguns parâmetros: avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webm , mas 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 em Pitivi:

    
por jeroen 24.02.2013 / 01:21

1 resposta

53

Note: This information is based on the FFmpeg Wiki on VP9 encoding. Please refer to that article for more information – it will be continuously maintained and extended. For the best results you should use the a recent version of ffmpeg by downloading it from their website (a static build will suffice; it contains the libvps-vp9 encoder).

Taxa de bits variável

A codificação VBR oferece a melhor qualidade geral, já que o codificador pode escolher livremente quantos bits serão atribuídos a um quadro. Escolha este modo, a menos que esteja preparando vídeos para streaming de 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 ) para o nível de qualidade alvo:

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

O valor de 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 em HD de 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 de destino específica ou um tamanho de arquivo, é necessário especificar a taxa e usar a codificação de duas passagens (o que garantirá uma distribuição de qualidade ideal). Aqui estamos escolhendo 5 MBit / s, o que deve ser suficiente para o conteúdo de 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 NUL em vez de /dev/null e ^ em vez de \ .

Taxa de bits constante

Em primeiro lugar, o libvpx oferece modos de codificação de taxa de bits e bitrate variável constantes . A taxa de bits constante deve ser evitada sempre que possível (a menos que você segmente um tamanho de arquivo específico ou um cenário de streaming), já que a qualidade média por tamanho de arquivo será pior. Ainda assim, você poderia 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 500K ou 5M , et cetera.

Você precisa especificar -minrate , -maxrate e a taxa de bits -b:v para que o codificador use CBR. Todos eles têm que ter o mesmo valor - caso contrário, ele escolherá uma taxa de bits de destino diferente e fará a codificação VBR, mas com má qualidade.

Áudio

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

    
por 24.02.2013 / 16:53