!Стриминг и запись AMF аппаратным декодированием на Arch Linux
2023-12-11
linuxИсточники:
- Arch Wiki FFmpeg AMF
- Видео гайд на Arch
- Видео гайд на Gentoo
- Видео гайд на Fedora (Wayland)
- Инструкция на Reddit
Инструкция посвящается для тех кто сидит на старых RDNA 1 Polaris 10 т.е RX 470/480/570/580
Кодировщик FFMPEG VAAPI в obs плох и не юзабелен, чаще всего вызывает постоянные тормоза и частый перегруз encoder'а, обычно такое не происходит на новых RDNA 2 видюхах, но вот для RDNA 1 это постоянная проблема.
В этом поможет проприетарные драйвера Vulkan AMDGPU-PRO и AMF AMDGPU-PRO которые позволят нам запустить obs с данными драйверами и использовать AMD AMF H.264/AVC (через FFmpeg) кодировщик который может существенно повысить качество стрима и записи при минимальном затрате производительности и без перегрузов кодировщика.
И ещё AMF НЕ работает с open-source'ным amdgpu драйвером.
Пояснение: AMF Advanced Media Framework это AMD-шный проприетарный конкурент-альтернатива кодировщика NVENC от Nvidia
Некоторые дистрибутивы не поставляют версию FFMPEG скомпилированной поддержкой AMF на дистрибутивах на основе Arch он уже включён по умолчанию, поэтому вам следует проверить, имеет ли ваша версия FFMPEG поддержку AMF, запустив данную команду
ffmpeg -encoders | grep -i amf
Если вывод этой команды такой...
V....D h264_amf AMD AMF H.264 Encoder (codec h264)
V....D hevc_amf AMD AMF HEVC encoder (codec hevc)
Тогда вы готовы к дальнейшей установке
Качаем пакеты проприетарных драйверов
Пояснение: Чтобы у нас появился в obs кодировщик AMD AMF H.264/AVC (via FFmpeg) необходим плагин obs-streamfx
yay -S lib32-vulkan-amdgpu-pro vulkan-amdgpu-pro amf-amdgpu-pro obs-streamfx
Для удобства рекомендуется установить AUR пакет amd-vulkan-prefixes позволяющий легко запускать игры, приложения и obs с определённым icd драйвером, не конфликтуя с основным драйвером который к примеру описан о [смене с vulkan на radv (vulkan-radeon)](TODO: TODO) таким образом можно выжать максимум производительности из игры и записи (или трансляции) из obs.
yay -S amd-vulkan-prefixes
В терминале вводим переменную vk_pro
таким образом вызывая проприетарный
драйвер (у которого есть кодировщик AMF) запустив вместе с ним obs
# Запускаем от обычного пользователя
vk_pro obs
Для тех кто хочет всё запустить вручную необходимо ввести за obs переменную
VK_ICD_FILENAMES="путь до ICD файла amdgpu-pro" obs
VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/amd_pro_icd64.json:/usr/share/vulkan/icd.d/amd_pro_icd32.json obs
В настройках Вывода - вкладке Трансляция и Запись будет доступен данный кодировщик
Теперь для удобства лишь необходимо создать псевдоним (alias) в .bashrc
или
.zshrc
для удобного запуска
alias obs="VK_ICD_FILENAMES=/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd64.json:/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd32.json OBS_USE_EGL=1 obs"
# или
alias obs="VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/amd_pro_icd64.json:/usr/share/vulkan/icd.d/amd_pro_icd32.json OBS_USE_EGL=1 obs"
Не знаю почему, но если я использую amd_pro_icd64.json из /usr/share/vulkan/icd.d/
у меня при изменении битрейта и начав запись obs вылетает впадая в segfault
Если у кого-то также я советую установить отдельные части драйверов AMDGPU-PRO
Vulkan и AMF которые будут закачаны в /opt
и запускать данные VK_ICD_FILENAMES
от туда
git clone https://github.com/DoomPenguin9/amdgpu-pro-vulkan-and-amf-only.git
cd amdgpu-pro-vulkan-and-amf-only
makepkg -si