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