Skip to main content

A cross-platform tool to automatically detect and test hardware video decoders/encoders using FFmpeg.

Project description

FFmpeg Hardware Codec Detect Script(HwCodecDetect)

中文版

Today's hardware-accelerated video codec landscape is a "field of a hundred schools of thought." To leverage the immense power of GPUs, hardware manufacturers have introduced their own acceleration frameworks and encoding standards, such as NVIDIA's NVEnc/NVDec, Intel's QSV, and AMD's AMF. Additionally, operating systems provide universal APIs like Microsoft's Media Foundation, DXVA2, and D3D12VA, while the open-source community has developed cross-platform standards like VAAPI and Vulkan.

While this diversity drives technological progress, it also presents a challenge for users and developers. Due to historical issues and compatibility quirks, a single piece of hardware might support multiple encoders, but they can differ significantly in performance, supported formats, and resolutions. As a result, when using FFmpeg for hardware acceleration, it's not always clear which encoder is best suited for a specific device.

This project was created to solve this very problem. It's a convenient tool for automatically detecting the hardware video encoder capabilities of your system. Using FFmpeg, it generates single-frame video files at various resolutions (from 240p to 8K) and attempts to process them with different hardware encoders. This allows it to quickly determine which hardware encoders are available on your system and what resolutions they support.

Key Features

Encoders

The script automatically detect and reports on the following major hardware encoders and their supported formats:

Encoder Name Supported Video Formats
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

Decoders

The script automatically detect and reports on the following major hardware decoders and their supported formats:

Decoder Name Supported Video Formats
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
Vulkan H.264、H.265、AV1
Apple VideoToolbox H.264、H.265、MPEG-2、MPEG-4、ProRes

Bit-depth and Chroma Subsampling Detection

In addition to resolution-based testing, the tool now includes comprehensive bit-depth and chroma subsampling detection. This feature tests hardware codec support for different pixel formats, helping you understand the full capabilities of your hardware encoders and decoders.

The detection covers the following pixel formats:

Bit-depth Chroma Subsampling Pixel Format Description
8-bit YUV 4:2:0 yuv420p Standard 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

This feature uses a fixed resolution of 1280x720 for all tests and follows the encode-then-decode workflow. If hardware encoding fails, the tool automatically falls back to software encoding to ensure decoder tests can still be performed.

Note: This feature is enabled by default. You can disable it using the --no-bitdepth-chroma command-line parameter.

How to Use

You can install and use HwCodecDetect in two ways.

Method 1: Install via PyPI (Recommended)

This is the easiest method if you just want to use the tool quickly.

  1. Install: Use pip to install hwcodecdetect from the official PyPI repository.

    pip install hwcodecdetect
    
  2. Run: After installation, run the hwcodecdetect command directly from your terminal.

    hwcodecdetect
    

Method 2: Download and Run Executable (Standalone)

Use this method if you prefer to run the tool without installing Python dependencies, or if the PyPI installation fails.

  1. Download: Go to the project's Releases page and download the executable file corresponding to your operating system (e.g., HwCodecDetect-Linux-x64, HwCodecDetect-Windows-x64.exe).

  2. (Linux/macOS only) Add Execute Permission: If you are on Linux or macOS, you need to grant the downloaded file execute permission.

    # Replace 'HwCodecDetect-Linux-x64' with the actual downloaded filename
    chmod +x HwCodecDetect-Linux-x64
    
  3. Run: Execute the file directly from your terminal.

    # For Linux/macOS
    ./HwCodecDetect-Linux-x64
    
    # For Windows (e.g., in PowerShell or Command Prompt)
    .\HwCodecDetect-Windows-x64.exe
    

Method 3: Install from Source

Use this method if you have cloned the project source code from GitHub and want to run it locally.

  1. Clone the repository: First, clone the project source code to your local machine.

    git clone https://github.com/whyb/HwCodecDetect.git ./HwCodecDetect
    
  2. Install dependencies: Navigate into the project's root directory and use pip to install the required dependencies.

    cd HwCodecDetect
    pip install .
    
  3. Run: After the installation is complete, run the hwcodecdetect command directly.

    hwcodecdetect
    

Final effect

Here are some possible results from a local test run: test result

Star History

Star History Chart

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hwcodecdetect-0.2.4.tar.gz (24.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hwcodecdetect-0.2.4-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

File details

Details for the file hwcodecdetect-0.2.4.tar.gz.

File metadata

  • Download URL: hwcodecdetect-0.2.4.tar.gz
  • Upload date:
  • Size: 24.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hwcodecdetect-0.2.4.tar.gz
Algorithm Hash digest
SHA256 780a95f359f8e584abfd0b4e653e1b56d480e6f78f1413d6dba04e0ca66e898b
MD5 140d9cb414c2ddf6ec774b88cf16f975
BLAKE2b-256 3e7344b347a5578ff678312653f7f84878a4ab30428b86575f6f0da0092317c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for hwcodecdetect-0.2.4.tar.gz:

Publisher: pypi-publish.yml on whyb/HwCodecDetect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hwcodecdetect-0.2.4-py3-none-any.whl.

File metadata

  • Download URL: hwcodecdetect-0.2.4-py3-none-any.whl
  • Upload date:
  • Size: 23.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for hwcodecdetect-0.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 3ee071b7c9d537716ae64084ff91f5e6198a4fcb8c9d300335ee42a4c0ae7c9f
MD5 d5f8081f6d18851d9546ece2b92195fe
BLAKE2b-256 dbb6ea0cbddef470d2c798d361119f1d3d0a9557902b4a1c63aec361ff352227

See more details on using hashes here.

Provenance

The following attestation bundles were made for hwcodecdetect-0.2.4-py3-none-any.whl:

Publisher: pypi-publish.yml on whyb/HwCodecDetect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page