ffmpegをcygwin上でコンパイル

ffmpegをcygwin上でコンパイルしました。 その時のメモを残しておきます。

FFmpeg の公式ページからリンクされているWindowsバイナリは内蔵のAACエンコーダーがありますが、使ってみると音質がかなり悪いことが分かります。シンバルなどが、昔の携帯電話を使ったような、くぐもった音になる時があります。

そこで、Fraunhofer FDK AAC (libfdk_aac)を使うために自前でコンパイルです。 クロスコンパイルが楽という情報もあるのですが、どうも上手く行かないのでCygwin上でビルドしました。

実際にはx264とaacエンコーダーしか使っていないので、これらだけあれば充分なのですが、lameとqsvだけ追加してみました。 (qsvは要らないかな…。)

参考にしたサイト

Cygwinでのffmpegのビルド

準備

コンパイル環境を整えます。下のようなものを揃えます。cygwin32-gcc-coreが必要でした。

autoconf 
automake 
binutils 
cmake 
cygwin32-gcc-core
doxygen 
libtool 
make 
mercurial 
mingw64-x86_64-SDL2 
mingw64-x86_64-binutils 
mingw64-x86_64-fribidi 
mingw64-x86_64-gcc-core 
mingw64-x86_64-gcc-g++ 
mingw64-x86_64-headers 
mingw64-x86_64-libtheora 
mingw64-x86_64-libvpx 
mingw64-x86_64-runtime 
mingw64-x86_64-win-iconv 
mingw64-x86_64-windows-default-manifest 
mingw64-x86_64-zlib 
nasm 
pkg-config 
texinfo 
yasm

以下の作業はtmpというディレクトリ上で行っています。

lame

cd /ffmpeg_sources && rm -rf lame-svn 
svn checkout https://svn.code.sf.net/p/lame/svn/trunk/lame lame-svn 
cd lame-svn 
./configure --host=x86_64-w64-mingw32 --prefix="/usr/x86_64-w64-mingw32/sys-root/mingw" \
--enable-static --disable-shared 
make -j4
make install

x264

git clone http://git.videolan.org/git/x264.git
cd x264 
./configure --cross-prefix=x86_64-w64-mingw32- --host=x86_64-w64-mingw32 \
--prefix="/usr/x86_64-w64-mingw32/sys-root/mingw" --enable-static 
make -j4
make install

qsv

configureのオプション “–cross-prefix=x86_64-w64-mingw32-“は無くなったようなので、下記から削除しました。 (2020-05-28)

git clone https://github.com/lu-zero/mfx_dispatch
cd mfx_dispatch
autoreconf -i
./configure  --host=x86_64-w64-mingw32 
make -j4
make install

ffmpeg

(一部修正しています 2020-05-28)

wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xvf ffmpeg-snapshot.tar.bz2 
cd ffmpeg
CFLAGS=-I/usr/x86_64-w64-mingw32/sys-root/mingw/include 
LDFLAGS=-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib 
export PKG_CONFIG_PATH= 
export PKG_CONFIG_LIBDIR=/usr/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig 
./configure \
--arch=x86_64 \
--target-os=mingw32 \
--cross-prefix=x86_64-w64-mingw32- \
--prefix=/usr/local \
--pkg-config=pkg-config \
--pkg-config-flags=--static \
--extra-cflags=-static \
--extra-ldflags=-static \
--extra-libs="-lm -lz -fopenmp" \
--enable-static \
--disable-shared \
--disable-doc \
--enable-nonfree \
--enable-gpl \
--enable-version3 \
--enable-avisynth \
--enable-libfdk-aac \
--enable-libfribidi \
--enable-libmp3lame \
--enable-libx264 \
--enable-libmfx
make -j4

おわりに

これでfdk_accが使えるようになります:

-c:a libfdk_acc

実際改善しました(と思っています…)。