本文共 1605 字,大约阅读时间需要 5 分钟。
有很多的视频抽帧的场景,比如视频内容审核,需要对大量的视频来做视频抽帧,虽然视频的解码速度比较快,但是视频量和时长上来后,对整体的资源开销也是非常的大,如果可以在抽帧过程中只解码需要的关键帧,就会节省大量的计算资源。
frame|key_frame=1|pkt_pts_time=0.000000|pict_type=I|coded_picture_number=0frame|key_frame=1|pkt_pts_time=20.000000|pict_type=I|coded_picture_number=500frame|key_frame=1|pkt_pts_time=35.480000|pict_type=I|coded_picture_number=887frame|key_frame=1|pkt_pts_time=53.720000|pict_type=I|coded_picture_number=1343frame|key_frame=1|pkt_pts_time=67.520000|pict_type=I|coded_picture_number=1688frame|key_frame=1|pkt_pts_time=87.200000|pict_type=I|coded_picture_number=2180
根据IDR的个数,按每15 frame对视频进行抽帧, 统计任务的资源开销
time ffmpeg -i test.mp4 -vf fps=0.0666666 output_vf_%03d.png# frame= 48 fps=3.3 q=-0.0 Lsize=N/A time=00:12:00.00 bitrate=N/A speed=49.1x # video:101033kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown# 147.58s user 2.22s system 1009% cpu 14.835 total
只解码关键帧进行快速抽帧
time ffmpeg -skip_frame nokey -i test.mp4 -vsync vfr output_idr_%03d.png# frame= 48 fps= 33 q=-0.0 Lsize=N/A time=00:11:40.52 bitrate=N/A speed= 488x # video:100474kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown# 6.29s user 0.31s system 427% cpu 1.545 total
上面同样都是抽48帧画面出来,编码帧数量一样,解码导致的差异,导致计算资源开销也不一样;
后续遇到同样的场景,大家也可以参考通过 -skip_frame nokey 来进行快速解码IDR。转载地址:http://xqfli.baihongyu.com/