- Вопрос или проблема
- Ответ или решение
- Подключение аппаратного ускорения AMF для FFMPEG на сервере с процессором AMD Ryzen™ 7 7700 в Ubuntu 22.04
- Шаг 1. Обновление ядра
- Шаг 2. Установка драйверов AMD
- Шаг 3. Установка и компиляция AMF
- Шаг 4. Компиляция FFMPEG с поддержкой AMF
- Шаг 5. Проверка доступных аппаратных ускорений
- Шаг 6. Проверка установки
- Заключение
Вопрос или проблема
Я пытался сделать ffmpeg доступным с AMF и получить доступ к аппаратному ускорению AMF (в ffmpeg -hwaccels
), но не смог.
Сначала ядро, с которым сервер поставлялся с Ubuntu 22.04, было 5.15, и после обращения в службу поддержки мне объяснили, что мне нужно обновить ядро, чтобы получить доступ к /dev/dri.
Я обновился до 6.8, и тогда у меня появился доступ к /dev/dri, и я смог использовать ffmpeg 7.1 с работающим vaapi.
В AMD есть собственное аппаратное ускорение под названием AMF, которое позволяет достичь гораздо лучших скоростей и качества транскодирования.
Я установил драйверы AMD GPU, как это объяснено здесь: https://www.amd.com/en/support/download/linux-drivers.html
Я также установил AMF и скомпилировал свою собственную сборку ffmpeg с флагом --enable-amf
.
Тем не менее, в ffmpeg -hwaccels я получаю доступ только к vaapi и drm.
Можете ли вы поделиться, если знаете какое-либо решение этой загадки?
Это инструкции, с помощью которых я установил драйверы, AMF и ffmpeg:
Установить драйверы AMD GPU Pro:
wget https://repo.radeon.com/amdgpu-install…60203-1_all.deb
sudo apt install ./amdgpu-install_6.2.60203-1_all.deb
amdgpu-install --usecase=amf,multimedia -y
sudo amdgpu-install -y --usecase=amf,graphics --accept-eula --opencl=rocr,legacy --vulkan=amdvlk,pro
Руководство по компиляции / Ubuntu – FFmpeg
Компиляция ffmpeg:
sudo apt-get update -qq && sudo apt-get -y install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libgnutls28-dev \
libmp3lame-dev \
libtool \
libvorbis-dev \
meson \
ninja-build \
pkg-config \
texinfo \
wget \
yasm \
zlib1g-dev
sudo apt install libunistring-dev libaom-dev libdav1d-dev -y
mkdir -p ~/ffmpeg_sources ~/bin
// Установка зависимостей
apt-get update && apt-get install -y \
build-essential \
pkg-config \
yasm \
nasm \
libtool \
automake \
cmake \
libx264-dev \
libx265-dev \
libvpx-dev \
libfdk-aac-dev \
libopus-dev \
libaom-dev \
libdrm-dev \
libva-dev \
vainfo
cd ~/ffmpeg_sources && \
wget https://ffmpeg.org/releases/ffmpeg-7.1.tar.bz2 && \
tar -xjf ffmpeg-7.1.tar.bz2 && \
mkdir ffmpeg_build && \
cd ffmpeg_build && \
mkdir include && \
cd include && \
// Установка AMF
git clone https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git && \
mv ~/ffmpeg_build/include/AMF/amf ~/ffmpeg_build/include/ && \
rm -rf AMF && \
// Отсюда: https://askubuntu.com/questions/1440…-ubuntu-20-04-5
// Корректная установка:
cd ~/
git clone https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git
mkdir /usr/local/include/AMF
cd /usr/local/include/AMF
ln -sf ~/AMF/amf/public/include/core
ln -sf ~/AMF/amf/public/include/components
// Установка libvmaf
cd ~/ffmpeg_sources && \
wget https://github.com/Netflix/vmaf/archive/v3.0.0.tar.gz && \
tar xvf v3.0.0.tar.gz && \
mkdir -p vmaf-3.0.0/libvmaf/build && \
cd vmaf-3.0.0/libvmaf && \
meson setup build --buildtype=release --default-library=static --prefix="$HOME/ffmpeg_build" && \
ninja -C build && \
ninja -C build install
cd ~/ffmpeg_sources/ffmpeg-7.1
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs="-lpthread -lm" \
--ld="g++" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-gnutls \
--enable-libaom \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libdav1d \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-libdrm \
--enable-vaapi \
--enable-libvmaf \
--enable-amf \
--enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
make -j$(nproc) install && \
hash -r
./ffmpeg -buildconf
Тест VMAF для сравнения качества:
./ffmpeg -i input.mp4 -i reference.mp4 -lavfi libvmaf -f null -
// пример вывода: [Parsed_libvmaf_0 @ 0x74a0f8004940] VMAF score: 98.930249ate=N/A speed=9.06x
Ответ или решение
Подключение аппаратного ускорения AMF для FFMPEG на сервере с процессором AMD Ryzen™ 7 7700 в Ubuntu 22.04
Если вы пытаетесь настроить аппаратное ускорение AMF (Advanced Media Framework) для FFMPEG на сервере с AMD Ryzen™ 7 7700 под управлением Ubuntu 22.04, но сталкиваетесь с проблемами, не отчаивайтесь. В данной статье предоставлены подробные инструкции, которые помогут вам решить возникшие сложности и настроить систему для использования AMF в FFMPEG.
Шаг 1. Обновление ядра
На начальном этапе вы верно решили обновить ядро вашей операционной системы. Как вы уже заметили, ядро версии 5.15 не предоставляет доступа к /dev/dri, что необходимо для работы с аппаратным ускорением.
-
Убедитесь, что вы используете корректную команду для обновления ядра до версии 6.8:
sudo apt update sudo apt install linux-generic-hwe-22.04
-
Перезагрузите вашу систему, чтобы изменения вступили в силу.
Шаг 2. Установка драйверов AMD
Вы указали, что уже установили драйверы AMD GPU, следуя инструкциям с сайта AMD. Однако убедитесь, что все необходимые компоненты установлены:
-
Установите драйвер AMD Pro:
wget https://repo.radeon.com/amdgpu-install/6.2/6.2.60203-1_all.deb sudo apt install ./amdgpu-install_6.2.60203-1_all.deb
-
Выполните установку, добавив флаги для AMF и мультимедиа:
amdgpu-install --usecase=amf,multimedia -y
Шаг 3. Установка и компиляция AMF
Вы правильно выполнили установку и компиляцию AMF, но, возможно, есть некоторые нюансы, которые нужно учесть для успешного подключения.
-
Убедитесь, что вы клонировали репозиторий AMF и правильно его переместили:
git clone https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git sudo mkdir -p /usr/local/include/AMF sudo mv AMF/amf/public/include/core /usr/local/include/AMF/ sudo mv AMF/amf/public/include/components /usr/local/include/AMF/
-
Убедитесь, что вы установили все зависимости для сборки FFMPEG, включая необходимые библиотеки и инструменты.
Шаг 4. Компиляция FFMPEG с поддержкой AMF
При компиляции убедитесь, что флаги конфигурации включают --enable-amf
. Следующий процесс будет включать в себя:
-
Перейдите в папку с исходным кодом FFMPEG и выполните конфигурацию:
cd ~/ffmpeg_sources/ffmpeg-7.1 PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --enable-gpl \ --enable-amf \ ...
Обратите внимание, что
...
замените на другие необходимые вам флаги. -
Скомпилируйте и установите FFMPEG:
make -j$(nproc) && make install
Шаг 5. Проверка доступных аппаратных ускорений
После успешной установки и компиляции запустите команду:
ffmpeg -hwaccels
Если AMF было установлено правильно, оно должно отобразиться в списке доступных аппаратных ускорений.
Шаг 6. Проверка установки
Для проверки успешности установки вы можете выполнить тестовую команду с входным видеофайлом:
ffmpeg -i input.mp4 -c:v h264_amf output.mp4
Заключение
Надеюсь, эти шаги помогут вам успешно настроить аппаратное ускорение AMF для FFMPEG на вашем сервере с AMD Ryzen™ 7 7700 в Ubuntu 22.04. Если после всех выполненных процедур AMF все равно не отображается, возможно, стоит проверить совместимость вашей видеокарты с AMF и подтвердить, что все зависимости и драйверы установлены корректно. Удачи в вашей работе!