2014/02/17 追記ライブラリの追加やconfigureオプションの変更など、全面的に書き直しました。
pthreads版のFFmpegについては、最近あまり動作確認をしていません。
今後の変更は、新しい記事の方を参照してください。
FFmpegのコンパイル (2014/02/17)それでは、FFmpeg(pthreads版)のコンパイルです。
MSYSとMinGWから準備する方は、1、2番の記事からお読みください。
MSYSとMinGWの準備ができている方は、3番の記事からお読みください。
1. MSYS環境のアップデート2. MinGW環境のアップデートFFmpegのDirectShow(dshow)を有効にするためには、MinGW-w64が必要です。
MinGWのmingwrtとw32apiの代わりに、MinGW-w64を使う方手順は、以下の記事を参照してください。
MinGW-w64 for win32 のインストールMinGW-w64をインストールすると、winpthreadsというPthreadsライブラリが使用できます。
winpthreadsのインストール手順は、以下の記事を参照してください。
winpthreadsのコンパイル&インストール2013/10/14 追記MinGW-w64も自分でビルドしてみたい方は、こちらも参考にしてください。
MinGW-w64 v3のビルド2013/07/29 追記FFmpegのconfigureと、その他のライブラリのconfigureでもpkg-configが必要なものがありますので、インストールしておいてください。
pkg-configのインストール3. 個別のライブラリについて以下のライブラリは、あらかじめインストールしておいてください。
この記事を書いた時点より新しくなっているものもありますので、それぞれの記事で確認してください。
nasm-2.10.09yasm-1.2.0pthreads-w32 release 2.9.1winpthreads (MinGW-w64) ※pthreads-w32と共存できません。
zlib-1.2.8bzip2-1.0.6libbluray-0.3.0libcaca-0.99.beta18libcdio-0.90libcdio-paranoia-10.2+0.90+1gsm-1.0.13libmodplug-0.8.8.4lame-3.99.5openjpeg-1.5.1opus-1.0.3opencore-amr-0.1.3vid.stab-0.961vo-aacenc-0.1.3vo-amrwbenc-0.1.3libogg-1.3.1aoTuV Beta6.03 (libvorbis-1.3.3パッチ)libtheora-1.1.1speex-1.2rc1twolame-0.3.13libsoxr-0.1.1libvpx-v1.2.0wavpack-4.60.1x264 (make fprofiled)xvidcore-1.3.2PolarSSLを使用する場合は、以下の記事を参照してください。
当サイトでは、PolarSSLを使用しています。
polarssl-1.2.8rtmpdump-2.4 PolarSSL版GnuTLSを、PolarSSLの代わりに使用する場合は、以下の記事を参照してください。
gnutls-3.2.2rtmpdump-2.4 GnuTLS版OpenSSLを使用する場合は、以下の記事を参照してください。
OpenSSLはGPL非互換なので、GnuTLSかPolarSSLをおすすめします。
openssl-1.0.1ertmpdump-2.4字幕ファイルを読み込むためのライブラリlibassを追加する場合は、以下のライブラリが必要になります。
pkg-config_0.26-1_win32libiconv-1.14freetype-2.5.0.1expat-2.1.0fontconfig-2.10.93fribidi-0.19.5libass-0.10.12012/07/29 追記ffplayをビルドする場合は、SDLが必要になります。
SDLをインストールして、configureオプションの「--disable-ffplay」を削除してください。
SDL-1.2.15SDLをインストールしていると、configureで、自動でenableになります。
SDLをインストールしていてもdisableにしたい場合は、configureオプションに「--disable-outdev=sdl」を追加してください。
4. FFmpegのコンパイルFFmpegは、以下の場所にあります。
http://ffmpeg.org/ソースコードはGitで管理されるようになり、SVNはrev.26402で更新が止まっています。
今後は、
Gitをインストールして、以下のコマンドでソースコードを入手してください。
$ git clone git://source.ffmpeg.org/ffmpeg.git
「git://git.videolan.org/ffmpeg.git」からソースコードをclone済みで、アップデートを繰り返して使用している場合は、以下のコマンドでURLを変更できます。
$ git remote set-url origin git://source.ffmpeg.org/ffmpeg.git
または、
Get FFmpeg
http://ffmpeg.org/download.htmlExtra repositoriesの、一番上のSnapshotのリンクからソースコードをダウンロードできます。
ファイルは、ffmpeg-HEAD-(Gitハッシュ値).tar.gz という形式になっていますので、そのファイル名に読み替えてください。
$ tar xzf ffmpeg-HEAD-1aeb87f.tar.gz
$ cd ffmpeg-HEAD-1aeb87f
次に、configure、その他諸々の一括パッチを適用します。
2014/01/22 追記vid.stabの関数が変更された件は修正済みのため、パッチを2013/12/21版に戻しました。(rev.59224(3f307d7)〜)
ffmpeg-20131221.diffFFmpeg rev.37209以降の更新で、「-flags2」で設定していたものが独立したオプションになり、特にx264関連の設定が大幅に変わりました。
以前の「-flags2」の設定も使用できるように、Revert用のパッチを作りましたので、必要であれば適用してください。
2013/11/16 追記「-flags2」用のパッチを更新しました。(rev.58074(b71e4d8)〜)
ffmpeg-global_opts-20131114.diff2012/04/13 以降、以下のようなエラーが出る場合があります。
library.mak:95: *** missing separator. Stop.
ダウンロード(git clone)済みのソースコードがある場合、一旦Makefileを全部削除して、改行コードをLFにして作成し直せば、エラーが出なくなります。
$ echo 'Makefile eol=lf' > .gitattributes
$ find ./ -name 'Makefile' -print | xargs rm
$ git stash
その後、パッチを適用します。
$ patch -p1 < ffmpeg-20131221.diff
$ patch -p1 < ffmpeg-global_opts-20131114.diff
パッチを適用したら、configureを実行します。
FFmpeg SVN rev.23653から、
libfaadが削除されました。
HE-AAC v2デコーダーが本体に実装されたので、libfaadは不要になったらしいです。
古い記事を参考にしている方で、
Unknown option "--enable-libfaad".
というメッセージが出る場合は、
--enable-libfaad --disable-decoder=aac
は削除してください。
2013/06/25 追記configureオプション「--enable-libvidstab」「--enable-libwavpack」を追加しました。
$ ./configure --enable-gpl --enable-version3 --enable-avisynth --enable-fontconfig --enable-libass --enable-libbluray --enable-libcaca --enable-libcdio --enable-libfreetype --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxvid --disable-outdev=sdl --disable-ffprobe --disable-ffserver --enable-pthreads --extra-ldflags=-static --extra-cflags="-mtune=athlon64 -mfpmath=sse -msse" --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のマニュアルなどを見て研究されると良いかもしれません。
2013/11/04 追記最適化無し版のconfigureオプションに「--enable-memalign-hack」を追加しました。
これにより、Windows2000でも使えるようになるらしいです。
最適化無し版
--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
ARCH x86 (generic)
big-endian no
runtime cpu detection yes
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 pthreads
safe bitstream reader yes
SDL support yes
libdxva2 enabled no
libva enabled no
libvdpau enabled no
AVISynth enabled yes
frei0r enabled no
gnutls enabled no
libaacplus enabled no
libass enabled yes
libcaca enabled yes
libcdio support yes
libcelt support no
libdc1394 support no
libfaac enabled no
libfdk-aac enabled no
libgsm enabled yes
libiec61883 enabled no
libilbc enabled no
libmodplug enabled yes
libmp3lame enabled yes
libnut enabled no
libopencore-amrnb support yes
libopencore-amrwb support yes
libopencv support no
libopenjpeg enabled yes
libopus enabled yes
libpulse enabled no
librtmp enabled yes
libschroedinger enabled no
libsoxr enabled yes
libspeex enabled yes
libstagefright-h264 enabled no
libtheora enabled yes
libtwolame 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
texi2html enabled no
pod2man enabled yes
makeinfo enabled yes
configureのメッセージを閉じる
(長いので中略)
License: GPL version 3 or later
Creating config.mak and config.h...
その後、
$ make
ffmpeg.exe が出来ていれば完了です。
【補足】
自分用の場合は、再配布を考えなくても良いので、
libfaac入りのFFmpegをビルドすることもできます。
現在は、libfaacより音質が良いと評判のfdk-aacがありますので、fdk-aacをおすすめします。
追加で、fdk-aacをコンパイル&インストールします。
fdk-aacのコンパイル&インストールconfigureオプションの適当な所に、
--enable-nonfree
--enable-libfdk-aac
を追加します。
configureのメッセージに、
libfdk-aac enabled yes
と表示されていれば、makeして完了です。
FFmpegのエンコードオプションで、
-acodec libfdk_aac
が使えるようになります。
当サイトで配布しているFFmpegは配布用のため、libfaac、fdk_aacは無効にしています。
【更新履歴】を見る
2012/07/22 追記
ライブラリの追加など、全面的に書き直しました。
当サイトで配布しているバイナリは
--enable-w32threads
としています。
w32threadsを使用する手順は、以下の記事を参照してください。
FFmpegのコンパイル (2012/07/22) w32threads
2012/07/29 追記
(rev.42739(9e1508f)〜)
ffmpeg-20120722.diff
パッチを更新しました。(rev.43019(706bd8e)〜)
ffmpeg-20120729.diff
2012/07/29 追記
ffplayをビルドする場合は、SDLが必要になります。
SDLをインストールして、configureオプションの「--disable-ffplay」を削除してください。
SDL-1.2.15
SDLをインストールしていると、configureで、自動でenableになります。
SDLをインストールしていてもdisableにしたい場合は、configureオプションに「--disable-outdev=sdl」を追加してください。
2012/08/08 追記
(rev.42739(9e1508f)〜)
ffmpeg-global_opts-20120722.diff
「-flags2」用のパッチを更新しました。(rev.43308(7a72695)〜)
ffmpeg-global_opts-20120808.diff
2012/08/15 追記
パッチを更新しました。(rev.43564(7427d1c)〜)
ffmpeg-20120815.diff
2012/08/27 追記
「-flags2」用のパッチを更新しました。(rev.43885(15a0fb5)〜)
ffmpeg-global_opts-20120827.diff
2012/09/03 追記
個別のライブラリに、twolame-0.3.13 を追加しました。
twolame-0.3.13
2012/09/03 追記
configureオプション「--enable-libtwolame」「--disable-outdev=sdl」を追加、「--disable-ffplay」を削除しました。
2012/09/05 追記
「-flags2」用のパッチを更新しました。(rev.44181(b21b5b0)〜)
ffmpeg-global_opts-20120905.diff
2012/09/21 追記
パッチを更新しました。(rev.44648(5864ce1)〜)
ffmpeg-20120921.diff
2012/09/21 追記
「-flags2」用のパッチを更新しました。(rev.44648(5864ce1)〜)
ffmpeg-global_opts-20120921.diff
2012/09/27 追記
gitのURLが変わりました。
$ git clone git://git.videolan.org/ffmpeg.git
$ git git://source.ffmpeg.org/ffmpeg.git
「git://git.videolan.org/ffmpeg.git」からソースコードをclone済みで、アップデートを繰り返して使用している場合は、以下のコマンドでURLを変更できます。
$ git remote set-url origin git://source.ffmpeg.org/ffmpeg.git
2012/09/28 追記
「-flags2」用のパッチを更新しました。(rev.44829(7ed9ec0)〜)
ffmpeg-global_opts-20120928.diff
2012/09/29 追記
個別のライブラリに、openjpeg-1.5.1 と opus-1.0.1 を追加しました。
openjpeg-1.5.1
opus-1.0.1
その他、各ライブラリのバージョンを修正しました。
nasm-2.10.01 → nasm-2.10.05
libbluray-0.2.2 → libbluray-0.2.3
gnutls-3.0.21 → gnutls-3.1.2
fontconfig-2.10.0 → fontconfig-2.10.1
fribidi-0.19.2 → fribidi-0.19.4
2012/09/29 追記
configureオプション「--enable-libopenjpeg」「--enable-libopus」を追加しました。
2012/10/06 追記
パッチを更新しました。(rev.45080(d9dfe9a)〜)
ffmpeg-20121006.diff
2012/10/07 追記
「-flags2」用のパッチを更新しました。(rev.45142(79d3032)〜)
ffmpeg-global_opts-20121007.diff
2012/10/16 追記
「-flags2」用のパッチを更新しました。(rev.45327(bb35864)〜)
ffmpeg-global_opts-20121016.diff
2012/10/19 追記
「-flags2」用のパッチを更新しました。(rev.45671(3777e6b)〜)
ffmpeg-global_opts-20121019.diff
2012/10/20 追記
パッチを更新しました。(rev.45721(c5fd9d3)〜)
ffmpeg-20121020.diff
2012/10/29 追記
個別のライブラリ、libcdioのリンクを変更しました。
libcdio-0.90git
libcdio-0.90
その他、各ライブラリのバージョンを修正しました。
polarssl-1.1.14 → polarssl-1.2.0-pre1
gnutls-3.1.2 → gnutls-3.1.3
libiconv-1.13.1 → libiconv-1.14
libass-0.10.0 → libass-0.10.1
2012/11/03 追記
パッチを更新しました。(rev.46342(8551c6b)〜)
configureオプションに「--enable-gnutls」追加した場合と、rtmpdumpにGnuTLSを使用した場合に「-lcrypt32」を追加しました。
ffmpeg-20121103.diff
2012/10/06 追記
ライブラリのバージョンを修正しました。
polarssl-1.2.0-pre1 → polarssl-1.2.0
2012/11/06 追記
「-flags2」用のパッチを更新しました。(rev.46441(b2b67fd)〜)
ffmpeg-global_opts-20121106.diff
2012/11/16 追記
パッチを更新しました。(rev.46768(a9b1536)〜)
ffmpeg-20121116.diff
2012/12/12 追記
パッチを更新しました。(rev.47740(801b315)〜)
ffmpeg-20121212.diff
2012/12/14 追記
個別のライブラリに、libsoxr-0.0.5 を追加しました。
libsoxr-0.0.5
その他、各ライブラリのバージョンを修正しました。
nasm-2.10.05 → nasm-2.10.06
polarssl-1.2.0 → polarssl-1.2.3
gnutls-3.1.3 → gnutls-3.1.5
fontconfig-2.10.1 → fontconfig-2.10.2
fribidi-0.19.4 → fribidi-0.19.5
2012/12/14 追記
configureオプション「--enable-libsoxr」を追加しました。
2012/12/21 追記
「-flags2」用のパッチを更新しました。(rev.47987(af804db)〜)
ffmpeg-global_opts-20121221.diff
2012/12/26 追記
パッチを更新しました。(rev.48112(e749b5d)〜)
ffmpeg-20121226.diff
2012/12/28 追記
パッチを更新しました。(rev.48233(750382d)〜)
ffmpeg-20121228.diff
2012/12/28 追記
ソースコードの入手で、cloneが抜けていたので修正しました。
$ git git://source.ffmpeg.org/ffmpeg.git
$ git clone git://source.ffmpeg.org/ffmpeg.git
2013/01/14 追記
「-flags2」用のパッチを更新しました。(rev.48795(3bcf443)〜)
ffmpeg-global_opts-20130114.diff
2013/01/18 追記
パッチを更新しました。(rev.48995(1759619)〜)
ffmpeg-20130118.diff
2013/01/22 追記
パッチを更新しました。(rev.49113(f6a80d6)〜)
ffmpeg-20130122.diff
2013/01/28 追記
「-flags2」用のパッチを更新しました。(rev.49354(5cb0782)〜)
ffmpeg-global_opts-20130128.diff
2013/03/05 追記
パッチを更新しました。(rev.50459(9ad3cd5)〜)
ffmpeg-20130305.diff
2013/03/07 追記
パッチを2013/01/22版に戻しました。(rev.50515(28adecf)〜)
ffmpeg-20130122.diff
2013/03/14 追記
パッチを更新しました。(rev.50584(e92ba51)〜)
ffmpeg-20130314.diff
2013/03/14 追記
「-flags2」用のパッチを更新しました。(rev.50759(5beddbc)〜)
ffmpeg-global_opts-20130314.diff
2013/03/24 追記
パッチを更新しました。(rev.51168(b9ad009)〜)
ffmpeg-20130324.diff
2013/04/13 追記
パッチを更新しました。(rev.51921(d185343)〜)
ffmpeg-20130413.diff
2013/05/06 追記
パッチを更新しました。(rev.51921(d185343)〜)
ffmpeg-20130506.diff
2013/05/24 追記
パッチを更新しました。(rev.53399(a4d3757)〜)
ffmpeg-20130524.diff
2013/06/04 追記
パッチを更新しました。(rev.53741(f514b5d)〜)
ffmpeg-20130604.diff
2013/06/06 追記
「-flags2」用のパッチを更新しました。(rev.53860(d5f7f1f)〜)
ffmpeg-global_opts-20130606.diff
2013/06/25 追記
パッチを更新しました。(rev.54170(14a61bc)〜)
ffmpeg-20130625.diff
2013/06/25 追記
個別のライブラリに、
libcdio-paranoia-10.2+0.90+1
vid.stab-0.961
wavpack-4.60.1
を追加しました。
libcdio-paranoia-10.2+0.90+1
vid.stab-0.961
wavpack-4.60.1
2013/06/25 追記
configureオプション「--enable-libvidstab」「--enable-libwavpack」を追加しました。
2013/07/04 追記
パッチを更新しました。(rev.54360(c3316dd)〜)
ffmpeg-20130704.diff
2013/07/29 追記
パッチを更新しました。(rev.54998(1ecf380)〜)
今回より、pkg-configが必須になります。
ffmpeg-20130729.diff
2013/07/29 追記
各ライブラリのバージョンを修正しました。
nasm-2.10.06 → nasm-2.10.09
zlib-1.2.7 → zlib-1.2.8
libbluray-0.2.3 → libbluray-0.3.0
opus-1.0.1 → opus-1.0.3
vo-aacenc-0.1.2 → vo-aacenc-0.1.3
vo-amrwbenc-0.1.2 → vo-amrwbenc-0.1.3
libogg-1.3.0 → libogg-1.3.1
libsoxr-0.0.5 → libsoxr-0.1.1
libvpx-v1.1.0 → libvpx-v1.2.0
polarssl-1.2.3 → polarssl-1.2.8
gnutls-3.1.5 → gnutls-3.2.2
openssl-1.0.1c → openssl-1.0.1e
freetype-2.4.10 → freetype-2.5.0.1
fontconfig-2.10.2 → fontconfig-2.10.93
2013/07/29 追記
FFmpegのconfigureと、その他のライブラリのconfigureでもpkg-configが必要なものがありますので、インストールしておいてください。
pkg-configのインストール
2013/08/15 追記
「-flags2」用のパッチを更新しました。(rev.55350(dd9555e)〜)
ffmpeg-global_opts-20130815.diff
2013/09/08 追記
「-flags2」用のパッチを更新しました。(rev.56068(2a27e52)〜)
ffmpeg-global_opts-20130908.diff
2013/10/14 追記
MinGW環境のアップデートのリンクを変更しました。
2. MinGW環境のアップデート
2. MinGW環境のアップデート
2013/10/14 追記
MinGW-w64も自分でビルドしてみたい方は、こちらも参考にしてください。
MinGW-w64 v3のビルド
2013/11/02 追記
「-flags2」用のパッチを更新しました。(rev.57776(1295377)〜)
ffmpeg-global_opts-20131102.diff
2013/11/04 追記
「-flags2」用のパッチを更新しました。(rev.57860(a689560)〜)
ffmpeg-global_opts-20131104.diff
2013/11/04 追記
最適化無し版のconfigureオプションに「--enable-memalign-hack」を追加しました。
これにより、Windows2000でも使えるようになるらしいです。
2013/11/16 追記
「-flags2」用のパッチを更新しました。(rev.58074(b71e4d8)〜)
ffmpeg-global_opts-20131114.diff
2013/11/26 追記
パッチを更新しました。(rev.58232(c3814ab)〜)
pkg-config必須です。
ffmpeg-20131123.diff
2013/11/30 追記
パッチを更新しました。(rev.58232(c3814ab)〜)
freetype-2.5.1に対応しました。
ffmpeg-20131127.diff
2013/12/09 追記
パッチを更新しました。(rev.58874(cea5812)〜)
ffmpeg-20131209.diff
2013/12/21 追記
パッチを更新しました。(rev.59224(3f307d7)〜)
ffmpeg-20131221.diff
2014/01/07 追記
パッチを更新しました。(rev.59224(3f307d7)〜)
vid.stabの関数が変更された件に対応しました。
vsLocalmotions2TransformsSimple -> vsLocalmotions2Transforms
ffmpeg-20140107.diff
2014/01/22 追記
vid.stabの関数が変更された件は修正済みのため、パッチを2013/12/21版に戻しました。(rev.59224(3f307d7)〜)
ffmpeg-20131221.diff
【更新履歴】を閉じる
最初にお断りしておきますが、私はMacを使っております。なので、アドバイスを戴けるかどうか分からないのですが、誰に相談して良いのかも分からないので、質問します。
ffmpegのコンパイルなのですが、libassを使わない設定では正常にコンパイルできるのですが、libassを使う設定でコンパイルするとlibass.4.dylib、libfribidi.0.dylib、libexpat.1.dylib、libfreetype.6.dylibのライブラリに依存する(otool -Lで依存していることが分かる)バイナリができてしまいます。なぜでしょうか?
手順としては個別ライブラリをコンパイル、字幕関連のライブラリもコンパイルします。
続いてgitでffmpegを入手、こちらに掲載されているパッチのうちffmpeg-20130704.diffでmingwとなっている部分をライブラリがあるパスに置き換えて適用します。
続いてffmpeg-global_opts-20130606.diffパッチも適用します。
あまり意味を理解していませんが、パッチを適用しないとfontconfig not foundとなってconfigureできないのです。
configureは以下のようにしています。
$ ./configure --prefix=/Users/username/Desktop/Work/ffmpeg/product --as=yasm --disable-shared --enable-static --disable-ffplay --disable-ffserver --enable-gpl --enable-pthreads --enable-postproc --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --enable-libspeex --enable-bzlib --enable-zlib --enable-libxavs --enable-version3 --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvpx --enable-libgsm --enable-libopus --enable-libtwolame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libfdk-aac --enable-libfaac --enable-nonfree --enable-filters --enable-runtime-cpudetect --enable-fontconfig --enable-libass --enable-libfreetype
以上、大変長くなりましたが、よろしくお願い致します。
gitで入手したffmpegですが、-c:v libx264 -crf 18ではエンコードできるのに-c:v libx264 -preset slow -crf 18や、-c:v libx264 -profile:v High -crf 18や、-c:v libx264 -level 3.1 -crf 18のいずれでも固まってしまってエンコードできないのですが、何故だかお分かりでしょうか?
configureオプションの違いは、
--extra-ldflags=-static
を付けて強制的にスタティックリンクしている所くらいでしょうか。
他の手段として、ライブラリが.aと.dylib両方インストールされていれば、.dylibの方をリネームするか削除すれば、.aのスタティックライブラリとリンクしてくれるのではないかと思います。
あと、x264のオプションで、固まるというのがどういう状況が分からないのですが、
High Profileにするためには、
-8x8dct 1
というオプションを付ける必要があります。
-8x8dct 1を付けると、-profile:vで何を指定しても、あるいは付けてなくても、High Profileになります。
-levelは、10倍した値を設定する必要があるので、level 3.1なら、
-level 31
になります。
-preset slow で固まる件については分かりません。
いろいろお試しください。
--extra-ldflags=-staticをつけてffmpegをconfigureしようとしたらできませんでした。
戴いた情報をもとに調べた結果、依存関係が出来るライブラリ.dylibができていたので、これを作らないように各ライブラリのconfigureで--disable-shared --enable-staticを明示してコンパイルしたところass関係の共有ライブラリは作られず、ffmpegも.dylibに依存しないものが出来ました。
どうもありがとうございました。
2点目のx264オプションで固まる、つまりエンコードが行われず「ctrl+c」でffmpegを終了させる必要がある問題は現在調査中です。分かって、役に立つようでしたら、別途書き込みます。
x264を、こちらのブログエントリーにあった手順でコンパイルし直したところ、問題は解決されました。単純なミスだったようです。(役立つ情報ではないですね)
あとlibx264でのlevel指定は-level 3.1でも-level 31でも使えるようです。
これだけでは申し訳ないので、字幕焼き込み対応について追加情報です。
こちらのブログエントリーではffmpegのconfigureスクリプトにパッチを当てていらっしゃいますよね。
私もそのパッチffmpeg-20130704.diffを当てないとfontconfig not foundでconfigureが止まってしまっていたのですが、問題はfontconfigが作るfontconfig.pcにあると思われます。
http://einguste.hatenablog.com/entry/2013/03/23/131352
のブログエントリーを参考にfontconfig.pcを
Version: 2.10.93
Requires: freetype2 expat(この行を追加)
Libs: -L${libdir} -lfontconfig -liconv(-liconvを追加)
のように修正したところ、パッチなしでもfontconfigのエラーは出なくなりました。
Macで字幕をサポートしたffmpegをスクラッチビルドする手順はないので自分がブログに書こうと思っています。
色々ありがとうございました。
解決してよかったです。
FFmpegのconfigureは、ずっと前から試行錯誤しているうちに、今のようなやり方になったのですが、そろそろ見直した方が良いかもしれませんね。
fontconfig以外にも、pkg-config関係でエラーになるライブラリがあるので、どうしたら良いか考えます。
情報ありがとうございました。
桃源老師さん、初めまして。
sed -i -e 's/Libs: -L${libdir} -lfontconfig/Libs: -L${libdir} -lfontconfig -lfreetype -lexpat -liconv/g' /mingw/i686-w64-mingw32/lib/pkgconfig/fontconfig.pc
僕は↑こんな感じにfontconfigのインストール後にsedコマンドで修正してます。
libassも上と同じようにインストール後、sedコマンドで編集してます。
sed -i -e 's/Libs: -L${libdir} -lass -lm/Libs: -L${libdir} -lass -lfribidi -lfontconfig -lexpat -liconv -lfreetype/g' /mingw/i686-w64-mingw32/lib/pkgconfig/libass.pc
fontconfigとassについてはffmpeg-20130704.diffが不要になります。
戴いた情報を元に、libass.pcを修正するようにしました。
ただし、fontconfig、freetype、それにfribidiについてはRequiresに記述があったので、-lexpat -liconvのみ追加しました。
あべちんさま、Sada_Maru(旧X5-452)さま
fontconfig.pcの件はfontconfigのメーリングリストに書き込んだところ、git版で修正されました。git版のビルドは、うまくいかなかったので未確認です。
お久しぶりです。
Sada_Maruさんと桃源老師さんの情報をヒントにさらに調べてみたところ、
Requires.private、Libs.privateなど、*.privateが付く方は、pkg-configのオプションに --static を付ければ良いことが分かりました。
FFmpegのconfigure 998行目辺り、
pkg_libs=$($pkg_config --libs $pkg)
という所に --static を追加して、
pkg_libs=$($pkg_config --libs --static $pkg)
とすれば、*.privateにあるライブラリも読み込まれます。
どうしたら、修正ができるだけ少なくて済むか、他のライブラリでも矛盾しないかなど、もうちょっと検討してみます。
やっとこさ、Mac版のffmpegコンパイルガイドをアップしました。随分遅れました。
> pkg_libs=$($pkg_config --libs --static $pkg)
この件は上記ガイドには反映していません。fontconfig 2.11.0で*.privateが付く所になってしまった部分はfontconfig.pcで2.10.93での修正と同じように修正しています。
ffmpegのconfigureスクリプトをいじるべきなのかどうかは悩むところですね。
さて、今日は別件で質問があります。
ffmpegコンパイルガイドを作成する上で検証しながらビルドしたffmpegにlibblurayをリンクさせました。
しかし、情けないことにlibblurayをffmpegでどう使うのかが分かりません。
お時間がある時で結構ですので、ご教授戴けますでしょうか?
もうひとつ、リンクさせなかったライブラリにlibcdioがあります。
良く分からないのですが、paranoiaがビルドできなかったためです。
このライブラリの用途をご教授戴けますでしょうか?
Mac版の配布用ffmpegにはlibcdioはリンクされていないようなのと、libcdioの説明からWindows向けライブラリかなと想像しています。
お久しぶりです。
libblurayについては、なんと私、ブルーレイドライブを持っていないので、試したことが無いのです(*/∇\*)キャ
そのうち、ブルーレイドライブを買ったら試してみます。
libcdioは、CD(DVD)ドライブレターが「D:」だとすると、音楽CDを入れて、
ffmpeg -y -f libcdio -i D: -acodec libmp3lame -ac 2 -ar 44100 -ab 128k -f mp3 temp.mp3
という感じでmp3にエンコードできたりしたのですが、あまり使い道がなかったので久々に試してみたら、ffmpegがクラッシュしてしまいました。
libcdioのgit版だとクラッシュはしなくなったのですが、エラーでCDのデータを読み込んでくれませんでした。
仮に動いたとしても、そのままだと、CDまるごと1つのファイルになるため、曲の先頭と終わりの時間を指定して切り出す必要があったり、いろいろと面倒です。
いつからクラッシュするようになったのかも分からないのですが、質問も無かったので、ffmpegでlibcdioの機能を使っている人は少ないんだと思います。
CDのリッピングは専用のツールの方が使いやすいので、libcdioは無理に入れなくても良いかもしれませんね。
こんばんは。
お返事ありがとうございます。
そうですか。libcdioは扱いにくいのですね。
取りあえず、自分のガイドからは外しておきます。
libbluray残念です。ネット検索でも出てこなくて。
ブルーレイドライブ貸して上げたいくらいです。(笑)
ブルーレイドライブを貸していただけるというその気持ち、ありがたくいただいておきます(笑
ポータブルなブルーレイドライブが、だいぶ安く出回っているので、そのうち思い切って買ってみます。
また何かわかりましたら、ご報告します。