サンプルスクリプト/1フレームのみ選択する

本日のメニュー

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

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

使用するもの

作り方

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

関連レシピ


*1 AviSynth では、クリップのフレーム番号を 0 からカウントします。

最終更新日時: 2014-03-11 (火) 03:50:51 (3692d)