それでは、FFmpeg(pthreads版)のコンパイルです。
MSYSとMinGWから準備する方は、1、2番の記事からお読みください。
MSYSとMinGWの準備ができている方は、3番の記事からお読みください。
1. MSYS環境のアップデート2. MinGW環境のアップデート3. 個別のライブラリについて以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より新しくなっているものもありますので、それぞれの記事で確認してください。
nasm-2.09.08yasm-1.1.0pthreads-w32 release 2.9.0zlib-1.2.5bzip2-1.0.6faac-1.28(deleted)
faad2-2.7(deleted)
gsm-1.0.13lame-3.98.4opencore-amr-0.1.2vo-aacenc-0.1.0vo-amrwbenc-0.1.0libogg-1.2.2aoTuV Beta6.02 (libvorbis-1.3.2)libtheora-1.1.1speex-1.2rc1libvpx-0.9.6x264 (make fprofiled)xvidcore-1.3.12011/05/08 追記OpenSSLを使用する場合は、以下の記事を参照してください。
openssl-1.0.0drtmpdump-2.3PolarSSLを、OpenSSLの代わりに使用する場合は、以下の記事を参照してください。
polarssl-0.99-pre4rtmpdump-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、
pthread関連、その他諸々の一括パッチを適用します。
パッチファイル(rev.29052(8eeed0d)〜)
ffmpeg-pthreads-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-pthreads --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のメッセージを見る
install prefix /usr/local
source path /usr/local/src/ffmpeg
C compiler gcc
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
debug symbols yes
strip symbols yes
optimizations small
static yes
shared no
postprocessing support yes
new filter support yes
network support yes
threading support pthreads
SDL support no
Sun medialib support no
AVISynth enabled yes
frei0r enabled no
libdc1394 support no
libdirac enabled no
libfaac enabled no
libgsm enabled yes
libmp3lame enabled yes
libnut enabled no
libopencore-amrnb support yes
libopencore-amrwb support yes
libopencv support no
libopenjpeg enabled no
librtmp enabled yes
libschroedinger enabled no
libspeex enabled yes
libtheora enabled yes
libva enabled no
libvo-aacenc support yes
libvo-amrwbenc support yes
libvorbis enabled yes
libvpx enabled yes
libx264 enabled yes
libxavs enabled no
libxvid enabled yes
zlib enabled yes
bzlib enabled yes
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は無効にしています。
【更新履歴】を見る
2011/04/12 追記
新たに、以下のライブラリを追加しました。
vo-aacenc-0.1.0
vo-amrwbenc-0.1.0
その他、全面的に書き直しました。
当サイトで配布しているバイナリは
--enable-w32threads
としています。
w32threadsを使用する手順は、以下の記事を参照してください。
FFmpegのコンパイル (2011/04/12) w32threads
2011/04/14 追記
pthreads版とw32threads版に共通の、MSYSとMinGWの記事を分けました。
2011/04/27 追記
パッチを更新しました。(rev.29426(31d8467)〜)
pthreads版とw32threads版のパッチを共通にしました。
ffmpeg-20110427.diff
2011/05/08 追記
パッチを更新しました。(rev.29704(b9e6084)〜)
・The WebM Project公式サイトのパッチ ffmpeg-HEAD-VP8_param_mapping-6.tar.gz をマージしました。
・PolarSSLに対応しました。
ffmpeg-20110508.diff
2011/05/08 追記
libspeex(speex-1.2rc1.tar.gz)を追加しました。
configureオプションに、--enable-libspeex を追加しました。
2011/05/08 追記
PolarSSLを、OpenSSLの代わりに使用する手順を追加しました。
2011/05/17 追記
パッチを更新しました。(rev.29958(68bed67)〜)
ffmpeg-20110516.diff
2011/05/24 追記
パッチを更新しました。(rev.30166(1bc81bf)〜)
The WebM Project公式サイトのパッチ ffmpeg-HEAD-VP8_param_mapping-7.tar.gz をマージしました。
ffmpeg-20110524.diff
2011/05/27 追記
パッチを更新しました。(rev.30303(5e0dafe)〜)
The WebM Project公式サイトのパッチが本体にマージされました。
ffmpeg-20110527.diff
2011/05/30 追記
いつの間にか修正されて、
warning: dereferencing type-punned pointer will break strict-aliasing rules
というのが出なくなりましたので、当サイトのFFmpeg rev.30395から、-fno-strict-aliasing は削除しました。
最適化無し版
--extra-cflags="-march=i686 -mtune=generic -fno-strict-aliasing"
--extra-cflags="-march=i686 -mtune=generic"
Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse -fno-strict-aliasing"
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse"
Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse -fno-strict-aliasing"
--extra-cflags="-mtune=core2 -mfpmath=sse -msse"
Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse -fno-strict-aliasing"
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse"
Phenom最適化版
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse -fno-strict-aliasing"
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse"
2011/06/04 追記
パッチを更新しました。(rev.30505(25c32d0)〜)
ffmpeg-20110603.diff
2011/06/07 追記
パッチを更新しました。(rev.30583(263f57c)〜)
ffmpeg-20110606.diff
2011/06/17 追記
パッチを更新しました。(rev.30805(7a02527)〜)
ffmpeg-20110616.diff
2011/06/24 追記
パッチを更新しました。(rev.30884(54dd50d)〜)
いきなりクラッシュするようになったので、libavfilter/avfilter.cを修正しました。
ffmpeg-20110624.diff
2011/06/28 追記
rev.30210(034fc7b)以降、--enable-memalign-hack は自動で判別されるようになったので、不要になりました。
2011/06/30 追記
パッチを更新しました。(rev.31072(4d08dfe)〜)
ffmpeg-20110629.diff
2011/07/02 追記
パッチを更新しました。(rev.31140(3074f03)〜)
makeで長時間固まるのを修正。
make testできなくなったのを修正。
などです。
ffmpeg-20110702.diff
2011/07/11 追記
パッチを更新しました。(rev.31404(a8c2ff2)〜)
ffmpeg-20110711.diff
2011/07/24 追記
パッチを更新しました。(rev.31627(9c2651a)〜)
libavfilter/avfilter.c の修正は不要になりました。
ffmpeg-20110724.diff
【更新履歴】を閉じる