トップ 検索 一覧 差分 ソース ヘルプ RSS ログイン

gpac(MP4Box)のビルド

この記事は古くなりました。gpac(MP4Box)のビルド 2010.05を参照して下さい。

gpac(MP4Box)のビルド(コンパイル)

2008年も終わりの12月に、gpacの0.4.5がリリースされた。mpeg4ip(mp4creator.exe)の更新が止まって以来、非常に期待の大きいMP4Box.exeが含まれるパッケージである。

MP4Boxは基本的にはMP4の(de)multiplexerで、ボックス構造をXML形式でエクスポートできたりもする。MP4を扱う上では欠かせないツールだ。特にx264を使う方の多くが、動画のエンコード後、音声をmultiplex(mux)するのに使用していることかと思う。

猫科研究所でもMP4の調査には使用率が高いので、ビルド方法を紹介しておく。

 前提

gpacは多機能なパッケージだが、今回欲しいのはMP4Boxのみ。gpac/MP4Boxは関連ライブラリと共にビルドすることで機能UPが図れるが、これらの諸機能はほぼ不要な上にビルドが面倒になる。時間も結構かかるので、省いた方が幸せだろう。

例えばSVG(ベクターグラフィックス)やOpenGL(3D機能)なんて、単純に動画のMP4を操作したいだけの人には不要だ。MP4Box自身で動画を再生をするわけではない(操作するだけ)ので、動画に関係しそうなxvidやfaad等の関連ライブラリも不要である。

  • gpacは0.4.5を対象とする。毎回細かな部分で差違があるのでこれ限定。
  • gpacの中でもMP4Boxのみを対象とし、かつ関連ライブラリは含めない。
  • ビルド環境はMinGW猫科研究所パックのa002。
  • gccのバージョンは恐らく問わないが、筆者は4.3.0で行った。
  • MP4Boxはlibgpac.dllと一緒に使うのが基本だが、何かと面倒なのでDLL不要版も作る。

DLL使用版MP4Boxのビルド

特に難しいことはない。

tar -zxvf gpac-0.4.5.tar.gz
cd gpac
./configure
cp config.h include/gpac/internal/
make lib apps

config.hをコピーしなければならない点のみ、若干特殊ではある。makeは無印でもよいのだが、MP4Boxのみが必要な場合はこの方がビルドするものが少なくなってよいとのこと。make helpでこれらのターゲットに関する説明を読むことができる。

バイナリはbin/gcc以下に完成している。MP4Box.exeの動作にはlibgpac.dllが必要なことを忘れずに。

DLL不要版MP4Boxのビルド

こちらが本題。

DLLを不要にするには、libgpac_static.aとリンクさせなければならない。この方法自体はapplications/mp4box/Makefileにコメント状態ですでに存在する。

LINKFLAGS+=-lgpac_static -lz $(EXTRALIBS)
#LINKFLAGS+=-lgpac

というようにgpac_staticを使用するように入れ替えればよいのだが、これだけではビルドが失敗する

原因は詳しく調査していないが、前述のSVGやOpenGL関連のライブラリがリンクされず、シンボルが発見できないためにビルドが停止する。

前述のように殆どの追加機能は不要であるため、configureで無効にしてしまえばよい。ただし、gpac-0.4.5にはバグがあり、SVGを無効にしているのにSVG関連のコードが残る。src/compositor/compositor.cを修正すればよいのだが、面倒なので、ここでは上記のMakefileの修正と併せてパッチを置いておく。

gpac-0.4.5-static.diff 1.48kiB (2418)

修正内容は簡単なのでパッチ適用後に確認してみてもよい。

これにより、ビルド手順は以下の通りとなる。

tar -zxvf gpac-0.4.5.tar.gz
patch --binary -p0 -i gpac-0.4.5-static.diff
cd gpac
./configure --strip --disable-svg --disable-opengl --use-jpeg=no
cp config.h include/gpac/internal/
make lib apps

bin/gcc以下にMP4Box.exeが完成している。単独で動作可能だ。

 自動的に関連してしまいそうなライブラリに関して

上記で--use-jpeg=noとしているのは、MinGW猫科研究所パックにはlibjpegが含まれており、そのままconfigureするとこれを自動的に含めてしまうからだ。

「自動的ならあってもいいじゃん」と言われそうだが、そもそもDLL不要版が上手くビルドできないのは、configureでは自動検出するくせに、make時に必要なライブラリをリンクしないからだ。つまり、単純に--use-jpeg=noを消すだけでは、ビルドが通らない

同じようなことはPNGやらxvidやらfaadやらで発生しそうだが、これらをビルドに含めてしまうならそれでも構わない。その場合には先のapplications/mp4box/Makefileを変更しよう。

例えば

LINKFLAGS+=-lgpac_static -lz -ljpeg $(EXTRALIBS)

として、--use-jpeg=noを削除すれば、libjpegがリンクされる。

逆に、このような追加機能をすべて排除してよいなら、

./configure --strip --disable-svg --disable-opengl --disable-ssl \
 --use-js=no --use-ft=no --use-jpeg=no --use-png=no --use-faad=no \
 --use-mad=no --use-xvid=no --use-ffmpeg=no --use-ogg=no --use-vorbis=no \
 --use-theora=no --use-openjpeg=no

とすれば、強制的に無駄な機能を排除したMP4Boxができあがる。機能がないというと嫌がる向きは多いが、(de)muxerとしては何の問題もなく、むしろ筆者はこちらを好むくらいだ。

余談

もう一つの雄であるmpeg4ipのmp4creatorをWeb検索してみたところ、MP4Creatorがかかった。バージョンが1.6.1dとなっており、mpeg4ipの更新が途絶えた1.6.1の続きにも見えるが、sourceforgeのプロジェクトは別で、関連性が謎に思われた。

NEWSを読んでみたところ、どうやらmpeg4ipとは別の人が勝手に継承したらしく、doom9等で出回っていたパッチ類を色々と適用している模様。

問題発生時に検証できるツールが複数あるのは非常に助かるので、個人的にはこっちのmp4creatorも応援したい。

元々MP4Boxよりmp4creatorの方がシンタックスが好きなんですわ。

最終更新時間:2008年12月14日 10時48分53秒