作者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/cn.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