2017/03/29(水)Cygwinのmingwでfdk-aacとx265が使える64bit版ffmpegをビルドする
自分のための成功メモ。
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/CrossCompilingForWindowstar 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あれ、今年に入ってから初めて記事書いた