Почему 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 может выводить в формат пикселей, который может быть несовместим с этими игроками.

Interesting Posts

Как сделать дубликат всего жесткого диска

Поставщик Microsoft.Jet.OLEDB.4.0 не зарегистрирован на локальной машине

Обновление до Ubuntu 9.10 от Ubuntu 9.04

Кодирование URL с использованием C #

Обои для рабочего стола Windows все белые после холодной перезагрузки и без прохода

Узнайте, какая программа работает в процессе java.exe

Mac – резервное копирование только определенной папки с использованием машины времени

Сделать определенную область растрового изображения прозрачной на ощупь

Сетевая проблема netsh

Как увеличить чувствительность мыши до нормального предела?

Восстановить пул ZFS после создания над ним

Что такое SuppressWarnings («unchecked») в Java?

Как отключить автоматическое изменение раскладки клавиатуры в Windows 8?

XMLHttpRequest не может загрузить файл. Запросы на кросс-начало поддерживаются только для HTTP

Черное прозрачное оверлейное изображение на изображении с помощью CSS?

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