2006/06/08

mplayer で smpte VC-1 コーデックを使う。

mplayer から ffmpeg VC-1(WMV3,WMV9) smpteコーデックを使えるようにしてみた。忘れないうちにメモを残しておく。



なお、まともなffmpeg 用 VC-1 コーデックの開発は SoC 2006 に採択されている。この開発はhttp://codecs.multimedia.cx/に経過が出てきそうである。


さてffmpegにVC-1をサポートさせる手順はここにあり、1-13はそのままでいい。始めに、このサイトから、vc1_reference_decoder_release6.zip libvc1-makefile.txt smpte-vc1.c をダウンロードし、mplayer のソースをsvn を用いてダウンロード。 ( svn co svn://svn.mplayerhq.hu/mplayer/trunk ),

  1. vc1_reference_decoder_release6.zip を展開する。
  2. mplayer のソースをsvnでチェックアウトすると libavcodec ディレクトリが有る。そこにlibvc1 ディレクトリを作る。
  3. 展開した vc1_reference_decoder_release6/の中のdecoder/ shared/から ソース (*.[ch])を libavcodec/libvc1/ に移動させる。
  4. libvc1-makefile.txt を libavcodec/libvc1/Makefile としてコピー。
  5. libavcodec/libvc1 で make を実行。 libvc1.aが出来る。
  6. libavcodec に smpte-vc1.c をコピー。
  7. libavcodec/vc9.c 中の AVCodec wmv3_decode を #if 0 #endifで囲む。これは smpte-vc1 に同じものが含まれるから。
  8. libavcodec/Makefile の 変数 OBJS に smpte-vc1.o を追加。
  9. libavcodec/allcodecs に register_avcodec(&wmv3_decoder);がコメントアウトされているので、有効に。
  10. mplayer の top ディレクトリ に移動し、 configure を実行する。config.mak に AV_DEP AV_LIB に libavcodec/libvc1/libvc1.a を追加。(いい方法では無いと思う。もっとエレガントな方法を教えて。)
  11. top で make
  12. codec.confを編集し、~/.mplayerにコピー。
    編集箇所は
    videocodec ffwmv3
    info "FFmpeg M$ WMV3/WMV9"
    status buggy
    fourcc WMV3,wmv3
    driver ffmpeg
    dll wmv3
    out YV12,I420,IYUV
    の status crashing を status buggy に変更する。

こうすれば wmv3/wmv9の画像は表示できまた。ただし、Athlon(tm) 64 Processor 3000+では速度が遅すぎてまったくもって使いものにならない。音が出ない物もある、いったいどーすればいいのか?

追記、Kostya のblogにあるvc1itrans.cを使えば少しましだが、やっぱり遅い。