久々にXvidを使ってavi形式に動画変換を行っているので、今更のようにXvidの設定、使い方を解説してみる事にしました。
Xvidに限らず、QVGA、SD、HD動画では異なった変換設定が求められますね。これはどのコーデックでも共通するお話なんですが、QVGAとHDでは設定がホント別物です(^_^;
最初に注意点や、今さらこんな事をやっている経緯を書いています。長いです。
Xvidの設定だけ読みたい方は、このページ後半「Xvidの設定」へGo! です。
▲通常はコンフィグ画面の「Profile@Level」から最適なプロファイルを選択すれば十分なのですが、久々にちょっとこだわった設定を模索してみました。
ちなみに、このページで一番書きたかった事は
「Variance-Masking をオンにしたら(暗部と明部は多少潰れちゃうけど)爆速&もの凄くサイズが縮んだよ!」って部分です。
Xvidの設定については、個人的にはオマケで書いた感じです。
まえがき
ここ数日、今さらの様にQVGA(320x240)サイズへの動画変換の設定を煮詰めています。
コーデックには、久しぶりにXvidを使っています。
目的は、Webカメラで録画したデータを保存用に小さくするため。
速度面でも画質面でも、HD動画の変換設定と随分違ったモノが求められますね~。
色々がんばって見た結果、「小さな動画に変換したい場合は昔(2002~3年ごろ)に煮詰めた設定を使うのがイチバン」という感じで落ち着きました。
注意点
- HD向け、SD向け、QVGA向けの変換設定は全然違う。
- QVGA画質向けの場合、細部保持が命
小さくてボケボケの動画なんぞ、価値無し。
変換設定の中で、高画質にできるオプションは出来るだけ有効にしよう - HD画質向けの場合、再生負荷に気を使う事が重要。
大きなサイズの動画の場合、オプションで高画質になる設定をビシバシ使っていると再生負荷が高くなりすぎる。 - SD画質向けはその中間
- Xvidの場合、初期設定はSD画質向け
Xvidの初期設定はSD画質向けになっている。
自分で色々とオプションを弄りたい場合は、QVGA向けに動画を作成するならもう少し高画質になるようにオプションを変更する。
逆にHD画質の動画へ変換する場合は、少し設定を緩めにする。
- QVGA画質向けの場合、細部保持が命
今回の私の場合の目的
- Webカメラを購入した。防犯用なので日々録画データが溜まっていく。
満足な画質で録画すると、4時間で1GBほどのデータ。ちょっとデカイ。 - しかも画質があまり良くない /データサイズがそれなりに大きめなので、エンコして小さくして保存しておきたい。(楽に取り回しできる状態にしておきたい)
- 高速にエンコできて、ファイルが小さくて、人の顔が認識できていれば後はどうでも良い
AviSynthのスクリプト
色々と試したけれど、以下な感じのスクリプトに落ち着きました。
# 今回は音声は不要
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の設定
このページを読みに来た人にとっては、ここからがメインですよね。
長々と能書き書いちゃってスイマセン(^_^;
- ビットレートの動きで解析したいので 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分で変換終了。実用的な範囲に納まりました。