2017/03/29(Wed)Cygwinのmingwでfdk-aacとx265が使える64bit版ffmpegをビルドする

はてブ数 2017/03/29 3:27 つーさ
Cygwinを入れてるからMSYSは入れたくないけど、Cygwinに依存しないバイナリを作りたい。
自分のための成功メモ。

Cygwin上でmingw32を使うときは、

mingw64-x86_64-ほにゃらら (x64向けクロスコンパイラ)
mingw64-i686-ほにゃらら (x86向けクロスコンパイラ)
シリーズのパッケージを入れて、クロスコンパイルの要領でやる。

また、 Cygwin上でmingwを使うときは、libtoolがたたくcmd //cが動かないので、
libtoolを採用しているライブラリのビルド時は configureの後、makeの前に、
sed -i libtool -e 's@cmd //c@cmd /c@g'
してあげるとよい。

Cygwinのmingwでfdk-aacとx265が使える64bit版ffmpegをビルドする

作業は $HOME/ffmpeg/ の下でやることにする。
$HOME/ffmpeg/build ディレクトリを作って、そこを prefixとして指定する。

ffmpeg は よく ffmepg と typo してしまうので、$PREFIX に入れておく。
export BUILD=x86_64-w64-mingw32
export PREFIX=$HOME/ffmpeg/build
export PKG_CONFIG=x86_64-w64-mingw32-pkg-config
export PKG_CONFIG_PATH=$HOME/ffmpeg/build/lib/pkgconfig:/usr/x86_64-w64-mingw32/sys-root/mingw/lib/pkgconfig

fdk-aac

tar xf fdk-aac-0.1.5.tar
cd fdk-aac-0.1.5
./configure --prefix=$PREFIX --host=$BUILD
sed -i libtool -e 's@cmd //c@cmd /c@g'
make -j 16
make install

libx265

確か、これのために Cygwinに yasm を入れた。
参考: https://bitbucket.org/multicoreware/x265/wiki/Home
今回はmsysでのビルドなので、x265/build/msys でビルドするが、
multilib.sh がなんか期待したとおりに動かない。
しかも、できたバイナリが libstdc++6.dllに依存してしまうようだ。
いろいろ試行錯誤した結果の alternative な multilib.sh を使う。
hg clone https://bitbucket.org/multicoreware/x265
cd x265/build/msys
rm multilib.sh
wget https://gist.githubusercontent.com/ttsuki/600b259879b7a7605747998fa723cf21/raw/516ce3fd633682a3c83e45330ab06c48298c0f01/multilib.sh -O multilib.sh
./multilib.sh
vim multilib.sh
bash multilib.sh
make -C build install

libx264

せっかくなので x264 とかも入れておいてみる。
# x264
git clone git://git.videolan.org/x264.git
cd x264
./configure --prefix=$PREFIX --host=$BUILD --cross-prefix=${BUILD}- \\
  --enable-shared --enable-pic --enable-static --extra-cflags="-pipe -march=native" --extra-ldflags="-static -static-libgcc"
make -j fprofiled VIDS="akiyo_qcif.y4m"
make install

libvpx

# vpx
git clone https://chromium.googlesource.com/webm/libvpx
cd libvpx
CROSS=${BUILD}- LDFLAGS="-O3 -static -static-libgcc -static-libstdc++" ./configure \\
  --prefix=$PREFIX \\
  --enable-pic --enable-vp8 --enable-vp9 --enable-vp9-postproc  --enable-webm-io --enable-libyuv \\
  --extra-cflags="-O3 -pipe -march=native" --extra-cxxflags="-O3 -pipe -march=native"
make -j
make install

liblame

# lame # ~/ffmpeg/lame-3.99.5
./configure --prefix=$PREFIX --build=$BUILD --host=$BUILD --enable-nasm
make -j
make install

libogg

# ogg # ~/ffmpeg/libogg-1.3.2
./configure --prefix=$PREFIX --host=$BUILD
sed -i libtool -e 's@cmd //c@cmd /c@g'
make -j
make install

libvorbis

# vorbis # ~/ffmpeg/aotuv-b6.03_20110424-20150808
./configure --prefix=$PREFIX --host=$BUILD
sed -i libtool -e 's@cmd //c@cmd /c@g'
make -j
make install

ffmpeg

参考: https://trac.ffmpeg.org/wiki/CompilationGuide/CrossCompilingForWindows
tar xf ffmpeg-3.2.4.tar.bz2
cd ffmpeg-3.2.4
./configure \\
  --prefix=$PREFIX \\
  --arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32- \\
  --pkg-config-flags="--static" --extra-ldflags="-static" --extra-cflags='--static -march=native' --optflags=-O3 \\
  --enable-static --disable-shared --disable-debug --enable-runtime-cpudetect \\
  --extra-cflags="-I$HOME/ffmpeg/build/include" \\
  --extra-ldflags="-L$HOME/ffmpeg/build/lib" \\
  --enable-gpl \\
  --enable-nonfree \\
  --enable-version3 \\
  --enable-avisynth \\
  --enable-libx265 \\
  --enable-libfdk-aac \\
  \\
  --enable-libvpx \\
  --enable-libx264 \\
  --enable-libvorbis \\
  --enable-libmp3lame \\
  \\
  --enable-libopus \\
  --enable-libtheora \\

make -j
make install

できたっぽい

~/ffmpeg/build/bin/ffmpeg -codecs | grep fdk
~/ffmpeg/build/bin/ffmpeg -codecs | grep x265
あれ、今年に入ってから初めて記事書いた