将MOOV原子放在MP4文件的开头是不是有缺点?

时间:2013-03-27 12:33:42

标签: h.264 mp4 video-encoding

我看到很多关于将moov原子从MP4视频容器的末尾重新定位到开头的问题,以使视频“网络优化”或更容易流式传输。似乎大多数工具在首次编码视频时都需要一个明确的选项来执行此操作,如果它完全可用的话。

如果将原子置于开头使得流式传输工作更好,并且事后做到这一点成本很高,为什么我要在最后用原子对视频进行编码?有什么好处?

2 个答案:

答案 0 :(得分:18)

在文件末尾编码MOOV通常是视频编码器的默认操作,因为它们倾向于通过一次写入输出文件来操作,并且MOOV原子的确切内容和大小只能在以后知道。完全写入音频和视频数据,因为它包含绝对文件大小。

主要的例子是FFMpeg,在这个答案中有一个解释:https://stackoverflow.com/a/8066089/393701

FFMpeg可以选择为这个原子保留空间,但不能保证数据完全适合。

将MOOV原子放在最后并没有什么特别的好处,在本地播放情况下,在回放之前寻找文件结尾的费用并不像渐进式下载传送那么昂贵。

答案 1 :(得分:5)

您总是希望将索引信息放在文件的开头,除了唯一的一个,这个布局没有隐藏的成本:在进行捕获/转码时,您可能无法预先知道需要多少空间对于那个MOOV原子一开始,它的数据也不是很好用。因此,您通常将有效负载直接写入文件,并通过添加MOOV并更新文件的其余部分来完成写入。