2. 环境准备:在 Windows/Linux/macOS 上安装带硬件加速支持的 FFmpeg

说实话,很多同学学 FFmpeg 硬件加速,第一步就卡在环境安装上。

我见过太多人拿着官方文档硬啃,结果编译三天三夜,最后跑起来还是个纯软件版。嗯,咱们这节课就把这事彻底理清楚。

核心目标:让你在三类操作系统上,都能装出一个带 NVENC、QSV、AMF、Videotoolbox 等硬件加速能力的 FFmpeg。

2.1 先搞清楚你的硬件支持什么

装之前,我建议你先确认一件事:你的显卡支持哪些硬件加速器?

别急着动手,先看一眼这张表:

硬件平台 编码器 解码器 FFmpeg 中对应的名称
NVIDIA GPU(GTX 10 系及以上) NVENC NVDEC h264_nvenc, hevc_nvenc, h264_cuvid, hevc_cuvid
Intel 核显(HD Graphics 6 代+) QSV QSV h264_qsv, hevc_qsv, mjpeg_qsv
AMD GPU(RX 400 系+) AMF AMF h264_amf, hevc_amf
Apple Silicon / Intel Mac VideoToolbox VideoToolbox h264_videotoolbox, hevc_videotoolbox

我在项目中遇到过好几次,有人拿着 GTX 1050 想用 NVENC,结果发现驱动没装对,FFmpeg 死活认不出。所以第一步,先把驱动更新到最新。

2.2 Windows 上装 FFmpeg(带 NVENC/AMF/QSV)

Windows 用户最省事。我个人习惯用 gyan.dev 的编译版,它已经集成了大部分硬件加速支持。

步骤一:下载预编译包

  1. 打开浏览器,访问 https://www.gyan.dev/ffmpeg/builds/
  2. 找到 ffmpeg-release-full.7z,下载它
  3. 解压到 C:\ffmpeg 目录

步骤二:配置环境变量

  1. 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
  2. 在 Path 中添加 C:\ffmpeg\bin
  3. 打开 cmd,输入 ffmpeg -version,看到版本信息就对了

步骤三:验证硬件加速

跑一行命令试试:

ffmpeg -encoders | findstr nvenc

如果输出里有 h264_nvenc 和 hevc_nvenc,说明 NVENC 已经就绪。

小提示:如果你用的是 AMD 显卡,记得装 AMD Software: Adrenalin Edition,它自带 AMF 驱动。Intel 核显用户则需要装 Intel Graphics Driver,并确保 BIOS 里开启了核显。

2.3 Linux 上编译安装(最灵活,也最折腾)

Linux 下我推荐自己编译。为什么?因为发行版自带的 FFmpeg 通常不带硬件加速支持。我自己在 Ubuntu 20.04 上踩过这个坑,apt install 出来的版本连 --enable-nvenc 都没开。

步骤一:安装依赖

sudo apt update
sudo apt install -y \
  build-essential \
  yasm \
  nasm \
  libx264-dev \
  libx265-dev \
  libvpx-dev \
  libfdk-aac-dev \
  libmp3lame-dev \
  libopus-dev \
  libvorbis-dev \
  libass-dev \
  libsdl2-dev \
  libva-dev \
  libvdpau-dev \
  libmfx-dev \
  libnvidia-encode-dev \
  libnvidia-decode-dev

这里有个坑:libmfx-dev 是 Intel QSV 的库,libnvidia-encode-dev 和 libnvidia-decode-dev 是 NVIDIA 的。如果你没有对应的硬件,可以不装,但装了也没坏处。

步骤二:下载 FFmpeg 源码

wget https://ffmpeg.org/releases/ffmpeg-6.1.tar.xz
tar -xf ffmpeg-6.1.tar.xz
cd ffmpeg-6.1

步骤三:配置编译选项

这是最关键的一步。我建议你直接复制下面这行,它几乎覆盖了所有主流硬件加速:

