FFmpeg7.0 版本移除了 6.0 之前已弃用的 API,无法向下兼容。所以编译的版本选择FFmpeg 6.1.1。
下载msys2
建议安装在c盘
编辑msys2_shell.cmd
安装完之后找到msys2_shell.cmd脚本文件,
将rem set MSYS2_PATH_TYPE=inherit 改为 set MSYS2_PATH_TYPE=inherit
修改的目的是为了MSYS2继承vs的环境.
添加国内镜像,下载源码用
修改C:\msys64\etc\pacman.d中mirrorlist.msys,在## Primary下面添加清华大学的源镜像
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
环境下载
- 右键使用管理员身份打开x64 Native Tools Command Prompt for VS 2022
- 进入msys64的安装目录:
cd /d c:\msys64 - 执行:
msys2_shell.cmd -use-full-path - 这样会打开MSYS2 的终端

MSYS2窗口打开后,先把基本的环境安装好
bash
pacman -Syu #中间会退出一次,再次打开重新执行此命令即可
pacman -S make diffutils nasm git vim pkg-config
pacman -S mingw-w64-x86_64-toolchain
mv /usr/bin/link.exe /usr/bin/link.exe.bak #重命名link.exe,目的是避免与MSVC的link.exe冲突
下载源码
建议将源码下载到msys2的home目录下: C:\msys64\home
x264地址:
git clone http://git.videolan.org/git/x264.git
**或 git clone **https://code.videolan.org/videolan/x264.git
x265地址:
**git clone **https://bitbucket.org/multicoreware/x265_git.git
fdk-aac地址:
**git clone --depth 1 **https://gitee.com/mirrors/fdk-aac.git
下载FFmpeg源码
方式一:git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git -b release/6.1
下载SDL2
git clone --depth 1 https://github.com/libsdl-org/SDL.git -b SDL2
编译依赖库
编译x264
配置编译脚本并运行
--enable-shared:编译成动态库(建议)
--enable-static:编译成静态库
C:\msys64\home\x264目录下新建build.sh(-j 线程数量,根据自己电脑情况调整)
bash
#!/bin/sh
OPTIONS="--enable-shared"
BUILD_DIR="./../build64"
CC=cl ./configure $OPTIONS --prefix=$BUILD_DIR/
make -j16
make install
make clean
在msys2窗口中cd 进入x264目录编译
bash
cd x264/
sh build.sh
编译完输出如下文件:

编译x265
编写编译脚本并运行
x265_git\build\msys-cl 目录下修改 make-Makefiles-64bit.sh
bash
#!/bin/sh
# This is to generate visual studio builds with required environment variables set in this shell, useful for ffmpeg integration
# Run this from within an MSYS bash shell
INSTALL_DIR="./../../../build64/"
target_processor='x64'
path=$(which cl)
if cl; then
echo
else
echo "please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64'"
echo "and then launch msys bash shell from there"
exit 1
fi
if [[ $path == *$target_processor* ]]; then
echo
else
echo "64 bit target not set, please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64 | x86_amd64 | amd64_x86'"
exit 1
fi
cmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../source
if [ -e Makefile ]
then
nmake
fi
nmake install

在msys2窗口中cd进入x265_git/build/msys-cl目录编译
bash
cd x265_git/build/msys-cl
sh make-Makefiles-64bit.sh
编译完后输出如下文件:

编译fdk-aac
cmake-gui配置cmake
下载地址: https://cmake.org/download/

配置

修改输出目录

生成

用 Visual Studio2022(有问题请用管理员权限)打开生成的工程 fdk-aac.sln

依次编译生成 fdk-aac、INSTALL

右键 fdk-aac点击生成

完成

右键 INSTALL点击生成

生成完成

编译完成后输出如下:

编译SDL2 (ffplay需要)
cmake-gui 配置cmake
同上

vs2022编译生成
操作同上, 依次编译生成 SDL2、INSTALL, 记得更换 Release 版本

完成

编译FFmpeg
修改pkgconfig
修改 C:\msys64\home\build64\lib\pkgconfig 内的 fdk-aac.pc、x264.pc、x265.pc、sdl2.pc 内 prefix 值


重命名动态库
进入目录 C:\msys64\home\build64\lib,将 libx264.dll.lib 重命名为 libx264.lib ,libx265.lib 重命名为 x265.lib

修改 FFmpeg 配置文件
修改 fftools/opt_common.c (或 cmdutils.c) 源码文件, 注释掉 CC_IDENT 所在行,如下所示:

修改 fftools/ffprobe.c 源码文件, 注释掉 CC_IDENT 所在行,如下所示

在 msys 中切换到 FFmpeg 目录: cd FFmpeg/

配置pkg-config:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/c/msys64/home/build64/lib/pkgconfig
export PKG_CONFIG_PATH="/c/msys64/home/build64/lib/pkgconfig:$PKG_CONFIG_PATH"
验证
pkg-config --libs x264
pkg-config --libs x265
pkg-config --libs fdk-aac
pkg-config --libs sdl2

编译安装
plain
CC=cl ./configure --prefix=/c/msys64/home/build64/ffmpeg \
--toolchain=msvc \
--arch=x86_64 \
--enable-cross-compile \
--enable-gpl \
--enable-nonfree \
--enable-libfdk-aac \
--enable-libx264 \
--enable-libx265 \
--enable-filter=delogo \
--enable-debug \
--disable-optimizations \
--enable-shared \
--enable-sdl2 \
--extra-cflags="-I/c/msys64/home/build64/include" \
--extra-ldflags="-LIBPATH:C:/msys64/home/build64/lib"
make -j16
make install
生成动态库及可执行程序即大功告成

报错
编译失败可以在 C:\msys64\home\ffmpeg\ffbuild\config.log 中查看失败原因,不会就ai


sdl2未找到:

打开看看lib:

发现后缀带d,说明是Debug版本,应该是vs编译安装时未使用Release,重新编译安装

重新编译安装

完成