我有一个小视频文件,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 应该会给您所需的数字。
注意:不能保证列出的持续时间是准确的。