我想在不同的时间在我的视频上覆盖多个图像。我将用户函数定义为
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)我有一堆像这样的(我试图用多种图像制作某种动画)
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)如果这些电话的数量少于400,一切正常。如果我超过了这个限制,就会出现“内存不足”(我使用的是VirtualDub)。

我想这是因为AviSynth必须处理所有的调用才能计算出输出(尽管只有3次调用是与特定的单帧相关的)。但是,如果我在行的开头删除video =,我可能会删除其中的10000,并且没有“内存不足”错误,但我当然没有视频输出。
这件事有办法解决吗?在视频剪辑的不同时间,数百/数千张图像被覆盖?
发布于 2013-09-13 20:53:41
尝试使用SetMemoryMax()函数。但要确保你有足够的自由记忆。
还请注意,如果您在32位环境中工作,最大内存容量将是2GB.
发布于 2014-09-27 15:49:53
尝试在覆盖“YUY2 ()”之前将视频和所有图像转换为ConvertToYUY2颜色空间,这可能会减少每次调用的重转换量,如这里所解释的--假设您的视频和图像在RGB中的clip。您可能也可以尝试使用YV12颜色空间,也许它会节省更多的内存。请注意,它将导致轻微的质量下降,因为彩色通道已经降低了分辨率的格式,而不是YV24,而且也有转换错误。
https://stackoverflow.com/questions/18720919
复制相似问题