FFmpeg固定间隔截图:如何让文件名包含时间戳/秒数?
用FFmpeg生成带时间信息的截图文件名
我来帮你搞定这个FFmpeg截图文件名的问题!你想要把原本的序列编号改成对应时间的文件名,分两种场景给你具体的解决方案:
一、秒数格式(0.jpg、5.jpg、10.jpg...)
你提到的-frame_pts选项刚好能派上用场,它会把帧的PTS(显示时间戳)作为文件名。结合你每5秒抽1帧的需求,只需要在原命令里加上-frame_pts 1,同时确保视频同步模式为可变帧率(避免PTS被重写),命令如下:
ffmpeg -i source -r 1/5 -vsync vfr -frame_pts 1 %d.jpg
关键参数解释:
-vsync vfr:强制使用可变帧率,让FFmpeg保留原始帧的时间戳,不会重新生成连续的PTS-frame_pts 1:启用用PTS作为文件名的功能,这样每5秒抽取的帧对应的PTS就是0、5、10...,正好对应你想要的秒数文件名
二、时间戳格式(00:00:00.0000.jpg、00:00:05.0000.jpg...)
这种格式需要用到FFmpeg的strftime功能,它支持按自定义时间格式生成文件名。命令如下:
ffmpeg -i source -r 1/5 -vsync vfr -f image2 -strftime 1 "%H:%M:%S.%4N.jpg"
注意事项:
- 如果是Windows系统,文件名里不能用冒号
:,可以换成横杠-适配系统规则,命令改成:ffmpeg -i source -r 1/5 -vsync vfr -f image2 -strftime 1 "%H-%M-%S.%4N.jpg" - 格式字符串说明:
%H:%M:%S:生成「小时:分钟:秒」的标准时间格式%4N:生成4位毫秒数(如果需要更少位数,可改成%3N对应3位、%2N对应2位)
额外小提示
如果你担心原视频的时间戳有偏移,可以加上-copyts参数,强制FFmpeg复制原始视频的时间戳,避免时间计算错误:
# 秒数格式加-copyts ffmpeg -i source -copyts -r 1/5 -vsync vfr -frame_pts 1 %d.jpg # 时间戳格式加-copyts ffmpeg -i source -copyts -r 1/5 -vsync vfr -f image2 -strftime 1 "%H:%M:%S.%4N.jpg"
内容的提问来源于stack exchange,提问作者AoEmaster




