Windows下使用GPU加速ffmpeg

一、概述与准备工作

1.1 GPU 加速的优势与局限

优势

  • 速度极快:GPU 拥有强大的并行计算能力,视频编解码速度远超 CPU。
  • 释放 CPU:将繁重的视频处理任务卸载到 GPU,让 CPU 专注于其他应用。

局限

  • 质量与体积:GPU 编码器(硬件编码)的压缩效率通常低于 CPU 编码器(软件编码,如 libx264)。在相同码率下,GPU 编码的视频质量可能稍差,或为达到相同质量需要更大的文件体积。
  • 功能限制:GPU 编码器支持的编码参数(如 crfpreset)通常比软件编码器少。

适用场景:适用于对处理速度要求极高,且对最终文件体积或极致画质要求不苛刻的场景,如实时流媒体、大规模视频转码批处理。

1.2 下载 FFmpeg

  1. 访问 FFmpeg 官网下载页:https://ffmpeg.org/download.html
  2. 对于 Windows 用户,建议直接下载编译好的版本,例如来自 gyan.devBtbN 的构建包。
  3. 下载后解压,将 bin 目录路径(如 C:\ffmpeg\bin)添加到系统的 PATH 环境变量中,以便在命令行中直接使用 ffmpeg 命令。

二、NVIDIA GPU 加速配置与使用

2.1 安装 CUDA 驱动(必需)

FFmpeg 的 NVIDIA GPU 加速依赖于 NVIDIA 的 CUDANVENC/NVDEC 驱动。

  1. 访问 NVIDIA 开发者网站:https://developer.nvidia.com/cuda-downloads
  2. 选择适合你系统的版本(操作系统、架构、版本、安装类型)。对于大多数用户,选择 Windows -> x86_64 -> 10 -> exe(local) 即可。
  3. 下载并运行安装程序,按提示完成安装。

2.2 检查 FFmpeg 是否支持 CUDA/NVENC

在命令提示符中运行以下命令,查看支持的硬件加速方法:

1
ffmpeg -hwaccels

如果输出中包含 cudacuvidnvdec,则说明当前 FFmpeg 版本支持 NVIDIA 硬件加速。

2.3 核心命令与参数详解

一个完整的 NVIDIA GPU 加速转码命令包含硬件解码处理硬件编码三个部分。

基础命令结构

1
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -y output.mp4

参数分解

参数 作用 说明
-hwaccel cuvid 指定使用 CUDA 视频加速 API 进行解码。 也可用 nvdec(更新)。
-c:v h264_cuvid 硬件解码器。指定使用 NVIDIA 的 H.264 解码器。 根据输入视频编码格式选择:hevc_cuvid (H.265), mpeg2_cuvid, vp9_cuvid 等。
-i input.mp4 输入文件。
-c:v h264_nvenc 硬件编码器。指定使用 NVIDIA 的 H.264 编码器。 可选:hevc_nvenc (H.265), av1_nvenc
-y 覆盖输出文件。
output.mp4 输出文件。

2.4 常用转码示例

1. 改变码率(控制体积)

1
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 2000k -y output.mp4

-b:v 2000k:将视频码率设置为 2000 Kbps。

2. 改变帧率

1
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -r 30 -y output.mp4

-r 30:将输出视频帧率设置为 30 fps。

3. 缩放分辨率(使用 GPU 滤镜)

1
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -vf "scale_npp=1280:-2" -y output.mp4

-vf "scale_npp=1280:-2":使用 NVIDIA 的 scale_npp 滤镜将宽度缩放到 1280 像素,高度按比例自动计算(-2 保证为偶数)。注意:GPU 滤镜与 CPU 滤镜(scale)不同。

4. 综合示例(转码、缩放、修改码率)

1
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -b:v 1500k -vf "scale_npp=1920:1080" -r 25 -y output.mp4

2.5 多 GPU 系统指定设备

如果系统装有多个 NVIDIA GPU,可以使用 -hwaccel_device 参数指定使用哪一块 GPU。

1
2
3
4
5
# 使用第一块 GPU (索引 0)
ffmpeg -hwaccel cuvid -hwaccel_device 0 -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -y output_gpu0.mp4

# 使用第二块 GPU (索引 1)
ffmpeg -hwaccel cuvid -hwaccel_device 1 -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -y output_gpu1.mp4

性能提示:单个 GPU 通常在同一时间只能高效处理一个编码任务。多个转码任务不会自动分配到不同 GPU,需要手动指定。


