Если ваш сервер обеспечивает транскодирование видео с помощью FFMPEG, то его можно ускорить с помощью специализированных аппаратных кодировщиков в видеокартах.
NVIDIA, AMD, Intel имеют собственные решения по аппаратному ускорению в видеокартах: QSV у Intel, NVENC у NVIDIA, AMF у AMD.
Из производителей можно выделить Intel, аппаратно кодирующей не только H.264, HEVC, но и VP9. Все они на сегодня не могут аппаратно кодировать AV1.
В данной статье речь про ускорение на видеокартах NVIDIA в CentOS8.
Содержание
Поддерживаемые видеокарты[править]
Не все видеокарты NVIDIA поддерживают NVENC, так GeForce 1030 лишена аппаратного кодировщика. Также видеокарты могут иметь ограничение на количество кодирующих сессий (например одновременно кодировать не более 2-3 потоков).
Список видеокарт с поддержкой NVENC есть здесь: https://developer.nvidia.com/video-encode-and-decode-gpu-support-matrix-new.
Естественно, если вы хотите засунуть видеокарту в сервер, она должна в него влезть и чтобы ей хватило питания.
В качестве дешёвой с относительно современным кодировщиком видеокарты можно рассмотреть Quadro P400.
Установка[править]
Вам кроме собственно видеокарты надо:
- установить проприетарный драйвер NVIDIA в ОС и поддержку CUDA;
- установить сборку FFMPEG с включенным NVENC.
Подключение RPMFUSION[править]
Установить поддержку можно из RPMFUSION:
dnf install https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm dnf install https://mirrors.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm
Установка проприетарного драйвера[править]
Дальше установите драйвер, поддержку NVENC и CUDA:
dnf install akmod-nvidia xorg-x11-drv-nvidia xorg-x11-drv-nvidia-cuda xorg-x11-drv-nvidia-cuda-libs
Перезагрузите ПК:
init 6
После перезагрузки проверьте, что драйвера загрузились и видеокарта доступна для работы:
nvidia-smi
В вывод получите что-то похожее на:
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 460.84 Driver Version: 460.84 CUDA Version: 11.2 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Quadro P400 Off | 00000000:01:00.0 Off | N/A | | 42% 48C P0 N/A / N/A | 0MiB / 2000MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+
Установка сборки FFMPEG[править]
Установите ffmpeg:
dnf install ffmpeg
Проверьте поддержку кодеков:
ffmpeg -hide_banner -codecs |grep nvenc
Проверка транскодирования[править]
Положим у вас есть файл input.mp4, проверить работу можно запустив транскодирование с использованием аппаратного кодека:
ffmpeg -y -vsync 0 -i input.mp4 -c:a copy -c:v hevc_nvenc -b:v 5M output.mp4
Аппаратное кодирование видео в PROXMOX[править]
Вам надо будет пробросить видеокарту целиком в виртуальную машину, работающую на базе KVM.
Для начала включите IOMMU в PROXMOX.
Затем найдите видеокарту, отключите её от хоста и пробросьте её в виртуальную машину.
Если проброс идёт через SeaBIOS, переключите эмуляцию чипсета в q35, добавьте PCI Device и укажите проброс видеокарты как primary GPU по PCI-Express. Дисплей тоже установите в VirtIO-GPU: