HandBrakeの逆テレシネフィルタ - Detelecine

Detelecine

Detelecine フィルタは、MPlayer Project から移植された高度な逆テレシネフィルタ。Pullup フィルタとも呼ばれる。ハードテレシネ、ソフトテレシネ、プログレッシブ、あるいはそれらが繋ぎ合わされた時間軸混合素材が扱える。
このフィルタの特徴は、特定のテレシネパターンに依存しないということ。これはテレシネ変換後に複雑な編集が加えられるなどして、テレシネパターンが一定ではなくなった素材や、ハードテレシネとプログレッシブの時間軸混合素材の場合でも効果的に逆テレシネ処理が行えることを意味する。
Detelecine は、各フレームごとにフィールドマッチの判定を行い、テレシネ変換により生じた前後フレームのフィールド同士で構成されたコーミングノイズが見られるフレームをプログレッシブフレームへと復元するよう試みる。フィールドマッチの検出・プログレッシブフレームの再構築には、未来方向のフィールドも参照される。これにより、パターン周期が不定であっても正確な処理が可能になる。
プログレッシブフレームの復元により、重複するフレームが発生した場合は必要に応じて削除され、フレームレートの調整が行われる。
片方のフィールドが欠けてしまっている不完全なフレームがある場合や、2:2:2:4 プルダウンのようなプログレッシブフレームが連続する場合などでは、コーミングが残る、フレームが間引かれないことがあるなど、完全ではないがきわめて正確であるとされている。

Detelecineのパラメータについて

GUI の場合は、"Cutom" を選択することで表示されるテキストフィールドに "L:R:T:B:SB:MP:FD" の 7 つのパラメータを ":" コロンで区切って入力する。
CLI の場合は、--detelecine="L:R:T:B:SB:MP:FD" と、このように入力する。デフォルト値は "1:1:4:4:-1:0:-1" となっている。

  • L, R, T, B
フィールドマッチの判定に利用されない (無視される) 部分の範囲を指定する。 L, R は左右 8 px 単位、T, B は上下 2 ライン単位で範囲を指定する。
デフォルトでは 1:1:4:4 と設定されている。これは左右 8 px 、上下 8 ラインの範囲を無視するという意味になる。

  • SB(Strict breaks)
1 を設定した場合、Detelecine が時折ミスマッチフレームを生成する機会は減少するが、動きの激しい部分などで過剰なフレームドロップが起こりうる。
逆に、-1 を設定した場合は、よりシンプルにフィールドマッチを行う。これは各フィールド間に僅かなブレがある場合に有効であるが、出力結果にコーミングが残る可能性がある。0はその中間。
デフォルトは -1 となっている。

  • MP(Metric plane)
1 か 2 を設定すると、演算に輝度プレーンを使う代わりに彩度プレーンを使う。デフォルトは 0
これは、非常にクリーンな素材では精度が上がるが、多くの場合精度は低下してしまう。特に彩度ノイズがある場合やグレースケールの場合は精度が低下する。
MP を彩度プレーンに設定する主な理由は、CPU の負荷を軽減することにある。

  • FD(Field dominance, Parity)
フィールドオーダーの設定。 0 は TFF、1 は BFF になる。デフォルトの -1 は自動判定。

Detelecineと可変フレームレート - VFR Encoding

ハードテレシネ (元のフレームレートは 24 fps) と 30 fps プログレッシブの時間軸混合素材などを扱う場合、固定フレームレート (Constant Framerate, CFR) で出力すると問題が起こる。
Detelecine は、フィールドマッチングによるテレシネパターンに依存しないフィルタであるため、このような時間軸混合素材であってもハードテレシネの部分のみを処理することができるが、これを固定フレームレートの 30 fps で出力すると、ハードテレシネの部分で 4 フレームごとに 1 フレームの重複フレームが残ってしまい、再生時に"引っ掛かり"を感じてしまう場合がある。さらに重複フレームはデータの無駄となってしまう。一方、固定フレームレートの 24 fps で出力すると、ハードテレシネの部分は元のフレームレートに復元されるが、30 fps プログレッシブの部分では本来削除されるべきではないフレームが削除されてしまい、動きの滑らかさが失われる。
これらの問題は、可変フレームレート (Variable Framerate, VFR) 出力を行うことで解決される。
"Video" タブのフレームレートの設定で "Same as source" を選択し、"Variable Framerate" をオンにすることで可変フレームレート出力が可能となる。
これにより、ハードテレシネ部分の重複フレームを適切に削除しつつ、プログレッシブ部分では本来のフレームレート・フレーム順序を保つことができる。

