Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

VAAPI на AMD: как включить видеоускорение

Видеоускорение на AMD включается без плясок с бубном: ставишь четыре пакета, проверяешь vainfo — и браузер, mpv и VLC начинают декодировать ролики на движке видеокарты, а не на процессоре. H.264 и HEVC доступны почти на любой карте с GCN, AV1 — начиная с Navi 3x и APU Rembrandt. Разбираемся с пакетами, проверкой, включением и сравнением с NVIDIA.

Что такое VA-API и зачем он AMD?

VA-API — общий интерфейс ускорения видео, через который программа просит GPU декодировать кадр, не вникая в особенности конкретного чипа. За интерфейсом на AMD стоит драйвер Mesa из пакета libva-mesa-driver (файл radeonsi_drv_video.so), который переводит запросы в команды движка VCN — на старых GCN он назывался UVD.

Поэтому VAAPI — основной и самый полный путь. Если он работает, процессор остаётся свободным, ноутбук меньше греется и дольше живёт от батареи, а на слабом APU 4K-ролик идёт без рывков.

VDPAU — более старый API, придуманный в NVIDIA. На AMD он тоже доступен, но не родным: пакет vdpau-va-driver ставит мост, переводящий VDPAU-вызовы в VA-API. Работает, но покрытие профилей беднее, поэтому mpv на AMD разумно запускать с --hwdec=vaapi, а не с --hwdec=vdpau.

Какие пакеты нужны на Arch Linux?

sudo pacman -S libva libva-utils libva-mesa-driver vdpau-va-driver

Что внутри и зачем:

  • libva — базовая библиотека интерфейса, нужна всем без исключения;
  • libva-mesa-driver — драйвер VA-API на Mesa, ядро ускорения на AMD;
  • libva-utils — утилиты vainfo и vadec для проверки и замера;
  • vdpau-va-driver — мост VDPAU → VA-API для старых программ и для VLC, если он цепляется за VDPAU.

Прошивку amdgpu берём из linux-firmware — она почти всегда уже стоит, но проверить стоит:

pacman -Q linux-firmware

Если карта не определилась вообще, начни с проверки amdgpu — тогда без видео не запустится и VA-API, а о том, какой у тебя APU или дискретная карта, я писал здесь.

Для GStreamer доставь ещё один пакет с VA-API-драйверами и элементами декодирования:

sudo pacman -S gst-plugins-vaapi

Как проверить, что декодирование работает?

Главный инструмент — vainfo. Он не открывает окно, а просто спрашивает у драйвера, что он умеет:

vainfo

В нормальном выводе есть три вещи, ради которых всё и затевается: версия драйвера, список профилей и точка входа VAEntrypointVLD. Именно VAEntrypointVLD означает полноценное декодирование бистрома — если она есть, доступны все профили, которые перечислил драйвер.

Ориентируйся на строки H264Main, HEVCMain, HEVCMain10 и, если карта умеет, AV1Profile0. Ничего из этого списка нет — значит, драйвер не подхватился. Покажи, какой именно .so загрузился:

LIBVA_DEBUG=driver vainfo

В логе ищи строку с radeonsi_drv_video.so. Если подгрузился не тот драйвер или он не нашёлся вовсе, задай имя принудительно:

LIBVA_DRIVER_NAME=radeonsi vainfo

Если команда работает только с этой переменной, добавь её в /etc/environment — иначе браузер будет стартовать без неё.

Как включить видеоускорение в mpv, VLC и браузере?

mpv

Самый предсказуемый вариант: hwdec в конфиге, чтобы не вспоминать флаги. В ~/.config/mpv/mpv.conf:

hwdec=vaapi
vo=gpu
gpu-api=vulkan

Для Vulkan-стека Mesa это лучшая связка — если с ней проблемы, посмотри гайд по amdgpu и Vulkan. Однократный запуск для проверки:

mpv --hwdec=vaapi --vo=gpu video.mkv

Убедиться, что декодирование действительно аппаратное, можно по логу:

mpv --msg-level=vd=debug video.mkv 2>&1 | grep -i hwdec

В выводе должно быть Using hardware decoding (vaapi). Если стоит no или software, VA-API не подхватился — возвращайся к vainfo.

VLC

Открой Инструменты → Параметры, переключи вид на «Все», найди Видео и поставь «Аппаратное декодирование» в значение Automatic (VA-API). То же самое из консоли:

vlc --avcodec-hw=vaapi video.mkv

Chrome и Chromium

Функцию включают флагом: открой chrome://flags/#enable-features=VaapiVideoDecoder и переключи в положение Enabled. Запускать с флагом можно и явно:

google-chrome --enable-features=VaapiVideoDecoder

Дальше обязательно зайди на chrome://gpu и посмотри строку Video Decode: должно стоять Hardware accelerated, рядом — VA-API. На двугранных ноутбуках там же полезно снять галку с zero-copy, если ролики идут с артефактами.

Firefox

Открой about:config, найди media.ffmpeg.vaapi.enabled и поставь true. Перезапусти браузер, затем открой about:support и найди строку Compositing рядом с WebRender — аппаратное декодирование там же отмечено пунктом про VA-API. Если галочка снята, а видео всё равно идёт плавно, значит Firefox обошёлся программным декодером.

GStreamer

Проверь, что элементы декодирования на месте:

