self-build によるマルチメディア環境の構築(MPlayer, FFmpeg 編)

[追記 2010/0919]現在では、self-build パッケージどうしの依存関係は、自動的に解決できるようになっています。例えば、self-build-ffmpeg の場合は、

$ sudo apt-get install self-build-setup
$ sudo apt-get install self-build-ffmpeg

を実行だけで、おkです。



self-build-ffmpeg と self-build-ffmpeg-mh を upload する準備がようやくできました.週末にアップロードする予定です.

Vine Linux にもマルチメディア環境がだいぶ整ってきたと思います.まだ self-build-ffmpeg と self-build-ffmpeg-mh をアップロードしていませんが,実際に mplayerffmpeg, ffmpeg-mh をすべてフル装備でインストールするためには,現時点では以下のような手順となります.

# apt-get install self-build-setup
# apt-get install self-build-xvidcore self-build-faac self-build-lame self-build-x264 self-build-libdca self-build-a52dec self-build-libdvdcss
# apt-get install self-build-ffmpeg self-build-ffmpeg-mh self-build-mplayer self-build-mplayer-codecs

Vine Linux携帯動画変換君

比較的最新スナップショットの FFmpeg を提供する self-build-ffmpeg だけでなく,self-build-ffmpeg-mh というパッケージも作ってみました.

ffmpeg-mh は,Windows携帯動画変換君の Mobile Hack for UNIX というものです.self-build-ffmpeg-mh をインストールすると,携帯動画変換君のソースを取得して,ビルドし,ffmpeg-mh というバイナリを生成するようにしています.x264 については別途差分パッチが提供されていますが,要望があれば static でリンクしますので,とりあえず放置にしておきます.

追記 [2009/01/11]:self-build-ffmpeg-mh-0.33-6vl5 以降、別途 x264 を static ビルドしています([id:munepi:20090111:1231655397])。

Subversion を利用する self-build-ffmpeg

以下,self-build-ffmpeg を作るにあたってのメモを残します.


FFmpeg を self-build 化するためには,ソースをネット上から取ってこないといけないのです.

VLC のところ http://download.videolan.org/pub/videolan/vlc/0.8.5/contrib/ から取ってくるとなると,最新の ffmpeg-20060710.tar.bz2 でも良いんですが,ソース自体がもう 1 年半前なのとそのまま取ってくるのはあまり芸がないので,SVN から取ってくることにしました.

普通にソースを取ってくる self-build パッケージの場合は,spec の %post で単に

/usr/lib/rpm/self-build-rpm.sh %{name} %{pkgname}.spec "%{sourceurl}"

とするだけなのですが,今回 self-build-ffmpeg を作るにあたり,subversion を利用するので,%post で一工夫が必要でした.今の手元の spec では以下のようにしてあります.

%post
# set locale
case $LANG in
    ja*)LOCALE=ja ;;
    *) LOCALE=C ;;
esac

GetSrc_C(){
    echo "Download source file with Subversion..."
}

GetSrc_ja(){
    echo "Subversion を用いてソースファイルをダウンロードしています..."
}

# svn checkout
(
    set -e
    
    tmp=$(mktemp -d)
    
    trap cleanup EXIT
    cleanup() {
	set +e
	[ -z "$tmp" -o ! -d "$tmp" ] || rm -rf "$tmp"
    }
    
    unset CDPATH

    GetSrc_$LOCALE
    cd "$tmp"
    svn checkout -r {%{svndate}} svn://svn.mplayerhq.hu/%{pkgname}/trunk \
	%{pkgname}-%{svndate}  > /dev/null
    cd %{pkgname}-%{svndate}
    ./version.sh .
    find . -type d -name .svn -print0 | xargs -0r rm -rf
    #sed -i -e '/^\.PHONY: version\.h$/d' Makefile
    cd ..
    tar jcf %{pkgname}-%{svndate}.tar.bz2 %{pkgname}-%{svndate}
    %{__install} -m 644 %{pkgname}-%{svndate}.tar.bz2 %{_datadir}/%{name}/
    cd - >/dev/null
)
/usr/lib/rpm/self-build-rpm.sh %{name} %{pkgname}.spec

なので,self-build-ffmpeg をインストールすると,次のようなコンソールになります.

$ sudo rpm -Uvh rpm/RPMS/i386/self-build-ffmpeg-0.4.9-0.20080128vl1.i386.rpm
準備中...                   ########################################### [100%]
   1:self-build-ffmpeg      ########################################### [100%]
Subversion を用いてソースファイルをダウンロードしています...
rpm パッケージをビルド中...
rpm パッケージのビルドが完了しました。

self-build パッケージ提供するがパッケージどうしの依存を apt-get により解決できない

今一つ問題が出てきました.ffmpeg は self-build-xvidcore self-build-faac self-build-lame self-build-x264 self-build-libdca self-build-a52dec のそれぞれの devel パッケージが必要(むしろ無いと,ffmpeg の有り難みがあまり無い)なのですが,今の self-build の仕組みだと,self-build-ffmpeg に上記の self-build たちを依存させても,ffmpeg をビルドするときに上記のそれぞれの devel がインストールされないんです.つまり,self-build-ffmpeg をインストールする前に,あらかじめ上記の self-build たちをインストールしている必要があるわけです.