サンプルスクリプト/上下2分割画面

本日のメニュー

サンプルスクリプト/PsideP では 2 本のビデオクリップを左右横並びに表示するビデオクリップを作成しました。今回は、2 本のビデオクリップを上下に積み重ねて表示するビデオクリップを作成することにしましょう。

基本的な流れは サンプルスクリプト/PsideP と同じですので、今回は少し工夫して 2 本のクリップの上半分と下半分をくっつけたクリップを作成することにします。

使用するもの

作り方

  1. まず、画面の上側に表示させたいクリップを読み込みます。ここでは例として、サンプル動画(example.avi)を AviSource フィルタを使って読み込みます。わかりやすいように top という名前の変数に代入することにしましょう。
    top = AviSource("example.avi")
    
    この時点では、まだスクリプトを VirtualDub などで開かないでください*1
  2. 次に、画面の下側に表示させたいクリップを読み込みます。今回は、先ほど読み込んだクリップ(top)をグレースケールに変換したクリップを使用することにします。グレースケール変換には、GreyScale フィルタを使用します。
    bottom = top.GreyScale() # 「bottom = GreyScale(top)」と同じ
    
    こちらは bottom という変数に代入しました。この時点でも、まだスクリプトを実行しないでください。
  3. Crop フィルタを使って、top の上半分と bottom の下半分を切り出します。そのまま上下に重ねたい場合は、次の工程に進んでください。
    top = top.Crop(0, 0, top.Width(), top.Height()/2)
    bottom = bottom.Crop(0, bottom.Height()/2, bottom.Width(), bottom.Height()/2)
    
    「Width(clip)」で clip の幅を、「Height(clip)」で clip の高さを求めることができます。こうして求めた高さを 2 で割った値を Crop の引数として指定することによって、top と bottom の大きさに関係なく、それぞれの上半分と bottom の下半分を切り出すことが可能になります。
    • Crop フィルタには、負の値を使った指定法もあります。次のスクリプトも、上のスクリプトと同じ結果になります(負の値を使った指定法については、Crop を参照してください)。
      top = top.Crop(0, 0, 0, -top.Height()/2)
      bottom = bottom.Crop(0, bottom.Height()/2, 0, 0)
      
  4. 最後に StackVertical フィルタを使って top と bottom を上下に積み重ねたクリップを作成します。StackVertical は、2 本以上のクリップを垂直方向に重ねたクリップを作成するフィルタです(詳しくは、Stack を参照)。
    StackVertical(top, bottom)
    
  5. 完成したスクリプトは、以下のようになりました。
    top = AviSource("example.avi") # 上側のクリップ
    bottom = top.Greyscale() # 下側のクリップ
    top = top.Crop(0, 0, top.Width(), top.Height()/2) # 上半分を切り出す
    bottom = bottom.Crop(0, bottom.Height()/2, bottom.Width(), bottom.Height()/2) # 下半分を切り出す
    StackVertical(top, bottom) # top と bottom を上下に重ねる
    
    下の画像は、これを AVS ファイルとして保存し、プレビューしたものです。
    l.png

ひとくちメモ: StackVertical 使用時の注意

StackHorizontal フィルタを使用する際にいくつか注意すべき点があったように(サンプルスクリプト/PsideP を参照) 、StackVertical を使用するときにもやはり注意しなければならないことがあります。ここでは StackVertical のみに当てはまる(StackHorizontal とは異なる)項目だけを挙げますので、その他の注意点については、サンプルスクリプト/PsideP および MultiClipFunctions を参照してください。

  • 2 本のクリップは、画像のが同一でなければならない(高さは一緒でなくてもよい)。
    • 異なる幅のクリップを使用したい場合は、どちらか(あるいは両方)をリサイズするかクロップして大きさを調整する必要があります。

関連レシピ


*1 もし開いたとしたら、「The script's return value was not a video clip」というエラーが出るでしょう。

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