このページ:TOP ≫ Vue またはTOP ≫ レンダリング高速化
Vueで動画を作る基礎編3
これで3回目になる 「Vueで動画を作る基礎編」 だが、
ようやく本題的な部分に入れる(笑)
まずは下の動画を見て欲しい。
私的理想品1、私的理想品2、共に33分44秒、私的理想品3、18分23秒
1、2元は同じもの、
3は1、2と同条件で「最終レンダリングパスを最適化」のみをオンにしたもので、それを外部アプリケーションで色々処理し、今までのサンプルと同じ条件でエンコードしたものだ。
どうだろうか?
基礎編2のページにある
ブロードキャストド 31分40秒、
(D)4X9(E)85(F)OFF 37分44秒
過去のサンプルと同程度の時間ながら、リンギングはほぼ無くなり、細部もそれなりに保持出来ている。(リンギング除去の副産物になるのだが、モーションブラーもかかっている。)
33分と、この程度のサンプルにしては時間は掛かっているが、細部が保持され、リンギングノイズも無いVueのCG動画である。普通にレンダするより恐らく2~3倍位早いはずである。
作り方は以下。
1.目的の動画サイズより大きめでレンダリングする。レンダ品質の設定は低めでOK。
今回は512X384、縦横2倍の大きさでレンダリングした。
レンダリング品質はユーザー設定:(D)2X2、(E)10%、(F)OFF、
「確定的アンチエイリアス」と「ちらつき除去有効」のチェックボックスをオフに。
今回はHuffYUVコーデックを使用し色空間YUY2でエンコード、保存。
2.AviSynthのスクリプトを用意し、利用する。
作成したスクリプトは以下。※いきなり訳の分からない物を紹介して申し訳ない。
後からちゃんと説明する。
| Avisource("D:\blogavi\test.avi") #↑ご自分のAviファイルの保存してあるパスを入れてください。 PMD(10, 256) #←リンギングノイズ除去(2番目のは未使用) Convolution3D(0,0,0,255,255,10,0) #←時間軸ノイズ除去 LanczosResize(256,192) #←リサイズ return last |
この時の拡張子は「.avs」です。
(ちなみに私的理想品1はPMDとConvolution3D両方を使い、
私的理想品2、3はConvolution3Dのみ使ったものです)
3.「2.」で作ったAviSynthのスクリプトを直接「携帯動画変換君」で読み込み、
そのまま保存。
以上になります。(携帯動画変換君の設定はコチラ)
この方法を取れば、最後の微調整はフィルタの選択、強さの調整になるので、気に入るまでのやり直しはレンダリングに比べ遥かに短い時間で済む。
また今回は 意図的にリンギングノイズの発生しやすい素材を選んだ。それが このレベルに到達すれば 本当に大満足である。
まとめ
- Vueのレンダラは 細部の描画に優れるが、アンチエイリアスの性能は悪い。レンダ品質を上げれば解決するが、かかる時間は爆発的に増える。
- 動画にした場合に リンギングノイズも発生しやすい。こちらもレンダ品質を上げれば 解決するが、かかる時間は爆発的に増える。
- Vueのレンダラはリンギング除去機能を一応持っているが、強度一定で性能はあまり良くない。
- 低めのレンダ品質で、縦横2倍程度の大きさでレンダリング、その後外部ソフト(私の場合VDMとAviSynth)で色々加工すれば、Vue単体でレンダリングしたものより、良い結果が得られる。
AviSynthについては、説明が長くなりますので 後日別にページを割いて説明します。
(おわり)
すいません、終わりと書いておきながら補足です(;´∀`)
■AviSynthスクリプト中の各行の説明
1.Avisource("D:\blogavi\test.avi")
#↑ご自分のAviファイルの保存してあるパスを入れてください。
そのまんまです(笑)ご自分のAviファイルを保存したパスと、
ファイル名に置き換えてください。このままでは間違いなく
エラーが出ます(笑)
2.PMD(10, 256) #←リンギングノイズ除去
外部プラグインです。リンギングノイズ除去を行います。
パラメータは左から「ノイズ除去の強さ(範囲0-20)」、「ノイ
ズ除去のしきい値(範囲0-255)」です
画質はかなり甘くなるので、必要ないと感じたら使わない方が無難です。
3.Convolution3D(0,0,0,255,255,10,0) #←時間軸ノイズ除去
外部プラグインです。
大まかに説明すると、平面と時間軸、両方で上下左右、前後
1フレームの近傍 各1ピクセルを参照して、ノイズ除去をしてくれます。
パラメータは左から「ノイズ除去方法(0 or 1)」、「平面での輝度しき
い値」、「平面での色差しきい値」、「時間軸での輝度しきい値」
「時間軸での色差しきい値」、「時間軸での影響力」、
「0固定(1にするとデバッグモード)」となっています。
しきい値の数値は(0~255)、時間軸影響力は(0~100)(小数点可)
となっています。
今回は平面軸でのノイズ除去は行わず、時間軸でのノイズ除去を最大に、
モーションブラーをかけるような使い方をしています。
4.LanczosResize(256,192) #←リサイズ
内臓フィルタです。
VirtualDubModの項目でも紹介したリサイズ方法。
AviSynthは、他にも外部プラグインで優秀なリサイズフィルタを
持っています。
5.return last
「この行で終わりですよ、持っている画像を帰しなさいよ」と
Avisynthに教えてあげる行です。
書かなくてもエラーが出ることは殆どありません。
■YUY2って何?
「色空間」と言うと何のことか解らないと言う方もいらっしゃると
思いますが、「RGB」と言えば聞いたことがあるでしょう。
RGBとは光、色の情報をレッド(R)、グリーン(G)、ブルー(B)の3つに分けて
記録する方法です。
その他に、YUY2、YUV、YV12と言う色空間もあります。
こちらは輝度(Y)と色差(U、V、C等々表現されます)の情報で
分離、記録されます。TV放送やDVDビデオがこの方法を取っています。
ものすごく大雑把な説明ですが、趣味でCGやる分にはこんな感じで覚えて
おいて問題無いでしょう。
■色空間をYUY2で保存する訳
このブログで使用しているAviファイルは、Xvidという圧縮技術を使って
います。Xvidは「YV12」形式で保存されるので、最初から「YV12」で保存
すれば良いのですが、今回使用している「Convolution3D」が
「YV12では時間軸フィルタが殆ど効かない」と言うバグがある為、
やむなく「YUY2」で保存しています。
また、AviSynthの使用を前提で考える場合、入手出来るフィルタの大部分
が「YUY2」又は「YV12」対応なので、RGBで保存する事にメリットはありません。
2007.2.16追記 多分H264もYUY2かYV12、それに準ずる色空間だと勝手に
予想し、YUY2のまま検証進めました。
- ※データの精度的に言うと RBGの方が優れていますが、動画として扱う場合、最終的には 現在主流のMpeg2、Avi(DivX、Xvid等)、H.264等々に変換する事になると思います。
そういった場合、結局YUY2、YV12等々の形式に変換する事になります。どういう風に精度が落ちるかはまた後日説明します(こればっかり(;´ω`))
2007.3.12 色空間の話書きました
今すぐもっと詳しく知りたい方はカラーフォーマットの謎←こんなページがあります。