Enfoques para crear un video en matlab

¿Cuáles son las posibilidades de crear videos en Matlab? Estaba buscando y encontré principalmente 3 cajas de herramientas que funcionan en este campo, procesamiento de imágenes, adquisición de imágenes y visión de control … pero ¿cómo puedo hacerlo sin ellas, solo para crear el video desde cero? Me interesan varios enfoques para tener una visión general, pero no pude encontrar ningún tutorial decente o fuente de información coherente en Internet.

¡Gracias por la ayuda!

Estas son algunas de las diferentes maneras de crear películas en (núcleo) MATLAB.

MOVIE2AVI

%# 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

(obsoleto, use VIDEOWRITER en su lugar)

 %# 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') 

VIDEOJUEGO

 %# 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') 

SOY ESCRITURA

(técnicamente no es una película, sino una imagen animada GIF)

 %# 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') 

Hay http://sofes.miximages.com/video/code dándoles nombres de archivos como code1.png, 2.png, … y luego uso el convertidor FFMPEG gratuito para hacer un video.

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

Esto permite una gran afinación, cuando se trata de los parámetros de la conversión (tasa de bits, códec, geometría, etc.).

Matlab tiene un comando integrado de ‘película’ para reproducir películas. Me resulta bastante fácil trabajar con. Lo he usado en ttwigs para mostrar los cambios en el tiempo, así como las imágenes individuales para hacer una película real.

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

Creo que el procedimiento general es:

 for ii=1:100 plot(something(ii)) F = getframe; end movie(F) 

Para guardar una película, puede usar un procedimiento similar al anterior, pero use el

 writeVideo 

mando.

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

QTWriter

Para exportar películas de QuickTime , mi propio QTWriter está disponible: http://horchler.github.io/QTWriter/ . Funciona de manera muy similar a la clase VideoWriter de Matlab, pero tiene códecs de imágenes fijas con pérdida y sin pérdida (formatos de compresión) que funcionan bien con los datos típicos en las representaciones de Matlab (es decir, sin compresión entre cuadros). En particular, también es compatible con la transparencia del canal alfa (códec ‘Photo PNG’), el bucle (dos tipos) y las tasas de cuadros continuamente variables . QTWriter está escrito como un único archivo de clase Matlab y debería funcionar en todas las plataformas, pero no lo he probado en Windows .

Aquí hay un código de ejemplo que ilustra cómo se puede generar una película de QuickTime de bucle variable y velocidad de fotogtwigs simple:

 % Prepare new movie file using the default PNG compression movObj = QTWriter('peaks.mov'); % Create an animation hf = figure; Z = peaks; surfc(Z); frames = 100; axis tight; set(hf,'DoubleBuffer','on'); set(gca,'nextplot','replacechildren'); % Animate plot and write movie for k = 0:frames hs = surfc(sin(2*pi*k/frames)*Z,Z); set(hs,'FaceColor','interp','FaceLighting','phong'); light('Position',[0 0 4]); movObj.FrameRate = k; % Vary the frame-rate writeMovie(movObj,getframe(hf)); % Write each frame to the file end movObj.Loop = 'backandforth'; % Set palindromic looping flag close(movObj); % Finish writing movie and close file 

La película de salida, otra demostración más compleja, y más detalles están disponibles en el sitio web del proyecto . QTWriter es de código abierto ( licencia BSD ) y el depósito de código está alojado en GitHub .