识别给定时间之前和之后的I帧

时间:2017-11-01 22:36:04

标签: ffmpeg

我试图找到一种在输入时间之前和之后找到I帧的方法。到目前为止,我在一段时间之前找到I帧的方法是

ffprobe -select_streams v -show_frames -show_entries frame=pkt_pts_time,pict_type -v quiet input.mp4 | awk -F= '/pict_type=/ { if (index($2, "I")) { i=1; } else { i=0; } } /pkt_pts_time/ { if (i && ($2 <= 1)) print $2; }' | head -n 1

然而,这似乎识别了前一帧之后的帧,而不是I帧本身。如何让它输出实际I帧的pkt_pts_time?

1 个答案:

答案 0 :(得分:0)

使用ffmpeg执行此操作会更快,因为它可以选择完全跳过非关键帧。

ffmpeg -skip_frame nokey -i video -an -vf showinfo -f null - 2>&1 | grep -oE "pts_time:[0-9\.]+"

输出,例如

pts_time:0
pts_time:5
pts_time:10
pts_time:15
pts_time:20
pts_time:25
pts_time:30

grep是GNU grep。值以秒为单位。