码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-05-22 17:47:39      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:nbsp   ber   信息   file   mp4   损坏   names   matlab   这一   

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

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

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

 

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

标签:nbsp   ber   信息   file   mp4   损坏   names   matlab   这一   

原文地址:http://www.cnblogs.com/yying/p/6890387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!