VOOZH about

URL: https://wiki.archlinux.org/title/Hardware_video_acceleration_(Русский)

⇱ Hardware video acceleration (Русский) - ArchWiki


Jump to content
From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Hardware video acceleration. Дата последней синхронизации: 11 июня 2025. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Аппаратное ускорение видео позволяет выполнять операции кодирования и декодирования видео на стороне видеокарты, разгружая процессор и экономя энергию.

Существуют несколько реализаций этой технологии на Linux:

  • Video Acceleration API (VA-API) — разработанная Intel спецификация и свободная библиотека, предоставляющая аппаратное ускорение кодирования и декодирования видео.
  • Video Decode and Presentation API for Unix (VDPAU) — разработанная NVIDIA свободная библиотека и API для переноса части процесса декодирования видео и его постобработки на сторону видеокарты.
  • Advanced Media Framework SDK (AMF) — разработанный AMD свободный фреймворк, который обеспечивает «оптимальный» доступ к видеокартам AMD для обработки мультимедиа с помощью стека AMDGPU PRO.
  • NVDEC/NVENC — разработанные NVIDIA проприетарные API для аппаратного ускорения видео, используемые для Fermi и более новых видеокарт.
  • Vulkan Video — расширение Vulkan для аппаратного кодирования и декодирования видео.

Также всесторонний обзор поддержки данных технологий со стороны драйверов и приложений доступен в разделе #Сравнительные таблицы.

Установка

Intel

VA-API

Свободные драйверы Intel graphics поддерживают VA-API:

Примечание Skylake и более новые поколения также требуют linux-firmware.

Смотрите также список поддерживаемого оборудования и доступных возможностей на сайте Intel.

Vulkan

Свободный Vulkan-драйвер ANV, предоставляемый пакетом vulkan-intel, поддерживает Vulkan Video.

Примечание Для включения Vulkan Video требуются дополнительные действия, описанные в разделе #Настройка Vulkan Video.

Intel Video Processing Library (Intel VPL)

Для Intel VPL установите базовую библиотеку libvpl и как минимум одну из реализаций:

  • vpl-gpu-rt: поддерживает Tiger Lake и более новую графику Intel
  • intel-media-sdk (разработка прекращена): поддерживает старую графику Intel

NVIDIA

Свободный драйвер Nouveau поддерживает как VA-API, так и VDPAU:

  • GeForce 8 series и новее (до GeForce GTX 750) поддерживаются mesa.
  • Необходим nouveau-fwAUR — пакет с микропрограммой, которая на сегодняшний день извлекается из бинарного драйвера NVIDIA.

Проприетарный драйвер NVIDIA поддерживает следующие технологии с помощью пакета nvidia-utils:

AMD/ATI

Свободные драйверы AMDGPU и ATI поддерживают как VA-API, так и VDPAU через mesa:

  • VA-API на Radeon HD 2000 и новее.
  • VDPAU на Radeon R600 и новее.

Свободный Vulkan-драйвер RADV, предоставляемый пакетом vulkan-radeon, поддерживает Vulkan Video.

Проприетарный драйвер AMDGPU PRO работает поверх AMDGPU и в дополнение к VA-API и VDPAU также поддерживает AMF.

  • AMF на Fiji и более новых видеокартах поддерживается amf-amdgpu-proAUR.
Примечание
  • Вам может понадобиться настроить используемые вами приложения на использование Vulkan-драйвера AMDGPU PRO.
  • Кодирование HEVC может быть недоступно на Navi и более старых видеокартах.

Слои трансляции

  • libvdpau-va-gl — Драйвер, который позволяет приложениям VDPAU использовать OpenGL/VAAPI. Только H.264.
https://github.com/i-rinat/libvdpau-va-gl || libvdpau-va-gl
  • nvidia-vaapi-driver — Драйвер, который позволяет приложениям VA-API (в первую очередь Firefox) использовать CUDA NVDEC.
