2010年04月03日

FFmpegのコンパイル (2010/4/2)

いよいよ、FFmpegのコンパイルです。

1. MSYS環境のアップデート
MSYS-1.0.11以上をインストールした場合、bashとmakeは新しい物になっています。
make 3.8.1 以上
bash 3.1 以上
であれば問題ありません。

MSYS環境が古い場合、bash-2.0だと、configureの判定ルーチンで引っかかって、
Broken shell detected. Trying alternatives.
というメッセージが出ることがありますので、MSYSのshを更新しておきましょう。
makeも古い場合は更新します。

MinGW公式ページからダウンロードリンクが見つからなくなっていますので、こちらに置いておきます。
bash-3.1-MSYS-1.0.11-1.tar.bz2
make-3.81-MSYS-1.0.11-2.tar.bz2
をダウンロードして、C:\msys\1.0\ に解凍します。


2. MinGW環境のアップデート
gcc4.4系の安定版の最新はgcc4.4.3ですが、MinGWのwebページには、gcc4.4系はgcc4.4.0までしかないので、とりあえずそれをインストールしておきましょう。
C:\MinGW\ に環境があれば、以下のファイルをダウンロードして、C:\MinGW\ の下に解凍すればOKです。

以下のページから、
http://sourceforge.net/project/showfiles.php?group_id=2435
GCC Version 4
Current Release_ gcc-4.4.0 より、
gcc-core-4.4.0-mingw32-bin.tar.gz
gcc-core-4.4.0-mingw32-dll.tar.gz
gcc-c++-4.4.0-mingw32-bin.tar.gz
gcc-c++-4.4.0-mingw32-dll.tar.gz
gmp-4.2.4-mingw32-dll.tar.gz
mpfr-2.4.1-mingw32-dll.tar.gz

自分でgccをビルドするのは面倒だけど、できるだけ最新版を使いたいという方は、以下の所からダウンロードできます。
TDM's Experimental GCC/MinGW32 Builds
http://www.tdragon.net/recentgcc/

2010/04/02
GCC本家ではgcc4.5系はまだ正式にリリースされていませんが、MinGW Proposedに早くもgcc4.5系が出ています。
正式にリリースされたら、当サイトでも採用する予定です。

2010/04/22
MinGW GCC 4.5.0正式版がリリースされました。
インストール手順は以下の記事を参考にしてください。
MinGW GCC 4.5.0リリース


その他、以下の3つのパッケージも最新のものにしておきましょう。
MinGWをインストールした時点で最新版になっていれば、更新は不要です。

以下のページから、
http://sourceforge.net/project/showfiles.php?group_id=2435

GNU Binutils
binutils-2.20.1 より、
binutils-2.20.1-2-mingw32-bin.tar.gz

MinGW API for MS-Windows
w32api-3.14 より、
w32api-3.14-mingw32-dev.tar.gz

MinGW Runtime
mingwrt-3.18 より、
mingwrt-3.18-mingw32-dev.tar.gz
mingwrt-3.18-mingw32-dll.tar.gz

上記のファイルを、すべてC:\MinGW\ の下に解凍すればOKです。

3. 個別のライブラリについて
以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より新しくなっているものもありますので、それぞれの記事で確認してください。
nasm-2.08.01
yasm-0.8.0
pthreads-w32 release 2.9.0
zlib-1.2.4
bzip2-1.0.5
faac-1.28(deleted)
faad2-2.7
gsm-1.0.13
lame-3.98.4
libnut-664(deleted)
opencore-amr-0.1.2
openssl-0.9.8n
rtmpdump-v2.2b r416 svn版
libogg-1.2.0
libvorbis-1.3.1
libtheora-1.1.1
x264 rev.1510
xvidcore-1.2.2


4. FFmpegのコンパイル
FFmpegは、以下の場所にあります。
http://ffmpeg.mplayerhq.hu/

x264と同様、svnがインストールされていれば、以下のようにして、ソースファイルを拾ってこれます。
$ svn co svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

svnがインストールされていない場合でも、とりあえず、snapshotのソースファイルを拾ってくればコンパイルできます。

Download and SVNから、
http://ffmpeg.mplayerhq.hu/download.html
full checkoutの、
ffmpeg-checkout-snapshot.tar.bz2を、適当なディレクトリに保存します。

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xjf ffmpeg-checkout-snapshot.tar.bz2
$ cd ffmpeg-checkout-2010-04-02

ソースファイルを展開して作成されるディレクトリは、snapshotの日付になっていますので、その時点のディレクトリ名に読み替えて下さい。

次に、pthread関連、その他諸々の一括パッチを適用します。
パッチファイルffmpeg-20100402.diffをダウンロードして、以下のコマンドを実行。

2010/04/03 追記
パッチファイルをアップデートしました。
ffmpeg-20100403.diff (rev.22785〜)

2010/05/20 追記
パッチファイルをアップデートしました。
ffmpeg-20100520.diff (rev.23100〜)

2010/05/27 追記
パッチファイルをアップデートしました。
ffmpeg-20100527.diff (rev.23351〜)

$ patch -p1 < ffmpeg-20100402.diff
$ patch -p1 < ffmpeg-20100403.diff
$ patch -p1 < ffmpeg-20100520.diff
$ patch -p1 < ffmpeg-20100527.diff

