0

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

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 VirtualDub 内存不足错误

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

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

4

2 回答 2

0

尝试使用 SetMemoryMax() 函数。但请确保您有足够的可用内存。

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

于 2013-09-13T20:53:41.413 回答
0

尝试在使用“ConvertToYUY2()”覆盖之前将视频和所有图像转换为 YUY2 颜色空间,这可能会减少每次调用的重新转换量,如此处所述 - http://avisynth.nl/index.php/Overlay#Repeated_overlays_on_RGB_base_clip 这是假设您的视频和图像是 RGB 格式的。您也可以尝试使用 YV12 色彩空间,也许它会节省更多内存。请注意,这会导致质量略有下降,因为颜色通道在 YV24 以外的格式中降低了分辨率,而且还存在转换错误。

于 2014-09-27T15:49:53.217 回答