• libvpxのVisual Studio用ファイルをLinux上で作る

    2015年06月11日 20時38分
    libvpxをWindows用にビルドしたいけどMinGWをインストールするのが嫌でLinuxはある人向けという
    隙間産業的な記事。


    VP9のエンコードはそろそろ早くなったりしないかなあと思いつつlibvpxの中身を眺めていたら、
    なんか行けそうな気がしてやってみたら出来たのでメモっておきます。

    ちなみに私はlibvpxの中身を熟知しているわけではなく、
    部分部分をちょいちょいとつまんで解釈し
    なんとなく合ってそうというものであるとご理解ください。


    きっかけは、libvpxの中身を見ていたら「gen_msvs_sln.sh」とか「gen_msvs_vcxproj.sh」とかが有るのに気づいたことで、
    同時に「これをLinux上で動かしてslnとかvcxprojとか作れればそれを持ってきてVSでビルド出来るんじゃね?」と閃きました。

    これらのスクリプトはconfigureでtargetにvsを選択すると使われるようになっています。

    例えば、VS12で64bit用にビルドしたい場合はtargetにx86_64-win64-vs12を指定します
    # ./configure --target=x86_64-win64-vs12

    ※targetの一覧はconfigureのhelpに出てきます。


    これでmakeすると、指定したVS向けファイルが作成されます。

    configureの中のヘッダチェックとかも気になったのですが、主にtargetを確認する処理になっていて、
    実際そのヘッダが有るかないかとかは見てないので大丈夫そうです。


    細かい手順や注意点は以下になります。

    gitのcloneを取る
    # git clone https://chromium.googlesource.com/webm/libvpx
    # cd libvpx


    試した時のrevisionはこれでした
    # git rev-parse HEAD
    44afbbb72d8a5fa0528f8a571a5023a843d02f33


    作業用にまるっとコピーします
    # mkdir ../export
    # git archive --format=tar HEAD | tar -x -C ../export
    # cd ../export


    VSプロジェクトファイル内のincludeディレクトリ指定に、configureした時のLinux上のフルパスが現れないように書き換えます
    # sed -i -e 's/SRC_PATH_BARE=$source_path/SRC_PATH_BARE=./' build/make/configure.sh
    # sed -i -e 's/CFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)/CFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT)/' -e 's/CXXFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT) -I$(SRC_PATH)/CXXFLAGS+=-I$(BUILD_PFX)$(BUILD_ROOT)/' build/make/Makefile


    vpxenc以外コンパイルしたくないんじゃあという場合は、examplesの対象をvpxencだけに書き換えます
    # sed -i -e 's/ALL_EXAMPLES    = $(UTILS) $(EXAMPLES)/ALL_EXAMPLES    = vpxenc.c/' examples.mk


    お好みのオプションを選択してconfigure
    # ./configure --log=no --target=x86_64-win64-vs12 --enable-static-msvcrt --disable-vp8 --disable-unit-tests

    vp9のdecoderも要らないのでOFFにしようと思ったのですが
    decoderが一個も無くなると一部ソースがコンパイルエラーになるのでやめました。

    makeするとVS用のプロジェクトファイルとかソリューションファイルが作成されます
    # make


    後はこのソースツリーをまるごとWindowsに持ってきてvpx.slnをVSで開けばビルドできます。
    ※yasmのインストールも必要です



    さて、VP9のエンコードは今どのくらいの速度なのでしょうか。
    1920 * 1080 FPS30の動画をエンコードしてみました。
    CPUはCore i7 3770です。

    オプションがまだ完全に把握出来ていないのですが、
    まずはおそらく最速の設定であろう「good cpu-used=8」を試しました
    vpxenc --output=output.webm --threads=4 --good --cpu-used=8 --passes=1 --codec=vp9 --webm --end-usage=cq --cq-level=10 --i420 --color-space=bt709 --width=1920 --height=1080 input.y4m


    思ったより早い!11FPSくらい出ました。
    そこそこ使えなくもない早さな気がします。
    でも、どうせなら遅くても品質を取りたいので、次は「best」を設定してみました。
    vpxenc --output=output.webm --threads=4 --best --passes=1 --codec=vp9 --webm --end-usage=cq --cq-level=10 --i420 --color-space=bt709 --width=1920 --height=1080 input.y4m


    結果は14FPMでした。
    FPSじゃないです。FPMです。
    最初表示がバグったかと思いました。
    こんな表示が用意してあるあたり開発側もまだ遅いと思っているのでしょう。

    品質についてはbestのエンコード終了を待てなかったので比較していません。

    コメントを書く

    名前
    本文
    編集用パスワード
    管理者のみ閲覧