众所周知,Avisynth从某个版本开始默认划取1/4系统内存作为缓存,还可以使用SetMemoryMax()来手动设置最大内存占用,但似乎有的插件无视这个限制……
最近压了个Macross Zero BDBOX Disc2的声优特典
脚本如下
SetMemoryMax(128)
AVCSource("00008.dga")
Crop(240,0,-240,0)
TDeint(mthreshL=0,mthreshC=0)
FFT3DGPU(precision=2,plane=4)
很简单的切边,deinterlace,降噪
丢VD预览,Commit charge达到了2.5G左右
vista64下系统本身大概要占1.5G左右,4G内存(硬盘pagefile关闭)时,VD播放10帧左右就会爆炸,更不要说进x264压了
所以为了压这段东西,我不得不去买了4根2G……
8G内存时,x264跑这个脚本大约要占3G多,内存总占用大约4600MB左右,这样才顺利出了成品
但奇怪的是,32bit程序没有特殊flag时,应该只有2G的virtual memory空间。观察x264的private working set和commit size的话,两者都在1G左右,并没有超过32bit程序的限制,那这脚本是怎么跑到如此之高的commit charge的。
听说vista的内存管理是把显存和物理内存一起管理的,难道FFT3DGPU会吃掉1G显存?
不知这里有没有人遇到过avs脚本的超高内存占用