2011年04月12日

FFmpegのコンパイル (2011/04/12) w32threads

それでは、FFmpeg(w32threads版)のコンパイルです。

MSYSとMinGWから準備する方は、1、2番の記事からお読みください。
MSYSとMinGWの準備ができている方は、3番の記事からお読みください。

1. MSYS環境のアップデート

2. MinGW環境のアップデート

3. 個別のライブラリについて
以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より新しくなっているものもありますので、それぞれの記事で確認してください。
nasm-2.09.08
yasm-1.1.0
zlib-1.2.5
bzip2-1.0.6
faac-1.28(deleted)
faad2-2.7(deleted)
gsm-1.0.13
lame-3.98.4
opencore-amr-0.1.2
vo-aacenc-0.1.0
vo-amrwbenc-0.1.0
libogg-1.2.2
aoTuV Beta6.02 (libvorbis-1.3.2)
libtheora-1.1.1
speex-1.2rc1
libvpx-0.9.6
x264 (make fprofiled)
xvidcore-1.3.1

2011/05/08 追記
OpenSSLを使用する場合は、以下の記事を参照してください。
openssl-1.0.0d
rtmpdump-2.3

PolarSSLを、OpenSSLの代わりに使用する場合は、以下の記事を参照してください。
polarssl-0.99-pre4
rtmpdump-2.3 PolarSSL版

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

ソースコードはGitで管理されるようになり、SVNはrev.26402で更新が止まっています。
今後は、Gitをインストールして、以下のコマンドでソースコードを入手してください。
$ git clone git://git.videolan.org/ffmpeg.git

または、
Get FFmpeg
http://ffmpeg.org/download.html
ここの、Snapshotのリンクからソースコードをダウンロードできます。
ファイルは、ffmpeg-HEAD-(Gitハッシュ値).tar.gz という形式になっていますので、そのファイル名に読み替えてください。
$ tar xzf ffmpeg-HEAD-8eeed0d.tar.gz
$ cd ffmpeg-HEAD-8eeed0d

次に、libvpx関連、その他諸々の一括パッチを適用します。
パッチファイル(rev.29052(8eeed0d)〜)
ffmpeg-w32threads-20110412.diff
をダウンロードして、以下のコマンドを実行します。


2011/07/24 追記
パッチを更新しました。(rev.31627(9c2651a)〜)
libavfilter/avfilter.c の修正は不要になりました。
ffmpeg-20110724.diff

$ patch -p1 < ffmpeg-20110724.diff

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

FFmpeg SVN rev.23653から、libfaadが削除されました。
HE-AAC v2デコーダーが本体に実装されたので、libfaadは不要になったらしいです。
Unknown option "--enable-libfaad".
というメッセージが出る場合は、
--enable-libfaad --disable-decoder=aac
は削除してください。

2011/05/08 追記
configureオプションに、--enable-libspeex を追加しました。

2011/05/30 追記
いつの間にか修正されて、
warning: dereferencing type-punned pointer will break strict-aliasing rules
というのが出なくなりましたので、当サイトのFFmpeg rev.30395から、-fno-strict-aliasing は削除しました。

2011/06/28 追記
rev.30210(034fc7b)以降、--enable-memalign-hack は自動で判別されるようになったので、不要になりました。

$ ./configure --enable-gpl --enable-version3 --enable-postproc --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libspeex --enable-libvorbis --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libxvid --enable-libvpx --enable-libx264 --disable-ffserver --disable-ffplay --disable-ffprobe --enable-avisynth --enable-small --enable-w32threads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse"


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

2011/06/11 追記
当サイトでは、スピードよりもバイナリのサイズが小さくなる方を優先して、
--enable-small
を付けていますが、速度優先の場合は削除してください。

最適化無し版
--extra-cflags="-march=i686 -mtune=generic"

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

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

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

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

FFmpegのconfigureオプションに、
--cpu=athlon64
などど追加すると、そのCPUに特化した最適化が実行されますので、ご自分の環境でしか使用しない場合は、試してみると良いかもしれません。


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

configureのメッセージを見る

(長いので中略)
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 17:00 | Comment(3) | TrackBack(0) | FFmpegビルド
この記事へのコメント
いつもあべちんさんのコンパイルされたffmpegを使わせていただいております。
この度、あべちんさんのこの説明のとおりに自分でコンパイルしてみました。
説明のとおりにコンパイルは進みましたが、時間がとてもかかるのですね。(ライブラリの準備は次回から省略できるとしても)

丁寧な解説で、何一つ迷うことなくできました。
ありがとうございました。
Posted by POINT at 2011年06月13日 00:23
POINTさん
make -j4 && make install
↑のように" -j# "オプション(#はスレッド数)を付けてffmpegをbuildすると、結構早いですよ。
Posted by X5-452 at 2011年06月13日 16:07
POINTさん、X5-452さん、こんにちは。管理人です。

POINTさんのお役に立ててよかったです。
X5-452さんも、フォローありがとうございます。

最初は、ソースを入手するところから始まって、けっこう大変ですね。

私は、一度手順を確認して上手く行くのが分かったら、次からはシェルスクリプトにして、ほったらかしでコンパイルしています。

あと、自分用なら、必要なライブラリだけに絞って、使わないライブラリを省略すると、作業を減らせると思います。

./configure --help
で、オプションの説明を見てみたり、いろいろ試してみると面白いかもしれませんね。
Posted by あべちん at 2011年06月13日 23:33
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

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


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

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