ffmpegをcygwin上でコンパイルしました。 その時のメモを残しておきます。
FFmpeg の公式ページからリンクされているWindowsバイナリは内蔵のAACエンコーダーがありますが、使ってみると音質がかなり悪いことが分かります。シンバルなどが、昔の携帯電話を使ったような、くぐもった音になる時があります。
そこで、Fraunhofer FDK AAC (libfdk_aac)を使うために自前でコンパイルです。 クロスコンパイルが楽という情報もあるのですが、どうも上手く行かないのでCygwin上でビルドしました。
実際にはx264とaacエンコーダーしか使っていないので、これらだけあれば充分なのですが、lameとqsvだけ追加してみました。 (qsvは要らないかな…。)
目次
参考にしたサイト
- cygwin – FFmpeg for Windowsのベストバージョンをコンパイルする方法
日本語が少し変なので、自動翻訳なのでしょう。内容はかなり正確です。 - Ubuntu 上で Windows 用の FFmpeg を作る
最初はここの通りやってみたのですが、クロスコンパイルがどうも上手く行きませんでした。
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
実際改善しました(と思っています…)。