XviD

XviD とは?

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

-xvidencopts で指定できるオプションは数多くあるが, passbitratefixed_quant のうちどれか1つは必ず指定する. どれも指定しないと,エラーでエンコードが開始できない.

コンパクトで高画質な動画の作成

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_qualityvhq がある. me_quality=6vhq=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 はビデオフィルタで,オプションの詳細は以下の通り.

-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