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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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

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

 

以上是关于关于MATLAB提取MP4视频帧时候,跨帧取速度会慢的主要内容,如果未能解决你的问题,请参考以下文章

使用ffmpeg从视频中提取最终帧

提取视频每一帧保存图片-MATLAB

在 MATLAB 中保存为 .mp4 文件

无法使用 C++ 和 OpenCV 从视频中提取帧

使用 FFMPEG 将所有视频帧提取为图像

如何使用 python 和 openCV 从 .yuv 视频文件 (YUV420) 中提取帧?