¿Cómo convertir rápidamente mp4 a webm usando ffmpeg?

20

Tengo que convertir 76 archivos mp4 a webm con el propósito de un sitio web que use videos HTML5. Estoy hablando de 10 Gb de archivos mp4 ... Sé que simplemente puedo pedirle a ffmpeg que lo haga usando:

ffmpeg -i input_file.mp4 output_file.webm

Por supuesto que lo haré recursivamente:

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

Incluso probé algo que encontré en algún lugar de Internet:

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

¡Pero la cosa es que no me llevará menos de una semana! ¿Qué estoy haciendo mal? ¿Hay alguna forma posible de acelerar eso? Si me convierto a ogg, ¿ganaré velocidad? ¡¡¡Por favor ayuda!!!

pr.nizar
fuente
@ LordNeckbeard, debe escribir una respuesta basada en esa guía. Además, debe tenerse en cuenta que el codificador vpx es lento como la melaza, incluso con configuraciones sensatas, etc., en comparación con x264 ... a menos que esté dispuesto a sacrificar mucha calidad, es imposible obtener codificaciones realmente rápidas con él.
evilsoup
El problema es sobre la compatibilidad. Esta es una pequeña tabla de compatibilidad: {x264: IE (+) Safari (+) Chrome (+) Firefox (-) Opera (-)} {webm: IE (-) Safari (-) Chrome (+) Firefox (+) Opera (+)} Sé que dicen que Safari e IE ocupan la mayor parte del mercado, pero lo dudo mucho y ¡apostaría por Firefox y Opera! ;)
pr.nizar el
@ pr.nizar Gracias a que Cisco lanzó OpenH264 bajo BSD, firefox ahora es compatible con h.264.
Wyatt8740
Relacionado: stackoverflow.com/questions/43612424/… | superuser.com/questions/1211786/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

11

La transcodificación de video lleva tiempo. También requiere mucho más conocimiento sobre los parámetros de codificación; Es poco probable que los valores predeterminados de ffmpeg sean adecuados para usted y es posible que ni siquiera creen un archivo de salida utilizable.

Aquí hay un comienzo:

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

Esas configuraciones codificarán a una tasa de bits promedio particular (tasa de bits de video de 3900kbit), por lo que habrá picos en la tasa de bits.

MP4 y WebM usan diferentes códecs de video, por lo que no hay atajos; El video debe ser transcodificado.

La velocidad de codificación, por supuesto, variará enormemente según el tamaño de cuadro, la velocidad de cuadro y la configuración de calidad. Para una codificación de 720p, es posible que pueda codificar aproximadamente 1: 1 (es decir, 10 horas de video en 10 horas) en una CPU de los últimos años. Si realiza una codificación ABR de dos pasos como en el ejemplo que se proporciona en el enlace, casi duplicará eso.

thomasrutter
fuente
8

¿Doblar eso o medio cortar eso? Así que es un callejón sin salida ... No jugaré con bitrates, nunca sé qué esperar de la calidad o el tamaño ... Creo que me quedaré con este y haré que el cliente espere hasta que termine la conversión ...

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

Lo estoy publicando para futuros usuarios, en realidad gané velocidad, pero mi CPU funciona como el infierno: ¡60 a 80% en cada núcleo! Ahora creo que tomará menos tiempo: 3 días en lugar de 6 o 7 ... Espero que no se descomponga ... ^ _ ^

Gracias de todos modos hombre!

Editar: Se eliminó el modificador -sameq después de los comentarios de LordNeckbeard y neon_overload -sameq no significa la misma "calidad"

pr.nizar
fuente
3
-sameqno significa "misma calidad" y se ha eliminado aguas arriba. No lo uses. Consulte el enlace en mi comentario a su pregunta para obtener instrucciones detalladas de codificación libvpx.
llogan
2
-sameq significa el mismo cuantificador, sin embargo, es imposible comparar cuantificadores entre h.264 y VP8, por lo que incluso si esto funcionara, seguramente obtendría resultados rotos si lo usara, así que no lo haga.
thomasrutter
2
¡Gracias hombre por llamar mi atención sobre eso! Edité mi respuesta ...;) En realidad, no usé ese interruptor porque vi que se estaba volviendo aún más lento ... Incluso dejé caer ffmpeg y usé avconv: ¡ES MÁS RÁPIDO! El trabajo se realizó en un día y medio con esto: find ./ -name '* .mp4' -exec bash -c 'avconv -i "$ 0" -vcodec libvpx -acodec libvorbis -cpu-used 5 -threads 8 " $ {0 %%. Mp4} .webm "'{} \; Sé que estoy desviando el tema con este comentario, pero pensé que valía la pena decirlo ... ^ _ ^ ¡Espero que ayude a alguien! ;)
pr.nizar
En cuanto a la calidad, no puedo distinguir las diferencias entre los archivos originales y los que se transcodificaron en la web: ¡son casi las mismas cualidades de audio y video!
pr.nizar
1
Todavía se recomienda que establezca un valor de crf o bitrate en lugar de usar los valores predeterminados de ffmpeg / avconv, sea lo que sea.
thomasrutter