パッチを適用したら、configureを実行します。

$ ./configure --enable-memalign-hack --enable-postproc --enable-gpl --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfaad --disable-decoder=aac --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libvorbis --enable-libtheora --enable-libxvid --enable-libx264 --disable-ffserver --disable-ffplay --disable-ffprobe --enable-avisynth --enable-small --enable-pthreads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-strict-aliasing"

最適化オプションは、PCの環境により以下のようにしています。
※あくまでも一例ですので、もっと凝ってみたい方は、gccのマニュアルなどを見て研究されると良いかもしれません。

最適化無し版
--extra-cflags="-march=i686 -mtune=generic -fno-strict-aliasing"
※最適化無し版については、個別のライブラリのコンパイルにも
-march=i686
を、CFLAGSに追加して他と分けています。

Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse -fno-strict-aliasing"

Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse -fno-strict-aliasing"

Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-strict-aliasing"

Phenom最適化版
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse -fno-strict-aliasing"


問題なければ、以下のようなメッセージが出ます。
source pathはコンパイル環境により異なります。
思ったよりも時間がかかりますので、気長に待ちましょう。

install prefix /usr/local
source path /c/TEMP/ffmpeg
C compiler gcc
.align is power-of-two no
ARCH x86 (generic)
big-endian no
runtime cpu detection no
yasm yes
MMX enabled yes
MMX2 enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
CMOV enabled no
CMOV is fast no
EBX available yes
EBP available no
10 operands supported yes
gprof enabled no
debug symbols yes
strip symbols yes
optimizations small
static yes
shared no
postprocessing support yes
new filter support no
filters using lavformat no
network support yes
threading support pthreads
SDL support no
Sun medialib support no
AVISynth enabled yes
libdc1394 support no
libdirac enabled no
libfaac enabled no
libfaad enabled yes
libfaad dlopened no
libgsm enabled yes
libmp3lame enabled yes
libnut enabled no
libopencore-amrnb support yes
libopencore-amrwb support yes
libopenjpeg enabled no
librtmp enabled yes
libschroedinger enabled no
libspeex enabled no
libtheora enabled yes
libvorbis enabled yes
libx264 enabled yes
libxvid enabled yes
zlib enabled yes
bzlib enabled yes

(長いので中略)
Creating config.mak and config.h...

その後、
$ make

ffmpeg.exeが出来ていれば完了です。


【補足】
自分用の場合は、再配布を考えなくても良いので、libfaac入りのFFmpegをビルドすることもできます。

追加で、libfaacをコンパイル&インストールします。
libfaac のコンパイル&インストール

configureオプションの適当な所に、
--enable-nonfree
--enable-libfaac
を追加します。

configureオプションに、
libfaac enabled yes
と表示されていれば、makeして完了です。

FFmpegのエンコードオプションで、
-acodec libfaac
が使えるようになります。

当サイトで配布しているFFmpegは配布用のため、libfaacは無効にしています。
posted by あべちん at 16:25 | Comment(7) | TrackBack(1) | FFmpegビルド
この記事へのコメント
こんにちは。
デザイン変更されましたか?
IE 8・Firefox 3.6共にデザインが崩れるようになってしまいました。
Posted by Mino at 2010年04月14日 19:59
Minoさん、こんにちは。管理人です。

だいぶ前から、Firefoxで見た時に右サイドバーがはみ出すのは気づいていたのですが、面倒なのでそのままにしていました。

デザインの修正は、閲覧している人が少ない夜中などにやらないといけないので、時間があるときに修正します。
Posted by あべちん at 2010年04月14日 22:20
ほぼ、携帯には関係ないパッチですが・・・
ASRやlevelを間違えてエンコードした後の修正に使えます。

change SAR in H264 bitstream
http://forum.doom9.org/showthread.php?t=152419
Posted by X5-452 at 2010年04月15日 01:04
訂正
ASRやlevelを間違えてエンコードした後の(r

SARやlevelを間違えてエンコードした後の(r

パッチを付けて下さい。と言う訳ではなく、追加価値を付けると面白いかなと・・・

僕は、x264ビルド専門です。
Posted by X5-452 at 2010年04月15日 01:10
X5-452さん、こんにちは。管理人です。

情報ありがとうございます。

ただ更新するだけだとマンネリ化してくるので、いろいろ試してみるのも面白そうですね。

あると便利そうな機能なので、検討してみます。
Posted by あべちん at 2010年04月18日 17:01
ffmpeg-checkout-2010-05-28に更新されているようなのですが、パッチは昨日のものでイケますかね?
Posted by clover at 2010年05月28日 16:28
cloverさん、こんにちは。管理人です。

いろいろ書き直しましたので、2010/05/28版のコンパイル手順をお読みください。
おたずねになる前に、まずは試してみることをおすすめいたします。
Posted by あべちん at 2010年05月30日 17:03
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/36847657
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック

MinGW-ffmpeg
Excerpt: FFmpegのコンパイル (2010/4/2)を読んでffmpegをビルドした。 大変すばらしい情報なのだが手作業が多いのでスクリプトを書いてみた(github)。 以下手順。 http://sou..
Weblog: 糸且之入Eヨ言己
Tracked: 2010-05-19 20:27