Por que a codificação do VP8 / 9 é tão lenta em comparação com o H.264?


11

Recentemente, eu queria experimentar os codecs Webm VP8 e VP9, ​​mas quando corri ffmpegpara codificar um arquivo H.264 MP4 em um dos outros dois codecs, percebi que a codificação é (quase por uma ordem de magnitude) mais lenta.

Um vídeo 1080p30 de H.264 a VP9 a 3 MBit / s está sendo codificado em torno de 6-7 fps, enquanto o mesmo vídeo codifica em torno de 40 fps em H.264. Eu usei o libvpx-vp9codec no ffmpegformato VP9. Estou obtendo os mesmos resultados para VP8 e Theora também.

Alguém pode me explicar por que o VP9 é muito mais lento? Eu tentei uma máquina diferente que me deu resultados semelhantes usando o Handbrake.


Respostas:


11

libvpx-vp9é um codificador muito mais lento que, libx264mas as configurações padrão dos threads no ffmpeg (0 = auto) não são eficazes para a libvpx. A configuração manual fornece um aumento de velocidade. por exemplo

ffmpeg -i in.mp4 -c:v libvpx-vp9 -threads 4 out.mp4

Em uma máquina de 4 núcleos, ao codificar um fluxo 1080-30p H.264, recebo um aumento de 3.8 fpspara 10 fps.


Deve-se mencionar também que existem diferentes predefinições de velocidade, ou seja, -presetpara libx264e -speedpara libvpx-vp9. Veja ffmpeg -h full. Isso pode fazer muita diferença, mas também afeta a qualidade ou a eficiência da compactação.
Slhck 23/05

1
Eu tentei em máquinas bastante antigas, mas usei 4 threads, pois as duas máquinas são quad-core. A -speedopção de não fazer uma enorme diferença para mim
comfreak


3

O VP9 é um codec mais complexo, proporcionando melhor compactação. A taxa de compactação / desempenho do vídeo tende a ser exponencial. Você deve esperar que a substituição do VP9 (AV1) seja ainda mais lenta.


1
Então, em outras palavras, mesmo que o codec "apenas" produza uma melhoria de tamanho relativamente pequeno, pode ser muito mais lento? Os resultados que obtive foram representativos?
Comfreak #

1
O VP9 pode ser até 50% mais eficiente em termos de qualidade, @comfreak. Eu não chamaria isso de pequeno. Você não pode simplesmente comparar o tamanho do arquivo resultante.
slhck 23/05

@slhck: Então você está dizendo que 3 MBit / s pode codificar mais informações originais do que o H.264 e, portanto, uma taxa de bits menor que o material de origem no H.264 pode ser uma opção para acelerar as coisas?
Comfreak #

1
@comfreak O uso de uma taxa de bits mais baixa não aumentará automaticamente a velocidade do processo de codificação. Estou apenas dizendo que há uma troca entre eficiência e velocidade de compactação, e muitos provedores de streaming, por exemplo, preferem investir o tempo da CPU para criar fluxos de maior qualidade com menor taxa de bits geral, para economizar espaço e largura de banda. O uso de codecs mais eficientes (como VP9 ou HEVC sobre H.264) também ajuda nesse sentido.
Slhck # 23/17

Porém, essencialmente, se a velocidade é o fator mais importante para você, você deve usar codecs mais antigos (por exemplo, H.264), predefinições menos eficientes em compactação e talvez também procurar codificação assistida por GPU, por exemplo, com NVENC.
Slhck # 23/17
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.