Функция MATLAB getframe()
возвращает текущий кадр, и вы записываете его в переменную G
в цикле for. перезаписывает G
на каждой итерации, поэтому в вашей программе G
будет содержать только последний кадр.Когда вы записываете его в видеофайл, это видео также будет содержать только один последний кадр, как вы заметили.
Решение состоит в том, чтобы создать массив кадров, как показано в примере о том, какдля записи видео с использованием getframe()
на страницах справки MATLAB:
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();