ATUALIZAÇÃO EM 3 DE AGOSTO DE 2017: De acordo com uma resposta mais recente do usuário f, o ffmpeg agora tem suporte para a codificação VP9 através do VAAPI. Ainda não tenho o hardware necessário para testar isso, então minha resposta será de ajuda limitada. Deixarei minha resposta original sobre como codificar o VP9 no software abaixo.
Por alguma razão, o FFmpeg não suporta a codificação VP9 no codificador de hardware QuickSync da Intel, mesmo que eles suportem H.264 e HEVC . Uma pesquisa no repositório de código-fonte do FFmpeg mostra que nem se trata de ser desativado, mas o recurso ainda não foi implementado. Mas se ele estiver disponível em algum momento no futuro, deverá ser utilizado de maneira semelhante aos outros codificadores QuickSync: um comutador como em -c:v vp9_qsv
vez de -c:v libvpx-vp9
deve fazer o trabalho.
O uso da linha de comando FFmpeg é o mesmo em todas as plataformas, com a exceção notável que conheço de usuários do Windows que precisam usar em NUL
vez de /dev/null
saída durante a primeira passagem de uma codificação de 2 passagens. Mas como você está fazendo 1 passe e sem perdas, isso não deve afetá-lo.
Se você deseja acelerar seus códigos, a coisa mais óbvia que você deve tentar é definir um valor de velocidade de codificação com o -speed
comutador. Os valores recomendados são números de 0 a 4, com 0 sendo muito, muito lento (pense -preset placebo
em x264, mas pior), mas com alta qualidade e 4 sendo rápidos, sendo de qualidade inferior. O ffmpeg usa -speed 1
por padrão o que é uma boa opção de velocidade para qualidade para codificação com perdas. No entanto, fiz um teste rápido de codificação sem perdas com valores de velocidade diferentes e notei uma redução de 32% no tamanho do arquivo ao passar -speed 1
para -speed 0
a codificação sem perdas. O tempo de codificação triplicou, portanto, se usar 0 vale a pena, é com você. O arquivo produzido por -speed 4
foi apenas 1,1% maior que o produzido por-speed 1
no entanto, e foi codificado 43% mais rápido. Então, eu diria que se você estiver sem perdas e -speed 0
for muito lento, poderá usar -speed 4
.
Outro aumento importante no desempenho da codificação é ativar o multiencadeamento com o -threads
switch; A libvpx não usa automaticamente vários threads, portanto, isso deve ser definido manualmente pelo usuário. Você também deve definir o número de colunas de bloco com a -tile-columns
opção Essa opção faz com que a libvpx divida o vídeo em vários blocos e codifique esses blocos em paralelo para melhor multiencadeamento. Você pode encontrar os números recomendados para a quantidade de colunas e segmentos de bloco na seção "Recomendações de lado a lado e de encadeamento" do guia de codificação VP9 do Google. Como você pode ver, o número de threads usados aumenta com o número de blocos, o que significa que, dependendo do número de núcleos de CPU disponíveis, seu processador pode não estar totalmente saturado ao codificar vídeo com resolução sub HD. Se você codifica principalmente vídeos de baixa resolução, convém codificar vários arquivos ao mesmo tempo.
No entanto, existe ainda outra maneira de acelerar a codificação VP9: multiencadeamento em um único bloco de coluna que pode ser ativado com -row mt 1
. A partir de 4 de abril de 2017, olá pessoal do futuro), não faz parte de uma versão lançada da libvpx, mas provavelmente estará na libvpx 1.6.2. Se você quiser experimentá-lo antes do próximo lançamento, precisará compilar versões recentes do libvpx e ffmpeg do git. Basta seguir o guia de compilação do FFmpeg para sua distribuição preferida, mas em vez de baixar e extrair um tarball de lançamento, faça o mesmo git pull https://chromium.googlesource.com/webm/libvpx
.
Quanto à veryslow
predefinição, usada apenas em x264 e x265. A libvpx usa o -speed
switch e, adicionalmente -quality best
, as opções ,, -quality good
ou -quality realtime
para definir quanto tempo o codificador pode gastar codificando um quadro. O padrão é que, -quality good
por -quality best
ser tão lento, é inutilizável e -quality realtime
deve ser usado para aplicativos de tempo crítico, como chamadas de vídeo e transmissão ao vivo.