我简化了我编写的代码,请在下面查看。
try
video = VideoReader('IMG_6174.MOV');
catch
video = false;
end
if video ~= false
totalFrames = video.duration * video.framerate;
end
vidStruct = struct('cdata', zeros(300, 300, 3, 'uint8'), 'colormap', []);
for frameNumber = 1:totalFrames
try
vidStruct(frameNumber).cdata = readFrame(vidObj);
catch
disp(strcat('Frame missed. Number:', int2str(frameNumber)));
end
end
我想做的很简单。我只想读取一个视频文件,如果我能够读取它,我想将该视频文件的每一帧放入一个结构中。如果其中一个框架存在错误,则会显示一条错误消息,如代码中所示。
上面的代码为我提供了以下输出:(我已将其缩短以节省空间,但对于所有帧来说都是相同的消息)
Frame missed. Number:1
Frame missed. Number:2
Frame missed. Number:3
.
.
.
Frame missed. Number:71
Frame missed. Number:72
Frame missed. Number:73
此外,带有
的while循环版本while hasFrame(video)
....
end
也不起作用,因为hasFrame返回0。我检查了video变量的数据,并将其与实际视频文件中的信息匹配。我正在使用MATLAB r2015b。另外,VLC Media Player也可以正常工作。
感谢您的帮助。非常感谢。