Creating AVI Videos in MATLAB
This video will demonstrate how to make a simple AVI video file of a MATLAB plot.
The following functions will be essential for this tutorial:
- VideoWriter – This function create the video file. The input to the function is the video name.
- getFrame – This function captures the current state of the figure which is to be written as a frame to the video file.
- writeVideo This function write the capture frame to the video file.
I will also persistent variables. Persistent variables are local variables within a function that are retained for subsequent function calls. Nested functions will also be employed. Nested functions can be a bit confusing at first to a novice. However, they are an excellent way to keep code clean. Nested functions also have access to the variables within their parent function and thus it is not necessary to pass them through as inputs.
Source Code for Simple Video
function Made_Video_of_Equation
%% Setup the figure size and frame rate
xPixels = 1280;
FPS = 30; % frames per second
Ratio = 16/9;
yPixels = xPixels/Ratio;
AVI_Name = 'Simple_Video.avi';
T_Span = 5;
%% Create the figure
f = figure();
set(f, 'Units', 'pixels', 'Resize', 'off',...
'MenuBar', 'none', 'ToolBar', 'none');
% Figure location on the screen, can be larger than screen resolution
f.Position = [50 50 xPixels yPixels];
hold on;
xlim([0 5]);
ylim([-1 1]);
grid('on');
xlabel('Time (s)');
ylabel('Amplitude');
%% Now Let's Plot
zeta = 0.1;
omega = 2*pi;
alpha = omega*zeta;
gamma = omega*sqrt(1-zeta^2);
t = linspace(0,5,T_Span*FPS);
y = exp(-alpha*t).*(alpha*sin(gamma*t)./gamma + cos(gamma*t));
for Frame = 1:length(t)
% Update objects within figure and plot
UpdateFigure(Frame)
% Grab the frame and add to avi
if Frame ~= length(t)
CreateAvi(false)
else
CreateAvi(true)
end
pause(1/FPS);
end
function UpdateFigure(Frame)
% Persistent variables are stored between function calls and are
% accessible in subsequent calls
persistent h
if Frame == 1
% First frame, create object handle
h = plot(t(1:Frame), y(1:Frame), 'LineWidth', 4);
else
set(h, 'XData', t(1:Frame), 'YData', y(1:Frame));
set(gca, 'FontSize',18,...
'FontName', 'Times New Roman');
set(findall(gca,'type','text'),'FontSize',18,...
'FontName', 'Times New Roman');
end
end
function CreateAvi(FinalFrame)
persistent CreateAVIFile
frame = getframe(f);
% Create the video
if isempty(CreateAVIFile)
% Create and open file during first call
CreateAVIFile = VideoWriter(AVI_Name, 'Motion JPEG AVI');
CreateAVIFile.Quality = 100;
CreateAVIFile.FrameRate = FPS;
open(CreateAVIFile);
writeVideo(CreateAVIFile,frame)
elseif FinalFrame
% Close avi file on final frame
writeVideo(CreateAVIFile,frame)
close(CreateAVIFile)
else
writeVideo(CreateAVIFile,frame)
% Already created, do nothing
end
end
end
The type of videos one can create with MATLAB can be rather complex. The video below is a portion which was used to plot and track orbital debris in Earth orbit (debris not included in this snippet). The source code is included below the video file. Credit should be given to Ryan Gray for the snippet of code used to map the texture map to the globe. Keep in mind, due to the large size of the image used for the texture map, this video may take a while to render. Render time can be decreased by reducing the texture map image size.
Source Code for Globe Video
Globe_Files





