うえぽんSW局

古いタイプの日記ブログです。気まぐれに更新してます。

カテゴリ: AviUtl関連

久しぶりにAviUtlのプラグインフィルタを作ったので公開します。
 「自動24fpsの2-3プルダウン解除を補助」という名前です。

 いつものところに置いてあります。
 AviUtl プラグイン フィルタ by うえぽん

 名前の通りAviUtl標準フィルタの自動24fpsを補助するフィルタなので、自動24fpsと一緒に使ってください。
 使用の際には自動24fps側の「横縞部分を二重化」のチェックを外しておく必要があります。
設定注意

 こういうノイズが…
サンプル_ビフォー

 こうなります。
サンプル_アフター


 当フィルタがやっていることを簡単に解説するとこんな感じです。
解説画像

 以下、説明が面倒なので簡単に箇条書き。
 ・SSE2やAVXやAVX2への対応はコンパイラの自動ベクトル化に任せた。組み込み関数を使っても3種類のSIMDのコードを書くのは大変。コンパイラが吐くアセンブラコードを見ながらC言語で書いた。コンパイラはgcc 8.1.0を使用。

 ・片フィールド補間ではなくノイズ除去をやっている。ノイズ除去には縦三点のメディアンフィルタを用いている。しかしメディアンフィルタだけだと削りすぎてしまうことがあるので簡易3DNRで削り過ぎを抑制している。前後が類似のフレームでないと簡易3DNRは効かない。

 ・正確なシーンチェンジ検出はしていない。平均輝度や偏差が大きく変化した時に処理するようにしている。シーンチェンジ以外でもノイズが乗っていることがあるためこれでも構わない。

 ・自動24fpsが解除漏れすることがある。その場合は当フィルタ側でも縞判定して縞解除している。縞判定方法は縦3点メディアンフィルタを通して大きく変化したら縞があると判定する強引なもの。

 ・どうやら自動フィールドシフト(高速化版)にも同じようにノイズを除去する設定があるらしい(解除レベル4?)。その場合は片フィールド補間になるようだが見た目の違いはよく分からない。自動フィールドシフト(高速化版)では消えないノイズもこのプラグインなら除去できることがある。が、逆の場合もある。詳しくは検証してない。

 ・速度は自動フィールドシフト(高速化版)の方が速い。

 ・おそらく自動24fpsの代わりに自動フィールドシフト(高速化版)を使うこともできる。その時は解除レベル0にすれば良いらしい。

 ・このプラグインでインターレース解除も同時にやればもっと速度が上がると思うが、インターレース解除のやり方がよく分からないので自動24fpsに丸投げすることにした。

 ・効果を確かめるなら画質の悪いTOKYO MXが一番わかりやすい。
このエントリーをはてなブックマークに追加

 今期の大河ドラマの「麒麟がくる」、画面が明るいだとか、彩度が高すぎるなどと言われていたので、AviUtlでヒストグラムを見てみた。

麒麟がくる_白飛び

 一番上の段が輝度で、右側の薄い線をはみ出してる。やっぱり白飛びしていた。
 左側の薄い線は黒色だが、こちら側は収まているので黒潰れはしていない。

 二段目と三段目は色差で、分布が広い気もする。これだと彩度が高く感じられるかもしれない。

 どうやら4K放送では明るさや彩度は気にならないそうなので、たぶん4Kの色空間から2Kの色空間へ変換するのに失敗してるのではないかなと思ったりする。
このエントリーをはてなブックマークに追加

 AviUtlの拡張編集に「簡易変形」(アニメーション編集にサンプルとして入っているスクリプト)というものがありますが、それに簡易的なパース(遠近)をつけたスクリプトを作ってみました。カメラ制御を使わずに4点を指定しただけでパースがつきます。使用法も簡易です。


 スクリプトのダウンロード(homography_20181104.zip)



 左が従来の「簡易変形」、右が今回作成した「簡易パース変形」です。
簡易パース変形1


 作例です。テレビ画面などに動画をはめ込むのに使えると思います。
簡易パース変形2

 同様のことを「簡易変形」でやってみた場合です。(このぐらいのパースだとあまり違いは感じないかもしれません……)
簡易パース変形3

 設定の「AA方法(0~2)」ですが、
 0はアンチエイリアス無し
 1は全ての分割区画でアンチエイリアス
 2は外側の分割区画のみでアンチエイリアス
 となっています。
 1だと繋ぎ目でゴミが出ることがあるので、普段は2を使うと良いと思います。それでもゴミが出る場合は0にしてください。

 「分割数」はテクスチャーの一辺をその数で分割します。一辺なので分割数はその二乗になります。8なら8*8の64個に分割されます。理論的には分割数を多くすればより正確なパースになるはずですが、実際に使ってみると見た目はあまり変わらないので、8で十分かもしれません。

 「三角ポリゴン」は分割した四角形を三角ポリゴン2つで構成させます。チェックしなければ四角形のポリゴンになります。元にした「簡易変形」の描画法にあったので設定を設けてみましたが、あまり見た目は変わらないかもしれません。

 「市松模様化」は確認用です。どのように分割されているか市松模様(白黒のチェック柄)で確認できます。


