以前FFmpegを勉強していた時は、ネット上に散らばった知識を体系的に勉強せずにまとめて学習していましたが、最近はかなりの時間を費やしてしまったため、自分でソースコードをコンパイルするところからFFmpegを深く学習することにしました。
この記事には、独自のコンパイル プロセス中に踏んだピットと、コンパイルとインストールのプロセス全体が記録されています。最初に踏んだピットの最後の部分を読むことをお勧めします。
目次
環境整備
- MYSY2 のインストールと構成
- FFmpegのソースコードをダウンロードする
- x264 ソースコードをダウンロード
- SDL ソース コードをダウンロードします (オプション、FFplay.exe をコンパイルするときに必要)
MSYS2をインストールしてツールチェーンをコンパイルする
MSYS2 は、Windows 上のコンパイル スイートのセットであり、シェルを使用してコマンドを実行する、pacman を使用してソフトウェア パッケージをインストールする、gcc (MinGW) を使用してコードをコンパイルするなど、Windows システムの Linux でのコンパイル環境をシミュレートできます。簡単に言うと、MSYS2 を使用すると、Linux で使い慣れたさまざまなコマンドを使用して、Windows でソフトウェアをコンパイルできます。MSYS2公式Webサイトからexeインストールパッケージをダウンロードし、管理者権限でインストールすると、インストール後に6つのシェルプログラムが作成されます。
MSYS2 MINGW64 を起動し、次のコマンド ラインを入力して、mingw64 コンパイル チェーンと基本的な依存関係のインストールを開始します。
sed -i "s#mirror.msys2.org/#mirrors.ustc.edu.cn/msys2/#g" /etc/pacman.d/mirrorlist*
pacman -Sy #提高下载速度,将下载源换成中科大的
pacman -S mingw-w64-x86_64-toolchain # mingw64编译工具链,win下的gcc,用于编译64位的库
pacman -S mingw-w64-i686-toolchain # 用于编译32位的库
pacman -S base-devel # 一些基本的编译工具
pacman -S yasm nasm # 汇编器
FFmpeg ソースコードのダウンロード
F Fmpeg 公式 Web サイトからソース コードをダウンロードします。
3 つのパッケージすべてをダウンロードできます
x264ソースコードのダウンロード
x264公式Webサイトにアクセスしてダウンロードしてください
SDLのダウンロード
SDL公式Webサイトにアクセスしてダウンロードしてください
コンパイルしてインストールする
ダウンロードしたインストールを同じディレクトリに置き (パスにスペースや中国語は含まない)、すべてのファイルを現在のディレクトリに解凍します。ソース コード ディレクトリとライブラリのインストール ディレクトリを区別するために、名前を変更することをお勧めします (そうではありません)。必要)
新しいコンパイルおよびインストール スクリプト ファイル .sh を作成し、次のコマンドをコピーします。その中の ./configure コンパイル パラメータは、対応するソース コード ディレクトリ内のconfigure ファイルを開くことで表示できます。ここでのパラメータは参照用です。パラメータの意味は、FFmpeg コンパイル パラメータ分析 - Nuggetsで見つけることができます。
#!/bin/sh
#进入执行脚本所在目录
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}
#进入h264源码目录
cd ${basepath}/x264-src # 根据路径名称自行修改
pwd
#配置编译参数
./configure --prefix=${basepath}/x264-install --enable-shared
#开始16线程编译
make -j16
#将编译后的文件拷贝到--prefix参数配置目录
make install
#进入ffmpeg源码目录
cd ${basepath}/ffmpeg-5.1.2-src # 根据路径名称自行修改
pwd
#指定PKG_CONFIG_PATH变量,告知编译器x264库的路径
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${basepath}/x264-install/lib/pkgconfig
echo ${PKG_CONFIG_PATH}
#配置编译参数
./configure --prefix=${basepath}/ffmpeg-5.1.2-install \
--enable-gpl \
--enable-libx264 \
--disable-static \
--enable-shared \
--enable-sdl2 \
--enable-ffplay \
--enable-ffprobe \
--enable-ffmpeg \
--disable-vulkan \
--extra-cflags=-l${basepath}/x264-install/include \
--extra-ldflags=-L${basepath}/x264-install/lib
#开始16线程编译
make -j16
#将编译后的文件拷贝到--prefix参数配置目录
make install
SDL ソース コードの sdl2-config ファイルを開きます。
プレフィックス パスを変更します。特定のパスはファイルの場所に応じて決定されます。ファイル エクスプローラーでパスを直接コピーすることはできません。次の形式に変更する必要があります。
prefix=/e/shell/SDL2-2.26.3/x86_64-w64-mingw32
FFmpeg ソース ディレクトリ内の設定ファイルを開きます。
SDL2_CONFIG パスを変更します。ルールは上記と同じです。
SDL2_CONFIG="/e/shell/SDL2-2.26.3/x86_64-w64-mingw32/bin/sdl2-config"
MSYS2 MINGW64 を開き、スクリプトが存在するディレクトリに入り、スクリプトを実行し、コンパイルとインストールが完了するまで 10 分ほど待ちます。
cd /e/shell
./build-ffmpeg-5.1.2.sh
コンパイルしてインストールすると、インストール ディレクトリにライブラリ ファイルが表示されます。
ピットを踏んだ
1. ソース コードが配置されているディレクトリ パスに中国語が含まれているため、以下に示すように、FFmpeg のコンパイル時に x264 ライブラリが見つからないというプロンプトが表示されます。
2. SDL ソース コード内の sdl2-config ファイルと FFmpeg ソース コード構成ファイル内の SDL 関連のパスが変更されていない場合、次の図に示すように、FFmpeg のコンパイル時に SDL ライブラリが見つからないというメッセージが表示されます。
3. FFmpeg のコンパイルパラメータを設定する際、--disable-vulkan が追加されず、コンパイル中にエラーが報告されます。理由は不明です。このモジュールを無効にした場合の影響はわかりません (穴を掘りました)自分のために)
4. 32 ビットをコンパイルすると、C コンパイラが見つからないというメッセージが表示されます。解決策については、「linux_Lao Yao で x264 をコンパイルするときに、動作する C コンパイラが見つかりません」というエラーが発生しました。Lao Yao のブログ - CSDN ブログを参照してください。
5. この記事では mingw コンパイラを使用して FFmpeg をコンパイルするため、コンパイルされたライブラリは mingw コンパイラを使用するプロジェクトでのみ使用できます。そうでない場合は問題が発生します。当初は VS+Qt+FFmpeg ライブラリを使用してプロジェクトを作成する予定でした。はい, msvc コンパイラを使用し、上記の方法でコンパイルしたライブラリを導入した後、プログラムが起動できなくなりました。調べたところ、mingw コンパイラは msvc と互換性がなく、VS では mingw コンパイラを使用できないことがわかりました。 msvc コンパイラでコンパイルする別の方法 FFmpeg の方法、幸いなことに、解決策を見つけるのにそれほど時間はかかりませんでした . この偉い人の記事を読んだ後、FFmpeg の新しいバージョンには h264 コーデックが付属していることがわかりました。自分でコンパイルするために h264 ソース コードをダウンロードする必要はありません。また、ffplay.exe をコンパイルする必要がない場合は、SDL ソース コードをダウンロードする必要がないため、コンパイル プロセスが大幅に簡素化されます。と基本的に落とし穴はなく一発でクリアできますが、後ほどffmpegをmsvcでコンパイルする手順を整理してお送りします。
参考記事
win10 で ffmpeg と ffplay をコンパイルする - プログラマー募集
Win10 は ffmpeg と ffplay をコンパイルします - プログラマー募集 (jianshu.com)
FFmpeg コンパイル パラメータの分析 - Nuggets
linux_Lao Yao で x264 をコンパイルすると、動作する C コンパイラが見つかりませんというエラーが発生しました---Lao Yao のブログ-CSDN ブログ
Android NDK が FFmpeg 4.2.2 の x86 CPU バージョンをコンパイルするときの問題を解決する – K-Res ブログ
window10_ffmpeg-msys2-msvc Compilation_h264_mf_Loken2020 のブログ - CSDN ブログ