Animate のバックアップソース(No.5)

#code(nonumber)<<EOF
Animate(clip clip, int start_frame, int end_frame, string filtername, start_args, end_args)
EOF

#code(nonumber)<<EOF
ApplyRange(clip clip, int start_frame, int end_frame, string filtername, args)
EOF

Animateは、連続的に変化する引数を伴ったパラメータフィルタを評価する、メタフィルタです。start-frame以前のフレームでは、フィルタは、start-argsによって与えられた引数で評価されます。end-frame以降のフレームでは、end-argsによって与えられた引数で評価されます。その中間では、引数は、スムーズな変化(transition)のために、線形補間されます。

ApplyRangeは、start_argsがend_argsと等しいという、特殊なケースのAnimateフィルタです。あるフィルタを、クリップの、ある範囲のフレームに適用したいときに使用することができます。Animateとの、もうひとつの違いは、argsがclipを含むことができないということです。v2.53から音声をサポートしています。しかも、start_frameとend_frameを同じ値にすることもできます(1フレームだけが処理されるような場合)。

filternameは、引用記号で囲まなければなりません。そして、2つの入れ子になった引数リストは、丸括弧には入れません。文字列(string)とビデオクリップ(clip)は、補間されません。それゆえ、それらは、2つの引数リストにおいて、まったく同一でなければなりません。OOP表記法((訳者註: ScriptGrammarを参照。))や暗示的な(implicit)last((訳者註: 明示的に指定した変数lastではなく、clip型の引数を省略した場合に自動的に適用されるlast(最後に処理したクリップに与えられる特別な変数)を意味するものと考えられます。))を、このフィルタと一緒に使用することはできません。たとえ、引数filternameの中のフィルタが、通常は、それらを許可しているとしても。

このフィルタは、変化するサウンドトラックを、正確に取り扱わないでしょう。そのため、私は、サウンドトラックを修正するフィルタと一緒の使用をおすすめしません。そして、お願いだから、最初と最後のパラメータが、異なる出力フレームサイズをもたらさないようにしてください。

線形補間よりも2次補間を望むなら、フィルタの引数をAnimateにすることもできます。しかし、私の頭が爆発するかもしれないので、このことについては、あまり考えすぎないようにしています。

''例:'' 

#code(nonumber)<<EOF
# "Version"ビデオのスクロール・バージョン(version)をつくる
ver = Version
return Animate(0, 149, "Crop", ver, 0, 0, 64, 32, ver, ver.width, 0, 64, 32)

# 上と同じもの:
ver = Version()
return Animate(ver,0,149,"Crop", 0,0,64,32, ver.width,0,64,32)

# 色が消えて白色になる(
Animate(100, 200, "Levels", last, 0, 1, 255, 0, 255, last, 0, 1, 255, 255, 255)

# 100フレームでは1:1の倍率で始まり、
# 200フレームでは4:1の倍率で終わるように、
# 320x240のビデオの中心へ次第にズームする

# 2004年3月31日 これは動かないでしょう - BicubicResizeは他にも余分のパラメータを必要とします!
# 代わりにBilinearResizeを試してみるといいかもしれません
Animate(100, 200, "BicubicResize",last, 0, 0, 320, 240, 320, 240, last, 120, 90, 80, 60, 320, 240)

# "Hello, World!"というテキストを320x240のビデオの中心からズームアウトさせます 
Animate(0, 48, "Subtitle", last, "Hello, World!", 160, 120, 0, 99999, "Arial", 0, last, "Hello, World!", 25, 130, 0, 99999, "Arial", 48)

ver = Version()
return ver.ApplyRange(0,149,"Crop", 158,0,64,32)

AviSource("E:\pdwork\DO-Heaven.AVI").BicubicResize(320,240)
ApplyRange(0,48,"Subtitle", "Hello, World!",25,130,0,99999,"Arial",48)

# 上と同じもの:
clip = AviSource("E:\pdwork\DO-Heaven.AVI").BicubicResize(320,240)
ApplyRange(clip, 0,48,"Subtitle", "Hello, World!",25,130,0,99999,"Arial",48)
EOF

#br
#hr
註: このページは、http://www.avisynth.org/Animateの日本語訳です。