●「簡易平面射影変換」
 一緒に「簡易平面射影変換」というスクリプトも同梱しています。これは「簡易パース変形」とは逆のことをします。

 まずこのように4点を指定します。
簡易平面射影変換1

 “射影変換”をチェックするとこのように正面を向かすことができます。
簡易平面射影変換2

 射影変換(ホモグラフィ)は元々こういうことをするものらしいです。
 アスペクト比を自動設定することができないので手動で「変換後w」と「変換後h」を設定してください。


●参考にしたサイト
 下記のサイトを参考にさせていただきました。大変に参考になりました。ありがとうございます。
 ・mieki256's diary - DXRuby上で射影変換ができた
 ・デジタル・デザイン・ラボラトリーな日々さんの「射影変換(ホモグラフィ)について理解してみる」のシリーズ
このエントリーをはてなブックマークに追加

 当ブログのサイドバー(注:スマートフォンでは表示されません)にある送信フォームから寄せられたメッセージに対する返事です。メールアドレスが記載されていなかったのでブログ記事での返事になります。

 拙作Aviutlプラグイン「色褪せ軽減β」および「UVダウンサンプリング」をAvisynth用のdllにコンパイルして欲しいとのことですが、申し訳ありません。このリクエストにお応えするのは無理かもしれません
 AviUtlとavisynthは仕様が異なるため、単純にコンパイルするだけで済むことではありません。新しくavisynthのプラグインを作成することになってしまいます。(私はavisynthのプラグインを作成したことがないため、新たにとなると一苦労になりそうなので避けたいので……)

 そもそもこのプラグインはAviUtlのRGB→YUY2の変換における欠点(右の色差が捨てられてしまう)を補うことを目的に作成したプラグインです。avisynthにはそのような欠点はないため、そもそも不要なプラグインだと思います。

 もしもおまけ機能の色差の鮮鋭化を目当てに使っているのであれば、avisynthのスクリプトでも似たようなことはできるかと思います。
 ここを参考にして色差チャンネルをのみを鮮鋭化(シャープネス)すればなんとかなるかもしれません。
 http://www.avisynth.info/?Merge


[追記:2018/07/03]
 上を書いたときはavisynthのスクリプトでUVダウンサンプリングフィルタの鮮鋭化(シャープネス)を再現できるかと思いましたが、試してみたところ、少し特殊なことをやっていたので再現は難しいかもしれないと気付きました。(少し特殊なこととは、元の値が+のときは+方向へのみ強調、元が-のときは-方向へのみ強調する、ということをやっている)
 とりあえずUVダウンサンプリングのメイン部分をavisynthのスクリプトで再現してみました。他の部分もavisynthの既存フィルタで再現できると手間が省けるのですが……。

function UVdownsamplingToYV12(clip c, int "taps"){
    taps = default(taps, 4)
    w = c.width()
    h = c.height()
    mat = h >= 720 ? "Rec709" : "Rec601"
    c = (c.IsRGB24() || c.IsRGB32()) ? c.ConvertToYV24(matrix = mat) : c
    u = c.UToY8().BlackmanResize(w/2, h/2, taps=taps)
    v = c.VToY8().BlackmanResize(w/2, h/2, taps=taps)
    return YToUV(u, v, c)
}


[追記:2018/07/04]
 メッセージを送られた方がここを見ているか分かりませんが、「色褪せ軽減β」に類似したavisynthのフィルタを見つけたので紹介します。ChromaOptimizeというフィルタです。

 ダウンロード先(現在の最新版はv0.2.0 (alpha) らしい)
 https://forum.doom9.org/showthread.php?t=136324#post1120914
 簡単な日本語解説
 http://www.avisynth.info/?ChromaOptimize

 サポートされるフォーマットはYV12(YUV420)のみなので、YV24(YUV444)相当で使いたい場合は、輝度プレーンを2倍に拡大したものをダミーで用意するなど工夫が必要かもしれません。
このエントリーをはてなブックマークに追加

 AviUtlのフィルタプラグイン「60fpsフリッカ軽減」をver 0.2.2に更新しました。
 前段のフィルタ(例えばリサイズやクリッピングなど)で画面サイズを変更していると、当フィルタが画面サイズを元に戻してしまうバグの修正です。

 いつものところに置いてあります。
 AviUtl プラグイン フィルタ by うえぽん


 余談。
 久しぶりに上のページを更新しました。久しぶりなので今回の更新で何か失敗してないかと少し不安だったりします。
このエントリーをはてなブックマークに追加

↑このページのトップヘ