https://github.com/elFarto/nvidia-vaapi-driver/ || libva-nvidia-driver
Примечание Хотя libva-nvidia-driver выполняет аппаратное декодирование видео, текущие ограничения на управление питанием NVIDIA приводят к тому, что система потребляет больше энергии, чем при декодировании процессором.

Проверка

Аппаратное ускорение, скорее всего, хорошо заработает по умолчанию. Проверить это можно описанными ниже способами.

Совет
  • mpv отлично подходит для проверки аппаратного ускорения на практике. Запустите mpv --hwdec=auto видеофайл и изучите выводимый в консоли журнал. Подробнее в документации mpv: hwdec.
  • nvtop позволяет проверить уровень нагрузки на декодер (строка «DEC» вверху) во время воспроизведения видео на видеокартах AMD, Intel и NVIDIA.
  • Для Intel можно запустить intel_gpu_top из пакета intel-gpu-tools (от имени суперпользователя) для мониторинга нагрузки, например, во время воспроизведения видео. Ненулевое значение video означает работу аппаратного ускорения видео.
  • Для AMD можно использовать radeontop, но отображение нагрузки на декодер может не работать на некоторых видеокартах [3].
  • При использовании любой видеокарты вы также можете проверить нагрузку на процессор с помощью любого системного монитора вроде htop. При включенном аппаратном ускорении видео нагрузка на процессор должна быть существенно ниже, чем без ускорения, особенно при воспроизведении видео в высоком разрешении (4K и более) или на маломощных ноутбуках.

Проверка VA-API

Проверьте настройки VA-API, выполнив vainfo (предоставляется пакетом libva-utils):

$ vainfo
libva info: VA-API version 0.39.4
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.39 (libva 1.7.3)
vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.7.3
vainfo: Supported profile and entrypoints
 VAProfileMPEG2Simple  :	VAEntrypointVLD
 VAProfileMPEG2Simple  :	VAEntrypointEncSlice
 VAProfileMPEG2Main  :	VAEntrypointVLD
 VAProfileMPEG2Main  :	VAEntrypointEncSlice
 VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
 VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
 VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
 VAProfileH264Main  :	VAEntrypointVLD
 VAProfileH264Main  :	VAEntrypointEncSlice
 VAProfileH264Main  :	VAEntrypointEncSliceLP
 VAProfileH264High  :	VAEntrypointVLD
 VAProfileH264High  :	VAEntrypointEncSlice
 VAProfileH264High  :	VAEntrypointEncSliceLP
 VAProfileH264MultiviewHigh  :	VAEntrypointVLD
 VAProfileH264MultiviewHigh  :	VAEntrypointEncSlice
 VAProfileH264StereoHigh  :	VAEntrypointVLD
 VAProfileH264StereoHigh  :	VAEntrypointEncSlice
 VAProfileVC1Simple  :	VAEntrypointVLD
 VAProfileVC1Main  :	VAEntrypointVLD
 VAProfileVC1Advanced  :	VAEntrypointVLD
 VAProfileNone  :	VAEntrypointVideoProc
 VAProfileJPEGBaseline  :	VAEntrypointVLD
 VAProfileJPEGBaseline  :	VAEntrypointEncPicture
 VAProfileVP8Version0_3  :	VAEntrypointVLD
 VAProfileVP8Version0_3  :	VAEntrypointEncSlice
 VAProfileHEVCMain  :	VAEntrypointVLD
 VAProfileHEVCMain  :	VAEntrypointEncSlice

VAEntrypointVLD означает, что видеокарта способна декодировать данный формат, а VAEntrypointEncSlice означает, что данный формат можно кодировать.

В данном примере используется драйвер i965:

vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.7.3

Если при выполнении vainfo отображается следующая ошибка:

libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

Необходимо задать корректный драйвер, см. #Настройка VA-API.

Проверка VDPAU

Установите пакет vdpauinfo, чтобы получить полный отчёт о конфигурации драйвера VDPAU и убедиться, что он загружен корректно:

