MacPorts で ffmpeg をビルドして flv を H.264 であれこれする

paraches2007-05-09

友人が動画から音楽だけを抜き出したいとか、flv を QuickTime Player で見られるようにしたいとか言い出した。flv は Perian を自分のライブラリフォルダにある QuickTime フォルダに入れれば見られるようになる。すっごく簡単。
でも、音楽抜き出したりファイルフォーマットを変えたりあれこれしたいとも言うので、ffmpeg をインストールして UI の部分はやりたい事だけができるような物をちゃっちゃと Cocoa で作ってやった。
というわけで、PowerBook G4 に MacPorts をインストールして ffmpeg をビルドしたって話。

MacPorts のインストール準備

特に難しい事はない。MacPorts Wiki JP の手順に従ってインストールすれば良い。
Xcode ToolsX11 SDK も入れろってあるけど、既にインストールしてある Xcode Tools には入っていないので、面倒だから入れなかった。
XWindows(X11) もインストールを強くお勧め(highly recommended)ってあるけど、ffmpeg 使うだけなら必要ない(と勝手に思う)からインストールはしていない。
shell 環境は素直に

export PATH=/opt/local/bin:/opt/local/sbin:$PATH

を ~/.profile に入れておいた。
とりあえず env してみた結果

powerbook-g4-15:~ paraches$ env
TERM_PROGRAM=Apple_Terminal
TERM=xterm-color
SHELL=/bin/bash
TERM_PROGRAM_VERSION=133
USER=paraches
__CF_USER_TEXT_ENCODING=0x1F5:1:14
PATH=/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
XML_CATALOG_FILES=
PWD=/Users/paraches
SHLVL=1
HOME=/Users/paraches
LOGNAME=paraches
_=/usr/bin/env

MacPorts のインストール

MacPorts の左上の Downloads から辿る。今は 1.4.0 が最新みたいだ。Mac OS X 10.4 用の dmg をダウンロードしてマウント。MacPorts-1.4.0.pkg をダブルクリックすればインストーラが起動する。

後は先へ進んで行くだけでインストールは終了。
次にアプリケーション/ユーティリティにあるターミナルを起動。MacPorts を最新バージョンにするため selfupdate を実行する。

powerbook-g4-15:~ paraches$ sudo port selfupdate
Password:
DarwinPorts base version 1.430 installed
Downloaded MacPorts base version 1.440
Configuring, Building and Installing new MacPorts base
selfupdate done!

なにやら 1.440 まで新しくなった、今後新しいバージョンにはこのコマンドでアップデートできる。

ffmpeg を探してインストール

まずは簡単に MacPorts ffmpeg でググってみた。サクっと ffmpeg の port が見つかった。なにやら DarwinPorts の頃のページみたいだけど、port file の日付は新しいね。

って、別にわざわざググらなくても port search ffmpeg して port variants ffmpeg すれば port の有無も用意されてる variant もわかるんだけど…

powerbook-g4-15:~ paraches$ port search ffmpeg
ffmpeg                         multimedia/ffmpeg 0.4.9-pre1   Digital VCR and streaming server
powerbook-g4-15:~ paraches$ port variants ffmpeg
ffmpeg has the variants:
        universal
        gpl
        postproc
        lame
        libogg
        vorbis
        theora
        faac
        faad
        xvid
        x264
        a52
        dts

MacPorts インストールする前に MacPortsffmpeg の port 用意されてるのかな?ってググったので。結果見つかったから MacPorts を入れたという順番。無ければ Fink に行く予定だったのだけど…。なぜ最初に MacPorts なのかは、前に DarwinPorts を使った事があるからってだけの理由。

で、ffmpeg のインストール。variant がたくさんあるのであれもこれもてんこもりでインストールを開始。

powerbook-g4-15:~ paraches$ sudo port install ffmpeg +lame +libogg +vorbis +theora +faac +faad +xvid +x264 +a52 +dts
<長いので省略>
--->  Fetching ffmpeg
--->  Verifying checksum(s) for ffmpeg
--->  Extracting ffmpeg
--->  Configuring ffmpeg
--->  Building ffmpeg with target all
--->  Staging ffmpeg into destroot
--->  Installing ffmpeg 0.4.9-pre1_1+a52+dts+faac+faad+lame+libogg+theora+vorbis+x264+xvid
--->  Activating ffmpeg 0.4.9-pre1_1+a52+dts+faac+faad+lame+libogg+theora+vorbis+x264+xvid
--->  Cleaning ffmpeg

なんだかんだで結構時間がかかったけどインストール終了。とりあえず起動もしたみたいだ。

powerbook-g4-15:~ paraches$ ffmpeg
FFmpeg version SVN-r8743, Copyright (c) 2000-2007 Fabrice Bellard, et al.
  configuration: --prefix=/opt/local --prefix=/opt/local --disable-vhook --mandir=/opt/local/share/man --enable-shared --enable-pthreads --enable-libmp3lame --enable-libogg --enable-libvorbis --enable-libtheora --enable-gpl --enable-libfaac --enable-libfaad --enable-xvid --enable-x264 --enable-liba52 --enable-libdts
  libavutil version: 49.4.0
  libavcodec version: 51.40.3
  libavformat version: 51.12.1
  built on May  4 2007 05:53:54, gcc: 4.0.1 (Apple Computer, Inc. build 5367)
usage: ffmpeg [[infile options] -i infile]... {[outfile options] outfile}...
Hyper fast Audio and Video encoder
<長いので省略>

めでたしめでたし。
あとは Cocoa で UI を作って友人のやりたい事それぞれをボタン一つでできるようにして終了。この UI 部分は他に AppleScript やらあれこれ手段はあるんだろうけど、他は知らないしなんとなく NSTask でダウンロード&エンコーディングさせながら NSProgressIndicator でバーを延ばすってのがやってみたかったから。

自分のマシンではエラー出たりして…

ところで、自分の PowerMac G5 には DarwinPorts 1.2 が入っていて、それを selfupdate で MacPorts 1.440 にしてから同じように ffmpeg をビルドしようとしたら途中でエラーになった。こんな感じ…

--->  Fetching apr
--->  Attempting to fetch apr-1.2.8.tar.bz2 from http://www.apache.org/dist/apr
--->  Verifying checksum(s) for apr
--->  Extracting apr
--->  Configuring apr
--->  Building apr with target all
Error: Target com.apple.build returned: shell command " cd "/opt/local/var/db/dports/build/_opt_local_var_db_dports_sources_rsync.rsync.darwinports.org_dpupdate_dports_devel_apr/work/apr-1.2.8" && make all " returned error 2
<長いので省略>
In file included from misc/unix/rand.c:39:
/opt/local/include/uuid.h:94: error: conflicting types for 'uuid_t'
/usr/include/unistd.h:121: error: previous declaration of 'uuid_t' was here
make[1]: *** [misc/unix/rand.lo] Error 1
make: *** [all-recursive] Error 1

Error: The following dependencies failed to build: subversion apr apr-util db44 sqlite3 readline neon openssl
Error: Status 1 encountered during processing.

apr で uuid_t の定義がコンフリクトしてるって。なんとなく古いのと新しいのが混じってるから?なんて深く考えずに Xcode を 2.3.1 から 2.4.2 にして MacPorts をいったんキレイにアンインストールして入れ直し。そして再度 ffmpeg をビルドしたら問題無し。う〜ん、古いのと新しいのが混ざってたのが原因か?それとも Xcode のバージョンが古かったのが原因か? ま、こんなこともあったということで。