60iから24pに変換する、いわゆる自動逆テレシネプラグインの紹介です。逆テレシネは手動でやるのが理想ですが、面倒なので、手を抜きたいときは自動でやってしまいましょう
TIVTC
TIVTC.dllは1つのdllの中に10個のフィルタが内蔵されています。主に使うのはプログレッシブのフレームを作る「TFM」と重複フレームを間引く「TDecimate」の2つということになると思います
導入
GitHub 最新版をダウンロード
32bit版はPlugins+フォルダに、64bit版はPlugins64+フォルダに入れればいいでしょう
使い方の例
1 2 3 |
AssumeTFF() TFM(pp=0, order=-1, slow=2, mChroma=true) TDecimate(mode=1) |
TFFソースのものを60iから24pに変換。フィールドマッチングのみ行う。縞が残った場合にインターレース解除の処理をしない
1 2 3 4 |
AssumeTFF() Deinted = TDeint(order=-1, field=-1, edeint=nnedi3(field=-1)) TFM(mode=6, order=-1, pp=7, slow=2, mChroma=true, clip2=Deinted) TDecimate(mode=1) |
TFFソースのものを60iから24pに変換。フィールドマッチング後に縞が残っていたらTFM+TDeint+nnedi3でインターレース解除の処理をする
1 2 3 |
AssumeTFF() TFM(pp=0, order=-1, slow=2, mChroma=true, y0=height()*3/4, y1=height()) crop(0, 0, 0, height*3/4).TDecimate(mode=1, clip2=last) |
TFFソースのものを60iから24pに変換。フィールドマッチング、間引き時は映像の下1/4の部分を考慮しない。縞が残った場合にインターレース解除の処理をしない
オプション
難しくてわからないものが多いので大雑把に一部分だけ確認します
詳細は AviSynth.nl – TIVTC などを参考にしてください
TFM
TFMはフィールドマッチング(フィールドを組み替えて縞のないプログレッシブなフレームにする)や、インターレース解除を行って、60iから30pに変換します
order (int / default:-1 [-1,0,1])
フィールドの順序の設定。TFFなら1、BFFなら0。-1でAviSynthに設定されている通りにする。例えば、AssumeTFF()の後なら1と同じ動作、AssumeBFF()の後なら0と同じ動作をするようになります
pp (int / default:6 [0-7])
フィールドマッチング後に縞フレームが残っていた場合の縞フレームの処理モード
0だと何もしません。1も何もしませんが、コーミングフレームかどうかの情報は残す(?)。ログを出すときなどにコーミング情報を残せる(?)
2-7のときは、コーミングフレームはインターレース解除をするようになります。2-7の違いはインターレース解除の手法の違いです
slow (int / default:1 [0-2])
フィールドマッチングの精度の設定。0だと速いが低精度、2だと遅いが高精度、1が中間です
mchroma (bool / default:true)
フィールドマッチングに色差を考慮するか
基本true推奨だけれど、クロスカラー(虹色ノイズ)等、色に異常が見られるソースではfalseにするとよいかもしれません
y0 / y1 (int / default:none)
フィールドマッチングをするときに、無視したい部分を指定することができます
たとえば、左上にデジタル時計があるソース、上にニュース速報などのテロップがあるソース、下の字幕やテロップがでるソースなどで、その部分を指定してフィールドマッチングするときに考慮しないようにすると、映像をより正確にプログレッシブにすることができるようになります
ppを0、または1にするときは特に注意して設定するべきでしょう。テロップがプログレッシブで映像が縞々、なんてことにならないようにしましょう
clip2 (clip / default:none)
ppが2以上のときのみ効果があります。インターレース解除を他のフィルタを使ってやる場合に指定します。上の例だとTdeint+nnedi3を使っています
clip2を指定したとき、ppが2~4のとき、clip2をそのまま返すようです。ppが5~7のとき、TFMがマスクを構築して動きのあったところのみclip2を使うようです。2~4ではどれを選んでも同じになるようです。同様に、5~7もどれを選んでも同じになるようです
例えば映像自体には縞がないのに、時計や字幕で縞が出てしまった場合は、pp5~7にした場合は、縞のない部分はclip2に置き換えられず、そのまま残る部分がある分、より高画質になると言えるでしょう
言葉だけではわかりづらいかもしれないので、簡単な例で考えてみます
TFM(pp=0)でこんな3フレームが作成されたと仮定します。aは人間、bは人間+縞々のテロップ、cは人間+テロップです。この3フレームでは人間は完全に静止していて、違いはテロップの部分だけとします
bは縞々のテロップのため、コーミングフレームと判定されました。pp=0では、コーミングフレームが残っても何もしないため、そのまま残ります
このような場合、ppを2-4のどれかにし、clip2に別のクリップを指定した場合、bのフレームはclip2に置き換わります
ppを5-7のどれかにし、clip2に別のクリップをしたいした場合は、bのフレームの縞々テロップの部分のみ(aから変化した部分のみ)clip2に置き換わります
このように、一部分だけ処理してくれるのは、前のフレームがプログレッシブだった場合のみ?のようなので、60iテロップのようにコーミングフレームが続く場合は、ppを5-7にしても2-4にしたときと同じ結果を返すようです
以下の3つはTDeintにもあったオプションで、意味は同じです。が、cthreshとMIのデフォルトの値が少し変わっています。ppが2以上のときに意味があります
cthresh (int / default:9)
コーミング判定の閾値。あげるとコーミングと判定されにくくなります
blockx / blocky (int / default:16)
コーミングフレーム検出に使うウインドウの横と縦の長さです
MI (int / default:64)
blockx * blockyの中に存在するコーミングピクセルの数がMIの量を超えたらコーミングフレームとするんだと思います。多分。なので、多分上限はblockx * blockyです
cthreshが低いとコーミングピクセルと判定されやすくなるのでコーミングフレームと判定されやすくなる
blockx / blockyが大きいと範囲内のコーミングピクセルが増えるのでコーミングフレームと判定されやすくなる
MIが低いとコーミングピクセルが少なくてもコーミングフレームと判定されやすくなる、と、まあこんな感じなはずです
TDecimate
TDecimateは、30pの映像から重複フレームを間引いて24pの映像にします
mode (int / default:0 [0-6])
間引きの動作モードの設定。0はもっとも似ているフレームを削除する。1は同じようにもっとも似ているフレームを削除するが、もともと重複フレームの多いアニメなどのソースを考慮した間引き方をする。2以降はこのページでは触れません(60i→24pではなくなるので)
clip2 (clip / default:none)
間引きの判定と出力のクリップを別にしたい場合に設定します。clip2を設定すると、間引きの計算は入力クリップから行うが、出力はclip2から行うようになります
たとえば、左上にデジタル時計があるソース、上にニュース速報などのテロップがあるソース、下の字幕やテロップがでるソースなどで、その部分をCropして消したものを入力クリップにして、clip2には元のクリップを入力すると、それらの邪魔な部分を無視して間引きの判定を行ってくれます
間引きの誤爆を減らしたいのであれば必ず使いましょう
TFMとTDeint(tryweave=true)の比較
TFM+TDecimateの代わりにTDeint(tryweave=true, edeint=nnedi3())+TDecimateを使って逆テレシネをしている方もいるようです
TDeint(tryweave=true)はTFM(pp=2-4, clip2=TDeint(edeint=nnedi3()), cthreash=6, MI=64)と似てるかな?マッチングやコーミング判定は微妙に結果が異なる場合があるので、全く同じにはなりません?
pp=0-1やpp=5-7+clip2を使いたい場合はTFM、fullオプションを使いたい場合はTDeint、と使い分けてもいいかもしれません
コメント
TFMとTDeintの違いはインターレース解除かフィールドマッチかの違い(名前のとおり)ですよ。
元々の撮影対象が60i(実写)なのか、24p(アニメとか)なのかの違いです。ご参考まで。
http://forum.doom9.org/showthread.php?t=99420より。
こんばんは。なぜかコメントが来ているという告知を得られなかったので、3か月ほど気づきませんでした
申し訳ございません…
コメントの件ですが、私もそのように認識はしております
最後の「TDeint(tryweave=true)との比較」の部分についての指摘だと思うのですが、
tryweave=trueにした場合は、TDeintもTFMのpp=2以上のときのようにフィールドマッチング→インターレース解除の処理順になるからか
TFMの代わりに使ってる方がいらっしゃるようなので、ちょっと比較してみました
TIVTCは
https://github.com/pinterf/TIVTC/releases
こちらのほうが新しいようですがこちらのではだめでしょうか?
こんばんは。そちらの方がいいと思いますので、記事の方も修正しておきます。
ありがとうございます。
使い方の例の一番上ですが
> TFM(pp=0, order=-1, pp=1, slow=2, mChroma=true)
ppが2つあるため、エラーになりますよ。
ご指摘ありがとうございます。訂正しました。