How to fast process conversion of .tif image sequence to an .avi video

I wrote a code to automatically convert a large sequence of .tif files to .avi videos across multiple folders. In general I have 110000 tif files per folder and 11 folders that go through the processing. The result is 5 videos per folder in which each video consist of 110000/5=22000 frames.
So far so good, however, for this to happen it takes almost 48 hours (2 DAYS) of matlab running continuously!
Any recommendation on how to make this faster? The tif file size is small about 200x200, I use for loops and imread to read the tif files and VideoWriter to convert it. Here is a sample of my code
for SubSession=1:number_of_frames/5:number_of_frames
%%Process File
MovieFrame_Order=1;
for FrameID=SubSession:SubSession+(number_of_frames/5)-1
fullFileName=fullfile(thisFolder,baseFileNames{FrameID}); %fullfile(thisFolder, baseFileNames(Trials));
AllOtherFrames = imread(strcat(fullFileName)); % load images from tif and convert to double
EBC_Frame_movie(:,:,MovieFrame_Order)=AllOtherFrames;
MovieFrame_Order=MovieFrame_Order+1;
end
%% Create Sub_Session video
newVid = VideoWriter([strcat(pwd,'/DATAfolder/',Title_movie,'.avi')]); % save new movie
newVid.FrameRate = 200;
newVid.Quality = 100;
open(newVid)
for t = 1:size(EBC_Frame_movie,3)
figure(1)
imshow(EBC_Frame_movie(:,:,t),'Border','tight');
axis off;
axis equal
EBC_movie_Output = getframe(figure(1));
writeVideo(newVid,EBC_movie_Output) % saving one frame at a time to make the movie
end
close(newVid)

 Accepted Answer

It will be a lot faster if you don't display anything. So don't call imshow(), figure(), axis(), etc.
Also I don't see any advantage to storing all the frames in a structure first. Just call imread() and then writeVideo immediately.
Looks like your code is missing an "end" statement. Also the indenting is messed up. You can type control-a (to select all) then control-i (to fix indenting) in the MATLAB editor. Then copy and paste here and the indenting should be okay then.

3 Comments

Thank you for the response. The code is fine I just copied a small section and adjusted for the question purpose. That is why it may be missing the end and other stuff.
I found initially is that if I don't display the figure, the video cannot be written, it requested me to display an object in order to write the video! Is that normal? Is the object being the Figure or something else?
Probably because you were still calling getframe() which requires an image.
I'm attaching a similar (I think) demo that may help. In the demo it reads files from disk and writes a video.
Thanks alot for the answer. I removed the object display and the storage matrix as you suggested and now it is running much faster!!

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!