windows下ffmpeg的编译安装(支持硬件加速)--2025最新
前言:
本人因为之前实习,在ffmpeg的编译安装上面踩了很多坑,虽然网上有编译好的ffmpeg,但是自己学会编译以后感觉还是不一样,而且有些功能需要自己添加到编译选项里面去
一 准备工作:
1.1 下载ffmpeg最新的源码,当然你也可以下载其他版本的
1.2 下载一个Git,这个应该都有
1.3 下载MSYS
https://www.msys2.org/
1.4 下载x264的源码
:https://www.videolan.org/developers/x264.html,为了支持ffmpeg的H264编解码必须先编译这个
1.5 总结
- 安装并配置 MYSY2
- 安装 git (可选)
- ffmpeg 源码
- x264 源码(可选)
1.6 相关环境配置
MSYS2 支持多个编译器工具链,它们的环境是独立的(可以去安装文件夹查看),这里选择启动 MINGW64 (如果你也是64位系统的话)
pacman -S mingw-w64-x86_64-toolchain # mingw64编译工具链,win下的gcc
pacman -S base-devel # 一些基本的编译工具
pacman -S yasm nasm # 汇编器
这个路径根据你的来
二 编译ffmpeg
对应编译来说,我们可以直接在对应目录去直接./configue,这里推荐一个更简便的方法就是写一个脚本,让他编译和安装
你需要创建两个.sh文件和两个install文件
对于build-x264.sh来说
#!/bin/sh
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}cd ${basepath}/x264 # 根据路径名称自行修改
pwd./configure --prefix=${basepath}/x264_install --enable-shared
make -j8
make install
对于build-ffmpeg来说
#!/bin/sh
basepath=$(cd `dirname $0`;pwd)
echo ${basepath}cd ${basepath}/ffmpeg-8.0
pwdexport PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/d/software/FFmpeg/x264_install/lib/pkgconfig
echo ${PKG_CONFIG_PATH}
S
./configure --prefix=${basepath}/ffmpeg-8.0_install \
--enable-gpl --enable-libx264 --disable-static --enable-shared \
--extra-cflags=-l${basepath}/x264_install/include --extra-ldflags=-L${basepath}/x264_install/libmake -j8
make install
这个是最基本的配置,对应的路径记得更改
在 MSYS2 的 shell 中,打开源码所在文件夹,并执行脚本
cd /d/software/FFmpeg
./build-x264.sh
对于ffmpeg也一样
cd /d/software/FFmpeg
./build-ffmpeg.sh
ffmpeg 代码量较大,可能会编译比较久,多线程 make 可加快编译速度。我使用make -j8
大约花了七八分钟。
编译完成后,就可以在 ffmpeg-8.0_install 路径下看到库文件了。其中 bin 下的一堆 dll 就是动态库文件。
弄完以后就可以在里面看到
对应的bin文件就有ffmpeg.exe文件,你可以把他的路径加入到系统变量里面,然后通过命令行去使用他
三 让ffmpeg支持硬件编解码
当前这个只是最基础的配置,如果想支持硬件的编解码还需要下载对应的SDK才行,这个你需要到官网去下载,然后安装到对应的路径,然后在编译的脚本里面加上对应的编译选项和下载的SDK的路径
对应的安装地址你可以去找一下,很简单,无脑点安装就行了
比如:
这是我下载的英伟达支持硬件编码的文件
然后编译脚本改成
#!/bin/sh
basepath=$(cd `dirname $0`;pwd)
echo "当前脚本目录: ${basepath}"cd ${basepath}/ffmpeg-8.0 || { echo "FFmpeg源码目录不存在!"; exit 1; }
pwdexport PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/d/software/FFmpeg/x264_install/lib/pkgconfig
echo "PKG_CONFIG_PATH: ${PKG_CONFIG_PATH}"# CUDA 13.0路径(请确认与你的安装路径一致)
CUDA_PATH="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v13.0"
echo "CUDA路径: ${CUDA_PATH}"# 检查CUDA解码库是否存在(关键!)
if [ ! -f "${CUDA_PATH}/lib/x64/nvcuvid.lib" ]; thenecho "错误:未找到nvcuvid.lib(NVIDIA解码核心库),请检查CUDA安装是否完整!"exit 1
fi# 配置编译参数(重点补充解码相关参数)
./configure \
--prefix=${basepath}/ffmpeg-8.0_install \
--enable-gpl \
--enable-libx264 \
--disable-static \
--enable-shared \
--extra-cflags="-I${basepath}/x264_install/include -I${CUDA_PATH}/include" \
--extra-ldflags="-L${basepath}/x264_install/lib -L${CUDA_PATH}/lib/x64" \
# 编码+解码全支持
--enable-cuda \
--enable-cuvid \ # 强制启用NVIDIA硬件解码(关键参数)
--enable-nvenc \
--enable-nonfree \
--enable-libnpp \
# 显式指定支持的解码格式(避免自动检测遗漏)
--enable-decoder=h264_cuvid,hevc_cuvid,mpeg4_cuvid,vp9_cuvid \
# 显式指定硬件加速方式
--enable-hwaccel=h264_cuvid,hevc_cuvidmake -j8 || { echo "编译失败!"; exit 1; }
make install || { echo "安装失败!"; exit 1; }echo "FFmpeg编译完成,已支持NVIDIA硬件编解码!"
这个执行完以后就支持硬件的编码器了,但是还是不支持硬件的解码,如果要支持硬件的解码,需要下载另外一个SDK
为什么呢?
你之前只装 CUDA Toolkit 能支持硬件编码(NVENC),是因为 FFmpeg 对 NVENC 编码的支持,默认依赖 CUDA Toolkit 中的部分基础库(如 libnvidia-encode.so
),无需额外装 Video Codec SDK;
但 硬件解码(NVDEC)必须依赖 Video Codec SDK 提供的 cuvid
接口—— 你之前没装 SDK,所以解码模块编译失败,只能用软件解码。
所以安装完以后,对编译脚本更改一下,就可以让其支持硬件编解码了
四 总结
其实实际操作下来,并没有多复杂,如果觉得麻烦就直接用编译好的能支持硬件编解码的ffmpeg,这样确实效率会更高一点,但是自己编译虽然有点痛苦,但是弄出来心情好一点