【问题标题】:reading images from VideoReader gets progressively slower从 VideoReader 读取图像变得越来越慢
【发布时间】: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


【解决方案1】:

好的,所以这不完全是一个答案,而是一个解决方法...... 似乎要在为具有不确定帧数的视频创建的 videoreader 对象中设置 NumberofFrames 属性,需要使用以下代码读取最后一帧(如 VideoReader 文档中所述):

v=VideoReader('path.mp4');
l=read(v,inf);

这会设置视频中的帧数,并允许索引和快速读取视频中的单个帧。但是,这只适用于 matlab r2012b。在 2015a 中,NumberofFrames 属性是由 read(v,inf) 技巧设置的,但由于某种原因,读取仍然非常耗时。 我不确定为什么会发生这种情况,正如我所说,我检查过的其他一些机器能够正确读取我的文件(但有些没有),所以这远未完成。目前尚不清楚为什么它无法确定帧数,或者为什么计算机之间存在任何可变性,以及为什么在某些版本中 last(v, inf) 有效而在其他版本中仅部分有效。

【讨论】:

    猜你喜欢
    • 2012-03-27
    • 2016-11-03
    • 2016-06-12
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多