在 ffprobe 中获取关键帧数的方法比 "show_frames" 更快?

Faster way of getting number of key frames than "show_frames" in ffprobe?

我正在使用 ffmpgffprobe 制作一个小的内部实用程序。工作正常并完成所需的工作:给出视频文件中关键帧的数量以及一些其他细节。

唉,对于大型视频文件,这将用于 show_frames 到 return 可能需要很多秒 – 然后我必须解析帧的 JSON 转储数据并保留 运行 个关键帧总数。

有没有更快的方法?也许它列在 "stream" 或 "format" 数据转储中,但我不知道它叫什么?我浏览了 ffmpgffprobe 文档,但没有找到任何其他内容。

对于 MP4 和 MOV 文件,您可以通过阅读 STSS 框的内容来获取此信息

您可以使用像 MP4parser 这样的工具,它会生成一个日志文件,其中包含如下条目:

/moov/trak/mdia/minf/stbl/stss                              @ 0x1d7218e
  Box size: 0x74    version: 0x0    flags: 0x0
  entry_count:              0x19
    sample_number:
    0x1    0x86    0x180    0x27a    ....

条目计数(十六进制)就是您想要的数字。

另外,atomicparsley 还会告诉您 STSS 在文件中的位置,然后您可以直接读取它。