Windosw下VS 2022编译FFmpeg(支持x264、x265、fdk-acc)

FFmpeg7.0 版本移除了 6.0 之前已弃用的 API,无法向下兼容。所以编译的版本选择FFmpeg 6.1.1。

下载msys2

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

环境下载

  1. 右键使用管理员身份打开x64 Native Tools Command Prompt for VS 2022
  2. 进入msys64的安装目录: cd /d c:\msys64
  3. 执行: msys2_shell.cmd -use-full-path
  4. 这样会打开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

方式二:下载地址: https://ffmpeg.org/download.html#releases

下载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-aacINSTALL

右键 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,重新编译安装

重新编译安装

完成

相关推荐
山楂树の3 小时前
Video核心术语
学习·音视频
醒醒该学习了!4 小时前
AI生成视频与数字人
人工智能·音视频
ThinkPet4 小时前
记事-vue3项目整合Agora声网sdk实现RTC视频通话
vue.js·音视频·实时音视频
liyunlong-java5 小时前
Android 跳转系统相册选取图片/视频/音频/文档(适配全版本权限)
android·gitee·音视频
左直拳6 小时前
利用海康CVR实现视频流历史回放
ffmpeg·cvr·视频回放·历史视频
ACP广源盛139246256736 小时前
GSV2231@ACP#三屏扩展旗舰芯片,TRAE SOLO 多任务并行开发核心引擎
运维·网络·人工智能·嵌入式硬件·gpt·电脑·音视频
硅谷秋水6 小时前
τ0-WM:用于机器人操纵的统一视频-动作世界模型
人工智能·机器学习·计算机视觉·语言模型·机器人·音视频
阿洛学长20 小时前
MoneyPrinterTurbo 深度解析与部署实战:AI 一键短视频生成,从源码到上线全攻略
人工智能·音视频
MR.欻1 天前
ZLMediaKit 源码分析(四):RTP/RTCP 协议栈实现分析
c++·人工智能·vscode·ffmpeg·音视频
运维栈记1 天前
Remotion + Claude Code:用自然语言创作视频的革命性突破
人工智能·ai·音视频