¿Qué cantidad de scripts de ffmpeg necesito para obtener un "Video para todos" compatible con HTML5?

12

¿Qué lista de comandos debo hacer en ffmpeg / mencoder / some_other_CLI_app para obtener un video en todos los formatos correctos para usar Video for Everybody ?

es decir, ¿hay alguna sutileza que impida que haya un tutorial mecánico que diga

VIDEO=video.mp4
TYPE=$(ffmpeg --find-information-about-the-video ... )
ffmpeg ... > video.mov
ffmpeg ... > video.flv
ffmpeg ... > video.webm
ffmpeg ... > video.h.264
...

Luego, copie y pegue el código Video for Everybody en su página.

Mi objetivo es tener un video incrustado en mi página web personal alojado por mí. Se prefiere HTML5 con flash fallback, por lo que la forma más simple parece ser Video para todos. Pero esa página deja la parte más complicada, codificando el video en todos los formatos diferentes, para que el lector lo descubra leyendo un artículo largo y completo sobre formatos de video . Seguramente esto no es necesario. Podría proporcionar una lista de comandos para que un usuario convierta ciegamente un archivo de audio en diferentes formatos. Esperemos que un gurú ffmpeg pueda hacer lo mismo para el video.

John Baber-Lucero
fuente
1
Comentario menor a sus ejemplos de pseudocódigo: No hay .movpara video HTML5, y h.264tampoco hay extensión. No es .264 , que es el bytestream Anexo B prima para unidades NAL. La codificación de video no es ciencia de cohetes, pero debe invertir un poco de tiempo para conocer los conceptos.
slhck

Respuestas:

21

Nota: Esta respuesta fue muy editada desde su publicación original. Es 2017 ahora; la transmisión funciona de manera diferente a lo que solía hacerlo. Esta guía asume la descarga progresiva simple de una transmisión de video a una resolución dada, sin transmisión adaptativa.

Requisitos

En primer lugar, asegúrese de descargar una ffmpegversión reciente (descargue una versión estática; no llame apt-get install ffmpego similar). Idealmente, compílalo tú mismo . No lleva mucho tiempo.

Para generar videos compatibles con la mayoría de los navegadores, consulte siempre la tabla de compatibilidad más reciente . No existe un códec / formato único que funcione en todos los navegadores, pero si genera H.264 en MP4 y VP9 en WebM, con el códec de audio respectivo, tendrá soporte para Chrome, Firefox, Safari y algunas versiones de IE.

WebM (VP9 / Vorbis)

Siga las recomendaciones de la guía FFmpeg VP9 y utilice un enfoque de codificación de dos pasos con restricciones de velocidad:

ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 1 -f webm /dev/null && \
ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libvorbis -pass 2 output.webm

La tasa de bits objetivo depende de su resolución, velocidad de fotogramas, el tipo de contenido y la calidad que desea. 2.5 MBit / s debería ser un buen compromiso para el video HD a 30 fps. Consulte esta guía de Google para obtener algunas recomendaciones.

MP4 (H.264 / AAC)

Siga las recomendaciones de la guía FFmpeg H.264 y utilice un enfoque de codificación de dos pasos con restricciones de velocidad:

ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -c:a aac -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -movflags faststart output.mp4

Aquí, la tasa de bits objetivo debería ser aproximadamente un 50% más alta que para el video VP9, ​​ya que H.264 no es tan eficiente. Agregue la -movflags faststartopción al segundo pase para acelerar la carga inicial del video.

Para configurar las opciones de audio, consulte la guía de codificación AAC .

slhck
fuente
1
La versión 2013-12-19 de uno de sus párrafos se corta a mitad de la oración. "El audio vuelve a los 128 kBit / s por defecto, pero puede establecer q: a para una tasa de bits variable, donde los valores oscilan entre 0 y 500. 100 es el valor predeterminado y más alto significa mejor. Si"
Alan De Smet
@slhck tiene mucho sentido, pero mis dos centavos son que suelte Ogg y lo reemplace con mpegts / m3u8 para admitir todos los dispositivos iOS o aquellos que aceptan HLS. Puede reutilizar los archivos .mp4 y simplemente agregar el procesamiento mpeg-ts en ffmpeg.
Paul Gregoire
@Mondain De hecho, pero MPEG-TS / .m3u8 generalmente no es video compatible con HTML5. Necesita un servidor HLS y necesita saber un poco más sobre la transmisión, que no está realmente dentro del alcance de esta pregunta.
slhck
Buenos puntos, pero desde mi experiencia hasta ahora un simple servidor http puede servir m3u8 a una etiqueta de video. Lo único que normalmente se necesita hacer es agregar los tipos mime para m3u8 y ts a la configuración del servidor respectivo.
Paul Gregoire