How to generate video file from animated plot in Matlab?

83 views (last 30 days)
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();

Accepted Answer

KSSV
KSSV on 12 Jan 2021
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 Comments
Alireza Babaei
Alireza Babaei on 16 Oct 2022
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!

Sign in to comment.

More Answers (0)

Categories

Find more on Animation in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!