在今天的编解码硬件加速的生态中,视频编解码技术面临着一个“百家争鸣”的局面。为了利用 GPU 的强大算力,各家硬件厂商都推出了自己的加速框架或编码器标准,例如 NVIDIA 的 NVEnc/NVDec、Intel 的 QSV 和 AMD 的 AMF。此外,操作系统层也提供了通用的接口,如微软的 Media Foundation 和 DXVA2 、 D3D12VA ,而开源社区则发展了跨平台的 VAAPI 和 Vulkan 等标准。
这种多样性虽然带来了技术上的进步,但也给普通用户和开发者带来了挑战。由于历史遗留和兼容性问题,一个硬件可能支持多种编码器,但它们在性能、支持的格式和分辨率方面都有所不同。因此,在使用 FFmpeg 进行硬件加速时,很难直观地知道哪种编码器最适合自己的设备。
本项目正是为了解决这一痛点而生。它是一个用于自动化检测系统硬件视频编码器功能的便捷工具。它利用 FFmpeg,通过生成不同分辨率(从 240p 到 8K)的单帧视频文件,并尝试使用各种硬件编码器进行处理,以此来快速判断哪些硬件编码器在您的系统上可用以及它们所支持的分辨率。
脚本会自动检测并报告以下主流硬件编码器及其支持的格式:
| 编码器名称 | 支持的视频编码格式 |
|---|---|
| NVEnc | H.264、H.265、AV1 |
| QSV (Quick Sync Video) | H.264、H.265、AV1、MJPEG、MPEG-2、VP9 |
| AMF (Advanced Media Framework) | H.264、H.265、AV1 |
| Media Foundation | H.264、H.265、AV1 |
| D3D12VA (Direct3D 12 Video Acceleration) | H.264、H.265、AV1 |
| VAAPI (Video Acceleration API) | H.264、H.265、AV1、MJPEG、MPEG-2、VP8、VP9 |
| Vulkan | H.264、H.265、AV1 |
| Apple VideoToolbox | H.264、H.265、ProRes |
脚本会自动检测并报告以下主流硬件解码器及其支持的格式:
| 编码器名称 | 支持的视频编码格式 |
|---|---|
| NVDec (CUVID) | H.264、H.265、AV1、MJPEG、MPEG-1、MPEG-2、MPEG-4、VP8、VP9 |
| QSV (Quick Sync Video) | H.264、H.265、AV1、MJPEG、MPEG-2、VP8、VP9 |
| AMF (Advanced Media Framework) | H.264、H.265、AV1 |
| DXVA2 (DirectX Video Acceleration) | H.264、H.265、MJPEG、MPEG-1、MPEG-2、MPEG-4、VP8 |
| D3D11VA (Direct3D 11 Video Acceleration) | H.264、H.265、AV1、MJPEG、MPEG-1、MPEG-2、MPEG-4、VP8、VP9 |
| D3D12VA (Direct3D 12 Video Acceleration) | H.264、H.265、AV1、MJPEG、MPEG-1、MPEG-2、MPEG-4、VP8、VP9 |
| Vulkan | H.264、H.265、AV1 |
| Apple VideoToolbox | H.264、H.265、MPEG-2、MPEG-4、ProRes、VP9 |
除了基于分辨率的测试外,该工具现在还包含全面的位深和色度采样检测功能。此功能测试硬件编解码器对不同像素格式的支持,帮助您了解硬件编码器和解码器的完整能力。
检测涵盖以下像素格式:
| 位深 | 色度采样 | 像素格式 | 描述 |
|---|---|---|---|
| 8-bit | YUV 4:2:0 | yuv420p | 标准 8-bit 4:2:0 |
| 8-bit | YUV 4:2:2 | yuv422p | 8-bit 4:2:2 |
| 8-bit | YUV 4:4:4 | yuv444p | 8-bit 4:4:4 |
| 10-bit | YUV 4:2:0 | yuv420p10le, p010le | 10-bit 4:2:0 |
| 10-bit | YUV 4:2:2 | yuv422p10le | 10-bit 4:2:2 |
| 10-bit | YUV 4:4:4 | yuv444p10le | 10-bit 4:4:4 |
| 12-bit | YUV 4:2:0 | yuv420p12le | 12-bit 4:2:0 |
| 12-bit | YUV 4:2:2 | yuv422p12le | 12-bit 4:2:2 |
| 12-bit | YUV 4:4:4 | yuv444p12le | 12-bit 4:4:4 |
此功能使用固定的 1280x720 分辨率进行所有测试,并遵循先编码后解码的工作流程。如果硬件编码失败,工具会自动回退到软件编码,以确保解码器测试仍然可以进行。
注意: 此功能默认启用。您可以使用 --no-bitdepth-chroma 命令行参数禁用它。
如果您只需快速使用本工具,这是最简单的方式。
-
安装:通过 pip 从 PyPI 官方仓库 安装 hwcodecdetect。
pip install hwcodecdetect
-
运行:安装完成后,直接在命令行中运行 hwcodecdetect 命令。
hwcodecdetect
如果您希望在不安装 Python 依赖的情况下运行该工具,或者 PyPI 安装失败,请使用此方法。
-
下载:前往项目的 Releases 页面,下载与您的操作系统对应的可执行文件(例如:
HwCodecDetect-Linux-x64、HwCodecDetect-Windows-x64.exe)。 -
(仅限 Linux/macOS)添加执行权限:如果您使用的是 Linux 或 macOS,您需要授予下载的文件执行权限。
# 将 'HwCodecDetect-Linux-x64' 替换为实际下载的文件名 chmod +x HwCodecDetect-Linux-x64 -
运行:直接在终端中执行该文件。
# 适用于 Linux/macOS ./HwCodecDetect-Linux-x64 # 适用于 Windows (例如在 PowerShell 或命令提示符(cmd)中) .\HwCodecDetect-Windows-x64.exe
如果您从 GitHub 克隆了项目源码,并想在本地环境中运行,可以采用此方法。
- 克隆仓库:首先,将项目源码克隆到本地。
git clone https://github.com/whyb/HwCodecDetect.git ./HwCodecDetect
- 安装依赖:进入项目根目录,通过 pip 安装项目所需的依赖。
cd HwCodecDetect pip install .
- 运行:安装完成后,直接在命令行中运行 hwcodecdetect 命令。
hwcodecdetect
