一般に受け入れられている 、ライセンス上の理由により、FFmpegの事前にコンパイルされたWindows実行可能ファイルは、特に デフォルトのAACエンコーダー と デフォルトのリサンプラー 。
これらのソースによると、解決策はソースからプログラムをコンパイルすることです:
FFmpegは、2つのAAC-LCエンコーダー(aacおよびlibfdk_aac)および1つのHE-AAC(v1/2)エンコーダー(libfdk_aac)をサポートします。 libfdk_aacのライセンスはGPLと互換性がないため、GPLライセンスコードも含まれている場合、GPLは互換性のないコードを含むバイナリの配布を許可しません。したがって、このエンコーダーは「非フリー」として指定されており、それをサポートするビルド済みのffmpegをダウンロードすることはできません。 これは、ffmpegを自分でコンパイルすることで解決できます...
フラウンホーファーFDK AACコーデックライブラリ。これは現在、ffmpegで利用可能な最高品質のAACエンコーダーです。 ffmpegを--enable-libfdk-aacで構成する必要があります(さらに--enable-gplを使用している場合は--enable-nonfreeも必要です) )。
...
FDK-AACが必要な場合は、ハンドブレーキを自分でコンパイルする必要があります。私はそれをしました、そして、オーディオは今素晴らしい音です。
私のマシンではすでにCygwinを利用できます。別のソフトウェアエコシステムをセットアップしたり、Linuxディストリビューション全体を焼き付けたりするのではなく、それを使用してプログラムをコンパイルします。
Cygwinを使用して、より優れた外部ライブラリでFFmpegをコンパイルするにはどうすればよいですか?
これは言うより簡単で、問題なく実行する方法を見つけるのに1か月以上かかりましたが、十分に時間をかけて、私をフォローしている人。
残念ながら、Cygwinのデフォルトのツールチェーン(つまり、Cygwinインストーラーに含まれているgcc-core
パッケージ)はクロスコンパイルの目的で本質的に壊れており、Cygwinのメンテナーからこれを修正する意図はないようです。現在、 Cygwinを使用してWindows用のソフトウェアをコンパイルする唯一の方法は、その下にMinGW-w64ツールチェーンを設定することです。ありがたいことに、これはいくつかのパッケージをインストールするのと同じくらい簡単です。この後、残りのパッケージをコンパイルしてから、両方の組み合わせを使用してFFmpeg自体をコンパイルします。
このガイド全体に従って、fdk-aac
、libopus
、x265
などの外部ライブラリとSOXリサンプラーを含む静的FFmpegインストールをビルドします。特定の外部ライブラリをコンパイルするための手順をガイドに追加することを検討するかもしれませんif特定のライブラリに対してそうするために十分なリクエストを受け取ります。
このガイドで使用されている依存関係-MinGW-w64クロスコンパイルツールチェーン自体、apt-cyg
によってインストールされたすべてのパッケージ、およびソースからコンパイルされたすべてのパッケージで構成されている-は、ガイドで最大2.8GBのディスク容量を消費しますすべてをクリーンアップするコマンドが含まれていますが、FFmpegのインストールは一度実行すると完了です。バイナリとドキュメントで構成されるインストール自体は、200MBをわずかに超えるディスク容量しか使用しません。
このガイドは、ホームディレクトリにffmpeg_sources
というフォルダーを作成します。このフォルダーには、ソースからビルドされているすべてのパッケージをダウンロードしてコンパイルします。 FFmpegは/usr/local
にインストールされます。FHS標準 推奨 ユーザーがコンパイルしたソフトウェアのインストール先です。この場所には、CygwinのデフォルトでシステムPATH
にあるという副次的な利点もあるため、$PATH
環境変数を更新する必要はありません。
まず、最新バージョンの Cygwinインストーラー をダウンロードして、wget
、tar
、gawk
およびgit
パッケージをインストールします。良いニュースは、これらのパッケージが、Cygwinインストーラーを再度使用する必要がなくなるツールの依存関係であることです。
apt-cyg
パッケージマネージャーをインストールする次に apt-cygパッケージマネージャーのkou1okadaのフォーク をインストールします。現在Cygwinのパッケージマネージャーを使用していない場合、この手順により、ガイドの残りの部分が簡単になるだけでなく、Cygwinのエクスペリエンスが他のLinuxディストリビューションに匹敵するようになります。
元のapt-cyg
の別のフォークなど、Cygwinのパッケージマネージャーを既に使用している場合でも、元のパッケージと比べてはるかに本格的なソフトウェアであるこのパッケージに置き換えることを強くお勧めします。だけでなく、現在活発に開発されているCygwinの唯一のパッケージマネージャーです。
Kou1okadaのapt-cyg
をインストールするには:
mkdir -p /usr/local/src &&
cd /usr/local/src &&
git clone https://github.com/kou1okada/apt-cyg.git &&
ln -s "$(realpath apt-cyg/apt-cyg)" /usr/local/bin/
apt-cyg install \
autoconf \
automake \
binutils \
cmake \
doxygen \
git \
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 \
Subversion \
texinfo \
yasm
以下の各セクションは、そのライブラリのサポートを有効にしてFFmpegをコンパイルできるようにする外部ライブラリをコンパイルします。各コマンド全体をコピーしてシェルに貼り付けます。
特定のライブラリをサポートするためにFFmpegのビルドを必要としない場合は、そのセクションをスキップして、このガイドの最終段階でFFmpegをコンパイルするときに対応する--enable-package
行を削除してください。
Cygwinインストールのルートに次のディレクトリを作成します。
rm -rf /ffmpeg_sources &&
mkdir -p /ffmpeg_sources
これは、ソースコードをダウンロードしてコンパイルするディレクトリです。
MP3用の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 -j$(nproc) &&
make install
X264ビデオコーデックをコンパイルするには:
cd /ffmpeg_sources && rm -rf x264 &&
git clone --depth 1 https://code.videolan.org/videolan/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 -j$(nproc) &&
make install
X265ビデオコーデックをコンパイルするには:
cd /ffmpeg_sources && rm -rf x265 &&
hg clone https://bitbucket.org/multicoreware/x265 &&
cd x265/build/linux &&
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/usr/x86_64-w64-mingw32/sys-root/mingw" \
-DENABLE_SHARED=OFF -DCMAKE_EXE_LINKER_FLAGS="-static" ../../source \
-DCMAKE_TOOLCHAIN_FILE="/ffmpeg_sources/x265/build/msys/toolchain-x86_64-w64-mingw32.cmake" &&
make -j$(nproc) &&
make install
Ogg形式はVorbisオーディオコーデックの依存関係であるため、その前にコンパイルする必要があります。
cd /ffmpeg_sources && rm -rf ogg &&
git clone --depth 1 https://gitlab.xiph.org/xiph/ogg.git &&
cd ogg && ./autogen.sh &&
./configure --Host=x86_64-w64-mingw32 --prefix="/usr/x86_64-w64-mingw32/sys-root/mingw" \
--enable-static --disable-shared &&
make -j$(nproc) &&
make install
次に、通常どおりVorbisをコンパイルします。
cd /ffmpeg_sources && rm -rf vorbis &&
git clone --depth 1 https://gitlab.xiph.org/xiph/vorbis.git &&
cd vorbis && ./autogen.sh &&
./configure --Host=x86_64-w64-mingw32 --prefix="/usr/x86_64-w64-mingw32/sys-root/mingw" \
--enable-static --disable-shared &&
make -j$(nproc) &&
make install
AV1ビデオエンコーダーをコンパイルするには:
cd /ffmpeg_sources && rm -rf aom &&
git clone --depth 1 https://aomedia.googlesource.com/aom &&
mkdir -p /ffmpeg_sources/aom/build && cd /ffmpeg_sources/aom/build &&
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="/usr/x86_64-w64-mingw32/sys-root/mingw" \
-DCMAKE_EXE_LINKER_FLAGS="-static" .. \
-DCMAKE_TOOLCHAIN_FILE="/ffmpeg_sources/aom/build/cmake/toolchains/x86_64-mingw-gcc.cmake" &&
make -j$(nproc) &&
make install
Opusオーディオエンコーダーをコンパイルするには:
cd /ffmpeg_sources && rm -rf opus &&
git clone --depth 1 https://github.com/xiph/opus.git &&
cd opus && ./autogen.sh &&
./configure CFLAGS="-I/usr/local/llsp" --Host=x86_64-w64-mingw32 --prefix="/usr/x86_64-w64-mingw32/sys-root/mingw" \
--enable-static --disable-shared &&
make -j$(nproc) &&
make install
フラウンホーファーFDKエンコーダーをAAC用にコンパイルするには:
cd /ffmpeg_sources && rm -rf fdk-aac &&
git clone --depth 1 https://github.com/mstorsjo/fdk-aac &&
cd fdk-aac && autoreconf -fiv &&
./configure --Host=x86_64-w64-mingw32 --prefix="/usr/x86_64-w64-mingw32/sys-root/mingw" \
--enable-static --disable-shared &&
make -j$(nproc) &&
make install
SOXリサンプラーライブラリをコンパイルするには、プロジェクトにはデフォルトで含まれていないため、最初にMinGW-w64ツールチェーン用のCMAKEツールチェーンファイルを作成する必要があります。
Cygwinルートディレクトリに新しいファイルを作成し、それをtoolchain-x86_64-mingw32.cmake
と呼びます(Windowsが拡張子を表示していること、および拡張子が.cmake
であることを確認してください)。
以下をコピーしてファイルに貼り付けます。
SET(CMAKE_SYSTEM_NAME Windows)
SET(CMAKE_C_COMPILER /usr/bin/x86_64-w64-mingw32-gcc)
SET(CMAKE_CXX_COMPILER /usr/bin/x86_64-w64-mingw32-g++)
SET(CMAKE_RC_COMPILER /usr/bin/x86_64-w64-mingw32-windres)
SET(CMAKE_Fortran_COMPILER /usr/bin/x86_64-w64-mingw32-gfortran)
SET(CMAKE_AR:FILEPATH /usr/bin/x86_64-w64-mingw32-ar)
SET(CMAKE_RANLIB:FILEPATH /usr/bin/x86_64-w64-mingw32-ranlib)
SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(QT_BINARY_DIR /usr/x86_64-w64-mingw32/bin /usr/bin)
SET(Boost_COMPILER -gcc47)
これで、SOXリサンプラーを通常どおりにコンパイルできます。
cd /ffmpeg_sources && rm -rf soxr &&
git clone --depth 1 https://git.code.sf.net/p/soxr/code soxr &&
mkdir -p soxr/build && cd soxr/build &&
cmake -Wno-dev -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="/usr/x86_64-w64-mingw32/sys-root/mingw" \
-DBUILD_SHARED_LIBS=OFF .. -DCMAKE_TOOLCHAIN_FILE="/toolchain-x86_64-mingw32.cmake" &&
make -j$(nproc) &&
make install
あとは、上記でダウンロードまたはコンパイルしたライブラリを使用して、FFmpeg自体をコンパイルするだけです。
cd /ffmpeg_sources && rm -rf ffmpeg &&
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 &&
tar xvf ffmpeg-snapshot.tar.bz2 && rm -f 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 \
--enable-nonfree \
--enable-gpl \
--enable-avisynth \
--enable-libaom \
--enable-libfdk-aac \
--enable-libfribidi \
--enable-libmp3lame \
--enable-libopus \
--enable-libsoxr \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 &&
make -j$(nproc) &&
make install
ライブラリをダウンロードまたはコンパイルしなかった上記のリストの各パッケージの--enable-\*package\*
行を忘れずに削除してください。
FFmpegのコンパイルは、外部ライブラリのコンパイルよりもはるかに時間がかかりますが、完了したら、コンパイルに使用したすべてのライブラリで完全に機能するバイナリを有効にする必要があります。実行するには、Cygwinターミナルでffmpeg
を実行します。
ガイドのこの時点までに、ダウンロード、インストール、およびコンパイルに約2.8 GBのディスク領域を使用していることになります。これの大部分は現在冗長であり、クリーンアップする必要があります。 2.6 GBを超えるファイルは安全にパージできるため、FFmpegのインストールの合計フットプリントは200MBにまで減少します。
以下を実行すると、2.3GBを超えるディスク領域が解放されます。
apt-cyg remove \
cmake \
doxygen \
git \
Mercurial \
Subversion \
texinfo \
yasm &&
rm -rf /ffmpeg_sources &&
rm -rf /usr/local/lib/{libav*,libpost*,libsw*} &&
rm -rf /usr/local/lib/pkgconfig/{libav*,libpost*,libsw*} &&
rm -rf /usr/local/include/{libav*,libpost*,libsw*} &&
rm -rf /toolchain-x86_64-mingw32.cmake
ffmpeg_sources
ディレクトリと不要な静的ライブラリを削除するだけでなく、これにより、以前にインストールされた不要になったパッケージも削除されますexceptfor Cygwin/Linuxでツールを構築するために一般的に必要なもの。
このガイドで以前にビルドしたMinGW-w64クロスコンパイルツールチェーンを使用して他のプログラムをコンパイルする予定がなくなった場合は、それを安全にアンインストールして、以前にインストールした残りのすべてのパッケージをアンインストールできます。
apt-cyg remove \
autoconf \
automake \
gcc-core \
gcc-g++ \
pkg-config \
libtool \
make \
nasm \
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 &&
rm -rf /usr/x86_64-w64-mingw32
これにより、さらに約450 MBのスペースが解放されます。
このガイドのすべての手順を逆にして、システムからFFmpegバイナリを削除する必要がある場合は、次のコマンドを実行してください。
apt-cyg remove \
autoconf \
automake \
binutils \
cmake \
doxygen \
gcc-core \
gcc-g++ \
git \
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 \
Subversion \
texinfo \
yasm &&
rm -rf /ffmpeg_sources &&
rm -rf /usr/local/bin{ffmpeg,ffprobe,ffplay} &&
rm -rf /usr/local/lib/{libav*,libpost*,libsw*} &&
rm -rf /usr/local/lib/pkgconfig/{libav*,libpost*,libsw*} &&
rm -rf /usr/local/include/{libav*,libpost*,libsw*} &&
rm -rf /usr/local/share/doc/ffmpeg &&
rm -rf /usr/local/share/ffmpeg &&
rm -rf /usr/local/share/man/man1/ff* &&
rm -rf /usr/local/share/man/man3/{libav*,libpost*,libsw*} &&
rm -rf /usr/x86_64-w64-mingw32/ &&
rm -rf /toolchain-x86_64-mingw32.cmake
これにより、このガイドの処理中にインストールされたすべてが削除され、システムが起動前の状態に戻ります。
すべてを手動で行う代わりに、 media-autobuild_suite
Windowsの場合、ほとんどすべての依存関係でFFmpegをビルドします。
このWindows Batchscriptは、Windowsでffmpegおよびその他のメディアツールを構築するためのMinGW/GCCコンパイラ環境をセットアップします。環境を構築した後、すべてのツールを取得してコンパイルします。すべてのツールは静的にコンパイルされ、外部.dllは必要ありません(一部のオプションの例外を除く)
スクリプトは継続的に更新され、ほとんどのユーザーにとって、これはWindowsでFFmpegをコンパイルするための推奨される方法です。