如何使用ffmpeg根据给定时间戳获取视频中最接近的帧序号
使用FFmpeg获取可变帧率视频指定时间最近帧序号方法
前置要求
已安装FFmpeg全套工具包(默认包含ffprobe组件,无需额外安装)
核心命令
替换命令中的<目标时间>(支持HH:MM:SS格式)和<视频路径>即可直接运行:
ffprobe -v error -skip_frame nokey -select_streams v:0 -show_entries frame=coded_picture_number -read_intervals <目标时间>%+#1 <视频路径>
参数说明
-skip_frame nokey:仅处理关键帧,跳过所有非关键帧大幅提升处理速度,关键帧间隔通常为2-10秒,刚好匹配允许数秒误差的要求-read_intervals <目标时间>%+#1:直接跳转至目标时间附近,仅读取1帧就停止处理,无需扫描全量视频文件-show_entries frame=coded_picture_number:仅输出帧序号字段,不会返回其他冗余元数据-select_streams v:0:仅处理第一条视频流,忽略音频、字幕等其他流内容
结果提取
命令返回结果格式如下,直接提取=后的数字即为所求的帧序号:
[FRAME] coded_picture_number=XXX [/FRAME]
可选调整
如果对精度要求更高,可删除-skip_frame nokey参数,误差可缩小至1帧以内,仅会损失少量处理速度
示例验证
输入:
- video.mp4(示例假定为30fps恒定帧率)
- 目标时间 00:00:05
执行命令后提取得到的帧号为150,与预期结果一致。
内容的提问来源于stack exchange,提问作者Bartosz
相关产品推荐
相关产品推荐

