Чому Quicktime не може відтворити файл фільму, закодований FFmpeg? [дублікат]


34

Коли я намагаюся відкрити фільм, щойно створив команду:

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, але в цьому випадку наведені вище зображення є з цифрової камери. Роздільна здатність набагато вища, але я масштабую її до 640x480, і я не бачу нічого у висновку, що говорить про проблему:

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.


2
Надалі, коли запитаєте про ffmpeg, будь ласка, завжди включайте повний нерозрізаний вихідний командний рядок. Це мало б сказати вам про те, що формат пікселів не сумісний з деякими програвачами, якщо я не помиляюся (і якщо у вас є остання версія).
slhck

ffprobe video.mp4можна перевірити, який формат пікселів використовується.
l --marc l

Відповіді:


47

На підставі цієї відповіді 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 під заголовком «Кодування для німих гравців»; акцент міни:

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


6
Дійсно, ffmpeg вибирав кодування за замовчуванням yuv422p, що засмучувало Quicktime. Додавання -pix_fmt yuv420pвирішило це для мене!
Нік Десольньє

тільки перше рішення спрацювало для мене
PR
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.