mcpField
F
ffmpeg-hardware-acceleration

ffmpeg-hardware-acceleration

github.com/josiahsiegel创意与媒体5985 次安装19 周前更新
代码仓库

关于 ffmpeg-hardware-acceleration

为需要 GPU 加速的 FFmpeg 用户提供硬件编码、解码和滤镜工作流参考,适用于实时编码、批处理及服务端转码。内容涵盖多种厂商后端、完整 GPU 流程和性能验证。

主要功能

  1. 01识别可用硬件加速后端
  2. 02选择厂商编码与解码器
  3. 03构建 GPU 滤镜处理流程
  4. 04调整编码质量与预设
  5. 05基准测试并监控 GPU

适用场景

  1. 01加速实时流媒体编码
  2. 02批量转码视频
  3. 03部署服务端 GPU 转码
  4. 04在 Docker 中使用 GPU 直通

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/josiahsiegel/claude-plugin-marketplace --skill ffmpeg-hardware-acceleration

安装后在 Claude Code 中输入/ffmpeg-hardware-acceleration确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
amd-amf-vaapi-videotoolbox.md
gpu-memory-and-troubleshooting.md
intel-qsv.md
nvidia-nvenc.md
opencl-filters.md
vulkan.md

详细介绍

何时使用此技能

在需要 GPU 加速时启用:

  • 编码速度至关重要(比 CPU 快 10–30 倍)
  • 处理大量视频
  • 用于流媒体的实时编码
  • 大规模服务端转码
  • 需要 GPU 直通的 Docker 容器

GPU 编码会牺牲部分画质来换取大幅提速。使用 -cq、-qp 或 -global_quality 控制画质。

快速参考

平台编码器解码器检测命令
NVIDIAh264_nvenc、hevc_nvenc、av1_nvench264_cuvid、hevc_cuvidffmpeg -encoders | grep nvenc
Intel QSVh264_qsv、hevc_qsv、av1_qsvh264_qsv、hevc_qsvffmpeg -encoders | grep qsv
AMD AMFh264_amf、hevc_amf、av1_amf不适用(使用软件解码)ffmpeg -encoders | grep amf
Appleh264_videotoolbox、hevc_videotoolboxh264_videotoolbox仅限 macOS
VAAPIh264_vaapi、hevc_vaapi、av1_vaapi配合 -hwaccel vaapi 使用仅限 Linux
Vulkanh264_vulkan、hevc_vulkan、av1_vulkan、ffv1_vulkanVP9、ProRes RAW(8.0+)ffmpeg -encoders | grep vulkan

当前最新版本:FFmpeg 8.0.1(发布于 2025-11-20)。使用 ffmpeg -version 检查。

硬件加速概览

硬件加速使用专用 GPU/SoC 组件处理视频:

  • NVENC/NVDEC(NVIDIA):专用编码/解码引擎
  • QSV(Intel):搭载集成显卡的 Intel CPU 上的 Quick Sync Video
  • AMF(AMD):适用于 AMD GPU 的 Advanced Media Framework
  • VideoToolbox(Apple):macOS/iOS 硬件加速
  • VAAPI(Linux):Video Acceleration API(适用于 Linux 上的 Intel、AMD)
  • Vulkan Video(跨平台,FFmpeg 7.1+/8.0):基于计算着色器的编解码器
性能对比(2025 年基准测试)
方法速度画质功耗使用场景
libx264(CPU)1x最佳高对画质要求高
libx265(CPU)0.3x最佳非常高归档
h264_nvenc10–20x良好低实时、流媒体
hevc_nvenc8–15x良好低4K 流媒体
h264_qsv8–15x良好非常低笔记本电脑、高能效
h264_amf8–15x良好低AMD 系统

