作者ecogod (雪翎)
看板MATLAB
標題[請益]如何把約三千張的照片存成影片
時間Thu May 25 10:22:18 2017
大家好
我想使用Matlab把2880張png照片(每張約500kb)存成影片。
但是程式碼寫完之後,跑了平行處理,還是會把伺服器的記憶體吃光光
貌似是暫存在cell中吃的記憶體太大,導致我還沒匯入完所有照片就掰了
想請大家幫我看看程式碼如何改進比較好,謝謝
--------------------------------------------
p = gcp;
poolSize = 8;
略過參數設定、路徑定義、輸出檔名;
idx1=1;
idx2=2880;
f = dir([figpath '*.png']);
imagecell= cell(idx2-idx1+1,1);
c = 1;
for i = idx1:idx2
figname = f(i).name;
II = imread([figpath figname]);
imagecell{c,1} = II;
c=c+1;
end
v = VideoWriter(gifname);
v.FrameRate = 12;
%v.Quality = 0;
open(v);
for k = 1:numel(imagecell)
writeVideo(v,imagecell{k,1});
end
close(v);
movefile([gifname '.avi'],outpath);
-------------------------------------------------
想請問各位前輩哪裡可以優化,我一直想不通總大小約2G的2880張png
怎麼在處理時會吃掉快30 40 G的記憶體,然後就掰了
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.24.214
※ 文章網址: https://webptt.com/m.aspx?n=bbs/MATLAB/M.1495678945.A.82A.html
1F:→ YoursEver: google: appending image frames to existing avi file 05/25 11:05
2F:→ YoursEver: 你的圖檔都是2048*2048左右的color image? 05/25 14:09
您好 我的圖檔都是尺寸4096*3072
※ 編輯: ecogod (140.116.24.214), 05/25/2017 14:50:00
3F:→ YoursEver: 若是灰階那就一樣大, 4096*3072*1 = 2048*2048*3 05/25 15:11
我輸出彩色的 print('-dpng','-r300',[outpath, 'i' , num2str(i) ])
※ 編輯: ecogod (140.116.24.214), 05/25/2017 15:19:02
4F:→ YoursEver: 我不知道你要轉成影片的目的是什麼,如果只是要連續播放 05/25 16:31
5F:→ YoursEver: 寫個小function連播static image就好. 如果只是單純要 05/25 16:32
6F:→ YoursEver: 變成單一一個video sequence,那麼拿其他軟體拼湊這2800 05/25 16:32
7F:→ YoursEver: 張也行.沒必要要求用matlab來處理. 畢竟讀檔之後,存在 05/25 16:33
8F:→ YoursEver: 記憶體裡面的是影像的raw data,故需2800*4000*3000byte 05/25 16:35
9F:→ YoursEver: 若堅持用matlab,請試gpuarray,確認能否交給顯卡處理. 05/25 16:39
10F:推 sunev: 若無暫停,快倒轉需求可考慮gif格式 05/25 18:19
11F:→ YoursEver: 如果存成gif 89a,假設壓縮率相同,那麼一次要讀一個2GB 05/25 23:37
12F:→ YoursEver: 的圖檔,也是件容易讓人頭皮發麻的事. XD 05/25 23:38
13F:→ YoursEver: 不如存成multiple page的TIFF; TIFF的壓縮率比gif89a好 05/25 23:44
14F:→ YoursEver: 只是TIFF format要自己按next page... =_=; 05/25 23:44
15F:推 sunev: 不然就不要強求lossless,檔案可以小很多 05/25 23:49
16F:→ YoursEver: 所以要原po說明一下需求是什麼了,單張影像的大小比4k 05/26 02:47
17F:→ YoursEver: UHDTV的一張frame還大... orz 05/26 02:48
18F:→ YoursEver: 但是,站在壓縮率的立場,拿LZW-TIFF或是motion jpeg都不 05/26 02:53
19F:→ YoursEver: 如直接壓成video sequence; 因此,或許比較簡單的做法是 05/26 02:54
20F:→ YoursEver: 用matlab的videowriter先寫成數個video,然後再拿其他的 05/26 02:55
21F:→ YoursEver: 軟體把這些短video合併成一個長video. 05/26 02:55
22F:→ ecogod: 後來我解決的矩陣的問題,謝謝大家 06/05 17:02
23F:→ YoursEver: 所以是怎麼解決的呢? 06/06 10:22