How to write a video from png files and/or matlab figures

8 vues (au cours des 30 derniers jours)
Anna Clouvel-Gervaiseau
Anna Clouvel-Gervaiseau le 23 Sep 2020
Hello,
I've been trying to write a simple code that takes a sequence of images and makes a video from them. However, the video file always ends up empty or unreadable, and I have no idea why the code isn't working. This is the code :
video23 = VideoWriter('video23.avi');
%video23.FrameRate = 1;
open(video23);
baseN = 'VectorOverlay';
d = '_';
e = 'Individual.png';
f = '-';
for i = 1:87
file_name = [baseN,d,num2str(i),f,num2str(i+1),d,e];
%VectorOverlay_1-2_Individual.png from PIV analysis
im = imread(file_name);
figure(1)
image(im)
writeVideo(video23, im);
end
close(video23)
implay(video23);
Can someone help me? I also have the images saved as Matlab figures, but matlab won't recognize the file format when I try and get it to read the files.
  2 commentaires
Ameer Hamza
Ameer Hamza le 23 Sep 2020
Have you tried without Archival option?
Anna Clouvel-Gervaiseau
Anna Clouvel-Gervaiseau le 23 Sep 2020
yes, still doesn't work

Connectez-vous pour commenter.

Réponse acceptée

Bjorn Gustavsson
Bjorn Gustavsson le 23 Sep 2020
Try modifying your call to writeVideo to this:
currFrame = getframe(gcf);
writeVideo(vidObj,currFrame);
HTH
  2 commentaires
Anna Clouvel-Gervaiseau
Anna Clouvel-Gervaiseau le 23 Sep 2020
Thanks for the answer! I get the following error message :
"Error using VideoWriter/writeVideo (line 368)
Frame must be 1120 by 840"
Also, for some reason the currFrame cdata has dimensions of 840x1120x3, and that seems strange - its been the same whenever I read the images previously.
Bjorn Gustavsson
Bjorn Gustavsson le 23 Sep 2020
That is strange. (unless you happened to resize your figure-window, since in this version the getframe call captures the entire figure and then you try to write that frame to the avi-file. That must not change size from frame to frame...)
You can try to simply check the sizes of all frames:
for i1 = 1:87
file_name = [baseN,d,num2str(i1),f,num2str(i1+1),d,e];
%VectorOverlay_1-2_Individual.png from PIV analysis
im = imread(file_name);
figure(1)
image(im)
currFrame = getframe(gcf);
% writeVideo(vidObj,currFrame);
szCF = size(currFrame);
frame_sz(i1,1:numel(szCF)) = szCF;
end
Then you can check that the frame-size doesn't change through the loop.
HTH

Connectez-vous pour commenter.

Plus de réponses (0)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by