核心工作流

  1. 检测可用设备:ffmpeg -hwaccels、ffmpeg -encoders | grep <api>
  2. 选择后端:优先使用厂商原生后端(NVIDIA 使用 NVENC,Intel 使用 QSV,AMD 使用 AMF,Apple 使用 VideoToolbox)。需要跨平台可移植性时使用 Vulkan。
  3. 尽可能构建完整的 GPU 流水线:
    • 在 -i 之前添加 -hwaccel <api> 和 -hwaccel_output_format <api>
    • 使用 GPU 端滤镜(scale_cuda、scale_vulkan、vpp_qsv 等)
    • 使用匹配的硬件编码器
  4. 调整画质:-preset(NVENC 使用 p1-p7)、-cq/-qp/-global_quality、前瞻,以及空间/时间 AQ
  5. 验证:使用 ffmpeg -benchmark 进行基准测试,并通过 nvidia-smi dmon、intel_gpu_top 等监控 GPU

各后端的最简示例

# NVIDIA NVENC
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
  -c:v h264_nvenc -preset p4 -b:v 5M output.mp4

# Intel QSV
ffmpeg -hwaccel qsv -hwaccel_output_format qsv -i input.mp4 \
  -c:v h264_qsv -preset medium -b:v 5M output.mp4

# AMD AMF
ffmpeg -i input.mp4 -c:v h264_amf -quality balanced -b:v 5M output.mp4

# Apple VideoToolbox
ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 5M output.mp4

# Linux VAAPI
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 \
  -hwaccel_output_format vaapi -i input.mp4 \
  -c:v h264_vaapi -b:v 5M output.mp4

# Vulkan (cross-platform)
ffmpeg -init_hw_device vulkan -i input.mp4 \
  -c:v h264_vulkan -b:v 5M output.mp4

完整 GPU 流水线模式(关键)

ffmpeg -y -vsync 0 \
  -hwaccel cuda -hwaccel_output_format cuda \
  -i input.mp4 \
  -vf scale_cuda=1280:720 \
  -c:v h264_nvenc -preset p4 -b:v 5M \
  -c:a copy \
  output.mp4

省略 -hwaccel_output_format 可能会使吞吐量降低多达 50%,因为解码后的帧会在不显眼的情况下经由 CPU 内存往返传输。有关内存流转图和最佳实践,请参阅 references/gpu-memory-and-troubleshooting.md。

跨厂商滤镜速查表

操作NVIDIAIntelAMD/Linux跨平台
缩放scale_cuda, scale_nppvpp_qsv, scale_qsvscale_vaapiscale_vulkan, scale_opencl, libplacebo
叠加overlay_cuda--overlay_vulkan, overlay_opencl
去隔行bwdif_cudavpp_qsvdeinterlace_vaapibwdif_vulkan
降噪bilateral_cuda--nlmeans_vulkan, nlmeans_opencl
色度键控chromakey_cuda--colorkey_opencl
色调映射(HDR->SDR)--tonemap_vaapilibplacebo, tonemap_opencl
填充/加黑边pad_cuda (8.0+)--pad_opencl

常见用例速配

实时流媒体(低延迟)
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input \
  -c:v h264_nvenc -preset p3 -tune ll -zerolatency 1 -b:v 6M \
  -f flv rtmp://server/live/stream
VOD(质量目标)
ffmpeg -i input.mp4 \
  -c:v hevc_nvenc -preset p6 -tune hq \
  -rc vbr -cq 22 -b:v 0 \
  -rc-lookahead 32 -spatial-aq 1 \
  output.mp4
批量/并行编码
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input1.mp4 -c:v h264_nvenc output1.mp4 &
ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input2.mp4 -c:v h264_nvenc output2.mp4 &
wait
Docker(GPU 直通)
docker run --gpus all --rm -v $(pwd):/data \
  jrottenberg/ffmpeg:nvidia \
  -hwaccel cuda -hwaccel_output_format cuda \
  -i /data/input.mp4 -c:v h264_nvenc /data/output.mp4

最佳实践

  1. 尽可能使用完整的 GPU 流水线,避免 CPU/GPU 内存传输
  2. 匹配解码和编码硬件,以获得最佳性能
  3. 审慎选择预设——速度更快并不总是意味着画质更好
  4. 对画质要求高的编码启用 lookahead 和 AQ
  5. 在目标硬件上测试——不同 GPU 代际的画质表现各不相同
  6. 处理高分辨率内容时监控 GPU 内存
  7. 笔记本电脑和服务器应考虑能效
  8. 定期更新驱动,以提升性能并获得新功能

参考索引

如需深入了解各后端,请参阅:

评论

支持 Markdown