Я упростил код, который я написал, пожалуйста, посмотрите на него ниже.
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. Я проверил данные видеопеременная и совпадает с информацией из фактического видеофайла.Я использую MATLAB r2015b.Кроме того, все работает нормально с VLC Media Player.
Любая помощь приветствуется.Большое спасибо.