ffmpeg 提取关键帧

参考key-frame
关键帧,是指动画中一个绘图,定义任何的起点和终点平滑过渡,一系列关键帧定义了观看者将看到的运动,而关键帧在电影,视频或动画上的位置定义了运动的时间。

获取方法,参考视频关键帧提取,

ffmpeg -i video_name.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 1920*1080 -f image2 core-%02d.jpeg

各个参数解释:
-i :输入文件,这里的话其实就是视频,
-vf:是一个命令行,表示过滤图形的描述, 选择过滤器select会选择帧进行输出:包括过滤器常量
pict_type和对应的类型:PICT_TYPE_I 表示是I帧,即关键帧。
-vsync 2:阻止每个关键帧产生多余的拷贝
-f image2 name_%02d.jpeg:将视频帧写入到图片中,样式的格式一般是:
“%d” 或者 “%0Nd”
-s:分辨率,1920*1080

这样保存下来的关键帧的命名顺序是从1开始的,数字表示第几个关键帧。需要保存关键帧在原始视频中的帧的位置,参考Extracting the index of key frames from a video using ffmpeg,

ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv bbb480.avi | grep -n I | cut -d ':' -f 1 > frame_indices.txt

会生成一个 frame_indices.txt 的文件,其中保存的即为关键帧在视频中的帧的索引位置。
再将生成的关键帧与索引对应起来:

ls -1 core*.jpeg >core.txt
paste core.txt frame_indices.txt > combine.txt

生成的 combine.txt中每一行即为{}\t{}.format(core1, frame1)

你可能感兴趣的:(ffmpeg)