Почему видео из ffmpeg не отображается в QuickTime, iMovie или в быстром предварительном просмотре?

Я использую ffmpeg для случайного преобразования видео в течение достаточно долгого времени и недавно обнаружил, что видео H.264 (libx264), созданные с помощью ffmpeg, не работают в iMovie или QuickTime (а также они не будут воспроизводиться или показывать предварительный просмотр в Finder с помощью функция быстрого просмотра).

Если я создаю видео с помощью приложений OS X, которые внутренне используют ffmpeg (например , MP4tools или Adapter ), видео работает нормально, но не когда я пытаюсь использовать ffmpeg напрямую, например, для преобразования видео:

# ffmpeg -i input.avi output.mp4

или объединить несколько изображений в видео:

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

iMovie просто импортирует видео как черное/пустое, быстрый предварительный просмотр просто показывает информацию о файле (но не предварительный просмотр видео), а Quicktime сообщает мне, что не может его воспроизвести:

документ не может быть открыт

В чем дело?!

Ответы (2)

Короче говоря, вам (часто) необходимо включать аргумент -pix_fmt yuv420pпри использовании ffmpeg для создания контента H.264 для программного обеспечения/устройств Apple и множества других декодеров, которые не обрабатывают yuv444p.

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

Это не упоминается в выводе при использовании значений по умолчанию, но его можно найти в их руководстве по Encode/H.264 .

Оказывается , ffmpeg выбрал формат пикселей по умолчанию yuv444p для кодирования libx264 (при некоторых обстоятельствах), который несовместим с программными/аппаратными декодерами H.264 от Apple (и , возможно, не очень широко совместим в целом? ). К сожалению, маловероятно, что это изменится, и об этом нет никаких предупреждений, так что просто кое-что, что вам нужно знать, если вы используете ffmpeg для создания файлов H.264.

Насколько я могу судить, при преобразовании видео, которое уже использует yuv420p, оно сохранится, но при преобразовании из чего-то более экзотического (например, изображения или GIF или что-то еще) формат пикселей должен быть указан для общей совместимости с Apple.

Не помогает в текущей версии iMovie (Yosemite). Любые другие идеи?
Можете ли вы опубликовать вывод ffprobe -select_streams v -show_streams output.mp4?
+1, даже видео yuv420p не воспроизводятся в High Sierra.
Не только Apple, но и проигрыватель Windows Media иногда не может воспроизвести вывод, если вы не укажете эту опцию. И если вы попытаетесь воспроизвести его с другими игроками, это будет просто серый экран с артефактами, показывающими на видео.
Просто хотел добавить, что это сработало для меня в 2020 году с Catalina 10.15.5 и ffmpeg 4.3. Спасибо!

В дополнение к yuv420p, некоторые открытия по кодекам в 2021 году (Catalina 10.15.7 и Monterey 12.0.1, imovie 10.3 и 10.2.5, ffmpeg 4.4).

Не все *264 кодеки одинаковы. Кодек -c:v libx264не может быть последовательно импортирован. Вместо этого используйте -c:v h264_videotoolbox.

Это верно для «Apple Silicon» (он же ARM) и процессоров Intel.

Ни libx265, ни hevc_videotoolbox не могут быть последовательно импортированы, если вообще импортированы.

(редактировать, несколько дней спустя у меня было видео, которое не импортировалось с -c:v hd264_videotoolbox. Оно работало с , поэтому нужно попробовать еще одну вещь )-c:v copy -c:a copy

Ну, последняя строка, копия c:v, означает, что она не создавала новое видео, а просто скопировала все, как было, из какого-то другого источника.