保存的Matlab电影文件只播放最后一帧

时间:2018-06-11 05:18:13

标签: matlab animation

我在Matlab上制作了一部电影,当我运行我的代码时,电影运行良好并且看起来很棒,但是当我在电子邮件中附加视频时,视频似乎只显示电影的最后一帧。

在带有所有绘图代码的for循环中,我在结束循环之前使用了带变量G的getframe命令:

G = getframe;

然后我写道:

v = VideoWriter('my movie.avi','Motion JPEG AVI');

v.Quality = 100;

open(v)

writeVideo(v,G)

close(v)

然后我看到电影已创建并保存在我的文件夹中。我将电影附加到电子邮件中,将其打开,然后看电影只有最后一帧。

我错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

MATLAB getframe()函数返回当前帧,并将其写入for循环中的变量G。此会在每次迭代中覆盖 G,因此在您的程序中,G始终只包含最后一帧。当您将其写入视频文件时,该视频也将仅包含最后一帧,正如您所注意到的那样。

解决方案是创建一个帧数组,如example on how to record videos中使用MATLAB帮助页面中的getframe()所示:

movie_frames(N) = struct('cdata',[],'colormap',[]);    % pre-allocate frames struct
for k=1:N
    % Your plotting code here

    movie_frames(k) = getframe();
end

writeVideo()函数实际上是为了处理这样的帧数组而设计的,这使得保存视频非常简单

v = VideoWriter('test_video.avi');
v.open();
v.writeVideo(movie_frames);
v.close();