./configure \
  --enable-gpl \
  --enable-nonfree \
  --enable-libx264 \
  --enable-libx265 \
  --enable-libvpx \
  --enable-libfdk-aac \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libass \
  --enable-libsdl2 \
  --enable-vaapi \
  --enable-vdpau \
  --enable-libmfx \
  --enable-cuda \
  --enable-cuvid \
  --enable-nvenc \
  --enable-nvdec \
  --enable-ffnvcodec \
  --enable-libnpp

注意:如果你用的是 NVIDIA 显卡,还需要安装 NVIDIA Video Codec SDK,并把头文件放到 /usr/local/cuda/include 下。否则编译时会报 ffnvcodec 找不到。

步骤四:编译并安装

make -j$(nproc)
sudo make install

编译时间取决于你的 CPU,一般 5-15 分钟。我建议用 -j$(nproc) 来并行编译,快很多。

步骤五:验证

ffmpeg -encoders | grep -E "nvenc|qsv|amf|vaapi"

如果看到一堆硬件编码器,恭喜你,成功了。

2.4 macOS 上装 FFmpeg(带 VideoToolbox)

macOS 用户最幸福。Apple 的 VideoToolbox 是系统自带的,你只需要装一个 FFmpeg 就能用。

方法一:Homebrew(推荐)

brew install ffmpeg

就这么一行。Homebrew 默认编译的 FFmpeg 已经开启了 VideoToolbox 支持。

方法二:验证

ffmpeg -encoders | grep videotoolbox

输出里应该有 h264_videotoolbox 和 hevc_videotoolbox。

小提示:如果你用的是 Apple Silicon(M1/M2/M3),VideoToolbox 的性能非常强。我在 M1 Max 上测试过,4K H.264 转 H.265 能跑到 120fps 以上,而且功耗极低。

2.5 知识体系总览

下面这张图帮你理清整个环境准备的核心逻辑:

FFmpeg 硬件加速环境准备知识体系 FFmpeg 硬件加速环境准备 带硬件加速的 FFmpeg Windows Linux macOS gyan.dev 预编译 NVENC / AMF / QSV 源码编译 VAAPI / VDPAU / NVENC Homebrew 安装 核心原则 1. 先确认硬件支持哪些加速器(NVENC/QSV/AMF/VideoToolbox) 2. 再选择对应的安装方式(预编译/编译/Homebrew) 3. 最后用 ffmpeg -encoders 验证硬件编码器是否可用

2.6 常见问题与避坑指南

  • 问题:ffmpeg 找不到 nvenc
    我曾经遇到过,原因是 NVIDIA 驱动版本太低。NVENC 需要驱动版本 >= 470.xx。去 NVIDIA 官网下载最新驱动即可。
  • 问题:Linux 编译时报错 "ERROR: ffnvcodec not found"
    这是因为你没装 NVIDIA Video Codec SDK。去 GitHub 下载 nv-codec-headers,然后 make install 就行。
  • 问题:macOS 上 Homebrew 安装后没有 videotoolbox
    检查一下你的 Homebrew 版本。旧版本可能没开启这个选项。运行 brew upgrade ffmpeg 试试。
  • 问题:Windows 上解压后 ffmpeg 命令找不到
    环境变量没配好。记得把 C:\ffmpeg\bin 加到系统 Path 里,然后重启 cmd。

重要提醒:硬件加速编码器通常有并发限制。比如 NVIDIA 的 NVENC,消费级显卡(GTX/RTX)最多支持 2 路并发编码,专业卡(Quadro/RTX A 系列)才支持无限路。如果你在做转码集群,记得算好这个限制。

好了,环境准备就到这里。你装好之后,记得跑一下 ffmpeg -encoders 看看输出。如果看到那些硬件编码器名字,说明你已经准备好了。接下来,我们就可以真正开始玩硬件加速转码了。