Извлечение кадров из видео в Matlab

Я пытался извлечь кадры из небольшого видео, используя следующие строки кода:

clc;
close all;

% Open an sample avi file

[FileName,PathName] = uigetfile('*.AVI','Select the Video');
file = fullfile(PathName,FileName);

%filename = '.\003.AVI';
mov = MMREADER(file);

% Output folder

outputFolder = fullfile(cd, 'frames');
if ~exist(outputFolder, 'dir')
    mkdir(outputFolder);
end

%getting no of frames

numberOfFrames = mov.NumberOfFrames;
numberOfFramesWritten = 0;
for frame = 1 : numberOfFrames

    thisFrame = read(mov, frame);
    outputBaseFileName = sprintf('%3.3d.png', frame);
    outputFullFileName = fullfile(outputFolder, outputBaseFileName);
    imwrite(thisFrame, outputFullFileName, 'png');
    progressIndication = sprintf('Wrote frame %4d of %d.', frame,numberOfFrames);
    disp(progressIndication);
    numberOfFramesWritten = numberOfFramesWritten + 1;
end
progressIndication = sprintf('Wrote %d frames to folder "%s"',numberOfFramesWritten,outputFolder);
disp(progressIndication);

Однако при запуске этого кода я получаю следующую ошибку:

??? Error using ==> extract at 10
The file requires the following codec(s) to be installed on your system:
    Unknown Codec

Может ли кто-нибудь помочь мне разобраться с этой ошибкой? Спасибо.


person competesingh    schedule 17.07.2014    source источник
comment
mmreader устарел, пробовали ли вы вместо этого использовать VideoReader?   -  person Amro    schedule 17.07.2014


Ответы (2)


Похоже, файл закодирован неизвестным видеокодеком (вероятно, неизвестным MatLab). Расширение файла (.avi, .mpeg и т. д.) обозначает не кодек, а контейнер, если я не ошибаюсь.

Ссылки внизу предоставляют некоторую информацию о форматах файлов, поддерживаемых MatLab. Вы должны попытаться получить, какой контейнер и кодек использует ваш видеофайл, и посмотреть, поддерживает ли его MatLab. Чтобы получить кодек, откройте его в медиаплеере VLC (с помощью VideoLan), щелкните правой кнопкой мыши фильм, выберите «Дополнительно-> информация о кодеке» или, если вы находитесь в Windows, просто откройте фильм в VLC и нажмите CTRL + J.

Несколько полезных ссылок: http://www.mathworks.nl/help/matlab/ref/mmreader-class.html http://www.mathworks.nl/help/matlab/import_export/supported-video-file-formats.html

http://www.videolan.org/vlc/

С уважением,

Эрнст Ян

person EJG89    schedule 17.07.2014

Вместо MMREADER я использовал следующие строки кода:

movieInfo = aviinfo(movieFullFileName);
mov = aviread(movieFullFileName);
% movie(mov);
% Determine how many frames there are.
numberOfFrames = size(mov, 2);
numberOfFramesWritten = 0;

Это сработало.

person competesingh    schedule 20.07.2014