¿Por qué Quicktime no puede reproducir un archivo de película codificado por FFmpeg? [duplicar]


34

Cuando intento abrir una película que acabo de crear con el comando:

ffmpeg -pattern_type glob -i '*.JPG' -s 640x480 movie.mp4

Recibo un error de QuickTime:

The document “movie.mp4” could not be opened.
The file may be damaged or may not be a movie file that is compatible with QuickTime Player.

Utilicé el mismo comando en un conjunto de imágenes generadas a partir de un lapso de tiempo iSight, pero en este caso las imágenes anteriores son de una cámara digital. La resolución es mucho más alta, pero la estoy ampliando a 640x480 y no veo nada en la salida que sugiera un problema:

Input #0, image2, from '*.JPG':
  Duration: 00:00:04.76, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj422p(pc), 4928x3264, 25 tbr, 25 tbn, 25 tbc

vs. la película de trabajo:

Input #0, image2, from '*.JPG':
  Duration: 00:01:23.72, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj420p(pc), 640x480 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc

Y para la salida:

Output #0, mp4, to 'movie.mp4':
  Metadata:
    encoder         : Lavf55.19.104
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj422p, 640x480, q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)

vs. para el que trabaja:

Output #0, mp4, to 'movie.mp4':
  Metadata:
    encoder         : Lavf55.19.104
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p, 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)

Además de que la película en funcionamiento es más larga y tiene una resolución de fuente más baja, la única diferencia que puedo ver es que hay un "[SAR 1: 1 DAR 4: 3]" adicional mencionado en la transmisión de video, pero no tengo idea de qué es esto es, o cómo tratar de forzarlo en la película que no funciona.

Actualización: Acabo de descargar VLC y reproduce bien la película. Entonces sé que ffmpeg no tiene la culpa aquí.


2
Para el futuro, cuando pregunte sobre ffmpeg, incluya siempre la salida de línea de comando completa y sin cortes. Debería haberle dicho algo sobre el formato de píxeles que no es compatible con algunos reproductores, si no me equivoco (y si tiene una versión reciente).
— slhck

ffprobe video.mp4se puede usar para verificar qué formato de píxel se usa.
— l --marc l

Respuestas:


47

Según esta respuesta de StackOverflow , agregaría -pix_fmt yuv420pa su comando de esta manera; uno de los comentarios menciona agregar -vcodec libx264también, así que está incluido aquí:

ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 -s 640x480 \
-pix_fmt yuv420p movie.mp4

O podrías usar el filtro de formato . Este ejemplo usará el filtro de escala en lugar de -s, y el filtro de formato en lugar de -pix_fmt:

ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 \
-vf scale=640:-2,format=yuv420p movie.mp4

También elaborado en el Wiki oficial de FFmpeg bajo el título "Codificación para jugadores tontos"; énfasis mío:

Es posible que deba usar -pix_fmt yuv420ppara que su salida funcione en QuickTime y en la mayoría de los otros reproductores. Estos reproductores solo admiten el espacio de color plano YUV con submuestreo de croma 4: 2: 0 para video H.264. De lo contrario, dependiendo de su fuente, ffmpeg puede salir a un formato de píxel que puede ser incompatible con estos reproductores.


66
De hecho, ffmpeg estaba eligiendo la codificación predeterminada de yuv422p que molestaba a Quicktime. Agregar lo -pix_fmt yuv420presolvió para mí!
— Nick Desaulniers

solo la primera solución funcionó para mí
— PR
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.