FFmpeg(w32threads版)のビルド手順です。
MSYSとMinGWから準備する方は、1、2番の記事からお読みください。
MSYSとMinGWの準備ができている方は、3番の記事からお読みください。
1. MSYS環境のアップデート
2. MinGW環境のアップデート
FFmpegのDirectShow(dshow)を有効にするためには、mingwrtとw32apiの代わりに、MinGW-w64が必要です。
MinGW-w64を自分でビルドしてみたい方は、こちらを参考にしてください。
MinGW-w64のビルド (v3.1.0以降)
MinGW-w64を自分でビルドするのが面倒という方は、以下の記事を参照してください。
現在は、mingw-w64-v3系がメインですが、以下の記事では、mingw-w64-v1系をインストールします。
MinGW-w64 for win32 のインストール
FFmpegのconfigureと、その他のライブラリのconfigureでもpkg-configが必要なものがありますので、インストールしておいてください。
pkg-configのインストール
3. 個別のライブラリについて
以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より新しくなっているものもありますので、それぞれの記事で確認してください。
あまり使用しないライブラリもありますので、必要なライブラリだけインストールして、それをconfigureオプションでenableにすれば良いです。
2016/03/25 追記
個別のライブラリに、Kvazaar HEVC encoderと、XZ Utilsを追加しました。
rev.78199(e07e88c)以降、libvo-aacencはサポートされなくなりました。
nasm-2.11
yasm-1.2.0
zlib-1.2.8
bzip2-1.0.6
libbluray-0.5.0
libcaca-0.99.beta18
libcdio-0.92
libcdio-paranoia-10.2+0.90+1
game-music-emu-0.6.0
gsm-1.0.13
libilbc-1.1.1
kvazaar
libmodplug-0.8.8.4
lame-3.99.5
OpenH264
openjpeg-1.5.1
opus-1.1
opencore-amr-0.1.3
vid.stab-0.98
vo-amrwbenc-0.1.3
libogg-1.3.1
aoTuV Beta6.03 (libvorbis-1.3.4パッチ)
libtheora-1.1.1
speex-1.2rc1
twolame-0.3.13
libsoxr-0.1.1
libvpx-v1.3.0
wavpack-4.70.0
libwebp-0.4.0
x264 (make fprofiled)
x265
xvidcore-1.4
xz-5.2.2
PolarSSLを使用する場合は、以下の記事を参照してください。
polarssl-1.3.4
rtmpdump-2.4 PolarSSL版
GnuTLSを、PolarSSLの代わりに使用する場合は、以下の記事を参照してください。
当サイトでは、以前はPolarSSLを使用していましたが、2015/08/16以降、GnuTLSを使用しています。
gmp-6.1.0
gnutls-3.4.10
rtmpdump-2.4 GnuTLS版
OpenSSLを使用する場合は、以下の記事を参照してください。
OpenSSLはGPL非互換なので、GnuTLSかPolarSSLをおすすめします。
openssl-1.0.1f
rtmpdump-2.4
字幕ファイルを読み込むためのライブラリlibassを追加する場合は、以下のライブラリが必要になります。
pkg-config_0.28-1_win32
libiconv-1.14
freetype-2.5.2
expat-2.1.0
fontconfig-2.11.0
fribidi-0.19.6
libass-0.10.2
FFplayをビルドする場合は、SDLが必要になります。
デフォルトでffplayはenableになっていますので、configureオプションに「--disable-ffplay」がある場合は削除してください。
SDL-1.2.15
SDLをインストールしていると、自動でSDLがenableになります。
SDLをインストールしていてもFFmpegでdisableにしたい場合は、configureオプションに「--disable-outdev=sdl」を追加してください。
「--disable-outdev=sdl」を付けてSDLがdisableになるのはFFmpegだけで、FFplayには影響ありません。
4. FFmpegのビルド
FFmpegは、以下の場所にあります。
http://ffmpeg.org/
ソースコードはGitで管理されています。
Gitをインストールして、MSYSから、以下のコマンドでソースコードを入手してください。
$ git clone git://source.ffmpeg.org/ffmpeg.git
または、
Get FFmpeg
http://ffmpeg.org/download.html
Extra repositoriesの、一番上のSnapshotのリンクからソースコードをダウンロードできます。
ファイルは、ffmpeg-HEAD-(Gitハッシュ値).tar.gz という形式になっていますので、そのファイル名に読み替えてください。
ダウンロードしたファイルは、tarで解凍できます。
$ tar xzf ffmpeg-HEAD-9125383.tar.gz
解凍したら、ソースコードのあるディレクトリに移動します。
$ cd ffmpeg-HEAD-9125383
Gitでソースコードをダウンロードした場合は、
$ cd ffmpeg
2012/04/13 以降、makeすると以下のようなエラーが出る場合があります。
library.mak:95: *** missing separator. Stop.
ダウンロード(git clone)済みのソースコードがある場合、一旦Makefileを全部削除して、改行コードをLFにして作成し直せば、エラーが出なくなります。
$ echo 'Makefile eol=lf' >> .gitattributes
$ find ./ -name 'Makefile' -print | xargs rm
$ git checkout -f
次に、configure、その他諸々の一括パッチを適用します。
2018/03/11 追記
パッチを更新しました。(rev.90220(69995a94d8)〜)
ffmpeg-20180311.diff
FFmpeg rev.37209以降の更新で、「-flags2」で設定していたものが独立したオプションになり、特にx264関連の設定が大幅に変わりました。
以前の「-flags2」の設定も使用できるように、Revert用のパッチを作りましたので、必要であれば適用してください。
2017/11/26 追記
「-flags2」用のパッチを更新しました。(rev.88091(c17f638565)〜)
ffmpeg-global_opts-20171126.diff
$ patch -p1 < ffmpeg-20180311.diff
$ patch -p1 < ffmpeg-global_opts-20171126.diff
パッチを適用したら、configureを実行します。
2017/10/22 追記
configureオプションの「--disable-outdev=sdl」を削除しました。
$ ./configure --enable-gpl --enable-version3 --enable-avisynth --enable-fontconfig --enable-libass --enable-libbluray --enable-libcaca --enable-libcdio --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-opengl --enable-w32threads --disable-debug --pkg-config-flags=--static --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse" --optflags="-O2 -finline-functions"
配布用に、できる限りのライブラリをenableにしていますが、自分用の場合は必要なものだけenableにすれば良いと思います。
FFplay、FFprobeはデフォルトでenableになっていますので、不要な場合は、それぞれ「--disable-ffplay」「--disable-ffprobe」を追加してください。
FFserverは、MinGW環境に実装されていないincludeファイルなどがあり、configureオプションにかかわらずビルドできません。
debug symbolsはgdbなどでデバッグする時に必要になりますが、デバッグすることはほとんどないため「--disable-debug」を付けています。
最適化レベルは、以前は、
--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の環境により以下のようにしています。
最適化無し版のconfigureオプションのみ、「--enable-memalign-hack」を追加しています。
これにより、Windows2000でも使えるようになるらしいです。
※あくまでも一例ですので、もっと凝ってみたい方は、gccのマニュアルなどを見て研究されると良いかもしれません。
最適化無し版
--extra-cflags="-march=i686 -mtune=generic" --enable-memalign-hack
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に特化した最適化が実行されますので、ご自分の環境でしか使用しない場合は、試してみると良いかもしれません。
その他、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
C library mingw64
ARCH x86 (i686)
big-endian no
runtime cpu detection yes
yasm yes
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AVX enabled yes
XOP enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast yes
EBX available yes
EBP available yes
debug symbols no
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
safe bitstream reader yes
SDL support yes
opencl enabled no
libzvbi enabled no
texi2html enabled no
perl enabled yes
pod2man enabled yes
makeinfo enabled yes
External libraries:
avisynth libmp3lame libvo_aacenc
bzlib libopencore_amrnb libvo_amrwbenc
fontconfig libopencore_amrwb libvorbis
iconv libopenjpeg libvpx
libass libopus libwavpack
libbluray librtmp libwebp
libcaca libsoxr libx264
libcdio libspeex libx265
libfreetype libtheora libxvid
libgme libtwolame opengl
libgsm libvidstab zlib
libmodplug
configureのメッセージを閉じる
(長いので中略)
License: GPL version 3 or later
Creating config.mak, config.h, and doc/config.texi...
その後、
$ make
CPUに余力がある場合は、「-j」でパラレルmakeできます。
3パラの場合は、以下のように指定します。
あまり増やしすぎてもかえって効率が悪くなりますので、CPUによって適当な数値を見つけてください。
$ make -j3
ffmpeg.exe が出来ていれば完了です。
【補足】
自分用の場合は、再配布を考えなくても良いので、libfaac入りのFFmpegをビルドすることもできます。
現在は、libfaacより音質が良いと評判のfdk-aacがありますので、fdk-aacをおすすめします。
追加で、fdk-aacをコンパイル&インストールします。
fdk-aacのコンパイル&インストール
configureオプションの適当な所に、
--enable-nonfree
--enable-libfdk-aac
を追加します。
configureメッセージの、External libraries: に
libfdk-aac
が追加されていれば、後はmakeして完了です。
FFmpegのエンコードオプションで、
-acodec libfdk_aac
が使えるようになります。
当サイトで配布しているFFmpegは配布用のため、libfaac、libfdk-aacは無効にしています。
【更新履歴】を見る
2014/02/17 追記
ライブラリの追加など、全面的に書き直しました。
2014/02/24 追記
libx265側でいくつかパラメータ名が変更されたのですが、それに対応した更新がまだありませんので、以下のパッチを適用してください。
ffmpeg-libx265-20140220.diff
$ patch -p1 < ffmpeg-libx265-20140220.diff
2014/02/24 追記
個別のライブラリに、libilbc-1.1.1 を追加しました。
libilbc-1.1.1
2014/02/24 追記
configureオプションに「--enable-libilbc 」を追加しました。
2014/02/25 追記
libx265のパッチは不要になりました。
$ patch -p1 < ffmpeg-libx265-20140220.diff
2014/03/12 追記
パッチを更新しました。(rev.61255(5968415)〜)
ffmpeg-20131221.diff
ffmpeg-20140312.diff
2014/03/13 追記
パッチを更新しました。(rev.61290(3a05d7a)〜)
ffmpeg-20140313.diff
2014/03/28 追記
パッチを更新しました。(rev.61886(64b7914)〜)
ffmpeg-20140328.diff
2014/03/28 追記
「-flags2」用のパッチを更新しました。(rev.61886(64b7914)〜)
ffmpeg-global_opts-20131114.diff
ffmpeg-global_opts-20140328.diff
2014/04/02 追記
「-flags2」用のパッチを更新しました。(rev.62025(a0cf877)〜)
ffmpeg-global_opts-20140402.diff
2014/04/08 追記
libx265側で削除されたパラメータがあるのですが、それに対応した更新がまだありませんので、以下のパッチを適用してください。
ffmpeg-libx265-20140408.diff
$ patch -p1 < ffmpeg-libx265-20140408.diff
2014/04/11 追記
libx265側で削除されたパラメータに対応した更新がありましたので、パッチを削除しました。
$ patch -p1 < ffmpeg-libx265-20140408.diff
2014/05/02 追記
「-flags2」用のパッチを更新しました。(rev.62889(58f4d12)〜)
ffmpeg-global_opts-20140502.diff
2014/07/22 追記
パッチを更新しました。(rev.64845(2c5c7f1)〜)
ffmpeg-20140722.diff
2014/07/22 追記
configureオプションに「--enable-libfribidi」を追加しました。
2014/08/09 追記
「-flags2」用のパッチを更新しました。(rev.65223(9400603)〜)
ffmpeg-global_opts-20140809.diff
2014/08/20 追記
パッチを更新しました。(rev.65452(70b8668)〜)
ffmpeg-20140820.diff
2014/08/20 追記
「-flags2」用のパッチを更新しました。(rev.65721(b0352b1)〜)
ffmpeg-global_opts-20140820.diff
2014/08/29 追記
「-flags2」用のパッチを更新しました。(rev.65721(b0352b1)〜)
libavcodec/version.h を修正しました。
ffmpeg-global_opts-20140829.diff
2014/09/04 追記
パッチを更新しました。(rev.66013(3695278)〜)
ffmpeg-20140904.diff
2014/09/05 追記
パッチを更新しました。(rev.66013(3695278)〜)
ffmpeg-20140905.diff
2014/09/25 追記
パッチを更新しました。(rev.66416(fb01a18)〜)
ffmpeg-20140925.diff
2014/10/03 追記
「-flags2」用のパッチを更新しました。(rev.66574(cdd6f05)〜)
ffmpeg-global_opts-20141003.diff
2014/10/13 追記
「-flags2」用のパッチを更新しました。(rev.66732(923a242)〜)
ffmpeg-global_opts-20141013.diff
2014/11/18 追記
「-flags2」用のパッチを更新しました。(rev.67729(745730c)〜)
ffmpeg-global_opts-20141118.diff
2014/12/12 追記
パッチを更新しました。(rev.68211(4a0b1d9)〜)
ffmpeg-20141212.diff
2014/12/12 追記
.gitattributes へのリダイレクトを、上書きから追記に変更しました。
git stash を git checkout -f に変更しました。
$ echo 'Makefile eol=lf' > .gitattributes
$ echo 'Makefile eol=lf' >> .gitattributes
$ find ./ -name 'Makefile' -print | xargs rm
$ git stash
$ git checkout -f
2015/01/21 追記
パッチを更新しました。(rev.69105(4184d34)〜)
ffmpeg-20150121.diff
2015/01/21 追記
パッチを更新しました。(rev.69105(4184d34)〜)
libavcodec/libopenh264enc.c の修正を追加しました。
ffmpeg-20150121-2.diff
2015/01/22 追記
個別のライブラリに、OpenH264 を追加しました。
OpenH264
2015/01/22 追記
configureオプションに「--enable-libopenh264」「--disable-dxva2」を追加しました。
2015/02/15 追記
パッチを更新しました。(rev.69700(2384933)〜)
ffmpeg-20150215.diff
2015/02/22 追記
パッチを更新しました。(rev.69955(841e9f4)〜)
ffmpeg-20150222.diff
2015/03/01 追記
パッチを更新しました。(rev.70116(0425e16)〜)
ffmpeg-20150301.diff
2015/03/07 追記
パッチを更新しました。(rev.70475(39becc9)〜)
ffmpeg-20150307.diff
2015/05/28 追記
「-flags2」用のパッチを更新しました。(rev.72286(d9b264b)〜)
ffmpeg-global_opts-20150528.diff
2015/07/31 追記
「-flags2」用のパッチを更新しました。(rev.74157(bf2474c)〜)
ffmpeg-global_opts-20150731.diff
2015/08/14 追記
「-flags2」用のパッチを更新しました。(rev.74157(bf2474c)〜)
ffmpeg-global_opts-20150814.diff
2015/08/30 追記
「-flags2」用のパッチを更新しました。(rev.74516(99b9f01)〜)
ffmpeg-global_opts-20150830.diff
2015/09/06 追記
「-flags2」用のパッチを更新しました。(rev.74895(b27ddff)〜)
ffmpeg-global_opts-20150906.diff
2015/09/07 追記
「-flags2」用のパッチを更新しました。(rev.74942(590ea32)〜)
ffmpeg-global_opts-20150907.diff
2015/09/17 追記
「-flags2」用のパッチを更新しました。(rev.75077(309fb6b)〜)
ffmpeg-global_opts-20150917.diff
2016/03/25 追記
パッチを更新しました。(rev.78161(30c1bdb)〜)
ffmpeg-20160325.diff
2016/03/25 追記
「-flags2」用のパッチを更新しました。(rev.78219(b552f3a)〜)
ffmpeg-global_opts-20160325.diff
2016/03/25 追記
OpenH264 v1.6用のパッチを追加しました。
ffmpeg-openh264-1.6.diff
こちらの記事のパッチをまとめたものです。
libavcodec/version.hのパッチは除いています。
http://ffmpeg.org/pipermail/ffmpeg-devel/2016-March/190980.html
http://ffmpeg.org/pipermail/ffmpeg-devel/2016-March/190984.html
http://ffmpeg.org/pipermail/ffmpeg-devel/2016-March/190982.html
$ patch -p1 < ffmpeg-openh264-1.6.diff
2016/03/25 追記
configureオプションに「--enable-libkvazaar」「--pkg-config-flags=--static」を追加しました。
rev.78199(e07e88c)以降、libvo-aacencはサポートされなくなりましたので、「--enable-libvo-aacenc」を削除しました。
2016/03/25 追記
以下の文章を削除、GnuTLSの記事のリンクを修正、GMPを追加しました。
当サイトでは、PolarSSLを使用しています。
GnuTLSを、PolarSSLの代わりに使用する場合は、以下の記事を参照してください。
当サイトでは、以前はPolarSSLを使用していましたが、2015/08/16以降、GnuTLSを使用しています。
gnutls-3.2.11
gmp-6.1.0
gnutls-3.4.10
2016/03/25 追記
個別のライブラリに、Kvazaar HEVC encoderと、XZ Utilsを追加しました。
rev.78199(e07e88c)以降、libvo-aacencはサポートされなくなりました。
kvazaar
xz-5.2.2
2016/04/16 追記
「-flags2」用のパッチを更新しました。(rev.79286(6f69f7a)〜)
ffmpeg-global_opts-20160415.diff
2016/04/16 追記
「-flags2」用のパッチを更新しました。(rev.79460(21acc4d)〜)
ffmpeg-global_opts-20160416.diff
2016/05/26 追記
パッチを更新しました。(rev.79913(96d6160)〜)
make fate(FFmpegのtest)の、エラー対策用に入れていたパッチ部分を削除しました。
make fateは、以下のように実行できます。
make fate CC_C="-c -Umain"
ffmpeg-20160526.diff
2016/05/28 追記
FFmpegのコンパイルというより、ビルドと言うほうがふさわしいため、タイトルなどを修正しました。
FFmpeg(w32threads版)のコンパイル手順です。
FFmpeg(w32threads版)のビルド手順です。
4. FFmpegのコンパイル
4. FFmpegのビルド
2016/06/10 追記
make fateの件は修正されました。
make fateは、以下のように実行できます。
make fate CC_C="-c -Umain"
2016/08/12 追記
OpenH264 v1.6もサポートされましたので、パッチと説明文を削除しました。
http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=293676c476733e81d7b596736add6cd510eb6960
2016/08/12 追記
configureオプションの「--disable-dxva2」を削除しました。
--enable-w32threads --disable-dxva2 --disable-debug
2016/09/29 追記
パッチを更新しました。(rev.81760(2134499)〜)
ffmpeg-20160929.diff
2016/12/08 追記
「-flags2」用のパッチを更新しました。(rev.82564(7289aa2d71)〜)
ffmpeg-global_opts-20161208.diff
2017/03/26 追記
パッチを更新しました。(rev.84234(4563a86f01)〜)
ffmpeg-20170326.diff
2017/04/23 追記
パッチを更新しました。(rev.85557(9bf3d84089)〜)
ffmpeg-20170423.diff
2017/10/22 追記
パッチを更新しました。(rev.87641(fd5f4ac081)〜)
ffmpeg-20171022.diff
2017/10/22 追記
「-flags2」用のパッチを更新しました。(rev.88037(417d473bde)〜)
ffmpeg-global_opts-20171022.diff
2017/10/22 追記
configureオプションの「--disable-outdev=sdl」を削除しました。
--enable-opengl --disable-outdev=sdl --enable-w32threads
2017/11/26 追記
「-flags2」用のパッチを更新しました。(rev.88091(c17f638565)〜)
ffmpeg-global_opts-20171126.diff
2018/03/11 追記
パッチを更新しました。(rev.90220(69995a94d8)〜)
ffmpeg-20180311.diff
【更新履歴】を閉じる
FFmpegは、以下の場所にあります。
http://ffmpeg.org/
ソースコードはGitで管理されています。
Gitをインストールして、MSYSから、以下のコマンドでソースコードを入手してください。
$ git clone git://source.ffmpeg.org/ffmpeg.git
または、
Get FFmpeg
http://ffmpeg.org/download.html
Extra repositoriesの、一番上のSnapshotのリンクからソースコードをダウンロードできます。
ファイルは、ffmpeg-HEAD-(Gitハッシュ値).tar.gz という形式になっていますので、そのファイル名に読み替えてください。
ダウンロードしたファイルは、tarで解凍できます。
$ tar xzf ffmpeg-HEAD-9125383.tar.gz
解凍したら、ソースコードのあるディレクトリに移動します。
$ cd ffmpeg-HEAD-9125383
Gitでソースコードをダウンロードした場合は、
$ cd ffmpeg
2012/04/13 以降、makeすると以下のようなエラーが出る場合があります。
library.mak:95: *** missing separator. Stop.
ダウンロード(git clone)済みのソースコードがある場合、一旦Makefileを全部削除して、改行コードをLFにして作成し直せば、エラーが出なくなります。
$ echo 'Makefile eol=lf' >> .gitattributes
$ find ./ -name 'Makefile' -print | xargs rm
$ git checkout -f
次に、configure、その他諸々の一括パッチを適用します。
2018/03/11 追記
パッチを更新しました。(rev.90220(69995a94d8)〜)
ffmpeg-20180311.diff
FFmpeg rev.37209以降の更新で、「-flags2」で設定していたものが独立したオプションになり、特にx264関連の設定が大幅に変わりました。
以前の「-flags2」の設定も使用できるように、Revert用のパッチを作りましたので、必要であれば適用してください。
2017/11/26 追記
「-flags2」用のパッチを更新しました。(rev.88091(c17f638565)〜)
ffmpeg-global_opts-20171126.diff
$ patch -p1 < ffmpeg-20180311.diff
$ patch -p1 < ffmpeg-global_opts-20171126.diff
パッチを適用したら、configureを実行します。
2017/10/22 追記
configureオプションの「--disable-outdev=sdl」を削除しました。
$ ./configure --enable-gpl --enable-version3 --enable-avisynth --enable-fontconfig --enable-libass --enable-libbluray --enable-libcaca --enable-libcdio --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-opengl --enable-w32threads --disable-debug --pkg-config-flags=--static --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse" --optflags="-O2 -finline-functions"
配布用に、できる限りのライブラリをenableにしていますが、自分用の場合は必要なものだけenableにすれば良いと思います。
FFplay、FFprobeはデフォルトでenableになっていますので、不要な場合は、それぞれ「--disable-ffplay」「--disable-ffprobe」を追加してください。
FFserverは、MinGW環境に実装されていないincludeファイルなどがあり、configureオプションにかかわらずビルドできません。
debug symbolsはgdbなどでデバッグする時に必要になりますが、デバッグすることはほとんどないため「--disable-debug」を付けています。
最適化レベルは、以前は、
--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の環境により以下のようにしています。
最適化無し版のconfigureオプションのみ、「--enable-memalign-hack」を追加しています。
これにより、Windows2000でも使えるようになるらしいです。
※あくまでも一例ですので、もっと凝ってみたい方は、gccのマニュアルなどを見て研究されると良いかもしれません。
最適化無し版
--extra-cflags="-march=i686 -mtune=generic" --enable-memalign-hack
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に特化した最適化が実行されますので、ご自分の環境でしか使用しない場合は、試してみると良いかもしれません。
その他、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
C library mingw64
ARCH x86 (i686)
big-endian no
runtime cpu detection yes
yasm yes
MMX enabled yes
MMXEXT enabled yes
3DNow! enabled yes
3DNow! extended enabled yes
SSE enabled yes
SSSE3 enabled yes
AVX enabled yes
XOP enabled yes
FMA4 enabled yes
i686 features enabled yes
CMOV is fast yes
EBX available yes
EBP available yes
debug symbols no
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
safe bitstream reader yes
SDL support yes
opencl enabled no
libzvbi enabled no
texi2html enabled no
perl enabled yes
pod2man enabled yes
makeinfo enabled yes
External libraries:
avisynth libmp3lame libvo_aacenc
bzlib libopencore_amrnb libvo_amrwbenc
fontconfig libopencore_amrwb libvorbis
iconv libopenjpeg libvpx
libass libopus libwavpack
libbluray librtmp libwebp
libcaca libsoxr libx264
libcdio libspeex libx265
libfreetype libtheora libxvid
libgme libtwolame opengl
libgsm libvidstab zlib
libmodplug
configureのメッセージを閉じる
(長いので中略)
License: GPL version 3 or later
Creating config.mak, config.h, and doc/config.texi...
その後、
$ make
CPUに余力がある場合は、「-j」でパラレルmakeできます。
3パラの場合は、以下のように指定します。
あまり増やしすぎてもかえって効率が悪くなりますので、CPUによって適当な数値を見つけてください。
$ make -j3
ffmpeg.exe が出来ていれば完了です。
【補足】
自分用の場合は、再配布を考えなくても良いので、libfaac入りのFFmpegをビルドすることもできます。
現在は、libfaacより音質が良いと評判のfdk-aacがありますので、fdk-aacをおすすめします。
追加で、fdk-aacをコンパイル&インストールします。
fdk-aacのコンパイル&インストール
configureオプションの適当な所に、
--enable-nonfree
--enable-libfdk-aac
を追加します。
configureメッセージの、External libraries: に
libfdk-aac
が追加されていれば、後はmakeして完了です。
FFmpegのエンコードオプションで、
-acodec libfdk_aac
が使えるようになります。
当サイトで配布しているFFmpegは配布用のため、libfaac、libfdk-aacは無効にしています。
【更新履歴】を見る
2014/02/17 追記
ライブラリの追加など、全面的に書き直しました。
2014/02/24 追記
libx265側でいくつかパラメータ名が変更されたのですが、それに対応した更新がまだありませんので、以下のパッチを適用してください。
ffmpeg-libx265-20140220.diff
$ patch -p1 < ffmpeg-libx265-20140220.diff
2014/02/24 追記
個別のライブラリに、libilbc-1.1.1 を追加しました。
libilbc-1.1.1
2014/02/24 追記
configureオプションに「--enable-libilbc 」を追加しました。
2014/02/25 追記
libx265のパッチは不要になりました。
2014/03/12 追記
パッチを更新しました。(rev.61255(5968415)〜)
ffmpeg-20140312.diff
2014/03/13 追記
パッチを更新しました。(rev.61290(3a05d7a)〜)
ffmpeg-20140313.diff
2014/03/28 追記
パッチを更新しました。(rev.61886(64b7914)〜)
ffmpeg-20140328.diff
2014/03/28 追記
「-flags2」用のパッチを更新しました。(rev.61886(64b7914)〜)
ffmpeg-global_opts-20140328.diff
2014/04/02 追記
「-flags2」用のパッチを更新しました。(rev.62025(a0cf877)〜)
ffmpeg-global_opts-20140402.diff
2014/04/08 追記
libx265側で削除されたパラメータがあるのですが、それに対応した更新がまだありませんので、以下のパッチを適用してください。
ffmpeg-libx265-20140408.diff
$ patch -p1 < ffmpeg-libx265-20140408.diff
2014/04/11 追記
libx265側で削除されたパラメータに対応した更新がありましたので、パッチを削除しました。
2014/05/02 追記
「-flags2」用のパッチを更新しました。(rev.62889(58f4d12)〜)
ffmpeg-global_opts-20140502.diff
2014/07/22 追記
パッチを更新しました。(rev.64845(2c5c7f1)〜)
ffmpeg-20140722.diff
2014/07/22 追記
configureオプションに「--enable-libfribidi」を追加しました。
2014/08/09 追記
「-flags2」用のパッチを更新しました。(rev.65223(9400603)〜)
ffmpeg-global_opts-20140809.diff
2014/08/20 追記
パッチを更新しました。(rev.65452(70b8668)〜)
ffmpeg-20140820.diff
2014/08/20 追記
「-flags2」用のパッチを更新しました。(rev.65721(b0352b1)〜)
ffmpeg-global_opts-20140820.diff
2014/08/29 追記
「-flags2」用のパッチを更新しました。(rev.65721(b0352b1)〜)
libavcodec/version.h を修正しました。
ffmpeg-global_opts-20140829.diff
2014/09/04 追記
パッチを更新しました。(rev.66013(3695278)〜)
ffmpeg-20140904.diff
2014/09/05 追記
パッチを更新しました。(rev.66013(3695278)〜)
ffmpeg-20140905.diff
2014/09/25 追記
パッチを更新しました。(rev.66416(fb01a18)〜)
ffmpeg-20140925.diff
2014/10/03 追記
「-flags2」用のパッチを更新しました。(rev.66574(cdd6f05)〜)
ffmpeg-global_opts-20141003.diff
2014/10/13 追記
「-flags2」用のパッチを更新しました。(rev.66732(923a242)〜)
ffmpeg-global_opts-20141013.diff
2014/11/18 追記
「-flags2」用のパッチを更新しました。(rev.67729(745730c)〜)
ffmpeg-global_opts-20141118.diff
2014/12/12 追記
パッチを更新しました。(rev.68211(4a0b1d9)〜)
ffmpeg-20141212.diff
2014/12/12 追記
.gitattributes へのリダイレクトを、上書きから追記に変更しました。
git stash を git checkout -f に変更しました。
$ echo 'Makefile eol=lf' >> .gitattributes
$ find ./ -name 'Makefile' -print | xargs rm
$ git checkout -f
2015/01/21 追記
パッチを更新しました。(rev.69105(4184d34)〜)
ffmpeg-20150121.diff
2015/01/21 追記
パッチを更新しました。(rev.69105(4184d34)〜)
libavcodec/libopenh264enc.c の修正を追加しました。
ffmpeg-20150121-2.diff
2015/01/22 追記
個別のライブラリに、OpenH264 を追加しました。
OpenH264
2015/01/22 追記
configureオプションに「--enable-libopenh264」「--disable-dxva2」を追加しました。
2015/02/15 追記
パッチを更新しました。(rev.69700(2384933)〜)
ffmpeg-20150215.diff
2015/02/22 追記
パッチを更新しました。(rev.69955(841e9f4)〜)
ffmpeg-20150222.diff
2015/03/01 追記
パッチを更新しました。(rev.70116(0425e16)〜)
ffmpeg-20150301.diff
2015/03/07 追記
パッチを更新しました。(rev.70475(39becc9)〜)
ffmpeg-20150307.diff
2015/05/28 追記
「-flags2」用のパッチを更新しました。(rev.72286(d9b264b)〜)
ffmpeg-global_opts-20150528.diff
2015/07/31 追記
「-flags2」用のパッチを更新しました。(rev.74157(bf2474c)〜)
ffmpeg-global_opts-20150731.diff
2015/08/14 追記
「-flags2」用のパッチを更新しました。(rev.74157(bf2474c)〜)
ffmpeg-global_opts-20150814.diff
2015/08/30 追記
「-flags2」用のパッチを更新しました。(rev.74516(99b9f01)〜)
ffmpeg-global_opts-20150830.diff
2015/09/06 追記
「-flags2」用のパッチを更新しました。(rev.74895(b27ddff)〜)
ffmpeg-global_opts-20150906.diff
2015/09/07 追記
「-flags2」用のパッチを更新しました。(rev.74942(590ea32)〜)
ffmpeg-global_opts-20150907.diff
2015/09/17 追記
「-flags2」用のパッチを更新しました。(rev.75077(309fb6b)〜)
ffmpeg-global_opts-20150917.diff
2016/03/25 追記
パッチを更新しました。(rev.78161(30c1bdb)〜)
ffmpeg-20160325.diff
2016/03/25 追記
「-flags2」用のパッチを更新しました。(rev.78219(b552f3a)〜)
ffmpeg-global_opts-20160325.diff
2016/03/25 追記
OpenH264 v1.6用のパッチを追加しました。
ffmpeg-openh264-1.6.diff
こちらの記事のパッチをまとめたものです。
libavcodec/version.hのパッチは除いています。
http://ffmpeg.org/pipermail/ffmpeg-devel/2016-March/190980.html
http://ffmpeg.org/pipermail/ffmpeg-devel/2016-March/190984.html
http://ffmpeg.org/pipermail/ffmpeg-devel/2016-March/190982.html
$ patch -p1 < ffmpeg-openh264-1.6.diff
2016/03/25 追記
configureオプションに「--enable-libkvazaar」「--pkg-config-flags=--static」を追加しました。
rev.78199(e07e88c)以降、libvo-aacencはサポートされなくなりましたので、「--enable-libvo-aacenc」を削除しました。
2016/03/25 追記
以下の文章を削除、GnuTLSの記事のリンクを修正、GMPを追加しました。
GnuTLSを、PolarSSLの代わりに使用する場合は、以下の記事を参照してください。
当サイトでは、以前はPolarSSLを使用していましたが、2015/08/16以降、GnuTLSを使用しています。
gmp-6.1.0
gnutls-3.4.10
2016/03/25 追記
個別のライブラリに、Kvazaar HEVC encoderと、XZ Utilsを追加しました。
rev.78199(e07e88c)以降、libvo-aacencはサポートされなくなりました。
kvazaar
xz-5.2.2
2016/04/16 追記
「-flags2」用のパッチを更新しました。(rev.79286(6f69f7a)〜)
ffmpeg-global_opts-20160415.diff
2016/04/16 追記
「-flags2」用のパッチを更新しました。(rev.79460(21acc4d)〜)
ffmpeg-global_opts-20160416.diff
2016/05/26 追記
パッチを更新しました。(rev.79913(96d6160)〜)
make fate(FFmpegのtest)の、エラー対策用に入れていたパッチ部分を削除しました。
make fateは、以下のように実行できます。
make fate CC_C="-c -Umain"
ffmpeg-20160526.diff
2016/05/28 追記
FFmpegのコンパイルというより、ビルドと言うほうがふさわしいため、タイトルなどを修正しました。
FFmpeg(w32threads版)のビルド手順です。
4. FFmpegのビルド
2016/06/10 追記
make fateの件は修正されました。
2016/08/12 追記
OpenH264 v1.6もサポートされましたので、パッチと説明文を削除しました。
http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=293676c476733e81d7b596736add6cd510eb6960
2016/08/12 追記
configureオプションの「--disable-dxva2」を削除しました。
--enable-w32threads
2016/09/29 追記
パッチを更新しました。(rev.81760(2134499)〜)
ffmpeg-20160929.diff
2016/12/08 追記
「-flags2」用のパッチを更新しました。(rev.82564(7289aa2d71)〜)
ffmpeg-global_opts-20161208.diff
2017/03/26 追記
パッチを更新しました。(rev.84234(4563a86f01)〜)
ffmpeg-20170326.diff
2017/04/23 追記
パッチを更新しました。(rev.85557(9bf3d84089)〜)
ffmpeg-20170423.diff
2017/10/22 追記
パッチを更新しました。(rev.87641(fd5f4ac081)〜)
ffmpeg-20171022.diff
2017/10/22 追記
「-flags2」用のパッチを更新しました。(rev.88037(417d473bde)〜)
ffmpeg-global_opts-20171022.diff
2017/10/22 追記
configureオプションの「--disable-outdev=sdl」を削除しました。
--enable-opengl
2017/11/26 追記
「-flags2」用のパッチを更新しました。(rev.88091(c17f638565)〜)
ffmpeg-global_opts-20171126.diff
2018/03/11 追記
パッチを更新しました。(rev.90220(69995a94d8)〜)
ffmpeg-20180311.diff
【更新履歴】を閉じる