GetParity
GetParityとは? †
GetParity は、フィールドオーダーがトップフィールドファースト(TFF)であるかボトムフィールドファースト(BFF)であるかを判別するための関数です。パリティ(parity)は「偶奇性」(偶数か奇数か、0 か 1 かを示すもの)で、GetParity では、返り値が true なら TFF、false なら BFF とみなされていることになります(SourceForge.net Repository - [avisynth2] View of /avisynth/src/filters/field.hより)。
ただし、これは AviSynth がそのように仮定しているというだけです。ソース本来のフィールドオーダーがTFFであっても、GetParity が返す値は false である可能性もあります。詳しくは、フィールドオーダーの明示を参照。
使用例 †
基本編 †
GetParity 関数の返り値は、true または false です。たとえばこの返り値を Subtitle フィルタを使ってクリップ上に表示したいなら、前もって String 関数を使って文字列に変換する必要があります*1。
- 使用例 1
- スクリプト
AviSource("example.avi") # ソース parity = GetParity() # パリティを取得 parity = String(parity) # parity を文字列に変換 Subtitle(parity) # Subtitle フィルタでクリップ上に表示
- 出力画像(一部)
- スクリプト
GetParity 関数は、実引数として指定されたクリップのパリティを返します。このため、同じスクリプトでも、GetParity 関数を挿入する位置によって返り値が異なる可能性があります。
- 使用例 2
- スクリプト
AviSource("example.avi") # ソース AssumeTFF() # TFF と仮定 => true parity = GetParity() # パリティを取得 parity = String(parity) # parity を文字列に変換 Subtitle(parity) # Subtitle フィルタでクリップ上に表示
- 出力画像(一部)
- スクリプト
上の例では、直前に挿入された AssumeTFF によってパリティが強制的に true に設定されるため、GetParity の返り値はソースのパリティに関係なく true になります。
応用編1 †
true や false ではわかりにくいなら、GetParity 関数の返り値が true なら "TFF"、false なら "BFF" を返すような関数をつくって見るといいかもしれません。
- 例
- スクリプト
AviSource("example.avi") # ソース fieldorder = GetFieldOrder() # GetFieldOrder 関数(下記参照)でフィールドオーダーを取得 Subtitle("フィールドオーダー: " + fieldorder, font="MS Pゴシック") # 日本語対応フォントに設定 function GetFieldOrder(clip clip) { parity = GetParity(clip) # clip のパリティを取得 return (parity == true) ? "TFF" : "BFF" # parity が true なら "TFF" を、さもなければ "BFF" を返す }
- 出力画像(一部)
- スクリプト
応用編2 †
上記の応用例 1 では、三項演算子を使って、GetParity の返り値(true または false)による処理の振り分けを行っています。これは、以下のように応用可能です。
parity = GetParity() # パリティを取得 (parity == true) ? TDeint(order=1) : TDeint(order=0) # parity が true なら order=1 に、false なら order=0 に設定
この例では、GetParity の返り値が true なら TDeint(order=1) 、false なら TDeint(order=0) が適用されます *2。
これは一例です。実際には、TDeint の order パラメータには AviSynth のパリティを利用するオプションが用意されているため、このようなスクリプトを使う必要はありません。下記のように order=-1 に設定すれば、AviSynth のパリティが利用されるようになります。
TDeint(order=-1)
*1 Subtitle フィルタの text パラメータが string 型であるため。
*2 厳密には「false なら」ではなく、「true ではないなら(さもなければ)」とした方がいいのかもしれませんが、GetParity の返り値は true か false のいずれかしかないため、このような書き方をしました。