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, проверить, не включена ли принудительно программная отрисовка, и посмотреть, хватает ли видеопамяти.
Полезные ресурсы
- Hardware video acceleration (ArchWiki): общая картина: VA-API, VA-API через VDPAU, GStreamer и статусы драйверов.
- VA-API (ArchWiki): список пакетов, переменные окружения и разбор типичных ошибок.
Заключение
Видеоускорение на AMD это четыре пакета и одна проверка vainfo. Если профили видны, дальше остаётся только включить --hwdec=vaapi в mpv, «Аппаратное декодирование» в VLC и флаг VaapiVideoDecoder в Chromium, а затем убедиться по логу или chrome://gpu, что декодер действительно аппаратный. NVIDIA с её NVDEC включает ускорение проще, но на AMD полный набор кодеков лежит именно в VA-API.
Не получилось? Поможем настроить
Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Комментарии