三、AMD GPU 加速配置与使用

AMD GPU 加速无需安装额外的 SDK(如 CUDA),只要 FFmpeg 编译时启用了 AMF(AMD Media Framework)支持即可。大多数预编译的 Windows 版 FFmpeg 已包含此支持。

3.1 检查 AMF 支持

运行以下命令,查看编码器列表:

1
ffmpeg -encoders | findstr amf

如果看到 h264_amfhevc_amf 等编码器,则说明支持 AMD GPU 加速。

3.2 核心命令示例

基础转码命令

1
ffmpeg -i input.mp4 -c:v h264_amf -y output.mp4

参数比 NVIDIA 方案更简洁,因为 AMD 目前主要提供硬件编码器,解码通常仍由 CPU 或通用硬件解码器完成。

调整编码参数
AMD AMF 编码器支持一些特定的参数来控制质量和速度。

1
ffmpeg -i input.mp4 -c:v h264_amf -quality quality -y output.mp4

-quality:可设置为 speed(速度优先)、balanced(平衡)或 quality(质量优先)。

更多参数示例

1
ffmpeg -i input.mp4 -c:v h264_amf -b:v 3M -usage transcoding -profile high -y output.mp4
  • -usage transcoding:指定为转码用途。
  • -profile high:指定 H.264 High Profile。

四、Intel GPU 加速(Quick Sync Video, QSV)

许多 Intel 酷睿处理器集成了核芯显卡,支持 QSV 技术,也可用于 FFmpeg 加速。

4.1 命令示例

基础命令

1
ffmpeg -hwaccel qsv -c:v h264_qsv -i input.mp4 -c:v h264_qsv -y output.mp4
  • -hwaccel qsv:启用 QSV 硬件加速。
  • -c:v h264_qsv:既作解码器也作编码器。

使用不同的编解码器

1
2
# H.265/HEVC 编解码
ffmpeg -hwaccel qsv -c:v hevc_qsv -i input.hevc -c:v hevc_qsv -y output.mp4

五、通用建议与故障排除

5.1 如何选择编解码器?

  1. 查看支持的编码器ffmpeg -encoders
  2. 查看支持的解码器ffmpeg -decoders
  3. 在输出中查找 nvencamfqsv 等关键词。

5.2 常见问题

  • 错误:Driver does not support the required nvenc API version
    原因:GPU 驱动或 FFmpeg 版本太旧。
    解决:更新 NVIDIA 显卡驱动至最新版,并使用最新的 FFmpeg 构建。

  • 错误:No NVENC capable devices found
    原因:消费级 GPU 的 NVENC 会话数有上限,或 GPU 不支持。
    解决:检查 GPU 是否支持 NVENC(GeForce 600 系列后基本都支持)。关闭其他占用 NVENC 的程序。

  • AMD/Intel 加速未生效
    解决:确保在 BIOS/UEFI 中已启用集成显卡,并且安装了最新的显卡驱动。

5.3 质量与速度的权衡

  • 追求极限压缩率/画质:使用 CPU 软件编码,如 -c:v libx264 -crf 23 -preset slow
  • 追求极限速度:使用 GPU 硬件编码,并选择 -preset fast(如 -preset p7 用于 NVENC)。
  • 平衡之选:可以考虑使用 GPU 解码 + CPU 编码(-c:v libx264),或使用 GPU 编码但设置较高的码率来弥补画质损失。

5.4 监控 GPU 使用情况

  • NVIDIA:使用 nvidia-smi 命令监控 GPU 利用率、显存占用和编码会话。
  • 任务管理器:在“性能”选项卡中查看 GPU 的“视频编码”利用率。

六、总结

平台 加速类型 关键参数 特点
NVIDIA 解码 + 编码 -hwaccel cuvid, -c:v h264_cuvid, -c:v h264_nvenc 生态完善,文档丰富,多 GPU 支持好。
AMD 主要编码 -c:v h264_amf 无需额外 SDK,配置简单。
Intel 解码 + 编码 -hwaccel qsv, -c:v h264_qsv 适合笔记本和台式机核显,功耗低。

最终建议

  1. 根据你的显卡型号选择对应的方案。
  2. 首次使用时,先用一段短视频测试命令是否可行。
  3. 对于生产环境,务必对比输出视频的质量、体积和处理速度,找到符合你需求的最佳参数组合。