HandBrakeのデインターレースフィルタ - Deinterlace, Decomb

Deinterlace

Deinterlace は、すべてのフレームに対して処理を行うデインターレースフィルタ。Decomb との違いは、プログレッシブフレームに対しても処理を行ってしまうため、プログレッシブとの時間軸混合素材には不向きであること。
リニア補間、Yadif (Yet Another Deinterlacing Filter)、mcdeint (動き補償デインターレース) の 3 つの手法が選択できる。

  • リニア補間フィルタ
リニア補間フィルタは、ffmpeg で使用されていた古いシンプルなデインターレースフィルタ。"Fast" を指定するとこれが選択される。
高速で処理できるが品質は悪く、斜めのラインや曲線の部分などでジャギー (ギザギザ) が発生する。また、稀に片方のフィールドの影響を完全に排除できないことがあり、その場合はジャギーに加え、色や明るさの変化とゴースト (残像) が発生する。

  • Yadif(Yet Another Deinterlacing Filter)
Yadif は、MPlayer Project から移植された EDI (Edge Directed Interpolation, エッジ方向付け補間) デインターレースフィルタ。"Slow", "Slower", "Bob" を指定するとこれが選択される。
前後フレームのピクセルを参照してエッジの方向を検出・予測し、それに従ってピクセルを埋めていくことで各フィールドの欠落したラインを補間する。これにより、ジャギーの発生がかなり抑えられる。さらに、空間軸のインターレースチェックを行うことでほとんどのアーティファクトを防ぐことができる。
"Slow" は、空間軸のインターレースチェックをスキップしたもの。出力結果にアーティファクトが残る可能性があるが、やや高速で処理できる。オリジナル Yadif の mode=2 に相当する。
"Slower" は、空間軸、時間軸ともに処理を行う。オリジナル Yadif の mode=0 に相当する。
"Bob" は、Yadif ダブルフレームレート出力。トップ・ボトムの両フィールドをそれぞれ1枚づつのフレームとして出力するため、フレームレートは2倍になる。オリジナル Yadif の mode=1 に相当する。

  • mcdeint(動き補償デインターレース)
mcdeint は、MPlayer Project から移植された動き補償デインターレースフィルタ。"Custom" で有効化することができる。
各フィールドの欠落したラインを動き予測・動き補償によって補間する。動き予測には参照元となる画像が必要になるため、各フィールドをフレームとして出力できる Yadif との併用が必須となる。
出力結果は高品質であるが、処理に膨大な時間がかかる。

Deinterlaceのパラメータについて

GUI の場合は、"Cutom" を選択することで表示されるテキストフィールドに "YM:FD:MM:QP" の4つのパラメータを ":" コロンで区切って入力する。
CLI の場合は、--deinterlace="YM:FD:MM:QP" と、このように入力する。また、--deinterlace=["Fast", "Slow", "Slower", "Bob"] と、省略名で指定することもできる。
デフォルト値は "0:-1:-1:1" となっている。

  • YM(yadif mode)
リニア補間フィルタと Yadif のどちらを使用するかをコントロールする。デフォルトは 0

0: リニア補間フィルタが選択される。これは "Fast" に相当する。
1: 空間軸インターレースチェックをスキップした Yadif が選択される。これは "Slow" に相当する。
3: Yadif が選択される。これは "Slower" に相当する。
15: Yadif ダブルフレームレートが選択される。これは "Bob" に相当する。

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

  • MM(mcdeint mode)
mcdeint の有効・無効及び、mcdeint のモードを選択する。値が高いほど処理に時間がかかる。また、YM(yadif mode) の値が 1 以上でなければ機能しない。デフォルトの -1 は mcdeint の無効を意味する。

0: mcdeint が有効になる。16x16 マクロブロック動き補償、1/4 画素精度。
1: 8x8 ブロックをサポートし、動き予測アルゴリズムのダイヤモンドサイズが拡大される。
2: 反復型オーバーラップブロックベース動き予測の追加。
3: 複数参照フレームが有効になる。

  • QP(quantization parameter)
