FFT3DGPUの日本語で解説してくれてるページが見つからないので頑張って検証と意訳。
以下、添付のHelpファイルと元になったFFT3Dの解説
を参考に、超意訳&検証から勝手な解釈。間違っている可能性が高いので、まるまる信じ込まないように。
太字、赤字は私個人で感じた最適値
私にとっての最適値は、現在のエンコ速度を犠牲にしない事。
GPU_Convolution3dとTemporalCleaner(VDMフィルタ)を併用する予定で、かつGPUパワーがやや余っている様なので、速度が落ちず、画質も遜色ないレベルでさらに動画容量を落とせるあたりを着陸点にトライ&エラーを繰り返した記録です。
2年前にリリースされたプラグインだし、知っている人はみんな知っている話ですよね?と思いつつ頑張りました。
各種パラメータ(FFT3DGPU Ver.0.8.2)
- sigma
- シグマ。閾値。小数点入力可。ノイズフィルタの適用範囲。
初期値:2。大きくすると、動画サイズは小さくなるがボケボケだ。
数値を大きくしても速度の低下は殆ど無し。
小さくすると元の画像を保持するが、サイズは縮まない。
あまりボケボケにしても仕方ないので、sigma=1.5~2でOK
- beta
- 訳し方がわからん(笑)
多分sigma以下の数値を入力して、細部の保持をしながら大域でノイズ除去する為のもの?
sigma=8,beta=4なんて入力するとソースと同様にザラザラ動画なのにそれなりに縮んでおもしろいかも。普通に使うならbeta=1または未記入で - wintype
- これも訳し方わからん(´Д`;) 数値0~2の整数。速度は大差無し。
解析した結果をどう反映するか?
wintype=0:解析結果と合成を同じに。のっぺり。一番縮む。(初期値)
wintype=1:初期値0と2の中間
wintype=2:細部を保持する。もちろん動画サイズとトレードオフ。ウチの環境で10%位動画サイズが増加。
初期値で使用。細部保持するならこれを1or2に変更するのがお手軽? - plane (2009.11.28追記。オリジナルとGPU版で挙動が違います)
- 0:luma(輝度)にフィルタ適用
1~3:Chroma(色差)(U、Y両方)にフィルタ適用。1,2,3どれを選んでも結果は同じ。
4:luma、chroma両方にフィルタ適用。やや重くなる
初期値:0
輝度ノイズはTemporalCleanerで十分落とせるので1~3を指定して色差にフィルタ適用が良いかも。(またはTemporalCleanerをluma Lockモードでplane=0)
注意:オリジナルのFFTGPUは
1:差 Uのみにフィルタを適用
2:色差 Vのみにフィルタを適用
3:色差 UとV、両方にフィルタを適用
となります。
- bw、bh
- 4を最小に8,16,32,64,128,256,512と2進数の数値入力。
bw(幅)bh(高さ)で一度に計算するブロックの大きさを選択。
128とか256とか巨大な数字にすると激重に。(32の1/10くらい)
だからと言って4が最速ってワケでもない。グラボの性能、転送速度に合わせて最適値を探す。初期値:32。
当環境では8~16が最速っぽい。
一番縮んだのは32。32から外れるほどファイルサイズは大きくなる(差は僅か)
フィルタをかける動画サイズによっても最適値は変わるっぽい。
- ow、oh
- 上記bw、bhのサイズでエンコードした時にオーバラップするサイズの指定。
ぶっちゃけFFT3Dのリンクで図を見た方がピンと来る。
動画サイズをキッチリ16の倍数にしてbw、bh=16、ow、oh=0にしたら速度も落ちたし動画サイズもアップ。bw、bh=16、ow、oh=8にしたら速度アップ(2%ほど)ファイルサイズも縮小(4%ほど)良く解らんがbw、bhの半分でOKっぽい?mode=1でしか働かない。
初期値はbw、bhの半分(GPUでないFFT3Dは1/3が初期値)もちろんbw、bhより大きくしてはいけない。 - bt
- bt=-1 :シャープフィルタ?(sharpen onlyと表記されてる)
- bt=0:確率予想フィルタ?(kalman filteringと表記)
- bt=1:2Dフィルタリング
- bt=2:現在のフレームと一つ前のフレームで処理
- bt=3:現在のフレーム、前後のフレーム計3フレームで処理(初期値)
- bt=4: 前2、前1、現在、後の計4フレームで処理
bt=5:前2、前1、現在、後1、後2、計5フレームで処理(fft3dgpuには非搭載)
bt=4は、GPU_Convolution3dと併用で速度低下。初期値の3で良い。
- sharpen
- sharpen=0(初期値)
シャープにしたきゃ0.3~1がベストなんだと。
意外に使えそうなシャープフィルタ。
- interlaced
- interlaced=tuleでインターレース素材にフィルタ適用。
- interlaced=falseもしくは未記入でプログレッシブ素材。
- mode
- mode=0:ただ1:1でオーバーラップするだけ。速度は速いがシグマ値が高いと正しい結果は得られない?
mode=1:演算結果を2:1でオーバーラップ。onvolution3dみたいなオーバーラップって事かな?最も遅い。時々正しい結果を得られない。初期値。
mode=2:モード0と2の中間の速度。以下で記述のbordersizeを付加して1:1でオーバーラップ。
mode=0の方が5%~8%程度高速。3~4%容量アップ。うっすらフィルタかける分にはどれも変わらない気が。正直迷う。
- bordersize
- ぶっちゃけ上記mode=2を使わなければ意味なし。
ボーダーサイズを定義。初期値1 - precision:
- precision=0:16 bit floats(半分の精度)
precision=1:fft解析に32 bit float(単精度) 使用。wiennerフィルタ、kalmanフィルタ、 シャープフィルタに16 bit floatを使用。
precision=2:常に32 bit floats
初期値precision=0。初期値が一番高速。ぶっちゃけ初期値でOK
- NVPerf:
- tureかfalse。初期値false。
tureにするとデバッグモード。エンコに関係ない。 - degrid
- デグリッド=ブロックノイズ低減?格子状ノイズ低減?多分そんなモノだな。
mode=1しか上手く働かない。
初期値はmode=1でdegrid=1、mode=0または2でdegrid=0.0。
みたいなので気にしない記入しない。 - oldfft
- tureかfalse。tureにすると古いバージョンのFFT(0.6.2以下)が起動。使わない。
- kratio
- kalman filteringを使う場合のシグマ値の閾値リセット値。
つまりbt=0以外では意味が無いと解釈してOKだよね?
初期値2.0.1.5~3.0で使用するのがベスト。 - scutoff
- シャープフィルタの カットオフ。初期値0.3
- svr
- シャープフィルタの縦横でのフィルタのかかり具合。
0にすると縦方向にシャープがかからない。 - 1(初期値)で縦横同じ比率でシャープに。
意外と面白いかも。暇な時に触ってみよう。
- smin
- minimum limit (approximate noise margin) for sharpening stage (default=4.0)
- smax
- maximum limit (approximate oversharping margin) for sharpening stage (default=20.0)
上記2点、シャープフィルタの何かを設定するのは分かるのだが、
弄る気無いので訳す気なし(´Д`;)
で、個人的には以下の設定がOKかも。
FFT3DGPU(sigma=2 ,beta=1 ,plane=1 ,bw=16 ,bh=16 ,ow=8 ,oh=8
,bt=4 ,mode=0 ,interlaced=false ,wintype=0 )
あとはシャープフィルタにカットオフが付いていたり、縦横のフィルタのかかり具合に変化が付けれるのが非常にオモシロそうなので、そのウチこれにsharpen=1.5,scutoff=0.5,svr=0.3などとシャープフィルタを足して遊んでみる予定。
この手の文章訳したのは5年ぶり。
大きく間違ってはいないと思うが絶対どこか違うはず(笑)
GPUプラグインは環境により大きく作動が異なると思うので各自でしっかり作動確認を。