¿Por qué el video de ffmpeg no se muestra en QuickTime, iMovie o vista previa rápida?

He estado usando ffmpeg para la conversión de video ocasional durante bastante tiempo y recientemente descubrí que los videos H.264 (libx264) generados por ffmpeg no funcionan en iMovie o QuickTime (ni se reproducirán ni mostrarán una vista previa en Finder con la función de vista rápida).

Si genero videos usando aplicaciones OS X que internamente usan ffmpeg (por ejemplo , MP4tools o Adapter ), los videos funcionan bien, pero no cuando trato de usar ffmpeg directamente, por ejemplo, para convertir un video:

# ffmpeg -i input.avi output.mp4

o para combinar algunas imágenes en un video:

# ffmpeg -f image2 -pattern_type sequence image-%04d.png output.mp4

iMovie solo importa el video en negro/en blanco, la vista previa rápida solo muestra la información del archivo (pero no la vista previa del video) y Quicktime me dice que no puede reproducirlo:

no se pudo abrir el documento

¡¿Que esta pasando?!

Respuestas (2)

En resumen, (a menudo) debe incluir el argumento -pix_fmt yuv420pcuando usa ffmpeg para generar contenido H.264 para software/dispositivos de Apple y un montón de otros decodificadores que no manejan yuv444p.

# ffmpeg -i input.avi -pix_fmt yuv420p output.mp4

Esto no se menciona en el resultado cuando se usan los valores predeterminados, pero se puede encontrar en su guía Encode/H.264 .

Resulta que ffmpeg ha elegido un formato de píxel predeterminado de yuv444p para la codificación libx264 (en algunas circunstancias), que no es compatible con los decodificadores H.264 de software/hardware de Apple (¿y quizás no sea muy compatible en general? ). Desafortunadamente, parece poco probable que esto cambie, y no hay advertencia al respecto, por lo que es algo que debe saber si usa ffmpeg para crear archivos H.264.

Por lo que puedo decir, si convierte un video que ya usa yuv420p, lo mantendrá, pero si convierte algo un poco más exótico (por ejemplo, imágenes o un GIF o lo que sea), el formato de píxel debe especificarse para la compatibilidad general de Apple.

No ayuda en la versión actual de iMovie (Yosemite). ¿Alguna otra idea?
¿Puedes publicar la salida de ffprobe -select_streams v -show_streams output.mp4?
+1, incluso los videos yuv420p tampoco se reproducen en High Sierra.
No solo Apple, sino también el reproductor multimedia de Windows a veces no puede reproducir la salida si no especifica esa opción. Y si intenta jugarlo con otros jugadores, sería una pantalla gris completa con artefactos que se muestran en el video.
Solo quería agregar que esto funcionó para mí en 2020, con Catalina 10.15.5 y ffmpeg 4.3. ¡Gracias!

Además de yuv420palgunos descubrimientos sobre códecs en 2021 (Catalina 10.15.7 y Monterey 12.0.1, imovie 10.3 y 10.2.5, ffmpeg 4.4).

No todos los *264 códecs son iguales. El -c:v libx264códec no se puede importar de forma coherente. En su lugar, utilice -c:v h264_videotoolbox.

Esto es cierto en el "silicio de Apple" (también conocido como ARM) y en las CPU de Intel.

Ni libx265 ni hevc_videotoolbox se pueden importar de manera consistente, si es que se pueden importar.

(editar, días después, tenía un video que no se importaría con .-c:v hd264_videotoolbox Funcionó con , así que una cosa más para probar)-c:v copy -c:a copy

Bueno, la última línea, copia c:v significa que no creó un nuevo video, simplemente copió todo tal como estaba de alguna otra fuente.