¿Qué línea de comando ffmpeg produce video más compatible en todos los dispositivos?

15

Así que tengo usuarios que dicen que los videos H264 MP4 no reproducen audio en el iPad de Apple y lucho para que los videos MP4 se reproduzcan correctamente en Android también.

Hay dos líneas de comando diferentes, la línea de comando es la que debería usar.

-profile:v baseline -level 3.0

Y:

-vpre baseline

¿Qué debo usar para que funcione en todos los dispositivos?

También he leído que podría ser la tasa de bits de audio mi tasa de bits de audio actual es

-ab 192k

Quizás debería bajarlo a

-ab 160k

Línea de comando utilizada para codificar audio MP3 en archivos MP4.

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1
C0nw0nk
fuente

Respuestas:

25

Primero, debe comprender la diferencia entre usar perfiles FFmpeg y las opciones de línea de comandos directa. -vpreutiliza un .ffpresetarchivo ubicado en /usr/share/ffmpeg/o donde se instaló ffmpeg. Es una serie de pares de opción = valor , y en su caso habría tenido que definirlo usted mismo (al menos no conozco un valor baselinepredeterminado enviado con ffmpeg).

Recomendaría no usar presets a menos que lo haya creado usted mismo y sepa para qué sirven las opciones de línea de comando. He estado usando ffmpeg durante años y nunca he usado preajustes, nunca he tenido que hacerlo.

Una línea de comando típica para generar video H.264 compatible con la mayoría de los dispositivos sería:

ffmpeg -i <input> \
  -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -c:a aac -ac 2 -b:a 128k \
  -movflags faststart \
  output.mp4

Algunas notas:

  • H.264 / AAC es la mejor combinación para un amplio soporte en HTML5. Sin embargo, los navegadores que no tengan decodificadores H.264 también necesitarán un video VP8 / Vorbis. Para algunos ejemplos de línea de comandos, vea esta respuesta . Consulte también la página de soporte del navegador de Wikipedia para otros códecs.

  • H.264 también funciona bien en dispositivos móviles.

  • Las opciones -profile:v baseliney -level 3.0solo son necesarias para los dispositivos móviles antiguos que no pueden manejar las funciones intensivas de CPU de H.264. Por lo general, puede omitirlos o usarlos -profile:v main.

  • El CRF establece la calidad (18–28 es un rango razonable, menor significa mejor calidad). Por supuesto, también puede usar una tasa de bits fija con -b:v 1000ko similar. Elija una tasa de bits que coincida con la resolución del video. Es posible que algunos dispositivos de baja potencia no puedan manejar velocidades de bits innecesariamente altas.

  • La -movflags faststartopción es esencial para la transmisión, ya que mueve los metadatos del contenedor al principio del archivo en lugar de dejarlo al final. Esto permitirá que la reproducción se inicie inmediatamente en lugar de tener que esperar a que el archivo se cargue por completo.

Sin embargo, todo se reduce a encontrar el mínimo común denominador para todos los dispositivos a los que se dirige, lo que puede no existir siempre. Ciertamente, no querrás usar ningún otro códec (es decir, peor ) que H.264. De hecho, tampoco sería prudente ofrecer video codificado en línea de base a clientes que puedan decodificar perfil principal o alto. Cambiaría la calidad por una menor complejidad de decodificación.

Desde mi experiencia, los dispositivos Android pueden reproducir Baseline H.264 con audio AAC-LC en un contenedor MP4 perfectamente. Nunca he tenido problemas con eso. De hecho, algunos dispositivos también pueden reproducir perfiles más altos, aunque no es oficialmente compatible. iOS generalmente también es compatible con Baseline H.264, pero ciertamente también puedes usar el perfil principal en algunos dispositivos. Vea esta publicación (que está un poco desactualizada) para obtener algunas pautas.

Si tiene usuarios con problemas de reproducción, necesitará averiguar qué video está causando problemas y obtener más detalles sobre qué hardware y software de reproducción están utilizando. Entonces podríamos hablar sobre la resolución de problemas de ese caso en particular.

slhck
fuente
1
Gracias por una respuesta tan detallada que sigo releyéndola :) También codifico con -acodec libmp3lame -ab 160k y los usuarios que usan dispositivos Apple iPad dicen que pueden ver el video pero no escuchar el sonido, así que supongo que fue algo relacionado con El códec de audio o bitrate. Los usuarios de Android y Windows dicen que está bien y tienen audio para la transmisión de video, así que no estoy seguro de por qué usar libmp3lame en lugar de aac podría causar que los usuarios de Apple no tengan audio para el video.
C0nw0nk
Raramente he visto audio MP3 usado en contenedores MP4. Quizás AAC es la opción más segura.
slhck
Bueno, solo estoy usando MP3 porque seguí obteniendo bit_rate, errores de ancho de altura con aac, cambié a libmp3lame y todos esos errores se detienen y los usuarios de Apple dicen que no tienen audio, pero todos los demás pueden ver el mismo archivo y está bien con el sonido en todos los demás dispositivos, tal vez encontré un error que sabe :( Y de acuerdo con Apple MP3 debería estar bien developer.apple.com/library/mac/documentation/…
C0nw0nk
@ user2068371 Ese enlace se refiere al flujo de transporte MPEG-2, no al formato contenedor MP4.
llogan el
1
@ user2068371 Nunca he tenido problemas con MediaElementjs. H.264 y MP3 no son compatibles con todos los navegadores . Para video HTML5 específicamente, siempre use H.264 / AAC y posiblemente VP8 / Vorbis como alternativa. Si tiene problemas con una conversión AAC, haga una nueva pregunta al respecto y asegúrese de incluir también la salida completa de la línea de comandos.
slhck