我在Matlab上制作了一部电影,当我运行我的代码时,电影运行良好并且看起来很棒,但是当我在电子邮件中附加视频时,视频似乎只显示电影的最后一帧。
在带有所有绘图代码的for循环中,我在结束循环之前使用了带变量G的getframe命令:
G = getframe;
然后我写道:
v = VideoWriter('my movie.avi','Motion JPEG AVI');
v.Quality = 100;
open(v)
writeVideo(v,G)
close(v)
然后我看到电影已创建并保存在我的文件夹中。我将电影附加到电子邮件中,将其打开,然后看电影只有最后一帧。
我错过了什么?
谢谢!
答案 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();