一、背景
略
二、基本方式
2.1 抽取视频中关键帧(IPB帧)
Video keyframes是视频编解码中关键帧。
- I帧信息最为丰富,是具有完整信息的帧,一般视频封面都选择I帧。
- P帧是单向预测帧,一般依赖前面的I或者P帧进行进行帧间预测。
- B帧数双向预测帧,一般利用双向帧进行预测。
2.1.1 使用ffprobe提取帧pts信息
ffprobe -i input.mp4 -v quiet -select_streams v -show_entries frame=pkt_pts_time,pict_type
ffmpeg抽取帧无法按照时间戳进行命令,需要将ffprobe提取的帧时间与抽取帧的图片进行对应的重命。
#抽取I帧
ffmpeg -i input.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg
#抽取P帧
ffmpeg -i input.mp4 -vf "select=eq(pict_type\,P)" -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg
#抽取B帧
ffmpeg -i input.mp4 -vf "select=eq(pict_type\,B)" -vsync vfr -qscale:v 2 -f image2 ./%08d.jpg
2.2 抽取视频场景转换帧
在场景转换过程中会出现相邻场景相似差异比较大的情况,可以用相似度差异来判断是否转换到新的场景。
ffmpeg -i input.mp4 -filter:v "select='gt(scene,0.1)',showinfo" -f null - 2>&1
2.3 均匀抽帧
# -r 指定每秒抽取图片的数量,1 frame/sec
ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 ./%08d.jpg
2.4 指定时间点抽帧
ffmpeg -i test_text_detect.mp4 -ss 00:00:01 -vframes 1 ./%08d.jpg