Что означает флаг «-movflags frag_keyframe+empty_moov»?

Что означает флаг «-movflags frag_keyframe+empty_moov»?

При кодировании видео с помощью FFMPEG, который я использую -movflags frag_keyframe+empty_moov- я нашел его где-то в сети - и он позволяет мне получить потоковое видео mp4 (без него я получаю Could not write header for output file #0 (incorrect codec parameters ?)ошибку, если хочу куда-то транслировать вывод, но он работает, если я передаю имя выходного файла, out.mp4например). Я спрашиваю, потому что этот флаг также каким-то образом портит мое видео, и я не могу загрузить его в Twitter, например, при использовании этого флага (без него Twitter принимает мое видео). То есть он портит кодировку/формат или что-то еще... есть ли какое-то решение?

решение1

Как указано здесь:https://stackoverflow.com/questions/8616855/how-to-output-fragmented-mp4-with-ffmpeg

  • frag_keyframe приводит к фрагментированному выводу,
  • empty_moov приведет к тому, что вывод будет на 100% фрагментирован; без этого первый фрагмент будет мультиплексирован как короткий фильм (с использованием moov), за которым последуют остальные медиафайлы в виде фрагментов.

А в документации FFmpeg есть объяснение того, что такое фрагментация:https://www.ffmpeg.org/ffmpeg-formats.html#mov_002c-mp4_002c-ismv

Обычно файл MOV/MP4 хранит все метаданные обо всех пакетах в одном месте (записывается в конце файла, его можно переместить в начало для лучшего воспроизведения, добавив faststart к movflags или используя инструмент qt-faststart). Фрагментированный файл состоит из нескольких фрагментов, где пакеты и метаданные об этих пакетах хранятся вместе. Запись фрагментированного файла имеет то преимущество, что файл декодируется, даже если запись прерывается (в то время как обычный файл MOV/MP4 не декодируется, если он не был должным образом завершен), и он требует меньше памяти при записи очень длинных файлов (поскольку запись обычных файлов MOV/MP4 сохраняет информацию о каждом пакете в памяти до тех пор, пока файл не будет закрыт). Недостатком является то, что он менее совместим с другими приложениями.

решение2

Попробую использовать это вместо этого:

-movflags faststart

Связанный контент