如何使用 -r 选项从视频中提取与 ffmpeg 提取的帧相关的时间戳?

如何使用 -r 选项从视频中提取与 ffmpeg 提取的帧相关的时间戳?
ffmpeg -i myvid.mp4  -r  25  -t  100  image-%d.jpeg 

这是我用来提取帧的命令,它的工作方式与我预期的一样。但是,我还想查看帧的时间戳。无论精度如何。100 毫秒对我来说已经足够了。ffmpeg 可以做到这一点吗?

提供更多详细信息,

当我运行上述命令时,我得到了大约 100 张 JPEG,我猜这些 JPEG 与视频帧之间存在 1 对 1(或多对 1)的对应关系。我想知道作为 JPEG 图像“i”输出的帧的时间戳。

另外我尝试了 ffprobe,但发现它甚至连视频时长报告都不准确 :(

答案1

您可以做的是通过使用过滤器进行过滤来“模拟”图像写入过程fps,然后使用它ffprobe来显示生成的帧的时间戳。这意味着在 25 fps 下,第 50 帧(如第 50 张图像)的 PTS 将为 2.00 秒。

你可以这样做:

ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0

将会输出:

0
0.04
0.08
0.12
0.16
...

这些是每个输出图像的时间戳。您实际上可以将帧列表和时间戳组合起来:

ls -1 图像-*.jpeg > 图像.txt
ffprobe -f lavfi -i "movie=input.mp4,fps=fps=25[out0]" -show_frames -show_entries frame=pkt_pts_time -of csv=p=0 > frames.txt
粘贴图像.txt 框架.txt > 组合.txt

将创建一个文件,内容如下:

image-0001.jpeg 0
image-0002.jpeg 0.04
image-0003.jpeg 0.08
image-0004.jpeg 0.12

请注意,如果帧数太多或信息输出行数太多,这可能会导致多余的行。这似乎有点不准确。

相关内容