$ vdpauinfo
display: :0 screen: 0
API version: 1
Information string: G3DVL VDPAU Driver Shared Library version 1.0

Video surface:

name width height types
-------------------------------------------
420 16384 16384 NV12 YV12
422 16384 16384 UYVY YUYV
444 16384 16384 Y8U8V8A8 V8U8Y8A8

Decoder capabilities:

name level macbs width height
----------------------------------------------------
MPEG1 --- not supported ---
MPEG2_SIMPLE 3 9216 2048 1152
MPEG2_MAIN 3 9216 2048 1152
H264_BASELINE 41 9216 2048 1152
H264_MAIN 41 9216 2048 1152
H264_HIGH 41 9216 2048 1152
VC1_SIMPLE 1 9216 2048 1152
VC1_MAIN 2 9216 2048 1152
VC1_ADVANCED 4 9216 2048 1152
...

Проверка Vulkan Video

Установите пакет vulkan-tools и используйте команду vulkaninfo для получения информации о доступных расширениях для работы с видео:

$ vulkaninfo | grep VK_KHR_video_
	VK_KHR_video_decode_av1  : extension revision 1
	VK_KHR_video_decode_h264  : extension revision 9
	VK_KHR_video_decode_h265  : extension revision 8
	VK_KHR_video_decode_queue  : extension revision 8
	VK_KHR_video_encode_h264  : extension revision 14
	VK_KHR_video_encode_h265  : extension revision 14
	VK_KHR_video_encode_queue  : extension revision 12
	VK_KHR_video_maintenance1  : extension revision 1
	VK_KHR_video_queue  : extension revision 8

Настройка

Несмотря на то, что видеодрайвер должен автоматически активировать поддержку аппаратного ускорения видео с помощью VA-API и VDPAU, в некоторых случаях может потребоваться настроить VA-API/VDPAU вручную. Перед тем как продолжать чтение данного раздела, просмотрите раздел #Проверка.

Названия драйверов по умолчанию, которые будут использоваться при отсутствии настроек, угадываются системой. Однако зачастую это может не работать. Предполагаемые значения можно просмотреть в журнале Xorg (~/.local/share/xorg/Xorg.0.log при запуске от имени обычного пользователя или /var/log/Xorg.0.log при запуске от имени root):

$ grep -iE 'vdpau | dri driver' журнал_xorg
(II) RADEON(0): [DRI2] DRI driver: radeonsi
(II) RADEON(0): [DRI2] VDPAU driver: radeonsi

В данном случае по умолчанию используется radeonsi для VA-API и VDPAU.

Примечание Если используется GDM, выполните вместо этого следующую команду: journalctl -b --grep='vdpau | dri driver'.

Имейте в виду, что эти строки не отображают настройки: значения не изменятся даже после выбора другого драйвера.

Настройка VA-API

Драйвер VA-API можно переопределить с помощью переменной окружения LIBVA_DRIVER_NAME:

  • Intel graphics:
  • NVIDIA:
    • Укажите nouveau, если используется Nouveau.
    • Укажите nvidia, если используется NVIDIA NVDEC.
  • AMD:
    • Укажите radeonsi, если используется AMDGPU.
