まず、大前提として、以下はTV(アナログ波)キャプした動画の、我が家での環境で私が納得する画質とエンコ速度を求めた結果のエンコの設定です。
(Athlon64X2(2.2Ghz) + NVIDIA nForce4 Ultra + GeForce6600GT(550Mhz)、コーデックにはXvid使用)
AviSynthのGPUプラグインを使用し、今まで(GPUプラグイン未使用)と同じレベルの画質を維持しつつ、エンコード速度をアップさせる設定、または画質、エンコード速度をほぼ維持しつつ、動画のファイル容量の削減できる設定を色々模索し、自分なりに納得できる着陸点を見つけたので、覚書きとしてココに記録。(実写用)
今までのAviSynth、VirtualDubModの設定
- AviSynth
- DeDot(20,20,15,5)
- SmartDeinterlace(1,10,true,true,true)
- LanczosResize(512,384)
- Convolution3D(preset="movieHQ")
- return last
- VirtualDubMod
- Temporal Cleanerのみ
以下設定詳細 - Percent threshold for scene cange 15
- Luminance Thresholds:Threshold for blending:5
- Luminance Thresholds:Threshold forpixel lock:2
- Chrominance Thresholds:Threshold for blending:16
- Chrominance Thresholds:Threshold forpixel lock:4
上記設定での速度目安 CPU使用率70~80%程度、15~20FPS
448X336サイズの場合 CPU使用率70~80%程度、20~27FPS
今までは上記のような設定。Convolution3Dをうっすらかけた上にVDMでTemporal Cleanerをデフォの半分くらいの値でノイズ除去してやると、速度も落ちないし細部を保持したまま結構縮むので良い感じだった。
そんなに大切ではない番組、ノイズが酷い番組は448X336にリサイズ、Convolution3Dを強めにかけてエンコ。Temporal Cleanerは強くかけると画像が破綻しやすい。
デュアルコアの場合、AviSynthのConvolution3DとVDMのTemporal Cleanerは相性が良く、片方のみを使用しても双方使用してもそんなに速度は変わらない。
GPUプラグインを使用した場合1(速度重視)
- AviSynth
- SmartDeinterlace(1,10,true,true,true)
GPU_Start()
GPU_LanczosResize(448,336)
GPU_Convolution3d(preset="movieLQ")
GPU_End()
FFT3DGPU
(sigma=2,beta=1,plane=0,bw=16,bh=16,ow=8,oh=8,
bt=4,mode=1,sharpen=0,interlaced=false,
NVPerf=false,wintype=2,precision=0)
### VDMでフィルタ使わない時はFFT3Dはplane=0で。 - ### ノイジーなソースはmode=0でないと遅い。
### クリアなソースならmode=1でも速い
return last
- VirtualDubMod
- フィルタ無し
上記設定での目安
CPU使用率90~95%程度、40~50FPS
動画サイズは今までとほぼ同じ、1.8倍の速度アップ。画質はやや落ちる
今まで以上のエンコ速度を求めようとすると、DeDot、Temporal Cleanerが律速となり、CPU使用率も50~60%程度になってしまう。そんなに大切でない動画の場合
にコレでエンコ。
DeDotが無いぶん、クロスカラーのチラツキが気になるが、速度を求める場合には気にしない事にする。
ちなみにソースがノイジーになるとFFT3DGPUはかなり遅くなる。
その場合の対処
- FFT3DGPUをbt=3で使用する
- FFT3DGPUをmode=0で使用する
FFT3DGPUをmode=0で使用すれば速度は改善されるが、その場合シャープ系のフィルタを使うと変なリンギングが目立ち、よくない。
速度が出ない場合の対処法
ソースによってはGPUプラグインの恩恵を殆ど受けない。
(スポーツ中継等、全体が明るい画面でカメラが良くパンするような番組がコレにあたる)
その場合はGPU_Convolution3dのみ使用してエンコ速度の確認。この時点で30~35FPSしか出ない様なら、、、、
- 速度アップは諦める。CPU使用率を見ながらDeDotまたはTemporal Cleanerを追加してサイズ縮小に頭を切り替える。
- インタレ解除のSmartDeinterlaceを諦める。
BlendFieldsやAutoDeint("")を使用すればその時点でノイズが減り、GPUフィルタの負担が減り、目標の40FPS程度まで速度が上がる。当然画質はボケる。 - リサイズにLanczosResizeを諦める。
BicubicResizeを使用すればその時点でノイズが減り、以下同文。
上記「2.」「3.」を同時に行うと、シーンによっては恐ろしく高速に(瞬間最大風速60FPS前後)エンコしてくれたが、個人的に許せないボケ具合になるので併用は避ける。
GPUプラグインを使用した場合2(ファイルサイズ縮小重視)
- AviSynth
- DeDot(20,20,15,5)
- SmartDeinterlace(1,10,true,true,true)
GPU_Start()
GPU_LanczosResize(512,384)
GPU_Convolution3d(preset="movieHQ")
GPU_End()
FFT3DGPU
(sigma=2,beta=1,plane=4,bw=16,bh=16,ow=8,oh=8,
bt=3,mode=1,sharpen=0,interlaced=false,
NVPerf=false,wintype=2,precision=0)
### VDMでフィルタ使わない時はFFT3Dはplane=0で。 - ### ノイジーなソースはmode=0でないと遅い。
### クリアなソースならmode=1でも速い
return last
- VirtualDubMod
- Temporal Cleaner
以下設定詳細 - Percent threshold for scene cange 15
- Luminance Thresholds:Threshold for blending:5
- Luminance Thresholds:Threshold forpixel lock:2
- Chrominance Thresholds:Threshold for blending:16
- Chrominance Thresholds:Threshold forpixel lock:4
上記設定での目安
CPU使用率90~95%程度、15~20FPS。
従来の方法からそんなに画質の劣化を感じないままファイルサイズが20%位縮小する。
(ソース実写、Xvid、Q値=2の場合)
ノイジーなソースの場合、Convolution3d(preset="movieLQ")で対処。
FFT3DGPU、Temporal Cleanerの数値を大きくするとノッペリしたり破綻したりする場面が増える。
上記の目安速度が出ない場合
- ノイジーな素材の場合は諦める
- FFT3DGPUをplane=0で使用(1,2,3,4は遅い)
- FFT3DGPUをmode=0で使用(シャープフィルタ禁止)
ノイズ除去が強すぎると感じる場合
- FFT3DGPUのノイズ除去の強さをwintypeで調整
強い 0 > 1 > 2 弱い - FFT3DGPU自体を外す
- Temporal Cleanerの数値を小さく
が簡単に設定できる。Convolution3dの数値は十分小さいし、FFT3DGPUのシグマ値の設定は難しい。
当面上記でお手軽エンコ。
問題が見つかるたびに少しずつ修正しようと思う。