win 10でffmpegとx 264をコンパイル
8616 ワード
Windowsの下でffmpegとx 264をコンパイルするたびに半日振り回され、c++のコンパイルは本当に煩わしく、遅いコンパイル速度を言わずにコンパイル環境構成に多くの時間を浪費することが多い.前回ffmpegとx 264をコンパイルしてからずいぶん経ちましたが、メモを取らなかったので今またやり直します.
今回はx 64バージョンのみをコンパイルし、32ビットバージョンはコンパイルしません.OS:win 10 64 bit vs:vs 2017
一、コンパイル環境
MSYS 2、まず公式サイトからx 86_をダウンロードします64バージョンのインストーラ.インストールが完了したら、インストールディレクトリの下のmsys 2_をshell.cmdに注釈された
MSYS 2は、msysまたはMinGW-w 64環境を選択するコンパイルすることができるが、msysではgccでコンパイルされたexeおよびdllはmsys-2.0に依存する.dll、MinGW-w 64でコンパイルされたファイルはこのdllに依存する必要はありません.プログラムの実行効率から見ると、このdllに依存しないプログラムの効率はもっと高いはずです.だから私の個人的な好みについて言えば、MinGW-w 64を選んでコンパイルしたに違いありません.そして、私は両方の環境でx 264をコンパイルしたことがあります.configureの時、msysの下で
二、pacmanのソースを修正する
pacmanはMSYS 2にソフトウェアをインストールするためのパッケージマネージャですが、デフォルトの海外のソースからインストールパッケージをダウンロードするのは非常に遅く、十数二十KB程度の速度しかありません.また、ダウンロードの中断エラーも発生しやすいので、国内のソースに変更する必要があります.国内のソースは中科大学のソースを選ぶことができます.このページを開きます.MSYS 2ミラーの使用方法については、ページで説明したように、次のように変更します.
pacmanの構成編集
次にmsys 2のshellで
三、gccコンパイラの取り付けなど
MinGW-w 64コンパイルを選択すると、
次に、「すべてインストール」を選択します.
msysコンパイルを選択すると
次に、「すべてインストール」を選択します.
四、コンパイル環境のその他の準備
1.linkの名前を変更します.exeの名前を
2.YASMのダウンロードとインストールは不要のようで、最新版のコードではyasmの代わりにnasmが使用されています.
YASMダウンロードアドレス:http://yasm.tortall.net/Download.html、64ビットバージョンWin 64をダウンロードする.exe(64ビットWindows共通)、すなわちページ内のWin 64.exe (for general use on 64-bit Windows). ダウンロードすると、yasm-1.3.0-win 64がダウンロードされます.exeはyasmと改名した.exeは、MSYS 2インストールディレクトリ:/msys 64/usr/bin/に配置されます.
3.「VS 2017に適したx 64ネイティブツールコマンドプロンプト」に関連付けられたmingw 64またはmsysウィンドウを開く
スタートメニューのVisual Studio 2017ディレクトリには、コマンドプロンプトのショートカットがいくつかあります.
VS 2017の開発者コマンドプロンプトVS 2017のx 64_x 86クロスツールコマンドプロンプトVS 2017のx 64ネイティブツールコマンドプロンプトVS 2017のx 86ネイティブツールコマンドプロンプトVS 2017のx 86_x 64互換ツールコマンドプロンプト
最初は気づかなかったのですが、VS 2017の開発者コマンドプロンプトを選択しました.このデフォルトはx 86 32ビット環境、clコンパイラデフォルトは32ビットコンパイラ、ffmpegコンパイル時configureでx 64ビットを指定してもコンパイルされたのは32ビットdllとexeです.
スタートメニューに直接入力できます:vs 2017にリストが表示されます.VS 2017に適用されるx 64ネイティブツールコマンドプロンプトを開くには、ウィンドウに入力します.
vs 2017のshellからmsys 2 shellを開くのはvs 2017の環境パスを継承するためです.
このように開いているmsys 2 shellウィンドウでは、Ctrl+Cを使用して現在実行中のコマンドを中止できない場合があります.例えば、git cloneで比較的大きなプロジェクトをダウンロードして、遅くて中止したい場合があります.Ctrl+Cを押すとコマンドを中止できません.タスクマネージャを使用してgitプロセスを強制的に閉じるしかありません.stackoverflowで検索した結果も解決できず、理由をたくさん言ってよく見ていないので、ffmpegとx 264をコンパイルするにはこのウィンドウが必要なだけなので、どうでもいいです.
4.コンパイル環境ツールの確認
返された結果が正しいかどうかを見て、noの結果がなければ普通は大丈夫です.
5.中国語表示ウィンドウをサポートする右クリック->Options->Textを変更し、locale選択:zh_CN,Character setはUTF-8を選択します.
6.nasmをインストールして現在の最新x 264をコンパイルする場合はnasmを使用する必要があります.
あるいはnasm公式サイトに直接exeをbinディレクトリにダウンロードすることもできます(私は最初からこの方法を使っていました).
五、ダウンロードとコンパイルx 264 MinGW-w 64バージョン: msysバージョン:
msysでは
libx 264を生成する.lib
上でコンパイルした結果にはlibファイルが含まれておらず、自分で手作業で生成する必要があります.configureの時、私たちは
すなわち、
プログラムで直接x 264を使用したい場合はincludeの.hヘッダファイル、
六、ffmpegのダウンロードとコンパイル
ダウンロードffmpegダウンロードffmpegは直接使用できます:
しかしffmpegは非常に膨大なのでgitでダウンロードするのが遅いので、公式サイトでソース圧縮パッケージをダウンロードすることができます.
コンパイルには2つの方法があります.
方法1.手動configure方式コンパイル
もともと私は半日方法2のFFmpegInteropを振り回して、vs 2015しかサポートしていないようで、私が使っているのはvs 2017なので、自分で手動configureします.1.buildを作成します.sh実行:
上のlibx 264のパスを自分のマシンのパスに置き換えます.ここではpkg-configではなくlibx 264のパスを直接指定しましたが、比較的多くのサードパーティ製ライブラリを使用する場合はpkg-configで管理したほうがいいです.
ここで一番お父さんは--extra-ldflagsは「-LIBTPATH:パス」を使用しなければならず、「-Lパス」を使用することはできません.最初は-Lを使うとlibx 264が見つからないエラーが発生し、configを開きました.logは
ffmpegディレクトリの下で
2.configを修正する.h新たに生成するconfig.hファイルを開いてUTF-8形式に変換します.そうしないと、makeの時に無数のwarningが出てくるので、とてもうるさいです.
3.コンパイル
方法2、マイクロソフト公式のFFmpegInteropを使用して、もしあなたがvs 2015を使用しているならば.
1. FFmpegInterop
マイクロソフトはffmpegをコンパイルするために例を書いた:FFmpegInterop.
2.FFmpegConfigを修正する.sh libx 264をサポートするためにエディタでFFmpegConfigを開く.sh,FFmpegConfigが見える.shは4つのオペレーティングシステムである:Win 7/Win 8.1/Win10/Phone8.1のx 86/x 64/ARMプラットフォームは、異なる
3.ffmpeg ffmpeg解凍またはgit cloneをFFmpegInteropディレクトリの下にコンパイルします.次のコマンドを使用して、対応するプラットフォームバージョンをコンパイルします.
4.次のエラーが発生する可能性があります.
vs 2017コマンドプロンプトウィンドウで入力:
その後、
fdk aacサポート
Fraunhofer FDK AACコーデックライブラリ.これは現在のffmpegの最高品質のAACエンコーダです.fdk aacを使用する場合は、次のようにします.
どのようにfdk aacをコンパイルするかはここでは言いません.
七、dumpbinを使ってdllが32ビットなのか64ビットなのかなどを調べる
dumpbinはvs shellで実行する必要があります. 32ビットまたは64ビット:dumpbin/headers libx 264.dll シンボルリスト(導出関数)dumpbin/exports libx 264を表示する.dll > libx264-exports.txt
今回はx 64バージョンのみをコンパイルし、32ビットバージョンはコンパイルしません.OS:win 10 64 bit vs:vs 2017
一、コンパイル環境
MSYS 2、まず公式サイトからx 86_をダウンロードします64バージョンのインストーラ.インストールが完了したら、インストールディレクトリの下のmsys 2_をshell.cmdに注釈された
rem set MSYS2_PATH_TYPE=inherit
はset MSYS2_PATH_TYPE=inherit
に変更され、vsの環境をMSYS 2に継承するためである.MSYS 2は、msysまたはMinGW-w 64環境を選択するコンパイルすることができるが、msysではgccでコンパイルされたexeおよびdllはmsys-2.0に依存する.dll、MinGW-w 64でコンパイルされたファイルはこのdllに依存する必要はありません.プログラムの実行効率から見ると、このdllに依存しないプログラムの効率はもっと高いはずです.だから私の個人的な好みについて言えば、MinGW-w 64を選んでコンパイルしたに違いありません.そして、私は両方の環境でx 264をコンパイルしたことがあります.configureの時、msysの下で
-disable-thread --disable-avs
のような選択肢をdisableしなければなりません.二、pacmanのソースを修正する
pacmanはMSYS 2にソフトウェアをインストールするためのパッケージマネージャですが、デフォルトの海外のソースからインストールパッケージをダウンロードするのは非常に遅く、十数二十KB程度の速度しかありません.また、ダウンロードの中断エラーも発生しやすいので、国内のソースに変更する必要があります.国内のソースは中科大学のソースを選ぶことができます.このページを開きます.MSYS 2ミラーの使用方法については、ページで説明したように、次のように変更します.
pacmanの構成編集
/etc/pacman.d/mirrorlist.mingw32
、ファイルの先頭に追加:Server=http://mirrors.ustc.edu.cn/msys2/mingw/i686/etc/pacman.d/mirrorlist.mingw64
を編集し、ファイルの先頭に追加:Server=http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/etc/pacman.d/mirrorlist.msys
を編集し、ファイルの先頭に追加:Server=http://mirrors.ustc.edu.cn/msys2/msys/$arch 次にmsys 2のshellで
pacman -Sy
を実行してパッケージデータをリフレッシュすればよい.三、gccコンパイラの取り付けなど
MinGW-w 64コンパイルを選択すると、
MSYS2 MinGW 64-bit
のショートカットが開き、shellウィンドウに次のように入力されます.pacman -S mingw-w64-x86_64-toolchain
次に、「すべてインストール」を選択します.
msysコンパイルを選択すると
MSYS2 MSYS
のショートカットが開き、shellウィンドウに入力します.pacman -S msys2-devel
pacman -S make gcc diffutils pkg-config
次に、「すべてインストール」を選択します.
四、コンパイル環境のその他の準備
1.linkの名前を変更します.exeの名前を
msys64/usr/bin/link.exe
からmsys64/usr/bin/link.bak
に変更し、MSVCとのlinkを避ける.exe抵触.2.YASMのダウンロードとインストールは不要のようで、最新版のコードではyasmの代わりにnasmが使用されています.
YASMダウンロードアドレス:http://yasm.tortall.net/Download.html、64ビットバージョンWin 64をダウンロードする.exe(64ビットWindows共通)、すなわちページ内のWin 64.exe (for general use on 64-bit Windows). ダウンロードすると、yasm-1.3.0-win 64がダウンロードされます.exeはyasmと改名した.exeは、MSYS 2インストールディレクトリ:/msys 64/usr/bin/に配置されます.
3.「VS 2017に適したx 64ネイティブツールコマンドプロンプト」に関連付けられたmingw 64またはmsysウィンドウを開く
スタートメニューのVisual Studio 2017ディレクトリには、コマンドプロンプトのショートカットがいくつかあります.
VS 2017の開発者コマンドプロンプトVS 2017のx 64_x 86クロスツールコマンドプロンプトVS 2017のx 64ネイティブツールコマンドプロンプトVS 2017のx 86ネイティブツールコマンドプロンプトVS 2017のx 86_x 64互換ツールコマンドプロンプト
最初は気づかなかったのですが、VS 2017の開発者コマンドプロンプトを選択しました.このデフォルトはx 86 32ビット環境、clコンパイラデフォルトは32ビットコンパイラ、ffmpegコンパイル時configureでx 64ビットを指定してもコンパイルされたのは32ビットdllとexeです.
スタートメニューに直接入力できます:vs 2017にリストが表示されます.VS 2017に適用されるx 64ネイティブツールコマンドプロンプトを開くには、ウィンドウに入力します.
# msys2
d:
cd d:\msys64
# msys2 mingw64
msys2_shell.cmd -mingw64
# msys2 msys
#msys2_shell.cmd
vs 2017のshellからmsys 2 shellを開くのはvs 2017の環境パスを継承するためです.
このように開いているmsys 2 shellウィンドウでは、Ctrl+Cを使用して現在実行中のコマンドを中止できない場合があります.例えば、git cloneで比較的大きなプロジェクトをダウンロードして、遅くて中止したい場合があります.Ctrl+Cを押すとコマンドを中止できません.タスクマネージャを使用してgitプロセスを強制的に閉じるしかありません.stackoverflowで検索した結果も解決できず、理由をたくさん言ってよく見ていないので、ffmpegとx 264をコンパイルするにはこのウィンドウが必要なだけなので、どうでもいいです.
4.コンパイル環境ツールの確認
which cl link yasm cpp
返された結果が正しいかどうかを見て、noの結果がなければ普通は大丈夫です.
5.中国語表示ウィンドウをサポートする右クリック->Options->Textを変更し、locale選択:zh_CN,Character setはUTF-8を選択します.
6.nasmをインストールして現在の最新x 264をコンパイルする場合はnasmを使用する必要があります.
pacman -S nasm
あるいはnasm公式サイトに直接exeをbinディレクトリにダウンロードすることもできます(私は最初からこの方法を使っていました).
五、ダウンロードとコンパイルx 264
git clone http://git.videolan.org/git/x264.git
git checkout -b stable remotes/origin/stable
./configure --prefix=../build --host=x86_64-w64-mingw32 --enable-shared --extra-ldflags=-Wl,--output-def=libx264.def
make
make install
git clone http://git.videolan.org/git/x264.git
git checkout -b stable remotes/origin/stable
./configure --prefix=../build --host=x86_64-w64-mingw32 --enable-shared --disable-thread --disable-avs --extra-ldflags=-Wl,--output-def=libx264.def
make
make install
msysでは
--disable-thread --disable-avs
が必要です.そうしないと、コンパイル中にエラーが発生します.libx 264を生成する.lib
上でコンパイルした結果にはlibファイルが含まれておらず、自分で手作業で生成する必要があります.configureの時、私たちは
libx264.def
を生成しました.この時、役に立ちました.cp ./libx264.def ../build/lib/
cd ../build/lib
# 64 lib :
lib /machine:X64 /def:libx264.def
# 32 lib :
#lib /machine:i386 /def:libx264.def
すなわち、
libx264.lib
が得られ、build/bin/libx264-155.dll
をlibx264.dll
として改名または複製する.プログラムで直接x 264を使用したい場合はincludeの.hヘッダファイル、
libx264.lib
およびlibx264.dll
は、プロジェクト内の対応する位置にコピーされ、プログラムにヘッダファイルを追加し、x 264の方法を使用することができる.六、ffmpegのダウンロードとコンパイル
ダウンロードffmpegダウンロードffmpegは直接使用できます:
git clone git://source.ffmpeg.org/ffmpeg.git
しかしffmpegは非常に膨大なのでgitでダウンロードするのが遅いので、公式サイトでソース圧縮パッケージをダウンロードすることができます.
コンパイルには2つの方法があります.
方法1.手動configure方式コンパイル
もともと私は半日方法2のFFmpegInteropを振り回して、vs 2015しかサポートしていないようで、私が使っているのはvs 2017なので、自分で手動configureします.1.buildを作成します.sh実行:
./configure --toolchain=msvc --target-os=win64 \
--arch=x86_64 \
--enable-shared \
--enable-small \
--enable-version3 \
--enable-gpl \
--enable-nonfree \
--disable-stripping \
--disable-encoders \
--disable-decoders \
--enable-decoder=h264 \
--enable-encoder=libx264 \
--enable-encoder=mjpeg \
--enable-encoder=mpeg4 \
--prefix=./build \
--enable-libx264 \
--extra-cflags="-I/home/.../build/include" \
--extra-ldflags="-LIBPATH:/home/.../build/lib"
上のlibx 264のパスを自分のマシンのパスに置き換えます.ここではpkg-configではなくlibx 264のパスを直接指定しましたが、比較的多くのサードパーティ製ライブラリを使用する場合はpkg-configで管理したほうがいいです.
ここで一番お父さんは--extra-ldflagsは「-LIBTPATH:パス」を使用しなければならず、「-Lパス」を使用することはできません.最初は-Lを使うとlibx 264が見つからないエラーが発生し、configを開きました.logは
./compat/windows/mslink
を使用してリンクされていたが、mslinkはlibライブラリパスを指定するために必ず「-LIBTPATH:パス」を使用していた.ffmpegディレクトリの下で
./compat/windows/mslink
を直接実行すると、すべてのパラメータオプションを表示できます.2.configを修正する.h新たに生成するconfig.hファイルを開いてUTF-8形式に変換します.そうしないと、makeの時に無数のwarningが出てくるので、とてもうるさいです.
3.コンパイル
make
make install
方法2、マイクロソフト公式のFFmpegInteropを使用して、もしあなたがvs 2015を使用しているならば.
1. FFmpegInterop
マイクロソフトはffmpegをコンパイルするために例を書いた:FFmpegInterop.
git clone git://github.com/microsoft/FFmpegInterop.git
2.FFmpegConfigを修正する.sh libx 264をサポートするためにエディタでFFmpegConfigを開く.sh,FFmpegConfigが見える.shは4つのオペレーティングシステムである:Win 7/Win 8.1/Win10/Phone8.1のx 86/x 64/ARMプラットフォームは、異なる
configure
を記述している.ただし、libx 264サポートはデフォルトではオンになっていません.だから自分の必要なバージョンのconfigure
に参加します(手動configureと同じです):--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--extra-cflags="-I/home/.../build/include" \
--extra-ldflags="-LIBPATH:/home/.../build/lib"
3.ffmpeg ffmpeg解凍またはgit cloneをFFmpegInteropディレクトリの下にコンパイルします.次のコマンドを使用して、対応するプラットフォームバージョンをコンパイルします.
BuildFFmpeg.bat win10 - Build for Windows 10 ARM, x64, and x86
BuildFFmpeg.bat phone8.1 ARM - Build for Windows Phone 8.1 ARM only
BuildFFmpeg.bat win8.1 x86 x64 - Build for Windows 8.1 x86 and x64 only
BuildFFmpeg.bat phone8.1 win10 ARM - Build for Windows 10 and Windows Phone 8.1 ARM only
BuildFFmpeg.bat win8.1 phone8.1 win10 - Build all architecture for all target platform
4.次のエラーが発生する可能性があります.
MSYS2 is needed. Set it up properly and provide the executable path in MSYS2_BIN environment variable. E.g.
set MSYS2_BIN="C:\msys64\usr\bin\bash.exe"
vs 2017コマンドプロンプトウィンドウで入力:
set MSYS2_BIN=" \usr\bin\bash.exe"
その後、
msys2_shell.cmd -mingw64
ウィンドウを再開してコマンドをコンパイルします.fdk aacサポート
Fraunhofer FDK AACコーデックライブラリ.これは現在のffmpegの最高品質のAACエンコーダです.fdk aacを使用する場合は、次のようにします.
--enable-libfdk_aac
どのようにfdk aacをコンパイルするかはここでは言いません.
七、dumpbinを使ってdllが32ビットなのか64ビットなのかなどを調べる
dumpbinはvs shellで実行する必要があります.