Como converter rapidamente mp4 para webm usando ffmpeg?

20

Eu tenho que converter 76 arquivos mp4 em webm para fins de um site que usa vídeos HTML5. Estou falando de 10 Gb de arquivos mp4 ... Eu sei que posso simplesmente pedir ao ffmpeg para fazer isso usando:

ffmpeg -i input_file.mp4 output_file.webm

Claro que vou fazer isso recursivamente:

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" "${0%%.mp4}.webm"' {} \;

Até tentei algo que encontrei em algum lugar da internet:

ffmpeg -i input_file.mp4 -cpu-used 4 -threads 8 output_file.webm

Mas o problema é que não vai demorar menos de uma semana !!! O que estou fazendo errado? Existe alguma maneira possível de acelerar isso? Se eu converter para ogg, ganho em velocidade? Por favor ajude!!!

pr.nizar
fonte
@ LordNeckbeard, você deve escrever uma resposta com base nesse guia. Além disso, deve-se notar que o codificador vpx é lento como o melaço, mesmo com configurações sãs etc., em comparação com x264 ... a menos que você esteja disposto a sacrificar muita qualidade, é impossível obter codificações muito rápidas com ele.
evilsoup
O problema é sobre compatibilidade. Esta é uma pequena tabela de compatibilidade: {x264: IE (+) Safari (+) Chrome (+) Firefox (-) Opera (-)} {webm: IE (-) Safari (-) Chrome (+) Firefox (+) Opera (+)} Eu sei que eles dizem que o Safari e o IE detêm a maior parte do mercado, mas duvido seriamente e apostariam no Firefox e no Opera! ;)
pr.nizar 24/03
@ pr.nizar Graças à Cisco, lançando o OpenH264 sob BSD, o firefox agora suporta h.264.
Wyatt8740
Relacionado: stackoverflow.com/questions/43612424/… | superuser.com/questions/1211786/…
Ciro Santilli Enviado em 7/09/19

Respostas:

11

A transcodificação do vídeo leva tempo. Também requer muito mais conhecimento sobre parâmetros de codificação; É improvável que os padrões do ffmpeg sejam adequados para você e podem nem criar um arquivo de saída utilizável.

Aqui está um começo:

http://blog.pcode.nl/2010/10/17/encoding-webm-using-ffmpeg/

Essas configurações serão codificadas para uma taxa de bits média específica (taxa de bits do vídeo de 3900kbit), para que haja picos na taxa de bits.

MP4 e WebM usam codecs de vídeo diferentes, portanto, não há atalhos; o vídeo deve ser transcodificado.

A velocidade de codificação, é claro, variará imensamente, dependendo do tamanho do quadro, da taxa de quadros e das configurações de qualidade. Para uma codificação de 720p, você poderá codificar aproximadamente 1: 1 (ou seja, 10 horas de vídeo em 10 horas) em uma CPU nos últimos dois anos. Se você usar a codificação ABR de duas passagens, como no exemplo dado no link, quase o dobro.

thomasrutter
fonte
8

Dobrar isso ou cortar metade disso? Portanto, é um beco sem saída .. Eu não vou jogar com taxas de bits, nunca sei o que esperar de qualidade ou tamanho. Acho que vou me ater a essa e fazer o cliente esperar até que a conversão termine.

find ./ -name '*.mp4' -exec bash -c 'ffmpeg -i "$0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 "${0%%.mp4}.webm"' {} \;

Estou postando para futuros usuários, na verdade, ganhei velocidade, mas minha CPU está funcionando como o inferno: 60 a 80% em cada núcleo! Agora, acho que levará menos tempo: 3 dias em vez de 6 ou 7 .. Espero que não desapareça .. ^ _ ^

Obrigado mesmo assim cara!

Edit: Removida a opção -sameq após os comentários de LordNeckbeard e neon_overload -sameq não significa a mesma "qualidade"

pr.nizar
fonte
3
-sameqnão significa "mesma qualidade" e foi removido a montante. Não use isso. Consulte o link no meu comentário para sua pergunta para obter instruções detalhadas sobre a codificação libvpx.
Llogan 21/03
2
-sameq significa o mesmo quantizador, no entanto, é impossível comparar quantizadores entre h.264 e VP8; portanto, mesmo que isso funcionasse, você quase certamente obteria resultados quebrados se o usasse - por isso não.
thomasrutter
2
Obrigado cara por chamar minha atenção para isso! Eu editei minha resposta ..;) Na verdade, eu não usei esse switch porque eu vi que estava ficando ainda mais lento .. Eu até soltei o ffmpeg e usei o avconv: É MUITO MAIS RÁPIDO! O trabalho foi realizado em um dia e meio com o seguinte: find ./ -name '* .mp4' -exec bash -c 'avconv -i "$ 0" -vcodec libvpx -acodec libvorbis -cpu-use 5-threads 8 " $ {0 %%. Mp4} .webm "'{} \; Eu sei que estou desviando o assunto com esse comentário, mas achei que valeu a pena dizê-lo .. ^ _ ^ Espero que ajude alguém! ;)
pr.nizar 24/03
Para a qualidade, realmente não posso dizer as diferenças entre os arquivos originais e os que foram trancodados na Web: são quase as mesmas qualidades de áudio e vídeo!
pr.nizar
11
Ainda é recomendável que você defina um valor crf ou bitrate em vez de usar os padrões do ffmpeg / avconv, qualquer que seja.
thomasrutter