“-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

相关内容