How to generate video file from animated plot in Matlab?

85 次查看(过去 30 天)
Dear scholars,
I have a problem with generating .avi video file from animated file. I attach the code below, I appreciate if sb can give me a hand in figuring out the problem.
It generates the vidoe but the video is quite short and practically does NOT show anything!
Regards
x = linspace(0, 1*pi, 5000)
y = exp(-0.05.*100.*x).*sin(100.*x+0);
curve = animatedline('Color', 'k', 'LineStyle', '-', 'LineWidth', 2)
set(gca, 'XLim', [0 1*pi]);
box on
for i = 1 : length(x)
addpoints(curve, x(i), y(i));
drawnow
end
legend('Classical Rod Model', 'FontSize', 12)
xlabel('t (s)', 'FontSize', 12)
ylabel('Amplitude', 'FontSize', 12)
obj = VideoWriter('curve.avi');
obj.Quality = 100;
obj.FrameRate = 3;
open(obj);
f = getframe(gcf)
writeVideo(obj, f)
obj.close();

采纳的回答

KSSV
KSSV 2021-1-12
It is because, you are writitng only the last frame into video...you need to keep the video writer code into a loop.
x = linspace(0, 1*pi, 1000) ;
y = exp(-0.05.*100.*x).*sin(100.*x+0);
curve = animatedline('Color', 'k', 'LineStyle', '-', 'LineWidth', 2) ;
set(gca, 'XLim', [0 1*pi]);
box on
f = cell(length(x),1) ;
for i = 1 : length(x)
addpoints(curve, x(i), y(i));
drawnow
f{i} = getframe(gcf) ;
end
legend('Classical Rod Model', 'FontSize', 12)
xlabel('t (s)', 'FontSize', 12)
ylabel('Amplitude', 'FontSize', 12)
obj = VideoWriter('curve.avi');
obj.Quality = 100;
obj.FrameRate = 3;
open(obj);
for i = 1:length(x)
writeVideo(obj, f{i}) ;
end
obj.close();
  4 个评论
Alireza Babaei
Alireza Babaei 2022-10-16
Thanks for such a great help.
I was wondering how to create multiple animations in a single frame?
(just like plotting multiple pictures in a single plot using the subplot)
Is there sth similar?
Thanks!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Animation 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by