【发布时间】:2015-08-25 09:11:46
【问题描述】:
我一直在尝试使用 VideoReader 读取 MP4 文件。 Matlab 能够读取图像,但帧沿视频越远,花费的时间就越多。
tic;I=read(v,1);toc
Elapsed time is 0.264011 seconds.
tic;I=read(v,2000);toc
Elapsed time is 32.859614 seconds.
另外,我不确定这是否相关,但Matlab无法确定文件中的帧数:
v=VideoReader('S1140007 (~200 cubes, large).MP4');
Warning: Unable to determine the number of frames in this file.
我尝试使用两个版本 R2012b 和 R2015a,但问题仍然存在。 但是,在另一台机器上,可以确定帧数并且读取时间不会变长,因此显然我的机器上配置了错误。 我有这个问题的已知解决方案(这可能与编解码器有关吗?),或者可能是一次读取一个图像的替代方法(readFrame 与我的需求无关)。
任何帮助将不胜感激, 阿维拉姆
【问题讨论】:
-
是的,因为它无法确定帧数,所以它正在按顺序处理它,直到它到达第 2000 帧。我认为这里最好的解决方案是将您的 mp4 文件转换为 .seq 文件,其中对帧进行索引以便快速执行。在转换为 Seq(这需要一些时间)后,Matlab 应该已经索引了帧。详情在这里:uk.mathworks.com/help/matlab/examples/…
-
我是这么认为的...我真的不想进行任何转换。我需要图像的 RGB 内容与原始内容保持一致,并且转换经常会改变它...
-
另一种方法是读取所有帧并将其保存到矩阵中,然后索引矩阵,同样,如果您只查找第 2000 帧,这不会为您节省任何时间,但应该保存如果您要索引多个帧,则需要时间,因为它只需要遍历视频文件一次。
-
谢谢,但我每次都会寻找一张图片(这些图片很大)。我真的需要明白为什么 matlab 不能确定帧数,显然。
-
帧率可变吗?
标签: matlab video-capture