Last updated on January 9th, 2017

Making a video of your moving graphs/charts is surprisingly easy to do in MATLAB. However most of my online searches gave me old outdated methods to do it. Here’s how to make a movie or a video in MATLAB.

I kept getting this freakin’ error using the old methods (i.e. the avifile() function):

“Windows Media Player cannot play the file. The Player might not support the file type or might not support the codec that was used to compress the file.”

So I found MATLAB recommends you use the VideoWriter() class…

http://www.mathworks.com/help/techdoc/ref/videowriterclass.html

They have a nice little example in the documentation, but for the impatient, here’s my quick and dirty implementation of it (with some modifications/additions of course).

%% Movie Test.
%% Set up some function.
% Sine between -2*pi and 2*pi.
x = (10*-pi:0.1:10*pi)'; % Note the transpose.
y = sin(x);
fid = figure;
hold on
% The final plot.
plot(x,y, '*');
%% Set up the movie.
writerObj = VideoWriter('out.avi'); % Name it.
writerObj.FrameRate = 60; % How many frames per second.
open(writerObj);
for i=1:size(y)
% We just use pause but pretend you have some really complicated thing here...
pause(0.1);
figure(fId); % Makes sure you use your desired frame.
plot(x(i),y(i),'or');
%if mod(i,4)==0, % Uncomment to take 1 out of every 4 frames.
frame = getframe(gcf); % 'gcf' can handle if you zoom in to take a movie.
writeVideo(writerObj, frame);
%end
end
hold off
close(writerObj); % Saves the movie. |

%% Movie Test. %% Set up some function.
% Sine between -2*pi and 2*pi.
x = (10*-pi:0.1:10*pi)'; % Note the transpose.
y = sin(x);
fid = figure;
hold on
% The final plot.
plot(x,y, '*'); %% Set up the movie.
writerObj = VideoWriter('out.avi'); % Name it.
writerObj.FrameRate = 60; % How many frames per second.
open(writerObj); for i=1:size(y)
% We just use pause but pretend you have some really complicated thing here...
pause(0.1);
figure(fId); % Makes sure you use your desired frame.
plot(x(i),y(i),'or');
%if mod(i,4)==0, % Uncomment to take 1 out of every 4 frames.
frame = getframe(gcf); % 'gcf' can handle if you zoom in to take a movie.
writeVideo(writerObj, frame);
%end end
hold off
close(writerObj); % Saves the movie.

Boom. There you go. You can now make a video of your complicated function for all to see. It’s that easy.

*Related*

Thanks!

thanks!