Search code examples
imagematlabvideovideo-processingcodec

Extracting Frames From A Video In Matlab


I was trying to extract frames from a small video using the following lines of code :

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);

However, I am getting the following error on running this code :

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

Can someone help me to sort out this error ? Thanks.


Solution

  • Instead of MMREADER, I used the following lines of code :

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

    It worked.