Why does MPEG-4 video generated by VideoWriter have flickered frames?
50 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
MathWorks Support Team
il 16 Ott 2020
Risposto: MathWorks Support Team
il 16 Ott 2020
I create an animation which uses "xline" command.
When I generated the video(.mp4), the "xline" line flickered in Window Media Player.
figure
t = linspace(0,10,1000);
y = randn(size(t));
plot(t,y)
hold on
h_x = xline(t(1),'--r');
v = VideoWriter('newfile.mp4','MPEG-4');
v.Quality = 100;
v.FrameRate = 10;
open(v)
for n = 1:length(t)
h_x.Value = t(n);
drawnow limitrate
frame = getframe(gcf);
writeVideo(v,frame);
end
close(v)
Risposta accettata
MathWorks Support Team
il 16 Ott 2020
The issue was with the resolution of the generated image. As the compression increases from AVI to MPEG-4, the quality drops.
You can see the AVI has better quality than MPEG-4.
v = VideoWriter('newfile.avi','Uncompressed AVI');
% v = VideoWriter('newfile.mp4','MPEG-4');
% v.Quality = 100;
% v.FrameRate = 10;
This drop in quality due to increased compression needs to be compensated by increasing the resolution of the generated figures (or frames).\n
close all, clear all
figure('units','pixels','position',[0 0 1000 800]) % set figure's size
t = linspace(0,10,1000);
y = randn(size(t));
plot(t,y)
hold on
h_x = xline(t(1),'--r');
v = VideoWriter('newfile.mp4', 'MPEG-4');
v.Quality = 100;
v.FrameRate = 10;
open(v)
for n = 1:length(t)
h_x.Value = t(n);
drawnow limitrate
frame = getframe(gcf);
f = imresize(frame.cdata,4); % resize the image
writeVideo(v,f);
end
close(v)
0 Commenti
Più risposte (0)
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!