AoE*_*ter 6 filenames jpeg screenshot ffmpeg frame
我正在使用 ffmpeg 通过以下命令以特定速率(每 5 秒一个屏幕截图)从我的视频中获取一些 jpg:
ffmpeg -i source -f image2 -r 1/5 %d.jpg
Run Code Online (Sandbox Code Playgroud)
这有效并给我顺序文件名:
1.jpg
2.jpg
3.jpg
4.jpg
Run Code Online (Sandbox Code Playgroud)
如果我需要知道这些屏幕截图是在什么时间拍摄的怎么办?类似时间戳的东西:
00:00:00.0000.jpg
00:00:05.0000.jpg
00:00:10.0000.jpg
00:00:15.0000.jpg
Run Code Online (Sandbox Code Playgroud)
或秒数:
0.jpg
5.jpg
10.jpg
15.jpg
Run Code Online (Sandbox Code Playgroud)
我再次尝试使用新的-frame_pts选项:
ffmpeg -i source -f image2 -r 1/5 -frame_pts 1 %d.jpg
Run Code Online (Sandbox Code Playgroud)
我有类似的顺序文件名,但现在它们从零开始:
0.jpg
1.jpg
2.jpg
3.jpg
Run Code Online (Sandbox Code Playgroud)
用
ffmpeg -i source -vf fps=1,select='not(mod(t,5))' -vsync 0 -frame_pts 1 z%d.jpg
Run Code Online (Sandbox Code Playgroud)
frame_pts 将为图像名称分配一个序列号,其中数字表示根据输出时基的帧位置。所以计算出的时间位置是frame #x timebase。时基是输出帧率的倒数,例如对于 12 fps 流,时基是 1/12。所以输出文件image212代表一个时间212x 1/12=17.67s
要表示秒,您需要生成一个 1 fps 的流,然后每 5 帧选取一次,以每 5 秒获取一个帧。将vsync 0 被添加到防止FFMPEG从复制帧,以产生恒定的帧速率的流。