アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

MEncoderでh264を作成しよう

今回はエンコード編です。
軽量で高性能なmencoderを使って、最近流行り(?)のh264動画を作成します。

MEncoderについては、仕事で触る機会があったのですが、思ったより簡単に出来たため、自宅にも導入してみようと決意。
(最近は無駄に電力を食っているだけの)自鯖をHDDレコーダもどきにするために頑張って見ました。
キャプチャ自体は、数年前に3000円で購入したキャプチャカードが余っていたので、これを使用。チップはbt848なので、接続は簡単。
mplayer tv:// -v driver=v4l:device=/dev/video0:input=0
でちゃんと見れました。

あとは、CRONなどで自動にキャプチャして、待機中にエンコードさせればそこそこ高画質で録画できます。(mencoderで直接エンコードすることも出来ますか、サーバーのスペック自体は高くなく、かなりコマ落ちするので却下)

と言うことで、いざインストール!

まずは、ソースからコンパイル

公式サイトからmplayerのソースを取得

MPlayer v1.0rc2 source
http://www.mplayerhq.hu/design7/dload.html

次に、x264のソースコード取得

http://www.videolan.org/developers/x264.html
ここから、daily tarballで、最新版取得します。

(以下、パスは適当なので適時読み替えてください)
取得できたら、



$ cd /usr/local/src/
$ tar jxf /path/to/x264-snapshot-20080406-2245.tar.bz2
$ cd x264-snapshot-20080406-2245

$ ./configure --prefix=/usr/local/x264 --enable-shared --enable-pthread
$ make
$ sudo make install


mplayerは、



$ cd /usr/local/src
$ tar jxf /path/to/MPlayer-1.0rc2.tar.bz2
$ ./configure --prefix=/usr/local/mplayer --with-extralibdir=/usr/local/x264/lib/ --with-extraincdir=/usr/local/x264/include
$ make
$ sudo make install


として、インストールしました。

意気揚々と、



$ /usr/local/mplayer/bin/mencoder


を実行すると・・・なぜかlibx264.so.59が見つからないと言うメッセージが・・・
configureを見直したり、いろいろやった挙句



$ sudo ln -s /usr/local/lib/libx264.so.59 /usr/lib


以上w



hoge@foobar:~$ /usr/local/mplayer/bin/mencoder -ovc help
MEncoder 1.0rc2-4.2.3 (C) 2000-2007 MPlayer Team
CPU: Intel(R) Pentium(R) M processor 1.60GHz (Family: 6, Model: 13, Stepping: 6)
CPUflags: Type: 6 MMX: 1 MMX2: 1 3DNow: 0 3DNow2: 0 SSE: 1 SSE2: 1
Compiled for x86 CPU with extensions: MMX MMX2 SSE SSE2


Available codecs:
   copy     - frame copy, without re-encoding. Doesn't work with filters.
   frameno  - special audio-only file for 3-pass encoding, see DOCS.
   raw      - uncompressed video. Use fourcc option to set format explicitly.
   lavc     - libavcodec codecs - best quality!
   vfw      - VfW DLLs, read DOCS/HTML/en/encoding-guide.html.
   qtvideo  - QuickTime DLLs, currently only SVQ1/3 are supported.
   xvid     - XviD encoding
   x264     - H.264 encoding

出来た!


試しにエンコードしてみます。(元ソースは、どこかのゲームのサンプルOPをry)

h264、1パス、約800Kbpsで。


/usr/local/mplayer/bin/mencoder -oac copy -of lavf -ovc x264 -x264encopts bitrate=800:frameref=6:me=umh:subme=7:trellis=2:analyse=i8x8:bframes=1:subq=7:brdo:mixed_refs:bime:weight_b:direct_pred=auto:mixed_refs -aspect 16:9 -noskip -lavfopts format=matroska hoge.avi -o piyo.mkv


これでとりあえずエンコード出来ました。
ファイルサイズは若干小さめに。20分で、117MBくらいに。
もっといいオプションがあるかもしれませんが、これでもそこそこ綺麗に出来ます。

これでHDDレコーダもどきに一歩近づきました。
ただ、ここの内容を実験したのは会社で開発に使っているノートですので、実際に自鯖で動くかどうかは分かりません。
さあ・・・帰って実験しますか。