3、Intel QSV基础:QSV架构介绍、初始化QSV设备、查看QSV支持的编码器/解码器
各位同学,欢迎来到第三章。从这一章开始,我们正式进入硬件加速的实战环节。
今天聊的是Intel Quick Sync Video,简称QSV。这是Intel集成显卡里自带的一套硬件编解码引擎。说白了,就是CPU里那块“不太起眼”的核显,其实藏着专门干视频活儿的加速单元。
我最早接触QSV是在做视频监控平台的时候。那时候服务器CPU负载动不动就飙到90%,加了QSV转码之后,直接降到30%以下。嗯,从那以后,我对核显的看法彻底变了。
3.1 QSV架构:到底长什么样?
先看一张图,把QSV的整体架构理清楚。
从上往下看,三层结构很清晰:
- CPU 主控层:跑你的应用程序、FFmpeg 进程、驱动栈。说白了,它负责发号施令。
- 媒体引擎层:这是 QSV 的核心调度模块。它管理编解码会话、分配显存、调度 VPP 管线。
- 硬件编解码单元:真正的“苦力”。每个单元都是固定功能的 ASIC 电路,只干一件事——比如 H.264 编码器只管编码,不干别的。
个人经验: 我刚开始以为 QSV 是纯硬件干活,CPU 可以完全歇着。后来发现不对——驱动层和媒体引擎层仍然会占用少量 CPU 资源。不过相比纯软编,CPU 占用能降 80% 以上,已经很香了。
3.2 初始化QSV设备:动手前的第一步
在 FFmpeg 里用 QSV,第一步就是初始化设备。说白了,就是告诉 FFmpeg:“嘿,我要用 Intel 核显干活了。”
命令很简单:
ffmpeg -init_hw_device qsv=qsv -hwaccel qsv -i input.mp4 -f null -
这条命令干了三件事:
-init_hw_device qsv=qsv:创建一个名为“qsv”的硬件设备上下文。-hwaccel qsv:启用 QSV 硬件加速解码。-f null -:只解码,不输出文件。用来测试设备是否正常。
如果执行成功,你会看到类似这样的输出:
[AVHWDeviceContext @ 0x...] Initialize MFX session: API version 2.0, implementation version 1.35
[AVHWDeviceContext @ 0x...] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics
看到 Initialize MFX session 就说明设备初始化成功了。
避坑指南: 我曾经在一台服务器上怎么都初始化失败,后来发现是 BIOS 里把核显给禁了。还有一次是驱动版本太老,不支持新 API。所以如果初始化报错,先检查两件事:1) BIOS 里核显是否开启;2) 驱动是否安装正确。
3.3 查看QSV支持的编码器/解码器
不同代际的 Intel 核显,支持的编解码格式差别很大。比如老款 Skylake 只支持 H.264 编码,而新款 Arc 显卡已经支持 AV1 编码了。
怎么查?用 FFmpeg 的 -encoders 和 -decoders 参数,加上 qsv 过滤:
# 查看所有 QSV 编码器
ffmpeg -encoders | grep qsv
# 查看所有 QSV 解码器
ffmpeg -decoders | grep qsv
输出示例:
V..... h264_qsv H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (qsv)
V..... hevc_qsv HEVC (H.265) (qsv)
V..... mjpeg_qsv MJPEG (qsv)
V..... mpeg2_qsv MPEG-2 (qsv)
V..... vp9_qsv VP9 (qsv)
V..... av1_qsv AV1 (qsv)
注意前面的 V 表示视频编码器,..... 表示能力标记。如果某个编码器没出现,说明你的硬件不支持。
我整理了一张常见 Intel 平台的 QSV 编解码支持表,方便你对照:
| Intel 平台 | GPU 架构 | H.264 编码 | HEVC 编码 | VP9 解码 | AV1 解码 | AV1 编码 |
|---|---|---|---|---|---|---|
| Skylake (6代) | Gen9 | ✅ | ❌ | ❌ | ❌ | ❌ |
| Kaby Lake (7代) | Gen9.5 | ✅ | ✅ 8bit | ❌ | ❌ | ❌ |
| Tiger Lake (11代) | Gen12 | ✅ | ✅ 10bit | ✅ | ✅ | ❌ |
| Alder Lake (12代) | Gen12.2 | ✅ | ✅ 10bit | ✅ | ✅ | ❌ |
| Arc A系列 | Xe HPG | ✅ | ✅ 10bit | ✅ | ✅ | ✅ |
核心要点: 查支持列表是每个 QSV 项目的“第一道门槛”。我建议你在项目开始前,先跑一遍
ffmpeg -encoders | grep qsv,把结果截图保存。这样后面遇到编码失败的问题,可以快速排除硬件不支持的可能性。
3.4 更细粒度的能力查询
有时候光知道“支持 HEVC 编码”还不够。你还想知道:支持 10bit 吗?支持 B 帧吗?最大分辨率是多少?
这时候可以用 FFmpeg 的 -h encoder=hevc_qsv 来查:
ffmpeg -h encoder=hevc_qsv
输出会包含类似这样的信息:
Encoder hevc_qsv [HEVC (H.265) (qsv)]
General capabilities: dr1 delay
Threading capabilities: none
Supported pixel formats: nv12 p010le
Supported rate control methods: cbr vbr cqp icq la_icq
Supported profiles: main main10
Maximum encoding resolution: 8192x8192
这里的信息非常关键:
p010le表示支持 10bit 像素格式。main10表示支持 10bit 编码 profile。8192x8192是最大分辨率,8K 以内都没问题。
我的习惯: 每次拿到一台新机器,我都会先跑一遍
ffmpeg -h encoder=*_qsv 把所有 QSV 编码器的能力 dump 出来,存成一个文本文件。这样后面写脚本的时候,直接查文件就行,不用每次都跑命令。
3.5 本章小结
这一章我们干了三件事:
- 理清了 QSV 的三层架构:CPU 主控层 → 媒体引擎层 → 硬件编解码单元。
- 学会了用
-init_hw_device qsv初始化 QSV 设备。 - 掌握了用
ffmpeg -encoders | grep qsv和ffmpeg -h encoder=*_qsv查询编解码能力。