量子化パラメータを設定する。
値が高いほど滑らかな動きベクトル場になるが、個別の動きベクトルは最適ではなくなる。デフォルトは 1

Decomb

Decomb は、インターレースを検出したフレームにのみ処理を行うデインターレースフィルタ。Deinterlace とは違い、プログレッシブフレームに対しては処理を行わないため、プログレッシブとの時間軸混合素材の場合でも、できるだけ品質を保ったままコーミングのみを除去できる。
このフィルタは、各フレームごとにコーミングの度合いをチェックし、フィールド補間デインターレース、弱いブレンドデインターレース、フィルタなし (パススルー) を切り替えながら処理を行う。
コーミング度合いの判定には、AviSynth (tritical's decombing filters for AviSynth) の判定方法をはじめとして、いくつかの技術を組み合わせたものが利用される。まず、フレーム内のすべてのピクセルに対して、そのピクセルがコーミングであるか、そうでないかの判定を行い、コーミングマスクと呼ばれるビットマップの配列を構築する。次に、構築したコーミングマスクに対して、"コーミングであると判断されたピクセル"がどの程度存在しているか・密集しているかを調べる。その結果によってコーミング度合いが判定される。
各フレームはコーミングの度合いに応じて、コーミング有り、コーミング僅かに有り、コーミング無し (プログレッシブ) の 3 タイプに分類され、それぞれの状況に応じた処理が行われる。
デフォルトの動作は、コーミングがあると判断したフレームには、空間予測の生成に通常より多くのピクセルをチェックするよう微調整が加えられた Yadif が使用される。コーミングが僅かにあると判断したフレームには、Yadif よりもディティールを保持でき、プログレッシブ部分にも影響が少ない "lowpass-5 filter" と呼ばれる弱いブレンドデインターレースが使用される。プログレッシブであると判断したフレームには処理は行わない。
各状況に対してどのデインターレース処理を使用するかは、Decomb の MO (Deinterlace mode) パラメータによって変更できる。
また、これらがどれくらいの割合で処理されたかはログファイルで確認することができる。
(例: decomb: deinterlaced 0 | blended 0 | unfiltered 5999 | total 5999)

Decombのパラメータについて

Decomb は、"MO:ME:MT:ST:FM:BT:BX:BY:MG:VA:LA:DI:ER:NO:MD:PP:FD" の 17 個のパラメータが設定できる。
最初のオプション "MO(Deinterlacing Mode)" はデインターレース処理の手法を選択する。2 番目以降のオプションは、コーミング判定に関連するものと、EEDI2 に関連するオプション、フィールドオーダーの設定であるため、これらを変更する必要がない場合は省略しても構わない。
GUI の場合は、"Cutom" を選択することで表示されるテキストフィールドにそれぞれのパラメータを ":" コロンで区切って入力することができる。
CLI の場合は、--decomb="MO:ME:MT:ST:MF:BT:BX:BY:MG:VA:LA:DI:ER:NO:MD:PP:FD" と、このように入力する。また、--decomb=["Fast", "Bob"] と、省略名で指定することもできる。
2番目以降のオプションを省略する場合は、--decomb=391, --decomb=455 のように、MO(Deinterlacing Mode) の値のみを指定する。

デフォルトは "391:2:3:3:2:40:16:16:10:20:20:4:2:50:24:1:-1"
"Bob" は "455:2:3:3:2:40:16:16:10:20:20:4:2:50:24:1:-1"
"Fast" は "7:2:6:9:1:80:16:16:10:20:20:4:2:50:24:1:-1"

  • MO(Deinterlacing Mode)
コーミングがあると判断したフレームに対してどのデインターレース処理を使用するかをコントロールする。

0: 何もしない
1: Yadif
2: Blend (Lowpass-5 Blending Interpolation)
4: Cubic Interpolation for Yadif
8: EEDI2 Interpolation
16: mcdeint (mode:2 QP:1)
32: combing masks
64: Bob (フィールドをフレームに変換する。YadifかEEDI2のどちらかが必要)
128: Gamma scaling: コーミング判定の精度を上げ、誤検出を減らす。
256: Filter combing mask
512: Overlay combing mask

MO の各パラメータは階層化(加算)することができる。例えば、MO の値を 9 に設定した場合、Yadif と EEDI2 が併用されることを意味する。(1:Yadif + 8:EEDI2 = 9)
Blend (2) を組み込んだ場合は、コーミングの度合いによって処理を切り替えることになる。例えば、MO の値を 7 に設定した場合 (1:Yadif + 2:Blend + 4:Cubic = 7)、これはコーミングの度合いにより Yadif + Cubic と、Blend とを切り替えながら処理を行うことを意味する。
デフォルトは 391(1:Yadif + 2:Blend + 4:Cubic + 128:Gamma scaling + 256:Filter combing mask)、
"Bob" を選択した場合は 455(1:Yadif + 2:Blend + 4:Cubic + 64:Bob + 128:Gamma scaling + 256:Filter combing mask) となる。
"Fast"を選択した場合は 7 (1:Yadif + 2:Blend + 4:Cubic) となる。この場合は後続のコーミング判定に関連するパラメータも変化し、MT の値は 6 に、ST の値は 9 に、FM の値は 1 に、BT の値は 80 になる。

  • ME(Spatial metric)
コーミング判定アルゴリズム。デフォルトは 2

0: Transcode's 32detect が選択される。Transcode で利用されている判定アルゴリズム。
1: IsCombed が選択される。AviSynth で利用されている判定アルゴリズム。
2: IsCombedTIVTC が選択される。AviSynth で利用されている判定アルゴリズム。IsCombed よりノイズの影響を受けにくいとされる。
-1: コーミング検出の無効化。すべてのフレームに対してデインターレース処理を行う。

  • MT(Motion threshold)
動き検出の閾値。デフォルトは 3
コーミングは動きのあるフレームにのみ見られるため、現在のフレームが動きのあるフレームであるかどうかをチェックする。
現在のフレームのピクセルと前後フレームのピクセルをチェックし、それらの差が閾値以上だった場合は動きがあるとみなされる。
-1 は動き検出を無効にする。
MO (Deinterlacing Mode) で、128 (Gamma scaling), 256 (Filtering) を組み込んでいない場合は 6 から 8 の値が適当となる。

  • ST(Spatial threshold)
空間軸チェックの閾値。デフォルトは 3
ある縦 1 列の上下に隣接する 3 ピクセルをA, B, C とラベル付けし、A と B、B と C の両方の差が閾値以上だった場合、B ピクセルはコーミングであるとみなされる。
この値は "Spatial metric" で 1 (IsCombed) か 2 (IsCombedTIVTC) を選んだ際の閾値としても利用される。
MO (Deinterlacing Mode) で、128 (Gamma scaling), 256 (Filtering) を組み込んでいない場合は 9 が適当な値となる。

  • FM(Mask Filter Mode)
コーミングマスクに対して調整を行う。デフォルトは 2
1: 従来のモード。MO (Deinterlacing Mode) で、128 (Gamma scaling), 256 (Filtering) を組み込んでいない場合はこちらを選択する。
2: 新しいモード。MO (Deinterlacing Mode) で、128 (Gamma scaling), 256 (Filtering) を組み込んでいる場合はこちらを選択する。

  • BT(Block threshold)
コーミングの度合いを判定する閾値。デフォルトは 40
ME (Spatial metric), MT (Motion threshold), ST (Spatial threshold) によって構築されたコーミングマスクを Block width * Block height (デフォルトは 16x16) のブロックに分割し、それぞれの各ブロック内にどの程度 "コーミングであると判断されたピクセル" が存在するかをチェックすることによってコーミングの度合いを判定する。
この処理の目的は、ランダムノイズの影響を低減することにある。
コーミングマスクが構築された時点では、"コーミングであると判断されたピクセル" の総数は分かっても、分布は分からない。例えば、フレーム内に "コーミングであると判断されたピクセル" が 80 個散在している場合、それはランダムノイズである可能性が高い。しかし、16x16 の範囲内に 80 個が密集している場合は、コーミングノイズである可能性が高いといえる。
"コーミングであると判断されたピクセル"が閾値の半分以下の場合は、プログレッシブであると判断され、デインターレース処理は行われない。
"コーミングであると判断されたピクセル"が閾値の半分以上、閾値以下の場合は、コーミングが僅かにあるフレームとして判断され、ブレンドデインターレースが行われる。
"コーミングであると判断されたピクセル"が閾値以上の場合は、コーミングがあるフレームとして判断され、デインターレース処理が行われる。
MO (Deinterlacing Mode) で、128 (Gamma scaling), 256 (Filtering) を組み込んでいない場合は 80 が適当な値となる。

  • BX(Block width), BY(Block height)
BT (Block threshold) で利用されるブロックの幅・高さを設定する。デフォルトは 16


EEDI2のオプション

Enhanced Edge Directed Interpolation (強化されたエッジ方向付け補間)
エッジとエッジの方向を検出し、それに沿ってピクセルを埋めていくことで各フィールドの欠落したラインを補間する。高品質ではあるが、処理に膨大な時間がかかる。主にアニメに対して効果が高い。

  • MG(Magnitude thresh), VA(Variance thresh), LA(Laplacian thresh)
エッジ検出のコントロール。初期段階のエッジマスクの構築に利用される。
MG (Magnitude thresh) はエッジ強度の閾値、0 から 255 の範囲の値を取ることができ、低い値はより弱いエッジを検出できる。デフォルトは 10
VA (Variance thresh) は分散閾値、0 以上の値を取ることができ、低い値はより弱いエッジを検出できる。デフォルトは 20
LA (Laplacian thresh) はラプラシアン閾値、0 から 510 の値を取ることができ、低い値はより弱いラインを検出できる。デフォルトは 20

  • DI(Dilation thresh), ER(Erosion thresh)
構築されたエッジマスクを滑らかなエッジマスクとなるように調整する閾値。
DI (Dilation thresh) はエッジマスクを膨張させる閾値。3x3 の範囲にエッジピクセルが閾値以上存在し、かつ中央のピクセルがエッジピクセルではない場合、中央のピクセルはエッジマスクに追加される。デフォルトは 4
ER (Erosion thresh) はエッジマスクを収縮させる閾値。3x3 の範囲にエッジピクセルが閾値以下存在し、かつ中央のピクセルがエッジピクセルである場合、中央のピクセルはエッジマスクから除外される。デフォルトは 2

  • NO(Noise thresh)
ノイズ閾値。0 から 256 の範囲の値を取ることができる。
低い値はアーティファクトを減らすことができるが、エッジの再構成に悪影響を与える可能性がある。
高い値はエッジの再構成を改善するが、アーティファクトが発生する。
デフォルトは 50

  • MD(Max search distance)
補間する方向を決定するための最大ピクセル探索距離を設定する。最大値は 29
大きな値はエッジと傾きの小さなラインとを接続することができるようになるが、アーティファクトが発生する可能性がある。
稀に、小さな値を設定するほうが大きな値を設定するよりも良い結果が得られる場合がある。
デフォルトは 24

  • PP(Post-processing)
ポストプロセスの設定。問題のある領域を特定し、その部分に対してシンプルな垂直方向の線形補間を行いアーティファクトを低減させる。

0: ポストプロセスを行わない
1: エッジ補間方向の整合性をチェックする
2: 接合部やコーナーをチェックする
3: 1 と 2 の両方を行う

ポストプロセスを有効にすると処理が遅くなり、エッジの補間に対しても若干の影響を与える可能性がある。
デフォルトは 1


Parity
  • FD(field dominance, parity)
フィールドオーダーの設定。0 は TFF、1 は BFF になる。デフォルトの -1 は自動判定。
最終更新:2013年09月13日 01:27