フィールドオーダーの確認
はじめに †
フィールドオーダーの明示の「フィールドオーダーを明示する理由」に記したように、AviSynth では「ソースクリップ本来のフィールドオーダー」と「AviSynth が仮定するフィールドオーダー」を区別する必要があります。ここでは、その両者について、それぞれ確認する方法を紹介します。
ソースクリップ本来のフィールドオーダーを確認する †
ソースクリップ本来のフィールドオーダーはキャプチャカードによって決まるため、キャプチャする毎、エンコードする毎に確認する必要はありません。なお、一般的に、DV キャプチャしたビデオクリップはボトムフィールドファーストであるとされています。
SeparateFieldsを使った判定法 †
AviSynth に内蔵されている SeparateFields は、フレームベースのビデオクリップをフィールド単位に分離するフィルタです。これを使って、ソースクリップ本来のフィールドオーダーを判定することができます。
手順は、以下のとおりです:
- まず、ソースクリップを読み込んだ直後に AssumeTFF または AssumeBFF を使用し、そのクリップのフィールドオーダーがトップフィールドファースト(TFF)またはボトムフィールドファースト(BFF)であると明示的に仮定します(AssumeTFF と AssumeBFF については、フィールドオーダーの明示を参照)。
- さらにその直後の行に SeparateFields フィルタを適用してフィールドごとに分離します。
- そして、AssumeTFF を使った場合と AssumeBFF を使った場合の両者を比較します。このとき、もし AssumeTFF を使った方がなめらかに再生されればソースクリップのフィールドオーダーは TFF、AssumeBFF を使った方がなめらかに再生されれば BFF であると考えられます。
なお、比較するときは、なるべく動きのあるシーンで行うのがいいでしょう。
使用例 †
- ソース
上の画像は、サンプルのビデオクリップ(
fieldorder.avi(Huffyuv、640x480、YUY2、2 フレーム、323KB))から抽出したフレーム画像を縮小して横に並べたものです。左から順に、フレーム 0、フレーム 1 です。
- トップフィールドファーストと仮定した場合
- スクリプト
AviSource("fieldorder.avi") AssumeTFF() # TFF と仮定 SeparateFields() # フィールド分離
AssumeTFF を使って TFF であると仮定。SeparateFields を使ってフィールドを分離しました。 - 出力画像 上の画像は、フィールド分離後の各フィールドを順に横に並べたものです。左から順に、フレーム 0 のトップフィールド、フレーム 0 のボトムフィールド、フレーム 1 のトップフィールド、フレーム 1 のボトムフィールドです。
- 結果
- 電車が、左から右へなめらかに移動しているのがわかります。このことから、このクリップのフィールドオーダーは TFF であると考えらます。
- スクリプト
- ボトムフィールドファーストと仮定
- スクリプト
AviSource("fieldorder.avi") AssumeBFF() # BFF と仮定 SeparateFields() # フィールド分離
AssumeBFF を使って BFF であると仮定。SeparateFields を使ってフィールドを分離しました。 - 出力画像 上の画像は、フィールド分離後の各フィールドを順に横に並べたものです。左から順に、フレーム 0 のボトムフィールド、フレーム 0 のトップフィールド、フレーム 1 のボトムフィールド、フレーム 1 のトップフィールドです。
- 結果
- 電柱と電車の位置関係に注目してください。電車が電柱に対して、近づいたり遠のいたりしているのがわかります。このことから、このクリップのフィールドオーダーは BFF ではないと考えられます。
- スクリプト
AviUtlの60fps読み込みを使った判定法 †
AviSynth のぺーじ/フィールドオーダーの指定を参照。
その他の判定法 †
にーやんのアーカイブ: フィールドオーダーの指定方法/フィールドオーダーの判別法の「フィールドオーダーの判別法」を参照。
AviSynthが仮定するフィールドオーダーを確認する †
Info †
Infoフィルタは、クリップの情報を表示するためのAviSynth内蔵フィルタです。Infoフィルタで取得可能な情報の中には、AviSynthが現在仮定しているフィールドオーダーも含まれています。
- 使用例
- スクリプト
# 使用例 AviSource("fieldorder.avi") # ソースクリップ Info() # この場合、Infoだけでも可
このように、クリップの情報を知りたい行に、「Info」と記述するだけでOKです。 - 出力画像(赤の下線は後から追加したもの) 「Parity」で始まる行(赤の下線がある行)がフィールドオーダーです。この例では、ボトムフィールドファーストであると AviSynth が仮定しているのがわかります。
- スクリプト
GetParity †
GetParity は、フィールドオーダーを判別するために作られた、AviSynth 組み込みの関数です。フィールドオーダーに関する情報のみを取得したい場合や、それをスクリプトの中で利用したい場合には、こちらを使うといいでしょう。
詳しくは、GetParity を参照。