AviSynth内存不足错误(图像覆盖100秒)

AviSynth内存不足错误(图像覆盖100秒),avisynth,virtualdub,Avisynth,Virtualdub,我想在不同的时间在我的视频上叠加多个图像。我将用户函数定义为 function myFunction(clip c, int coordinateX, int from, int to) { c = c.trim(0, from-1) + c.trim(from, to).Overlay(myImage, x=coordinateX, y=667, mask=myImageMask, opacity=1) + c.trim(to+1, 0) return c } 它实质上是将m

我想在不同的时间在我的视频上叠加多个图像。我将用户函数定义为

function myFunction(clip c, int coordinateX, int from, int to) {
    c = c.trim(0, from-1) + c.trim(from, to).Overlay(myImage, x=coordinateX, y=667, mask=myImageMask, opacity=1) + c.trim(to+1, 0)
    return c
}
它实质上是将
myImage
图像放在剪辑的特定部分

我把我的函数称为

video = video.myFunction(320, 1, 187)
我有很多这样的作品(我正在尝试用多幅图像制作一些动画)

如果这些电话少于400个,一切都正常。如果超过这个限制,就会出现“内存不足”(我使用的是VirtualDub)

我想这是因为AviSynth必须处理所有调用以计算输出(尽管在这100个调用中只有~3个与特定的单帧相关)。但是,如果我在行的开头删除
video=
,我可能会有10000个,并且没有“内存不足”错误,但当然我没有视频输出


这有解决办法吗?视频剪辑上不同时间的数百/数千个图像叠加?

尝试使用SetMemoryMax()函数播放。但是要确保你有足够的空闲内存


另请注意,如果您在32位环境中工作,最大内存容量将为2 GB

在覆盖“ConvertToYUY2()”之前,尝试将视频和所有图像转换为YUY2颜色空间,这可能会减少每次调用的重新转换量,如下所述-
假设你的视频和图像是RGB格式的。您可能还可以尝试使用YV12颜色空间,也许它会节省更多内存。请注意,这将导致轻微的质量下降,因为除YV24以外的其他格式的颜色通道分辨率降低,并且也存在转换错误。

如果附加函数调用,是否会有任何区别?例如:
video.myFunction(320,1187).myFunction(480,1187).myFunction(640,1187).myFunction(320,187,374).myFunction(480,187,374).myFunction(640,187,374).myFunction(319,374,561)
同样的事情(内存不足错误)。我还有大约2GB的内存(总共4GB,64位系统),但VirtualDub(根据TaskManager)永不超过~64MB。因此,“SetMemoryMax”中的任何数字都会给出相同的“内存不足”错误。
video = video.myFunction(320, 1, 187)
video = video.myFunction(480, 1, 187)
video = video.myFunction(640, 1, 187)
video = video.myFunction(320, 187, 374)
video = video.myFunction(480, 187, 374)
video = video.myFunction(640, 187, 374)
video = video.myFunction(319, 374, 561)