Note:
Detelecine は、フィールドマッチングによるテレシネパターンに依存しないフィルタであるがゆえに、最初から最後まで完全にハードテレシネ処理されてある素材であっても可変出力を生成しうる。
これは、例えば動きが全くないシーンなど、コーミングが検出できないフレームをプログレッシブとして扱ってしまうためである。
そのため、最初から最後まで完全にハードテレシネ処理されてある素材を Detelecine + VFR で出力しても 24000/1001 fps とはならない場合がある。
なお、Detelecine は空間軸上でのfps混在 (例えば、24p 素材と 60i 素材が同じフレーム上に存在するような) を想定していないため、そのような素材はうまく扱うことができない。

Detelecineの使用例

いくつかの状況における Detelecine の使用例。これらはあくまでも一例に過ぎない。

  • ハードテレシネ
Detelecine + VFR 出力が無難。
とはいえ、CFR 出力であっても問題となることは少ないため、CFR, VFR の選択は個人の好みによる。
コーミングが残る場合は、Decomb フィルタを追加することで改善される。 Decomb フィルタは、Detelecineにより復元されたものも含めプログレッシブフレームに対しては処理を行わないため、品質に大きな影響を与えることなくコーミングのみを除去できる。
もし、不自然なフレームドロップ、過剰なフレームドロップにより動きの滑らかさが失われたと感じた場合は、SB(strict breaks) を -1 に設定することで改善されるかもしれない。
GUIの場合: Detelecine(+ Decomb:Default) + "Same as source" + "Variable Framerate" をオンにする。
CLIの場合: --detelecine --vfr (+ --decomb)

  • ソフトテレシネ
フィルタは不要。CFR 出力が望ましい。
ソフトテレシネ素材を VFR で出力すると、フレーム表示タイミングにズレが生じる場合がある。
具体的には、最初のフレームは 2/60 秒間表示され、次のフレームは 3/60 秒間表示される、といったパターンが繰り返される。つまり、3:2 プルダウン素材を 60p 化(6:4 pulldown 相当)したような状態となってしまう。
ごく僅かなズレであるため通常は知覚し難いが、ゆっくりとしたパンなどでは知覚できることがあるため、極力 CFR で出力したほうが良い。
GUIの場合: Filters すべて Off + "Same as source" か、素材のフレームレートを指定 + "Constant Framerate" をオンにする。
CLIの場合: --cfr

  • ハードテレシネ・プログレッシブ時間軸混合
Detelecine + VFR 出力。
ハードテレシネと同じような対処で問題はない。プログレッシブ部分がソフトテレシネである場合は、CFR で出力しても良い。
GUIの場合: Detelecine(+ Decomb:Default) + "Same as source" + "Variable Framerate" をオンにする。
CLIの場合: --detelecine --vfr (+ --decomb)

  • ハードテレシネ・60i インターレース時間軸混合
1. ハードテレシネ部分を重視するのであれば、Detelecine + Decomb:Default + VFR 出力。
2. 60i インターレース部分を重視するのであれば、Decomb:Bob + VFR 出力。
3. インターレースの保持。

Detelecineは60iインターレース素材には向いていないため、ある程度の妥協が必要になる。
60i 素材に対して Detelecine を使用すると、意図しないフレームドロップが発生する、フィールドオーダーが一定ではなくなるといったことが起きる可能性がある。
そのため、ハードテレシネ、60i インターレースのどちらの部分を重視するかによって対応が変わってくる。

ハードテレシネ部分を重視するのであれば、Detelecine と Decomb:Default を併用する。
この場合、ハードテレシネ部分は通常通りプログレッシブフレームに復元されるが、60i インターレース部分は通常のデインターレース処理よりも品質が低くなる可能性がある。

60i インターレース部分を重視するのであれば、Decomb:Bob を使用する。
この場合は、ハードテレシネ部分のフレーム表示タイミングにズレが生じる(ソフトテレシネの場合と同様)が、60i インターレース部分は通常のデインターレース処理と同じ品質が得られる。

上記、どちらの方法も一定程度の品質の低下は避けられないため、この場合はインターレースの保持を選択することも手段の一つとなりうる。
インターレースを保持することにより、十分な圧縮効果が得られない、再生時にデインターレース処理が必要になる、といったデメリットが生じるが品質を保つという意味では最も安全であるといえる。
また、空間軸上でのfps混在(例えば、24p 素材と 60i 素材が同じフレーム上に存在するような)素材の場合も同じくインターレースの保持を選択することが最も安全であるといえる。

1. Detelecine + Decomb:Default + VFR 出力
GUIの場合: Detelecine + Decomb:Default + "Same as source" + "Variable Framerate" をオンにする。
CLIの場合: --detelecine --decomb --vfr

2. Decomb:Bob + VFR 出力
GUIの場合: Decomb:Bob + "Same as source" + "Variable Framerate" をオンにする。
CLIの場合: --decomb="bob" --vfr

3. インターレースの保持
GUIの場合: FiltersすべてOff + "Video" タブの "Extra Options" に "tff=1" と入力。
CLIの場合: --encopts tff=1
最終更新:2013年07月23日 00:44