我正在学习用Matlab制作电影。我从互联网上编写了这段代码来制作电影。我正在使用OS X Mavericks和Matlab 2013a。我通常把数字窗口停靠。当我运行代码时,我可以完美地看到动画。何时使用movie2avi
或VideoWriter
命令保存电影。它不会以全帧图形录制电影。相反,我看到了一点图形窗口和我的Matlab桌面视图。任何人都可以帮我这个吗?
clear;
close all;
% Creates a 2D Mesh to plot surface
x=linspace(0,1,100);
[X,Y] = meshgrid(x,x);
N=100; % Number of frames
for i = 1:N
% Example of plot
Z = sin(2*pi*(X-i/N)).*sin(2*pi*(Y-i/N));
surf(X,Y,Z)
% Store the frame
M(i)=getframe(gca); % leaving gcf out crops the frame in the movie.
end
% myVideo = VideoWriter('wavemotion.avi');
% open(myVideo);
% writeVideo(myVideo,M)
% close(myVideo)
% Output the movie as an avi file
%movie2avi(M,'WaveMovie.avi');
答案 0 :(得分:0)
根据VideoWriter
和movie2avi
的文档,您需要在代码中添加更多说明。
首先,您需要将渲染器设置为一个漂亮的显示器,并设置下一个绘图将仅重置子项而不是整个轴的轴:
set(gca,'nextplot','replacechildren');
set(gcf,'Renderer','zbuffer');
还有一个建议来预分配帧缓冲区:
M(N) = struct('cdata',[],'colormap',[]);
最后,您只需要在没有任何argmuent的情况下调用getframe
,因为gca
是默认参数。
在我的计算机上(使用Matlab 2013b),通过这些修改并使用VideoWriter
,它可以正常工作。使用movie2avi
时,它无法正常工作;我想我需要指定一个压缩编解码器来修复它。