想做一个MP4和3GP格式视频的关键帧(I帧)提取,将关键帧存成图片,用C或者C++实现,哪位高人能够帮忙?
2个回答
展开全部
我的想法:开x264,xvid(最好是原来的编码器)假装对其进行2pass编码,pass1完后取其stat文件,写个正则表达式提取iframe,用avs截屏就是了
exec(x264);
文本处理;
exec(play the avs)
追问
您说的有点复杂,能具体展开说一下吗?
追答
用x264:
x264.exe --pass 1 --bitrate XXX --stats "x.stats"
打开"x.stats"得到:
#options: ......
in:0 out:0 type:I dur:2 cpbdur:2 q:34.30 tex:196490 mv:29170 misc:6204 imb:1620 pmb:0 smb:0 d:- ref:;
in:3 out:1 type:P dur:2 cpbdur:2 q:34.30 tex:25168 mv:6575 misc:1553 imb:27 pmb:678 smb:915 d:- ref:2712 ;
in:2 out:2 type:B dur:2 cpbdur:2 q:34.30 tex:1821 mv:1569 misc:1178 imb:0 pmb:307 smb:1293 d:s ref:217 ;
in:1 out:3 type:b dur:2 cpbdur:2 q:34.30 tex:1395 mv:2108 misc:1361 imb:0 pmb:423 smb:1190 d:s ref:461 ;
in:7 out:4 type:P dur:2 cpbdur:2 q:47.32 tex:1351 mv:2707 misc:1206 imb:22 pmb:359 smb:1239 d:s ref:632 386 238 180 ;
in:5 out:5 type:B dur:2 cpbdur:2 q:40.81 tex:758 mv:1612 misc:638 imb:0 pmb:143 smb:1471 d:t ref:295 8 14 ;
.......
可以看到"type:P/B/b/I"
写一个代码输出一avs:
directshowsource();
ImageWriter(trim(1),"x.png")
ImageWriter(trim(8),"x.png")
ImageWriter(trim(你要的I帧),"x.png")
.....
最好的方法还是借鉴mplayer/ffmpeg的代码吧
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询