在MATLAB中创建电影文件的问题

fla*_*hon 6 video matlab animation

我试图通过循环遍历MATLAB中的帧来创建一部电影.

请参阅http://www.mathworks.com/help/techdoc/ref/movie.html上的mathworks.com文档,我设法为一个情节设置动画.但是,当我尝试将电影保存在avi文件中时会出现问题.

/sf/answers/562697831/中avifileVideoWriter方法都导致了相同的错误.

虽然动画运行正常,但保存的影片只包含一个固定的帧,有时屏幕截图包含我的后台Web浏览器的叠加层.

先感谢您.

下面是我使用的代码,avi上冻结的框架链接如下.

Z = peaks; surf(Z); 
axis tight
set(gca,'nextplot','replacechildren');

vid = VideoWriter('myPeaks2.avi');
vid.Quality = 100;
vid.FrameRate = 15;
open(vid);
for k = 1:20 
    surf(sin(2*pi*k/20)*Z,Z)
    writeVideo(vid, getframe(gcf));
end
close(vid);

winopen('myPeaks2.avi')
Run Code Online (Sandbox Code Playgroud)

在avi上冻结的框架在下面链接

tmp*_*rce 8

我今天遇到了这个(好吧,一个密切相关的)问题.这个stackoverflow主题是顶级搜索引擎结果之一,所以我想我会为未来的搜索者提供更多信息.

我正在使用一个VideoWriter对象,并呼吁frame=getframe(fig_handle)将每个帧保存到视频中.在本主题的问题中,只保存了1帧.此外,可以通过它看到数字背后的背景,好像这个数字是部分透明的.

将渲染更改为画家或zbuffer工作.(set(gcf,'renderer','zbuffer')例如.)

我需要openGL渲染,因为电影使用了透明度.做这项工作的关键是使用

opengl('software')
Run Code Online (Sandbox Code Playgroud)

这避免了将图形发送到视频卡和从视频卡发送图形的问题(我不确定......它有效,我继续前进).

  • 这应该是公认的答案.总而言之,在[@ Andrey的回答](http://stackoverflow.com/a/8619687/866007)中,将`f = figure();`替换为`f = figure('renderer','zbuffer');` . (3认同)
  • 今天在我的Win8安装上遇到了+1.这在我的旧WinXP机器上没有发生(我试图在循环中使用`getframe`创建[动画GIF](http://stackoverflow.com/a/11054155/97160)文件.另一个解决方案是使用未记录的[`hardcopy`](http://stackoverflow.com/a/13078532/97160) (2认同)

And*_*ein 3

请尝试以下操作:

    f = figure();
    Z = peaks; surf(Z);
    a = axes('Parent',f);
    axis(a,'tight');
    set(a,'nextplot','replacechildren');
    vid = VideoWriter('myPeaks2.avi');
    vid.Quality = 100;
    vid.FrameRate = 15;
    open(vid);
    for k = 1:20
        surf(a,sin(2*pi*k/20)*Z,Z)
        writeVideo(vid, getframe(f));
    end
    close(vid);

    winopen('myPeaks2.avi')
Run Code Online (Sandbox Code Playgroud)

它包含使用显式句柄而不是隐式句柄。Matlab 中造成了许多混乱,因为人们倾向于使用隐式的,比如“gcf”、“gca”,恕我直言,这些应该从语言中完全删除。

  • 当我运行你的代码时,我没有看到任何情节。图中是空的。 (2认同)