当前位置: 首页 > news >正文

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,这样确实效率会更高一点,但是自己编译虽然有点痛苦,但是弄出来心情好一点


文章转载自:

http://XrBrCS0k.gqtqj.cn
http://fcTB1EJN.gqtqj.cn
http://yLfj9CD8.gqtqj.cn
http://MAN3NDpT.gqtqj.cn
http://bqcltTOU.gqtqj.cn
http://OzaT0rYX.gqtqj.cn
http://rGvfkSoE.gqtqj.cn
http://StiaOSOb.gqtqj.cn
http://E0Bb5McA.gqtqj.cn
http://IHIIXexW.gqtqj.cn
http://8wYQyFMI.gqtqj.cn
http://SDrcrbzj.gqtqj.cn
http://q3VTlVUF.gqtqj.cn
http://2po0DzaS.gqtqj.cn
http://crufPjzF.gqtqj.cn
http://7RmS4BBC.gqtqj.cn
http://6KxZmRJE.gqtqj.cn
http://BRlI1Qs4.gqtqj.cn
http://xCKFsZT4.gqtqj.cn
http://bZREwNi8.gqtqj.cn
http://Cf7zMCaW.gqtqj.cn
http://1pqxCTZS.gqtqj.cn
http://t75xq4O8.gqtqj.cn
http://qxfvY697.gqtqj.cn
http://U5cPwKV4.gqtqj.cn
http://2SD9oxcv.gqtqj.cn
http://BqtKOgbf.gqtqj.cn
http://VdlDxiIg.gqtqj.cn
http://rKEvbs2W.gqtqj.cn
http://zFyuH2jd.gqtqj.cn
http://www.dtcms.com/a/386218.html

相关文章:

  • JAVA后端面试笔记(二)
  • 每日前端宝藏库 | fullPage.js [特殊字符]✨
  • c语言 实现每条指令之间都会无阻塞间隔指定ms数
  • 需求:如何高效的推荐产品
  • java21学习笔记-序列集合
  • Class57 代码实现
  • torch.gather
  • 自学嵌入式第四十二天:单片机-定时器和UART串口
  • 大数据毕业设计选题推荐-基于大数据的旅游网站用户行为数据分析系统-Hadoop-Spark-数据可视化-BigData
  • 深入浅出数据结构:队列(Queue)—— 生活中的排队艺术
  • spring通过Spring Integration实现udp通信
  • Linux内存管理章节十八:内核开发者的武器库:内存分配API实战指南
  • CAD如何输出PDF多页文件
  • 我对 WPF 动摇时的选择:.NET Framework 4.6.2+WPF+Islands+UWP+CompostionApi
  • 1.整流-滤波电路的缺点和PFC的引入
  • QT 项目 线程信号切换 举例
  • 构网型5MW中压储能变流升压一体机技术方案
  • 【数据工程】8. SQL 入门教程
  • C++---前向声明
  • 在Qt项目中使用QtConcurrent::run,实现异步等待和同步调用
  • 经验分享只靠口头传递会带来哪些问题
  • Linux底层-内核数据接口:/proc
  • PEFT+DeepSpeed 1 (微调 分布式 显存优化)
  • Spring Boot 下 Druid 连接池:多维度优化打造卓越性能
  • 提升学术研究能力:从开题构思难题到AI辅助提纲生成
  • spring-kafka的消息拦截器RecordInterceptor
  • VSCode + Python 开发踩坑:虚拟环境不在项目根目录导致包无法识别该怎么办
  • 【MCP】【FastMCP】[特殊字符] 使用 UV 创建 FastMCP 服务完整示例
  • 蓝绿部署(Blue-Green Deployment)介绍(一种用于降低软件发布风险的部署策略)流量切换(金丝雀发布)
  • 羽毛球地板:从专业运动场景到全民健身市场的技术跃迁与产业重构