在FFmpeg中进行后期处理以移动MP4文件中的“moov原子”(qt-faststart)

37

有没有可能在命令行中运行ffmpeg,将'moov atom'元数据放置在MP4文件的开头,或者在ffmpeg中作为后处理操作运行qt-faststart,以便通过互联网流式传输生成的文件?

当然我可以将其作为单独的命令运行,但更希望它成为:

  • ffmpeg中的选项,或者
  • 通过ffmpeg转换视频文件时的后转换命令行选项的一部分

编辑 1

http://ffmpeg.org/ffmpeg.html#mov

MOV / MP4 muxer

The muxer options are:

‘-moov_size bytes’

Reserves space for the moov atom at the beginning of the file instead of 
placing the moov atom at the end. If the space reserved is insufficient, 
muxing will fail.

是的,可以将moov原子移动到文件开头,请参考:https://dev59.com/6mgu5IYBdhLWcg3wK0Gr#44282151。 - Abdullah Farweez
3个回答

74
看起来FFmpeg已经加入了faststart支持。请参见FFmpeg格式文档

-movflags faststart

运行第二次通过将moov原子移动到文件顶部。这个操作可能需要一段时间,并且在各种情况下(例如分段输出)不起作用,因此默认情况下未启用。


1
这对我有用。它进行第二次扫描,然后将moov原子移动到开头。干杯! - ipruthi
只有当我使用了-codec:v libx264参数时,这才对我起作用。为了支持这一点,我不得不使用--enable-gpl --enable-libx264选项配置ffmpeg。 - Aaron Silverman
这个功能是在哪个版本中添加的? - DanMan
1
Android的视频元素可以通过HTTP流媒体开始播放视频,即使moov原子位于结尾。这是如何实现的? - Sagar Pilkhwal
4
它可能使用HTTP Range标头从文件末尾请求字节。网络服务器必须支持它。与下载恢复相同的机制。 - Aleksandr Dubinsky
5
ffmpeg -i input.mp4 -vcodec copy -acodec copy -movflags faststart output.mp4 - Xueshi

8

在ffmpeg转换过程后,最终需要设置和运行qt-faststart。


25
这更像是一条评论而不是答案。@stharward的回复更符合答案的要求。 - Samuel

3

FFmpeg有一个选项可用于平滑流媒体(smooth streaming)

-movflags isml+frag_keyframe

同时,当录制过程中出现断电情况时,它也非常有用,可以避免视频损坏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接