[請益]如何把約三千張的照片存成影片

看板MATLAB作者 (雪翎)時間7年前 (2017/05/25 10:22), 7年前編輯推噓2(2021)
留言23則, 3人參與, 最新討論串1/1
大家好 我想使用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://www.ptt.cc/bbs/MATLAB/M.1495678945.A.82A.html

05/25 11:05, , 1F
google: appending image frames to existing avi file
05/25 11:05, 1F

05/25 14:09, , 2F
你的圖檔都是2048*2048左右的color image?
05/25 14:09, 2F
您好 我的圖檔都是尺寸4096*3072 ※ 編輯: ecogod (140.116.24.214), 05/25/2017 14:50:00

05/25 15:11, , 3F
若是灰階那就一樣大, 4096*3072*1 = 2048*2048*3
05/25 15:11, 3F
我輸出彩色的 print('-dpng','-r300',[outpath, 'i' , num2str(i) ]) ※ 編輯: ecogod (140.116.24.214), 05/25/2017 15:19:02

05/25 16:31, , 4F
我不知道你要轉成影片的目的是什麼,如果只是要連續播放
05/25 16:31, 4F

05/25 16:32, , 5F
寫個小function連播static image就好. 如果只是單純要
05/25 16:32, 5F

05/25 16:32, , 6F
變成單一一個video sequence,那麼拿其他軟體拼湊這2800
05/25 16:32, 6F

05/25 16:33, , 7F
張也行.沒必要要求用matlab來處理. 畢竟讀檔之後,存在
05/25 16:33, 7F

05/25 16:35, , 8F
記憶體裡面的是影像的raw data,故需2800*4000*3000byte
05/25 16:35, 8F

05/25 16:39, , 9F
若堅持用matlab,請試gpuarray,確認能否交給顯卡處理.
05/25 16:39, 9F

05/25 18:19, , 10F
若無暫停,快倒轉需求可考慮gif格式
05/25 18:19, 10F

05/25 23:37, , 11F
如果存成gif 89a,假設壓縮率相同,那麼一次要讀一個2GB
05/25 23:37, 11F

05/25 23:38, , 12F
的圖檔,也是件容易讓人頭皮發麻的事. XD
05/25 23:38, 12F

05/25 23:44, , 13F
不如存成multiple page的TIFF; TIFF的壓縮率比gif89a好
05/25 23:44, 13F

05/25 23:44, , 14F
只是TIFF format要自己按next page... =_=;
05/25 23:44, 14F

05/25 23:49, , 15F
不然就不要強求lossless,檔案可以小很多
05/25 23:49, 15F

05/26 02:47, , 16F
所以要原po說明一下需求是什麼了,單張影像的大小比4k
05/26 02:47, 16F

05/26 02:48, , 17F
UHDTV的一張frame還大... orz
05/26 02:48, 17F

05/26 02:53, , 18F
但是,站在壓縮率的立場,拿LZW-TIFF或是motion jpeg都不
05/26 02:53, 18F

05/26 02:54, , 19F
如直接壓成video sequence; 因此,或許比較簡單的做法是
05/26 02:54, 19F

05/26 02:55, , 20F
用matlab的videowriter先寫成數個video,然後再拿其他的
05/26 02:55, 20F

05/26 02:55, , 21F
軟體把這些短video合併成一個長video.
05/26 02:55, 21F

06/05 17:02, , 22F
後來我解決的矩陣的問題,謝謝大家
06/05 17:02, 22F

06/06 10:22, , 23F
所以是怎麼解決的呢?
06/06 10:22, 23F
文章代碼(AID): #1P9Z_XWg (MATLAB)
文章代碼(AID): #1P9Z_XWg (MATLAB)