我想在不同时间在我的视频上叠加多个图像。我将用户功能定义为
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次,一切正常。如果我超过该限制,则会出现“Out of Memory”(我正在使用VirtualDub)。
我想这是因为AviSynth必须处理所有调用才能计算输出(尽管这些100%中只有~3个特定的单帧)。但是,如果我在行的开头删除video =
,我可能会有10000个,并且没有“内存不足”错误,但当然我没有视频。
有解决方法吗?视频剪辑上不同时间有数百/数千个图像叠加?
答案 0 :(得分:0)
尝试使用SetMemoryMax()函数。但要确保你有足够的空闲记忆。
另请注意,如果您在32位环境中工作,则最大内存容量将为2 GB。
答案 1 :(得分:0)
尝试将视频和所有图像转换为YUY2颜色空间,然后再与“ConvertToYUY2()”重叠,这可能会减少每次调用的重新转换量,如此处所述 - http://avisynth.nl/index.php/Overlay#Repeated_overlays_on_RGB_base_clip 这是假设您的视频和图像是RGB。您可以尝试使用YV12颜色空间,也许它会节省更多内存。请注意,由于颜色通道在YV24以外的格式中降低了分辨率,并且还存在转换错误,因此会导致轻微的质量下降。