使用FFmpeg定位Moov原子


20

我有一个视频库,应该通过将moov原子置于视频其余部分的前面,对所有这些视频进行调整以进行网络流传输。这样可以在客户端完全下载视频之前开始播放。

有没有一种可靠的方法来确定某个视频是否已通过定位moov原子中出现了多少个字节进行了调整?这仅用于调试目的。


4
仅供参考,以供其他有兴趣将moov原子放置在开头以方便播放的人参考,请参阅中的-movflags faststart选项或qt-faststart工具ffmpeg
llogan 2013年

Answers:


22

FFmpeg不会向您显示此信息。

您可以使用AtomicParsley来解析文件,例如:

AtomicParsley input.mp4 -T 

这将向您显示原子在树中的位置。如果moov原子位于文件的开头,则它必须紧接在ftyp原子之后,因此您可以尝试解析输出,例如在Bash中,仅打印第二行并检查其是否包含moov

AtomicParsley input.mp4 -T | sed -n 2p | grep -q "moov" && echo "yup" || echo "nope"

哈哈,嗯……很高兴能为您提供帮助:)
slhck

请注意,这不适用于YouTube DASH文件。
Steven Penny

1
@StevenPenny是的,DASH段不包含整个Atom树,因为它们仅是段,而不是完整的ISO Base Media文件。
slhck

12

使用此名称qtfaststart(与ffmpeg的名称不同qt-faststart),qtfaststart -l 输入 .mp4将显示顶级原子的顺序。

$ qtfaststart -l bad.mp4
ftyp (32 bytes)
free (8 bytes)
mdat (559619 bytes)
moov (52916 bytes)
$ qtfaststart -l good.mp4
ftyp (32 bytes)
moov (52916 bytes)
mdat (559619 bytes)
$

3
如果已pip安装,则可以qtfaststart使用pip install qtfaststart
qff '16

您还可以使用Homebrew安装:brew install qtfaststart
Brandon Durham

-1

您可以使用FFprobe做到这一点:

ffprobe -v trace infile.mp4

或使用Bento4

$ mp4info infile.m4a
文件:
  主要品牌:isom
  次要版本:200
  兼容品牌:isom
  兼容品牌:iso2
  兼容品牌:mp41
  快速启动:否

$ mp4info outfile.m4a
文件:
  主要品牌:isom
  次要版本:200
  兼容品牌:isom
  兼容品牌:iso2
  兼容品牌:mp41
  快速启动:是的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.