XviD は MPEG-4 準拠のビデオコーデック.非商用でソースも公開されている.
ここでは Linux ( Fedora Core 2 ) 上で MPlayer に含まれている mencoder を使って,XviD のエンコードを行う方法を解説する. XviD と MPlayer は yum や apt-get を用いて rpm からインストールしたものを使う.
MPlayer に含まれている mencoder で入力ファイルを XviD でエンコードする. mencoder の起動と,基本的なオプション指定のためのコマンドは以下のようになる.
mencoder in.avi \ -ovc xvid \ -xvidencopts fixed_quant=6 \ -oac mp3lame \ -lameopts chr:br=128 \ -o out.avi
-ovc xvid :
出力ビデオコーデックの設定.XviD を指定.-xvidencopts fixed_quant=6 :
XviD に渡すオプションの設定.-oac mp3lame :
出力オーディオコーデックの設定.ここでは MP3.-lameopts cbr:br=128 :
MP3 エンコーダ LAME に渡すオプションの設定.
-xvidencopts で指定できるオプションは数多くあるが,
pass,
bitrate,
fixed_quant
のうちどれか1つは必ず指定する.
どれも指定しないと,エラーでエンコードが開始できない.
pass はエンコードタイプの設定.
pass=1 だけ設定してエンコードをすると,
サイズは無制限 ( およそ 4000-5000kbps )
で高画質なビデオファイルが作成される.
また 2 pass encode の際に必要になる情報を記録したファイル
xvid-twopass.stats が作成される.bitrate はビットレートの設定.
bitrate を指定すると,
時間あたりのデータ量が一定になるようにエンコードされる.fixed_quant は品質の設定. 1 - 31 の範囲で値を指定する.
1 が最高品質で,31 が最低品質.出力ファイルのサイズは 1 が最大で,
31 が最小になる.
XviD でサイズを抑えて高品質な動画を作成したい場合,
fixed_quant の値が重要になってくる.
ビデオキャプチャカードからの入力を,
コーデックに huffyuv を用いて 1 分間録画し,
それを fixed_quant の値を変化させて XviD でエンコードしたところ,
以下のようになった.
| fixed_quant | size (mb) | bitrate (kbps) |
|---|---|---|
| huffyuv | 419 | 54456 |
| 1 | 48 | 6272 |
| 2 | 16 | 2005 |
| 3 | 12 | 1472 |
| 4 | 8.1 | 952 |
| 5 | 6.8 | 779 |
| 6 | 5.8 | 645 |
| 7 | 5.2 | 565 |
| 8 | 4.7 | 499 |
| 9 | 4.4 | 459 |
| 10 | 4.0 | 405 |
| 11 | 3.8 | 379 |
| 21 | 2.9 | 259 |
| 31 | 2.8 | 245 |
ファイルサイズと画質のバランスが取れているのは,6-7 くらいだろうか. 1 と 5 とでは,ファイルサイズはだいぶ違うが, 目で見た画質の差はほとんど無い.21 や 31 だと見るに耐えない画質になる.
fixed_quant ではなく
bitrate を指定してエンコードした場合,
サイズは同じになっても画質が悪いことが多い.
bitrate は,あくまでも時間あたりのデータ量の指定なので,
動きの激しい映像だとブロックノイズなどによる画質の劣化が起こる.
その他に画質にかかわる設定として,
me_quality と vhq がある.
me_quality=6 と vhq=4 を設定すると,
エンコードには時間がかかるが,画質はよくなる.
なお,mencoder では me_quality=6
デフォルトで設定されているので,
vhq=4 だけ設定すればよい.
この実験のために用いたコマンドを以下に示す.
$ mencoder \ > -tv driver=v4l2:device=/dev/video0:input=2:amode=2 \ > -tv norm=NTSC:width=640:height=480 \ > -tv chanlist=japan-bcast:channel=1 \ > -ovc lavc \ > -lavcopts vcodec=huffyuv \ > -oac pcm \ > -endpos 00:01:00 \ > -o huffyuv.avi $ mencoder huffyuv.avi \ > -ovc xvid \ > -xvidencopts fixed_quant=n:vhq=4 \ # n を適当な値に変更 > -vf pp=hb/vb/dr/al/lb,crop=624:468:8:0,scale=640:480 \ > -oac mp3lame -lameopts cbr:br=128 \ > -o xvid.avi
-vf はビデオフィルタで,オプションの詳細は以下の通り.
pp : MPlayer's internal postprocessing filter.
詳細は mplayer -pphelp を参照.
hb : 水平方向ブロックノイズ除去フィルタvb : 垂直方向ブロックノイズ除去フィルタdr : 輪郭強調フィルタal : 明るさ・コントラスト自動調節lb : ライン混合デインタレーサcrop=624:468:8:0scale=640:480
-vf は従来の -vop に取って代わるものである.
-vop ではオプションの処理順序が右から左
( 後に指定したものが先に処理される ) だったが,
-vf では左から右に ( 指定した順番に ) 処理される.
mencoder で作成した XviD コーデック の avi ファイルは ヘッダの情報が不正なようで, Windows Media Player や Winamp では 動画コーデックを特定できず,音声のみの再生になってしまう. DivX Player では大丈夫だった.
この不正なヘッダは,動画編集プログラム Avidemux を使って修正できる.
avidemux2 --load in.avi --save out.avi --quit
入力ファイルから出力ファイルへデータをそのまま書き込み, ヘッダのみを書き換えているようである. また mencoder でエンコードしたファイルは, 音声の最後に「ビー」というノイズが入ってしまうが, Avidemux で処理後はこのノイズが無くなっていた.
なお,Avidemux は Fedora Core 2 のパッケージには用意されていないので, ソースからコンパイルしてインストールする必要がある. その際に,システムに libmad と libmad-devel パッケージがインストール されていないと MP3 がサポートされないので,あらかじめインストールしておく.
viusulce@hotmail.com
Last modified: Mon Aug 16 18:17:16 JST 2004