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 が出力を把握するためにすべての呼び出しを処理する必要があるためだと思います (ただし、これらの数百の呼び出しのうち、特定の単一フレームに関連するのは3 つまでです)。ただし、行の先頭で削除するvideo =と、それらが10000個になり、「メモリ不足」エラーは発生しませんが、もちろんビデオ出力はありません。

これに対する修正はありますか?ビデオ クリップのさまざまな時間に何百または何千ものイメージ オーバーレイが表示されますか?

4

2 に答える 2

0

SetMemoryMax() 関数で遊んでみてください。ただし、十分な空きメモリがあることを確認してください。

また、32 ビット環境で作業している場合、最大メモリ ボリュームは 2 GB になります。

于 2013-09-13T20:53:41.413 に答える