关于MATLAB提取MP4视频帧时候,跨帧取速度会慢

项目需要将视频中每十帧抽取一帧,实际操作中发现,如果按照这样来写代码

vid = VideoReader(namestr);
for ii = 1 : 10 : vid.NumberOfFrames frame = read(vid, ii); imwrite(frame, xxx, 'jpg'); end

设定循环变量为每10,然后直接从视频对象中read出图像帧,跑起来发现取一帧少则一秒 多则四五秒

这非常反直觉,因为大家逐帧抽取的时候都是一秒能抽好几百帧。

仔细想一想其实MP4作为一种压缩视频的格式,在压缩每一帧的过程中是使用到了前面几帧的信息,所以我们在看一些有损坏的视频的时候会出现连着几秒都有色块混乱,然后过了这一阵后面就好了。

于是在读帧的时候直接从中间抽,它需要到前后去寻找有关联的信息,这就耽误了时间。

所以实际操作中不妨曲线救国,先把所有的帧都提出来,再按需抽取,就可以节约很多时间

vid = VideoReader(namestr);
for ii = 1 : vid.NumberOfFrames 
    frame = read(vid, ii);% 读取帧
    imwrite(frame, xxx, 'jpg'); 
end

imageName = 1;
for ii = 1 : 10 : vid.NumberOfFrames
    movefile(xxx, yyy); 
    imageName = imageName + 1
end

祝大家在视频处理的过程中一切顺利~

 

转载于:https://www.cnblogs.com/yying/p/6890387.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值