为什么 ffprobe 报告的帧数不正确?

为什么 ffprobe 报告的帧数不正确?

我有一个小视频文件,ffprobe 将其描述为:-

Input #0, avi, from 'sample.avi': 
Metadata: 
encoder : Lavf55.12.100 
Duration: 00:00:35.00, start: 0.000000, bitrate: 546 kb/s 
Stream #0:0: Video: msmpeg4v3 (MP43 / 0x3334504D), yuv420p, 320x240, 
             506 kb/s, 200 fps, 200 tbr, 200 tbn, 200 tbc 

由于视频长 35 秒,帧速率为 200 fps,我预计视频中有 (35 x 200) = 7000 帧。

如果我使用 ffmpeg 从视频中提取帧图像,我实际上会得到 6999 张图像(我想已经足够接近了)。我为此使用的命令是:

c:\> ffmpeg -i sample.avi  -f image2 -c:v png Img%%04d.png

注意:从 WinXP CLI 运行命令时需要“%%”

但是,使用以下命令:-

c:\> ffprobe -select_streams v -show_frames sample.avi > frames.lis 

计算 frames.lis 中有多少个 [FRAME] 项,得出的帧数是 1023 帧,而不是 7000 帧。

有什么解释吗?

以下是一个非常相似的文件链接,其行为方式相同(~7MB):

http://www.filedropper.com/sample_65

左键单击页面上的“下载此文件”图像。

我在 WinXP-SP3 下使用 2014 年 4 月 17 日静态 Win32 版本的 ffmpeg“ffprobe”。

如果有其他方法可以做到这一点,我主要想尝试为一系列视频文件构建“帧号”与“时间”的表格,以供其他应用程序使用。

谢谢。

答案1

1023 不正确的原因是什么?您指的 fps 是标头信息,因此很容易不正确。

在 png 的输出中,是否有很多重复的帧?Ffmpeg 可能会帮你一个忙,输出复制的帧以匹配报告的 fps 和持续时间。

我推荐使用 ffprobe。除非您实际解码帧并进行计数,否则很难 100% 地确定。因此,使用 -count_frames 或 -show_frames 应该会给您所需的数字。

注意:不能保证列出的持续时间是准确的。

相关内容