Примечание
  • Установленные драйверы находятся в /usr/lib/dri/ и используются как /usr/lib/dri/${LIBVA_DRIVER_NAME}_drv_video.so.
  • Некоторые драйверы устанавливаются несколько раз под разными именами в целях совместимости. Их список можно увидеть, выполнив команду sha1sum /usr/lib/dri/* | sort.
  • LIBVA_DRIVERS_PATH может использоваться для переопределения расположения драйверов VA-API.
  • Начиная с версии 12.0.1, Mesa предоставляет radeonsi вместо gallium.

Настройка VDPAU

Драйвер VDPAU можно переопределить с помощью переменной окружения VDPAU_DRIVER.

Корректное название драйвера зависит от конфигурации:

  • Если используется Intel graphics, необходимо задать va_gl.
  • Если используется свободный драйвер AMD, задайте radeonsi.
  • Если используется свободный драйвер Nouveau, задайте nouveau.
  • Если используется проприетарный драйвер NVIDIA, задайте nvidia.
Примечание
  • Установленные драйверы находятся в /usr/lib/vdpau/ и используются как /usr/lib/vdpau/libvdpau_${VDPAU_DRIVER}.so.
  • Некоторые драйверы устанавливаются несколько раз под разными именами в целях совместимости. Их список можно увидеть, выполнив команду sha1sum /usr/lib/vdpau/*.
  • В случае с конфигурацией с гибридной графикой (как с NVIDIA, так и с AMD), может потребоваться задать переменную окружения DRI_PRIME=1. См. статью PRIME для получения более подробной информации.

Настройка Vulkan Video

Настройка приложений

Мультимедийные фреймворки:

Видеоплееры:

Веб-браузеры:

Запись и потоковое вещание:

Решение проблем

Ошибка "Failed to open VDPAU backend"

Необходимо задать переменную VDPAU_DRIVER, указывающую на корректный драйвер. См. #Настройка VDPAU.

Ошибка "init failed" с VAAPI

Данная ошибка (например, libva: /usr/lib/dri/i965_drv_video.so init failed) может происходить из-за неправильного определения Wayland. Одно из решений — сбросить переменную $DISPLAY, таким образом, mpv, MPlayer, VLC и т.д. не будут исходить из того, что используется X11. Также можно добавить аргумент --gpu-context=wayland, если используется mpv.

Ошибка также может возникать при выборе неправильного драйвера VA-API.

Повреждённое видео при декодировании с помощью драйвера AMDGPU

В некоторых приложениях, некорректно обрабатывающих 10-битную глубину цвета, может наблюдаться повреждение изображения при использовании аппаратного декодирования видео. В качестве обходного пути можно запустить проблемное приложение с переменной окружения allow_rgb10_configs=false. [4]

Сравнительные таблицы

Драйверы VA-API

Кодек libva-intel-driver [5] intel-media-driver [6] mesa [7] [8] libva-nvidia-driver
(адаптер NVDEC)
Декодирование
MPEG-2 GMA 4500 и новее Broadwell и новее Radeon HD 6000 и новее
GeForce 8 и новее1
Смотрите #Драйвер NVIDIA
H.263/MPEG-4 Visual4 Нет Нет Radeon HD 6000 и новее
VC-1 Sandy Bridge и новее Broadwell и новее Radeon HD 2000 и новее
GeForce 9300 и новее1
H.264/MPEG-4 AVC GMA 45002, Ironlake и новее Radeon HD 2000 и новее
GeForce 8 и новее1
H.265/HEVC 8bit Cherryview/Braswell и новее Skylake и новее Radeon R9 Fury и новее
H.265/HEVC 10bit Broxton и новее Broxton/Apollo Lake и новее Radeon 400 и новее
VP8 Broadwell и новее Broadwell и новее Нет
VP9 8bit Broxton и новее
Гибридное: от Haswell refresh до Skylake3
Broxton/Apollo Lake и новее Raven Ridge + Radeon RX 5000 и новее
VP9 10bit & 12bit Kaby Lake и новее Kaby Lake и новее
AV1 8bit & 10bit Нет Tiger Lake и новее Radeon RX 6600 и выше/новее
Кодирование
MPEG-2 Ivy Bridge и новее Broadwell и новее
кроме Broxton/Apollo Lake
Нет Нет5
H.264/MPEG-4 AVC Sandy Bridge и новее Broadwell и новее Radeon HD 7000 и новее
H.265/HEVC 8bit Skylake и новее Skylake и новее Radeon 400 и новее
H.265/HEVC 10bit Kaby Lake и новее Kaby Lake и новее Raven Ridge + Radeon RX 5000 и новее
VP8 Cherryview/Braswell и новее
Гибридное: от Haswell до Skylake3
Нет
VP9 8bit Kaby Lake и новее Ice Lake и новее
VP9 10bit & 12bit Нет
AV1 8bit & 10bit Alchemist и новее Radeon RX 7900 и выше/новее
  1. До GeForce GTX 750.
  2. Поддерживается libva-intel-driver-g45-h264AUR[ссылка недействительна: package not found].
  3. Гибридный кодировщик VP8 и декодировщик VP9 поддерживается intel-hybrid-codec-driver-gitAUR.
  4. MPEG-4 Part 2 отключён по умолчанию из-за ограничений VAAPI. Задайте переменную окружения VAAPI_MPEG4_ENABLED=true, если вы всё-таки хотите протестировать данную функцию.
  5. Адаптер NVIDIA CUDA находится в активной разработке, и набор поддерживаемых возможностей может измениться в будущем [9].

Драйверы VDPAU

Кодек Глубина
цвета
mesa [10] [11] nvidia-utils libvdpau-va-gl
(адаптер VA-API)
Декодирование
MPEG-2 8bit Radeon R600 и новее
GeForce 8 и новее1
GeForce 8 и новее Нет
H.263/MPEG-4 Visual 8bit Radeon HD 6000 и новее
GeForce 200 и новее1
GeForce 200 и новее
VC-1 8bit Radeon HD 2000 и новее
GeForce 9300 и новее1
GeForce 8 и новее2
H.264/MPEG-4 AVC 8bit Radeon HD 2000 и новее
GeForce 8 и новее1
GeForce 8 и новее Смотрите #Драйверы VA-API
H.265/HEVC 8bit Radeon R9 Fury и новее GeForce 900 и новее3 Нет
10bit Radeon 400 и новее Нет4
VP9 8bit Raven Ridge + Radeon RX 5000 и новее GeForce 900 и новее3
10bit/12bit Нет4
AV1 8bit Radeon RX 6600 и выше/новее GeForce 30 и новее5
10bit Нет4
  1. До GeForce GTX 750.
  2. Кроме GeForce 8800 Ultra, 8800 GTX, 8800 GTS (320/640 MB).
  3. Кроме GeForce GTX 970 и GTX 980.
  4. Реализация NVIDIA ограничена 8-битными потоками [12] [13].
  5. Начиная с драйвера версии 510.[14]

Драйвер NVIDIA

Кодек nvidia-utils [15]
NVDEC NVENC
MPEG-2 Fermi и новее1 Нет
VC-1
H.264/MPEG-4 AVC Kepler и новее2
H.265/HEVC 8bit Maxwell (GM206) и новее Maxwell (2nd Gen) и новее
H.265/HEVC 10bit Pascal и новее
VP8 Maxwell (2nd Gen) и новее Нет
VP9 8bit Maxwell (GM206) и новее
VP9 10bit & 12bit Pascal и новее
AV1 8bit & 10bit Ampere и новее3 Ada Lovelace и новее
  1. Кроме GM108 (не поддерживается)
  2. Кроме GM108 и GP108 (не поддерживаются)
  3. Кроме A100 (не поддерживается)

Поддержка приложениями

Приложение Декодирование Кодирование Документация
VA-API VDPAU NVDEC Vulkan VA-API NVENC Vulkan
FFmpeg Да Да Да Да Да Да Да FFmpeg#Hardware video acceleration (англ.)
GStreamer Да Нет Да Да Да Да Нет GStreamer#Hardware video acceleration (англ.)
Kodi Да Да Нет Нет Kodi#Hardware video acceleration (англ.)
mpv Да Да Да Да mpv (Русский)#Аппаратное декодирование
VLC media player Да Да Нет Нет VLC media player#Hardware video acceleration (англ.)
MPlayer Нет Да Нет Нет MPlayer#Hardware video acceleration (англ.)
Chromium Да Нет Нет Нет Да Нет Нет Chromium#Hardware video acceleration (англ.)
Firefox Да Нет Нет Нет Нет Нет Нет Firefox (Русский)#Аппаратное ускорение видео
GNOME Web GStreamer ? ? ? GNOME (Русский)/Web (Русский)#Видео