Почему Quicktime не воспроизводит файл фильма, закодированный FFmpeg?

Когда я пытаюсь открыть фильм, который я только что создал с помощью команды:

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

Я получаю сообщение об ошибке 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. 

Я использовал ту же команду для набора изображений, созданных с временным интервалом iSight, но в этом случае вышеуказанные изображения взяты из цифровой камеры. Разрешение намного выше, но я масштабирую его до 640×480, и я ничего не вижу на выходе, что говорит о проблеме:

 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 

Против рабочего фильма:

 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 

И для выхода:

 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) 

Против рабочего:

 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) 

Помимо того, что рабочий фильм длиннее и имеет более низкое разрешение источника, единственное различие, которое я вижу, заключается в том, что в видеопотоке упоминается «[SAR 1: 1 DAR 4: 3]», но я понятия не имею, что это Есть, или как попытаться заставить его в нерабочем фильме.

Обновление: я просто загрузил VLC, и он отлично воспроизводит фильм. Поэтому я знаю, что ffmpeg здесь не виноват.

One Solution collect form web for “Почему Quicktime не воспроизводит файл фильма, закодированный FFmpeg?”

Основываясь на этом ответе StackOverflow, я бы добавил -pix_fmt yuv420p к вашей команде, как это; В одном из комментариев упоминается добавление -vcodec libx264 так что он включен здесь:

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

Или вы можете использовать фильтр формата . В этом примере используется фильтр масштаба вместо -s , а фильтр формата вместо -pix_fmt :

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

Также в официальной FFmpeg Wiki в разделе «Кодирование для немых игроков»; Акцент мой:

Возможно, вам понадобится использовать -pix_fmt yuv420p для вывода на работу в QuickTime и большинстве других игроков. Эти игроки поддерживают только цветовое пространство YUV с 4-х и 2-кратной подвыборкой для видео H.264. В противном случае, в зависимости от вашего источника, ffmpeg может выводить в формат пикселей, который может быть несовместим с этими игроками.

Давайте будем гением компьютера.