How to fast process conversion of .tif image sequence to an .avi video
34 ビュー (過去 30 日間)
古いコメントを表示
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)
0 件のコメント
採用された回答
Image Analyst
2021 年 11 月 19 日
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 件のコメント
Image Analyst
2021 年 11 月 19 日
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.
その他の回答 (0 件)
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!