Why does MPEG-4 video generated by VideoWriter have flickered frames?

50 visualizzazioni (ultimi 30 giorni)
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
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)
 

Più risposte (0)

Prodotti


Release

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by