ffprobe需要多少字节?

3
我想使用ffprobe查看媒体文件的信息。但是,这些文件不在我的本地磁盘上,我必须从远程存储中读取。我可以读取前n个字节,将它们写入临时文件并使用ffprobe读取信息。我想知道最小的n值。
我测试了一些文件,512KB适用于我测试的所有文件。但是,我不确定是否适用于所有媒体文件。
2个回答

2

ffprobe(和ffmpeg)在打开输入时旨在解析两个内容:

  1. 输入容器的头文件
  2. 来自每个流的有效负载数据,足以确定编解码器属性和帧速率等重要流参数。

头文件大小通常与文件中的数据包数量成比例,即3小时的MP4文件将具有比3分钟的MP4文件更大的头文件。 (如果头文件在文件末尾,则访问前512 kB将无法帮助)

从每个流中,ffmpeg将解码数据包直到其流属性被填充。消耗的字节数取决于流比特率以及存在多少个流。

因此,“我不确定这是否适用于所有媒体文件”的严格回答是不会适用于所有媒体文件。


这是否意味着我们无法确定需要多少字节,但ffprobe知道并在读取足够的内容后停止(因此,如果通过http进行阅读,则可能会在下载所有内容之前关闭连接)? - W. Zhu
是的,为了探测目的,它将只读取足够的内容进行评估,或者直到达到analyzeduration或probesize限制。 - Gyan

0
简而言之:首先使用ffprobe检查文件的开头,然后检查文件的结尾,最后检查整个文件。
我遇到了同样的问题,并通过循环解决了它:
  1. 我获取开头的字节,直到ffprobe返回0的退出码(重要的是将新的字节追加到已获取的字节中)。
  2. 如果从开头算起的前1024个字节没有有效的结果,我从文件的末尾重新开始。
  3. 如果从结尾算起的后1024个字节仍然没有结果,我认为这个文件是一个“难题”,并且完全下载它以应用ffprobe。
我发现512个字节足够了,其中包含了头部信息。

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