我试图找到一种在输入时间之前和之后找到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?
答案 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。值以秒为单位。