如何快速获取指定时间点附近关键帧的时间戳?
如何快速获取指定时间点附近关键帧的时间戳?
嘿,我太懂你这种被慢速度折磨的抓狂感了!8K视频用常规方法扫关键帧只有0.1倍速,要找1小时附近的关键帧得等10小时,这效率完全没法用。
那些大家常用的慢方法,本质上都是要把整个视频从头到尾遍历一遍,导出所有关键帧的列表后再找目标点,这种路子对大分辨率视频来说简直是灾难,完全不适合定位特定时间点附近的关键帧。
给你分享个高效的思路:别扫全片,只在目标时间点的小范围内找,利用ffmpeg的快速跳转功能直接定位到区间,再抓关键帧,秒出结果不是梦!
给你两个实用的命令示例:
找目标时间点之后或附近的第一个关键帧
比如要找1小时(01:00:00)附近的关键帧,我们可以提前30秒跳转过去,只抓第一个出现的关键帧:ffmpeg -ss 00:59:30 -i input.mp4 -vf "select='eq(pict_type,I)'" -vframes 1 -f null - -debug ts这里的
-ss 00:59:30一定要放在-i前面!这是让ffmpeg直接用视频索引跳转到指定位置,不用遍历前面所有帧,这是快的核心。命令执行后,从输出日志里就能找到这个关键帧的精确时间戳。找目标时间点之前最近的关键帧
比如要找01:00:00之前的最后一个关键帧,我们可以限定扫描目标时间前1分钟的区间,然后取这个区间里最后一个关键帧的时间戳:ffmpeg -i input.mp4 -ss 00:59:00 -to 01:00:00 -vf "select='eq(pict_type,I)',metadata=print:file=-" -v quiet执行后会输出这个区间内所有关键帧的元数据,最后一条就是你要的最近的那个关键帧的时间戳。
另外还有个小技巧:你可以先大概了解下视频的关键帧间隔(比如用ffprobe快速扫10秒视频看间隔),然后把扫描区间调整到比间隔大一点就好,不用设太大,进一步提速。
备注:内容来源于stack exchange,提问作者user1844116
相关产品推荐
相关产品推荐

