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!
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.
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.
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.
Here are some of the different ways to create movies in (core) MATLAB.
(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')
(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')
%# 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')
(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')
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.).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With