gst-inspect-1.0 vadecodebin
gst-inspect-1.0 vah264dec

Если элементы есть, сеть для ускоренного проигрывания собирается из decodebin ! vaapidecodebin (в старых версиях) или vadecodebin — актуальный синтаксис зависит от версии gst-plugins-vaapi.

Чем AMD отличается от NVIDIA?

Главное отличие — в том, что у NVIDIA есть собственный выделенный декодер NVDEC, доступный через проприетарный модуль ядра, и программы обращаются к нему напрямую:

ffmpeg -hwaccels

В списке у NVIDIA есть nvdec, cuda, vdpau, а у AMD — vaapi и vdpau. То есть на NVIDIA можно декодировать вообще любым ffmpeg, просто указав -hwaccel nvdec или -hwaccel cuda, без установки дополнительных VA-API-пакетов. На AMD тот же номер через vaapi требует, чтобы Mesa сумела опросить карту, а это упирается в firmware и версию драйвера.

VDPAU на NVIDIA родной, поэтому ускорение включается без мостов. На AMD путь один: мост vdpau-va-driver поверх VA-API. Именно поэтому на AMD опытный пользователь сразу смотрит в VA-API, а не в VDPAU, — профилей больше, а H.264/HEVC/AV1 лежат в одном интерфейсе. Разница в качестве картинки или в частоте кадров при этом невелика: на AMD узкое место обычно не декодер, а сам GPU, если он упирается в пропускную способность памяти или в видеовыход. Тонкости связки карта — монитор — HDMI я разбирал в материале про NVIDIA, PipeWire и звук.

Быстрая проверка со стороны ffmpeg:

ffmpeg -hwaccel vaapi -i video.mp4 -f null - 2>&1 | grep -i vaapi

Что делать, если ускорение не включается?

vainfo не показывает ни одного профиля

Последовательно проверь три вещи. Первая — firmware: sudo pacman -S linux-firmware, затем journalctl -k | grep -i vcn и посмотри, грузится ли микрокод VCN. Вторая — поколение карты: на Northern Islands и Terascale аппаратного H.264 нет вообще, там остаётся только MPEG-2 и VC-1, и никакой пакет это не исправит. Третья — драйвер: LIBVA_DEBUG=driver vainfo покажет, подхватился ли radeonsi_drv_video.so, и если нет — почему.

В браузере чёрный экран или артефакты

Декодер работает, а картинка сыпется — виноват zero-copy-путь. Зайди на chrome://gpu, временно отключи аппаратное ускорение видео, посмотри, появилось ли изображение. Если помогло — оставь галочку снятой. В Firefox аналогично помогает gfx.webrender.software = true в about:config: если с софтверным рендером видео идёт, проблема точно в связке с compositor, а не в VA-API.

mpv всё равно декодирует на процессоре

Сначала --msg-level=vd=debug — если в логе нет строки про vaapi, проверь, что в mpv.conf нет --hwdec=vdpau или auto-copy в другом конфиге. Второй шаг — временно запустить с чистым окружением:

mpv --no-config --hwdec=vaapi --msg-level=vd=debug video.mkv

Если здесь ускорение включилось, значит, перебивает какой-то параметр из твоих файлов конфигурации.

Как узнать, что декодирует именно видеокарта?

intel_gpu_top к AMD отношения не имеет — это утилита для Intel. radeontop покажет загрузку движка VCN на картах, где счётчики вообще есть, но на части моделей он их не отдаёт. Надёжнее всего ориентироваться на строку Using hardware decoding (vaapi) в логе mpv и на Video Decode: Hardware accelerated в браузере.

Частые вопросы

VA-API на AMD быстрее, чем на Intel?

На одинаковом поколении разница меньше, чем кажется: обе платформы декодируют один и тот же бистрём одинаковыми инструкциями. Разница возникает там, где у Intel есть decode block, а у AMD нет, или наоборот — на APU, где экономия энергии важнее, чем абсолютная скорость.

Нужен ли vdpau-va-driver, если всё работает через VA-API?

Для mpv, ffmpeg и современных браузеров — нет. Он нужен программам, которые умеют только VDPAU: старым сборкам VLC, некоторым плеерам и играм, запущенным через Wine с прослойкой DXVK. Стоит пакет копейки, поэтому проще поставить сразу и не гадать.

Как ускорить VP9?

VP9 на AMD аппаратно не декодируется вообще — ни VA-API, ни VDPAU. Единственный вариант — браузер с программным VP9 или AV1 в паре с аппаратным декодером, если источник в этом формате.

Что делать, если vainfo показывает профили, но игра всё равно тормозит?

Тогда узкое место не в декодере. Имеет смысл вернуться к настройке драйвера и Vulkan, проверить, не включена ли принудительно программная отрисовка, и посмотреть, хватает ли видеопамяти.

Полезные ресурсы

Заключение

Видеоускорение на AMD — это четыре пакета и одна проверка vainfo. Если профили видны, дальше остаётся только включить --hwdec=vaapi в mpv, «Аппаратное декодирование» в VLC и флаг VaapiVideoDecoder в Chromium, а затем убедиться по логу или chrome://gpu, что декодер действительно аппаратный. NVIDIA с её NVDEC включает ускорение проще, но на AMD полный набор кодеков лежит именно в VA-API.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max