ffmpeg:提取帧并获取其精确的时间戳

ffmpeg:提取帧并获取其精确的时间戳

我正在尝试从中提取帧可变帧率每 5 秒播放一次视频,并提取每帧的准确时间戳。这是我目前所得到的:

-i inputfile -vstats_file vstats.log  -vsync 2 -vcodec png -r 0.2 -f image2pipe -

这就是我得到的:

frame=     1 q= 0.0 f_size= 136261 s_size=      133kB **time= 5.000** br=   218.0kbits/s avg_br=   218.0kbits/s type= I
frame=     2 q= 0.0 f_size= 139382 s_size=      269kB **time= 10.000** br=   223.0kbits/s avg_br=   220.5kbits/s type= I
frame=     3 q= 0.0 f_size= 141631 s_size=      407kB **time= 15.000** br=   226.6kbits/s avg_br=   222.5kbits/s type= I

我需要用于提取的帧的精确时间戳,以便稍后我可以根据生成的缩略图准确地剪切视频。

另外,有没有办法将 vstats 打印到 stdout 而不是文件?

答案1

我不确定你尝试做了什么,但如果它对你有用,那就没问题了......

无论如何,对于跳帧我可以使用选择视频过滤器(确保已启用 libavfilter)。对于帧信息,我会使用展会信息视频过滤器。

你的命令应该类似如下:

ffmpeg -i inputfile -vf '[in]select=not(mod(n\,150))[s1];[s1]showinfo[out]' -vcodec mpeg2video outputfile

(其中 150 帧为 5 秒 * 30fps)

相关内容