ffmpeg 输出图像文件名和时间位置
ffmpeg output images filename with time position
我正在使用 ffmpeg 通过以下命令以特定速率(每 5 秒一个屏幕截图)从我的视频中获取一些 jpg 文件:
ffmpeg -i source -f image2 -r 1/5 %d.jpg
这有效并给我顺序文件名:
1.jpg
2.jpg
3.jpg
4.jpg
如果我需要知道这些屏幕截图的拍摄时间怎么办?类似于时间戳的东西:
00:00:00.0000.jpg
00:00:05.0000.jpg
00:00:10.0000.jpg
00:00:15.0000.jpg
或秒数:
0.jpg
5.jpg
10.jpg
15.jpg
我再次尝试使用新的 -frame_pts 选项:
ffmpeg -i source -f image2 -r 1/5 -frame_pts 1 %d.jpg
我得到了类似的顺序文件名,但现在它们是从零开始的:
0.jpg
1.jpg
2.jpg
3.jpg
使用
ffmpeg -i source -vf fps=1,select='not(mod(t,5))' -vsync 0 -frame_pts 1 z%d.jpg
frame_pts 将为图像名称分配一个序列号,其中数字代表输出时基的帧位置。所以计算出来的时间位置是frame #
x timebase
。时基是输出帧率的倒数,例如对于 12 fps 流,时基是 1/12。所以输出文件 image212
表示 212
x 1/12
= 17.67s
的时间
为了表示秒,您需要生成 1 fps 流,然后每 5 帧选取一次,以从每 5 秒获取一帧。添加 vsync 0
以防止 ffmpeg 复制帧以生成恒定帧速率流。
这可能不是最好的解决方案,但它确实有效
for (i = 0; i < $duration; $i += 0.5) { //where $duration is video duration
`ffmpeg -y -i video.mp4 -ss $i -vframes 1 $i.jpg`
}
当然这会很慢,因为它会为每一帧生成 ffmpeg,但正如我所说,它可以帮助您完成工作。
我正在使用 ffmpeg 通过以下命令以特定速率(每 5 秒一个屏幕截图)从我的视频中获取一些 jpg 文件:
ffmpeg -i source -f image2 -r 1/5 %d.jpg
这有效并给我顺序文件名:
1.jpg
2.jpg
3.jpg
4.jpg
如果我需要知道这些屏幕截图的拍摄时间怎么办?类似于时间戳的东西:
00:00:00.0000.jpg
00:00:05.0000.jpg
00:00:10.0000.jpg
00:00:15.0000.jpg
或秒数:
0.jpg
5.jpg
10.jpg
15.jpg
我再次尝试使用新的 -frame_pts 选项:
ffmpeg -i source -f image2 -r 1/5 -frame_pts 1 %d.jpg
我得到了类似的顺序文件名,但现在它们是从零开始的:
0.jpg
1.jpg
2.jpg
3.jpg
使用
ffmpeg -i source -vf fps=1,select='not(mod(t,5))' -vsync 0 -frame_pts 1 z%d.jpg
frame_pts 将为图像名称分配一个序列号,其中数字代表输出时基的帧位置。所以计算出来的时间位置是frame #
x timebase
。时基是输出帧率的倒数,例如对于 12 fps 流,时基是 1/12。所以输出文件 image212
表示 212
x 1/12
= 17.67s
为了表示秒,您需要生成 1 fps 流,然后每 5 帧选取一次,以从每 5 秒获取一帧。添加 vsync 0
以防止 ffmpeg 复制帧以生成恒定帧速率流。
这可能不是最好的解决方案,但它确实有效
for (i = 0; i < $duration; $i += 0.5) { //where $duration is video duration
`ffmpeg -y -i video.mp4 -ss $i -vframes 1 $i.jpg`
}
当然这会很慢,因为它会为每一帧生成 ffmpeg,但正如我所说,它可以帮助您完成工作。