サンプルスクリプト/1フレームのみ選択する のバックアップ差分(No.1)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
#contents

* 本日のメニュー [#qb28ebd8]

今回は、AviSynth 内蔵の [[Trim]] フィルタを使って、クリップから任意の 1 フレームを選択してみましょう。じつは、選択開始フレームと選択終了フレームを指定する方法では、意図したとおりの結果にならない場合もあります。そのあたりについて、とくに注意してお読みください。

なお、AviSynth でカット編集を行う方法は、Trim フィルタを含めていくつか存在します。詳しくは、[[選択範囲の指定方法]]を参照してください。

* 使用するもの [#e22d224f]

-[[Trim]]
-[[AviSource]]
--[[サンプル動画(example.avi)>サンプルスクリプト#e1dca989]]の読み込みに使用。
-[[サンプル動画(example.avi)>サンプルスクリプト#e1dca989]]
-その他に、フレーム数の確認のために、以下の関数を使用します。
--[[Subtitle]]
--FrameCount: クリップの総フレーム数をカウント([[ClipProperties]] を参照)。
--String: 数値を文字列に変換([[ScriptFunctions>ScriptFunctions#s1b75b61]] を参照)。

* 作り方 [#ac7c0a1b]

+まず編集したいファイルを読み込みます。今回は例として、[[AviSource]] フィルタを使って、サンプル動画を読み込みます。
#code{{
# ソースの読み込み
AviSource("example.avi")
}}
+編集に移る前に、総フレーム数がどのように変化したのかを確認するために、以下のスクリプトを追加します。これは確認のためのものですので、実際に編集する際には必要ありません。なお、この部分の内容については、[[サンプルスクリプト/数値を文字列に変換する]]を参照してください。
#code{{
# 以下、デバッグ用(「サンプルスクリプト/数値を文字列に変換する」を参照)
num = FrameCount() # 総フレーム数
str = String(num) # num を文字列に変換
Subtitle(str) # str を表示
}}
#ref(trim_framecount_org.png)
画像の左上に表示されている 6 が、編集前のクリップの総フレーム数です。
+それでは、Trim フィルタを使って、1 フレームだけを選択してみることにしましょう。まずは、選択開始フレームと選択終了フレームを同じフレーム番号にしてみます。
#code{{
# カット編集
Trim(1, 1) # 1 〜 1 まで => 第 1 フレームのみ
}}
これを 1 のソースの読み込みと 2 のデバッグ部分の間に挿入してください。
#ref(trim_framecount_startend.png)
意図したとおり、第 1 フレームだけが選択されています。
+しかし、この方法では、ある場合においてまずいことが起こりえます。それは、第 0 フレーム、つまりクリップの一番先頭のフレームを選択する場合です((AviSynth では、クリップのフレーム番号を 0 からカウントします。))。実際にやってみましょう。
#code{{
# カット編集
Trim(0, 0) # 0 〜 0 まで?
}}
さきほどと同じように、ソースの読み込みとデバッグ部分の間に挿入します。
#ref(trim_framecount_0.png)
しかし、このスクリプトをプレビューしてみると、編集前のクリップと同じフレーム数の 6 が表示されています。じつは Trim フィルタの選択終了フレーム(last_frame パラメータ)を 0 に設定すると、クリップ全体を選択するようになっているのです。
+あらかじめ選択したいフレーム数が決まっている場合は、Trim フィルタのもう 1 つの指定方法を使用すると便利です。それは、さきほど選択終了フレームの番号を指定していた箇所に、負の値で選択したいフレーム数を指定する方法です。1 フレームだけを選択したいなら、-1 と指定します。
#code{{
# カット編集
Trim(0, -1) # 負の値にするとフレーム数
}}
#ref(trim_framecount_num.png)
これで第 0 フレームだけを選択することができました。もちろん、第 0 フレーム以外のフレームを選択したい場合や任意のフレーム数を選択したい場合にも、こちらの負の値を使用する方法を使用することができます。
+完成したスクリプトは、以下のとおりです(デバッグ部分は省略)。
#code{{
# ソースの読み込み
AVISource("example.avi")
# カット編集
Trim(0, -1) # 第 0 フレームのみを選択
}}

* 関連レシピ [#g3ae4b8e]

-[[サンプルスクリプト/数値を文字列に変換する]]