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-3b5ddf0.tar.gz
$ cd ffmpeg-HEAD-3b5ddf0
次に、configure、その他諸々の一括パッチを適用します。
2012/07/22 追記パッチを更新しました。(rev.42739(9e1508f)〜)
ffmpeg-20120722.diff2012/01/30 追記FFmpeg rev.37209以降の更新で、「-flags2」で設定していたものが独立したオプションになり、特にx264関連の設定が大幅に変わりました。
以前の「-flags2」の設定も使用できるように、Revert用のパッチを作りましたので、必要であれば適用してください。
2012/06/16 追記「-flags2」用のパッチを更新しました。(rev.41595(15f8941)〜)
ffmpeg-global_opts-20120615.diff2012/04/17 追記2012/04/13 以降、以下のようなエラーが出る場合があります。
library.mak:95: *** missing separator. Stop.
ファイルの最後に、改行コードが入っていないものがあるのが原因です。
その場合は、以下のパッチを適用してください。2012/05/10 追記改行コードが原因のエラーが出るMakefileが増えるたびに、パッチを適用するのも面倒です。
ダウンロード(git clone)済みのソースコードがある場合、一旦Makefileを全部削除して、改行コードをLFにして作成し直せば、エラーが出なくなります。
$ echo 'Makefile eol=lf' > .gitattributes
$ find ./ -name 'Makefile' -print | xargs rm
$ git stash
その後、以下のパッチを適用します。
$ patch -p1 < ffmpeg-20120722.diff
$ patch -p1 < ffmpeg-global_opts-20120615.diff
パッチを適用したら、configureを実行します。
FFmpeg SVN rev.23653から、
libfaadが削除されました。
HE-AAC v2デコーダーが本体に実装されたので、libfaadは不要になったらしいです。
古い記事を参考にしている方で、
Unknown option "--enable-libfaad".
というメッセージが出る場合は、
--enable-libfaad --disable-decoder=aac
は削除してください。
2012/05/26 追記テスト(make fate)を実行するためにffprobeが必要だったのですが、また必要なくなりました。
configureオプションに、--disable-ffprobe を追加しました。
$ ./configure --enable-gpl --enable-version3 --enable-avisynth --enable-fontconfig --enable-libass --enable-libbluray --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libcdio --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-librtmp --enable-libspeex --enable-libvorbis --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvpx --enable-libx264 --enable-libxvid --disable-ffplay --disable-ffprobe --disable-ffserver --enable-w32threads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse" --cpu=i686 --optflags="-O2 -finline-functions"
最適化レベルは、以前は、
--enable-small 有りの場合 -Os
--enable-small 無しの場合 -O3
しか選択できませんでしたが、FFmpeg Git rev.30971(4b87a08)から、
--optflags
というオプションが追加され、最適化レベルを変えられるようになりました。
--enable-small 有りだと、バイナリのサイズは小さくなるが、エンコード速度が落ちる。
--enable-small 無しだと、エンコード速度は速いが、バイナリのサイズがでかくなる。
--enable-small 無しで、--optflags="-O2 -finline-functions" だと、バイナリサイズがあまり大きくならないわりに、--enable-small 無しの場合とエンコード速度が大して変わらない。
ということで、色々試した結果、以下のようにしました。
--enable-small 無し
--optflags="-O2 -finline-functions" 追加
最適化オプションは、PCの環境により以下のようにしています。
※あくまでも一例ですので、もっと凝ってみたい方は、gccのマニュアルなどを見て研究されると良いかもしれません。
最適化無し版
--extra-cflags="-march=i686 -mtune=generic"
Pentium4最適化版
--extra-cflags="-mtune=pentium4 -mfpmath=sse -msse" --cpu=pentium4
Core2最適化版
--extra-cflags="-mtune=core2 -mfpmath=sse -msse" --cpu=i686
Athlon64最適化版
--extra-cflags="-mtune=athlon64 -mfpmath=sse -msse" --cpu=i686
Phenom最適化版
--extra-cflags="-mtune=amdfam10 -mfpmath=sse -msse" --cpu=i686
FFmpegのconfigureオプションに、
--cpu=athlon64
などど追加すると、そのCPUに特化した最適化が実行されますので、ご自分の環境でしか使用しない場合は、試してみると良いかもしれません。
2012/01/07 追記Core2最適化版、Athlon64最適化版、Phenom最適化版のconfigureオプションに、--cpu=i686 を追加しました。
Pentium4のconfigureオプションに、--cpu=pentium4 を追加しました。
configureの結果に以下のような違いがあります。
・「--cpu」オプション無し
CMOV enabled=no, CMOV is fast=no, EBX available=yes, EBP available=no
・「--cpu=i686」オプション追加
CMOV enabled=
yes, CMOV is fast=
yes, EBX available=yes, EBP available=
yes・「--cpu=pentium4」オプション追加
CMOV enabled=
yes, CMOV is fast=no, EBX available=yes, EBP available=
yes問題なければ、以下のようなメッセージが出ます。
source pathはコンパイル環境により異なります。
思ったよりも時間がかかりますので、気長に待ちましょう。
configureのメッセージを見る
install prefix /usr/local
source path .
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
AVX enabled yes
CMOV enabled yes
CMOV is fast yes
EBX available yes
EBP available yes
debug symbols yes
strip symbols yes
optimize for size no
optimizations yes
static yes
shared no
postprocessing support yes
new filter support yes
network support yes
threading support w32threads
SDL support no
Sun medialib support no
libdxva2 enabled no
libva enabled no
libvdpau enabled no
AVISynth enabled yes
libcelt enabled no
frei0r enabled no
gnutls enabled no
libaacplus enabled no
libass enabled yes
libcdio support yes
libcelt support no
libdc1394 support no
libdirac enabled no
libfaac enabled no
libgsm enabled yes
libmodplug 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
libstagefright-h264 enabled no
libtheora enabled yes
libutvideo enabled no
libv4l2 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
openal enabled no
openssl enabled no
zlib enabled yes
bzlib enabled yes
configureのメッセージを閉じる
(長いので中略)
License: GPL version 3 or later
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/07/31 追記
configureオプションを変更したため、全面的に書き直しました。
当サイトで配布しているバイナリは
--enable-w32threads
としていますが、
pthreadsを使用する手順は、以下の記事を参照してください。
FFmpegのコンパイル (2011/07/31) pthreads
2011/08/06 追記
libvpx-v0.9.7 w32threads版の記事へのリンクを追加しました。
libvpx-v0.9.7
2011/08/14 追記
パッチを更新しました。(rev.31873(658a8bb)〜)
ffmpeg-20110724.diff
ffmpeg-20110814.diff
2011/08/30 追記
パッチを更新しました。(rev.32154(caf63eb)〜)
ffmpeg-20110830.diff
2011/09/21 追記
パッチを更新しました。(rev.32736(0bbb1cd)〜)
ffmpeg-20110921.diff
2011/09/21 追記
個別のライブラリに、libcdio-0.83git を追加しました。
libcdio-0.83git
2011/09/21 追記
configureオプションに、--enable-libcdio を追加しました。
2011/09/25 追記
パッチを更新しました。(rev.33094(1aad9cd)〜)
libcdioで、エンコードの最後にクラッシュするのを修正しました。
ffmpeg-20110925.diff
2011/09/30 追記
パッチを更新しました。(rev.33094(ecf31a6)〜)
ffmpeg-20110929.diff
2011/10/14 追記
パッチを更新しました。(rev.33608(e91230a)〜)
libmodplug対応など。
ffmpeg-20111013.diff
2011/10/14 追記
個別のライブラリに、libmodplug-0.8.8.4 を追加しました。
libmodplug-0.8.8.4
2011/10/14 追記
configureオプションに、--enable-libmodplug を追加しました。
2011/10/26 追記
パッチを更新しました。(rev.34028(02ac6a6)〜)
ffmpeg-20111025.diff
2011/11/10 追記
パッチを更新しました。(rev.34615(26ae9a5)〜)
ffmpeg-20111110.diff
2011/11/11 追記
GnuTLSを、OpenSSLの代わりに使用する場合は、以下の記事を参照してください。
OpenSSLはGPL非互換なので、GnuTLSかPolarSSLをおすすめします。
gnutls-2.12.14
rtmpdump-2.4 GnuTLS版
2011/11/11 追記
polarssl-0.99-pre5 を polarssl-1.0.0 に修正しました。
2011/11/21 追記
パッチを更新しました。(rev.35051(50d6f81)〜)
ffmpeg-20111121.diff
2011/11/22 追記
パッチを更新しました。(rev.35063(2c28e26)〜)
ffmpeg-20111122.diff
2011/11/28 追記
パッチを更新しました。(rev.35260(2cf4bd7)〜)
ffmpeg-20111128.diff
2011/11/29 追記
configureオプション、--enable-postproc はデフォルトなので削除しました。
その他、順番をいくつか変更しました。
2011/12/02 追記
パッチを更新しました。(rev.35369(bba8975)〜)
ffmpeg-20111202.diff
2011/12/07 追記
パッチを更新しました。(rev.35482(b404ab9)〜)
libass追加用にconfigureを修正。など。
ffmpeg-20111206.diff
2011/12/07 追記
configureオプションに、--enable-libass と --enable-libfreetype を追加しました。
2011/12/07 追記
字幕ファイルを読み込むためのライブラリlibassを追加する場合、以下のライブラリが必要になります。
pkg-config_0.26-1_win32
libiconv-1.13.1
freetype-2.4.8
expat-2.0.1
fontconfig-2.8.0
fribidi-0.19.2
libass-0.10.0
2011/12/17 追記
libavformat/sbgdec.c に、MinGWで未定義のマクロ(ENOTSUP, ELOOP, EOVERFLOW)があってコンパイルできないため、configureオプションに、--disable-demuxer=sbg を追加しました。
2011/12/19 追記
パッチを更新しました。(rev.35931(1af0ace)〜)
libavformat/sbgdec.c のAVERROR(ENOTSUP)をAVERROR_PATCHWELCOMEに変更。など。
ffmpeg-20111219.diff
2011/12/19 追記
libavformat/sbgdec.c のエラーはパッチで対応したので、configureオプションの、--disable-demuxer=sbg を削除しました。
2011/12/21 追記
パッチを更新しました。(rev.36001(b0aaf30)〜)
libavformat/sbgdec.c は公式に修正されました。
ffmpeg-20111221.diff
2012/01/07 追記
パッチを更新しました。(rev.36539(4dfb74c)〜)
以下の記事についても、パッチを追加しました。
Latest FFMPEG 0.9 Issues
http://permalink.gmane.org/gmane.comp.video.ffmpeg.devel/138355
ffmpeg-20120107.diff
2012/01/07 追記
Core2最適化版、Athlon64最適化版、Phenom最適化版のconfigureオプションに、--cpu=i686 を追加しました。
Pentium4のconfigureオプションに、--cpu=pentium4 を追加しました。
configureの結果に以下のような違いがあります。
・「--cpu」オプション無し
CMOV enabled=no, CMOV is fast=no, EBX available=yes, EBP available=no
・「--cpu=i686」オプション追加
CMOV enabled=yes, CMOV is fast=yes, EBX available=yes, EBP available=yes
・「--cpu=pentium4」オプション追加
CMOV enabled=yes, CMOV is fast=no, EBX available=yes, EBP available=yes
2012/01/20 追記
パッチを更新しました。(rev.36936(4cf81d9)〜)
ffmpeg-20120120.diff
2012/01/29 追記
パッチを更新しました。(rev.37208(01fcbdf)〜)
ffmpeg-20120127.diff
2012/01/29 追記
個別のライブラリに、libvpx-v1.0.0 を追加しました。
libvpx-v1.0.0
旧版は削除しました。
libvpx-0.9.6(旧版)
libvpx-v0.9.7(旧版)
2012/01/30 追記
個別のライブラリに、gnutls-3.0.12 を追加しました。
gnutls-3.0.12
旧版は削除しました。
gnutls-2.12.14(旧版)
2012/01/30 追記
FFmpeg rev.37209以降の更新で、「-flags2」で設定していたものが独立したオプションになり、特にx264関連の設定が大幅に変わりました。
以前の「-flags2」の設定も使用できるように、Revert用のパッチを作りましたので、必要であれば適用してください。
ffmpeg-global_opts-20120130.diff
2012/02/12 追記
パッチを更新しました。(rev.37798(cd1c12b)〜)
ffmpeg-20120212.diff
2012/02/23 追記
「-flags2」用のパッチを更新しました。(rev.38090(eadd426)〜)
ffmpeg-global_opts-20120223.diff
2012/02/28 追記
「-flags2」用のパッチを更新しました。(rev.38307(e382288)〜)
ffmpeg-global_opts-20120228.diff
2012/03/02 追記
「-flags2」用のパッチを更新しました。(rev.38402(79ae084)〜)
ffmpeg-global_opts-20120302.diff
2012/03/03 追記
パッチを更新しました。(rev.38474(23a5bf9)〜)
ffmpeg-20120303.diff
2012/03/22 追記
「-flags2」用のパッチを更新しました。(rev.39033(967facb)〜)
ffmpeg-global_opts-20120322.diff
2012/04/17 追記
2012/04/13 以降、以下のようなエラーが出る場合があります。
library.mak:95: *** missing separator. Stop.
ファイルの最後に、改行コードが入っていないものがあるのが原因です。
その場合は、以下のパッチを適用してください。
ffmpeg-arch_objs-20120417.diff
$ patch -p1 < ffmpeg-arch_objs-20120417.diff
2012/04/22 追記
「-flags2」用のパッチを更新しました。(rev.40017(3194ab7)〜)
ffmpeg-global_opts-20120422.diff
2012/04/25 追記
パッチを更新しました。(rev.40098(44bd2f9)〜)
ffmpeg-20120425.diff
2012/04/25 追記
個別のライブラリに、libbluray-0.2.2 を追加しました。
libbluray-0.2.2
2012/04/25 追記
configureオプションに、--enable-fontconfig と --enable-libbluray を追加しました。
2012/05/02 追記
パッチを更新しました。(rev.40282(b197c1c)〜)
ffmpeg-20120502.diff
2012/05/02 追記
「-flags2」用のパッチを更新しました。(rev.40282(b197c1c)〜)
ffmpeg-global_opts-20120502.diff
2012/05/02 追記
改行が抜けているファイル用のパッチを更新しました。(rev.40282(b197c1c)〜)
ffmpeg-arch_objs-20120502.diff
2012/05/02 追記
FFmpegのDirectShow(dshow)を有効にするためには、MinGW-w64が必要です。
MinGWのmingwrtとw32apiの代わりに、MinGW-w64を使う方手順は、以下の記事を参照してください。
MinGW-w64 for win32 のインストール
2012/05/09 追記
改行が抜けているファイル用のパッチを更新しました。(rev.40508(b4178a3)〜)
ffmpeg-arch_objs-20120509.diff
2012/05/09 追記
rev.40508(b4178a3)以降、テスト(make fate)を実行するためにffprobeが必要になりました。
configureオプションの、--disable-ffprobe を削除しました。
2012/05/10 追記
パッチを更新しました。(rev.40546(61930bd)〜)
ffmpeg-20120510.diff
2012/05/10 追記
その場合は、以下のパッチを適用してください。
改行コードが原因のエラーが出るMakefileが増えるたびに、パッチを適用するのも面倒です。
ダウンロード(git clone)済みのソースコードがある場合、一旦Makefileを全部削除して、改行コードをLFにして作成し直せば、エラーが出なくなります。
$ echo 'Makefile eol=lf' > .gitattributes
$ find ./ -name 'Makefile' -print | xargs rm
$ git stash
その後、以下のパッチを適用します。
$ patch -p1 < ffmpeg-arch_objs-20120509.diff
2012/05/14 追記
「-flags2」用のパッチを更新しました。(rev.40630(6108e1b)〜)
ffmpeg-global_opts-20120514.diff
2012/05/18 追記
「-flags2」用のパッチを更新しました。(rev.40792(ae1ab82)〜)
ffmpeg-global_opts-20120518.diff
2012/05/26 追記
テスト(make fate)を実行するためにffprobeが必要だったのですが、また必要なくなりました。
configureオプションに、--disable-ffprobe を追加しました。
2012/06/02 追記
「-flags2」用のパッチを更新しました。(rev.41161(a1fc1d2)〜)
ffmpeg-global_opts-20120601.diff
2012/06/16 追記
「-flags2」用のパッチを更新しました。(rev.41595(15f8941)〜)
ffmpeg-global_opts-20120615.diff
2012/06/27 追記
パッチを更新しました。(rev.41840(e847f41)〜)
ffmpeg-20120627.diff
2012/07/10 追記
パッチを更新しました。(rev.42313(46a4707)〜)
ffmpeg-20120710.diff
2012/07/13 追記
パッチを更新しました。(rev.42471(81fe2e8)〜)
ffmpeg-20120713.diff
2012/07/15 追記
パッチを更新しました。(rev.42516(39afcf1)〜)
ffmpeg-20120715.diff
2012/07/22 追記
パッチを更新しました。(rev.42739(9e1508f)〜)
ffmpeg-20120722.diff
【更新履歴】を閉じる