FFmpeg定时视频截图
应用场景举例:
1、播放器播放视频时,将鼠标移动到播放器进度条上时,会弹出一个与进度条的进度相对应的缩略图;
2、在直播平台中打开首页时,会列出主播当前窗口的缩略图;
3、鉴黄,当主播在直播视频时,定期截取主播窗口的当前图像,并将图像转为图片上传至鉴黄系统进行鉴别;
以上场景均用到截图功能,使用FFmpeg截图有很多种,常见的为使用vframe参数与fps滤镜。
1、vframe参数截图一张图片
ffmpeg -i input.flv -ss 00:00:7.435 -vframes 1 output.png
命令行执行后,FFmpeg会定位到input.flv的第7秒位置,获得对应的视频帧,然后将图像解码出来编码成RGB24的图像并封装成PNG图像。
Input #0, flv, from 'input.flv':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-05-17 04:15:00
encoder : Lavf52.108.0
Duration: 00:00:30.08, start: 0.080000, bitrate: 919 kb/s
Stream #0:0: Video: h264 (High), yuv420p(progressive), 640x360, 600 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc
Stream #0:1: Audio: adpcm_swf, 44100 Hz, stereo, s16, 352 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> png (native))
Press [q] to stop, [?] for help
Output #0, image2, to 'output.png':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
encoder : Lavf58.20.100
Stream #0:0: Video: png, rgb24, 640x360, q=2-31, 200 kb/s, 25 fps, 25 tbn, 25 tbc
Metadata:
encoder : Lavc58.35.100 png
frame= 1 fps=0.0 q=-0.0 Lsize=N/A time=00:00:00.04 bitrate=N/A speed=0.261x
2、fps滤镜定时获得图片
每隔1秒钟生成一张PNG图片:
ffmpeg -i input.flv -vf fps=1 out%d.png
每隔1分钟生成一张JPEG图片:
ffmpeg -i input.flv -vf fps=1/60 img%03d.jpg
每隔10分钟生成一张BMP图片:
ffmpeg -i input.flv -vf fps=1/600 thumb%04d.bmp
每个关键帧生成一张PNG图片:
ffmpeg -i input.flv -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr thumb%04d.png