久々にXvidを使ってavi形式に動画変換を行っているので、今更のようにXvidの設定、使い方を解説してみる事にしました。

Xvidに限らず、QVGA、SD、HD動画では異なった変換設定が求められますね。これはどのコーデックでも共通するお話なんですが、QVGAとHDでは設定がホント別物です(^_^;

最初に注意点や、今さらこんな事をやっている経緯を書いています。長いです。
Xvidの設定だけ読みたい方は、このページ後半「Xvidの設定」へGo! です。

Xvidの設定
▲通常はコンフィグ画面の「Profile@Level」から最適なプロファイルを選択すれば十分なのですが、久々にちょっとこだわった設定を模索してみました。

ちなみに、このページで一番書きたかった事は
「Variance-Masking をオンにしたら(暗部と明部は多少潰れちゃうけど)爆速&もの凄くサイズが縮んだよ!」って部分です。

Xvidの設定については、個人的にはオマケで書いた感じです。

まえがき

ここ数日、今さらの様にQVGA(320x240)サイズへの動画変換の設定を煮詰めています。
コーデックには、久しぶりにXvidを使っています。
目的は、Webカメラで録画したデータを保存用に小さくするため。
速度面でも画質面でも、HD動画の変換設定と随分違ったモノが求められますね~。

色々がんばって見た結果、「小さな動画に変換したい場合は昔(2002~3年ごろ)に煮詰めた設定を使うのがイチバン」という感じで落ち着きました。

注意点

今回の私の場合の目的

スポンサー リンク

AviSynthのスクリプト

色々と試したけれど、以下な感じのスクリプトに落ち着きました。

Avisource("録画したファイル.avi",audio =false )
    # 今回は音声は不要
AssumeFPS(150)
    #後で確認する時、早回しがデフォなのでFPS変更

mt("LanczosResize(320,last.height)",4)
mt("LanczosResize(last.width,240)",4,splitvertical=true)
    #BicubicResizeの方が高速だけど、QVGAで画質がボケるのは致命的

#FFT3DGPU(sigma=2,beta=1,plane=0,bw=16,bh=16,ow=8,oh=8,bt=3,mode=2,sharpen=0,interlaced=false,NVPerf=false,wintype=2,precision=0)
#FFT3DGPU(sigma=2,beta=1,plane=1,bw=16,bh=16,ow=8,oh=8,bt=3,mode=2,sharpen=0,interlaced=false,NVPerf=false,wintype=0,precision=0)
mt("TemporalSoften(3,8,8)",4)
   # ノイズが多いので、律速にならない程度にノイズ除去。
   # QVGAだとGPUフィルターの恩恵全く無し。逆に律速になる。
   # 用途から考えても、TemporalSoften で十分。

return last

640x480 h.263 Mpeg4画像をソースにした場合、上記設定はCore i7 920 3.3Ghzで400fps前後で出力可能。とりあえず目標の変換速度が出せた。

ちなみにリサイズにBicubicResizeを使うと 450fps前後になるが、BicubicResizeだと(知人は認識できるが)知らない人が映ると特徴をつかみにくい場合がある。
それでは防犯カメラの意味が半減するので、リサイズはLanczosResize一択とした。

ノイズ除去にFFT3DGPU を使うと 300fps前後。
ここ数年、「ノイズ除去するならFFT3DGPUが速いしそこそこ綺麗だし、最強だろ」と盲信してましたが、QVGAサイズだとあんまり綺麗に感じない&CPU-GPU間のデータ転送の方が律速になって速度出ないですね。

用途によっては単純な時間軸スムーサーを利用した方が十分良い結果になります。

コーデックの選択

今回、私はXvidを選択しましたが、用途や目的によってどの「コーデックが一番良いか?」は異なってくると思います。

  • 今回はXvidを選択した。
    • 後からビットレート解析を行ってファイルの異変をチェックする為
    • 個人的にDivXより一番扱いなれている。
  • DivXの方が簡単だけど、、、
    • Bフレームやその他設定を細かく調整したい場合に、DivXのUIがどうしても好きになれない。
    • テキトーにエンコしたい場合はDivXの方が簡単なんだけどね。
  • h.264の方が縮むが、、、
    • ビットレートを波形表示して解析するにはFFmpeg APIを利用して結構特殊な事をする必要がある。楽したい場合はTMPGEncが必要。
    • 変換速度的に、やはりh.263系に分がある。

Xvidの設定

このページを読みに来た人にとっては、ここからがメインですよね。
長々と能書き書いちゃってスイマセン(^_^;

XvidのConfig画面
▲クリックで拡大:Xvidの設定

  • ビットレートの動きで解析したいので Target quantizerに設定。 今回私の用途であればQ=4程度の画質 で十分。 
    • 通常「キレイに保存したい」って場合はQ=2~3を選択。
    • Q=2以下ではファイルサイズ大きくなりすぎ。
    • Q=5以上では細部が潰れすぎてLanczosResizeを使っている意味が無くなる
  • 「Variance-Masking」をオンに。こいつが爆速!
    • Xvidの変換速度が30%~40%アップする。
    • ソースによるけれど、ファイルサイズも30~50%縮む。
    • そのかわり、暗部や白飛び部分などは完全に潰れる。
    • 画質劣化を嫌って今まで殆ど利用しなかったが、こりゃすげえ。
  • Bフレームの数を増やす
    • 再生負荷の増加や画質劣化等、色々弊害もあるけれど、ファイルサイズを小さくするのも目的なので少し大きめの数字(3~6)を入力した
    • その代わり Quantizer rate と Quantizeroffset には小さめの数字を入れる。大きな数字を入れると画質劣化が酷い。
    • ちなみに、XvidでHD動画に変換する場合はBフレームは0か1にする事。XvidのBフレームはもの凄い再生負荷がかかる。h.264使った方がマシ
  • Adaptive Quantization
    • 私は、この項目はQ=3以上の高画質にしなければ あんまり意味が無いと思っている人間。
    • 今回は画質向上にこだわってないので、全てオフにして利用する。
  • Motion Precisionの設定はCPU性能に応じて行う
    • 上記までの設定を行った後、最後にMotion Precisionの設定を行う。
    • モーションサーチや VHQ設定は、CPUの性能に合わせて調整する。
    • 1回設定する度に小さなファイルでエンコテストをして、変換速度がガクンと落ちる辺りが、Xvidが律速となる変換設定になる。
    • 画質やファイルサイズのバランスを見て、妥協できる設定を見つける

とりあえず、上記画面のような設定ならば、Xvidでのエンコードはほぼ律速にならず、380~400fpsで変換可能でした。

あとがき

個人的な話になるけれど、1GBのファイルの防犯カメラ録画ファイルが100MB以下に縮小可能。変換時間は4時間分のファイルがおよそ8分で変換終了。実用的な範囲に納まりました。