我一直在尝试使用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与我的需求无关).
任何帮助,将不胜感激,
Aviram
最佳答案 好的,所以这不是一个答案,而是一个解决方法……
似乎要在为具有未确定帧数的视频创建的视频释放器对象中设置NumberofFrames属性,需要使用以下代码读取最后一帧(如VideoReader文档中所述):
v=VideoReader('path.mp4');
l=read(v,inf);
这设置了视频中的帧数,并允许从视频中索引和快速读取单帧.但是,这仅适用于matlab r2012b.在2015a中,NumberofFrames属性由read(v,inf)技巧设置,但由于某种原因,读取仍然非常耗时.
我不确定为什么会发生这种情况,正如我所说,我检查过的其他一些机器能够正确读取我的文件(但有些没有),所以这还远未完成.目前尚不清楚为什么它无法确定帧数,或者为什么计算机之间存在任何可变性,为什么在某些版本中最后(v,inf)工作,而在其他版本中只有部分工作.