Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Approaches to create a video in matlab

Tags:

video

matlab

What are the possibilities to create videos in Matlab? I was searching and found mainly 3 toolboxes that work in this field, image processing, image acquisition and control vision... but how can I do it without them, just to create the video from scratch? I'm interested in various approaches to have an overview, but I was unable to find any decent tutorial or consistent source of info on the internet.

Thanks for the help!

like image 757
beginh Avatar asked Jun 15 '12 13:06

beginh


People also ask

How do I make an mp4 video in MATLAB?

You need to pass a profile argument to matlab's videowriter. From Matlab Help, VideoWriter(filename,profile) creates a VideoWriter object and applies a set of properties tailored to a specific file format (such as 'MPEG-4' or 'Uncompressed AVI'). In your case, you need to pass the string MPEG-4 to the profile argument.

How do I create an AVI file in MATLAB?

Create AVI File from AnimationCreate a video writer object for the output video file and open the object for writing. v = VideoWriter('peaks. avi'); open(v); Generate a set of frames, get the frame from the figure, and then write each frame to the file.

How do I import a video into MATLAB?

Use the From Multimedia File block to import the multimedia file into the model: If you do not have your own multimedia file, use the default vipmen. avi file, for the File name parameter. If the multimedia file is on your MATLAB path, enter the filename for the File name parameter.


2 Answers

Here are some of the different ways to create movies in (core) MATLAB.

MOVIE2AVI

(deprecated, use VIDEOWRITER instead)

%# figure figure, set(gcf, 'Color','white') Z = peaks; surf(Z);  axis tight set(gca, 'nextplot','replacechildren', 'Visible','off');  %# preallocate nFrames = 20; mov(1:nFrames) = struct('cdata',[], 'colormap',[]);  %# create movie for k=1:nFrames    surf(sin(2*pi*k/20)*Z, Z)    mov(k) = getframe(gca); end close(gcf)  %# save as AVI file, and open it using system video player movie2avi(mov, 'myPeaks1.avi', 'compression','None', 'fps',10); winopen('myPeaks1.avi') 

AVIFILE

(deprecated, use VIDEOWRITER instead)

%# figure figure, set(gcf, 'Color','white') Z = peaks; surf(Z);  axis tight set(gca, 'nextplot','replacechildren', 'Visible','off');  %# create AVI object nFrames = 20; aviobj = avifile('myPeaks2.avi', 'fps',10);  %# create movie for k=1:nFrames    surf(sin(2*pi*k/20)*Z, Z)    aviobj = addframe(aviobj, getframe(gca)); end close(gcf)  %# save as AVI file, and open it using system video player aviobj = close(aviobj); winopen('myPeaks2.avi') 

VIDEOWRITER

%# figure figure, set(gcf, 'Color','white') Z = peaks; surf(Z);  axis tight set(gca, 'nextplot','replacechildren', 'Visible','off');  %# create AVI object nFrames = 20; vidObj = VideoWriter('myPeaks3.avi'); vidObj.Quality = 100; vidObj.FrameRate = 10; open(vidObj);  %# create movie for k=1:nFrames    surf(sin(2*pi*k/20)*Z, Z)    writeVideo(vidObj, getframe(gca)); end close(gcf)  %# save as AVI file, and open it using system video player close(vidObj); winopen('myPeaks3.avi') 

IMWRITE

(technically not a movie, but an animated GIF image)

%# figure figure, set(gcf, 'Color','white') Z = peaks; surf(Z);  axis tight set(gca, 'nextplot','replacechildren', 'Visible','off');  %# preallocate nFrames = 20; f = getframe(gca); [f,map] = rgb2ind(f.cdata, 256, 'nodither'); mov = repmat(f, [1 1 1 nFrames]);  %# create movie for k=1:nFrames     surf(sin(2*pi*k/20)*Z, Z)     f = getframe(gca);     mov(:,:,1,k) = rgb2ind(f.cdata, map, 'nodither'); end close(gcf)  %# create GIF and open imwrite(mov, map, 'myPeaks4.gif', 'DelayTime',0, 'LoopCount',inf) winopen('myPeaks4.gif') 
like image 119
Amro Avatar answered Sep 21 '22 13:09

Amro


There is http://www.mathworks.de/help/techdoc/ref/videowriterclass.html

My approach is to print the single frames/figures to png files using the print function giving them filenames like 1.png, 2.png, ... and then I use the free FFMPEG converter to make a video.

ffmpeg -r 20 -i %d.png foo.avi

This allows for a lot of finetuning, when it comes to the parameters of the conversion (bitrate, codec, geometry etc.).

like image 20
Herr von Wurst Avatar answered Sep 22 '22 13:09

Herr von Wurst