うえぽんSW局

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

カテゴリ: AviUtl関連

 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 うえぽん


 余談。
 久しぶりに上のページを更新しました。久しぶりなので今回の更新で何か失敗してないかと少し不安だったりします。

↑このページのトップヘ