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 フィルタでクリップ上に表示
      
    • 出力画像(一部)
      fieldorder_parity_default.png

GetParity 関数は、実引数として指定されたクリップのパリティを返します。このため、同じスクリプトでも、GetParity 関数を挿入する位置によって返り値が異なる可能性があります。

  • 使用例 2
    • スクリプト
      AviSource("example.avi") # ソース
      AssumeTFF() # TFF と仮定 => true
      parity = GetParity() # パリティを取得
      parity = String(parity) # parity を文字列に変換
      Subtitle(parity) # Subtitle フィルタでクリップ上に表示
      
    • 出力画像(一部)
      fieldorder_parity_assumetff.png

上の例では、直前に挿入された 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" を返す
      }
      
    • 出力画像(一部)
      fieldorder_parity_customized.png

応用編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 のいずれかしかないため、このような書き方をしました。

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