Перейти к основному содержимому

Аппаратное перекодирование

Эта функция позволяет использовать GPU для ускорения перекодирования и снижения нагрузки на процессор. Обратите внимание, что аппаратное перекодирование производит значительно более крупные видеофайлы, чем программное перекодирование с аналогичными настройками, обычно с более низким качеством. Использование медленных пресетов и предпочтение более эффективных кодеков может сократить этот разрыв. Так как это новая функция, она все еще экспериментальная и может не работать на всех системах.

информация

Вам не нужно переделывать задания по перекодированию после включения аппаратного ускорения. Устройство ускорения будет использоваться для задач, запускаемых после его включения.

Поддерживаемые API

  • NVENC (NVIDIA)
  • Quick Sync (Intel)
  • RKMPP (Rockchip)
  • VAAPI (AMD / NVIDIA / Intel)

Ограничения

  • Инструкции и настройки в данном случае специфичны для Docker Compose. Другие движки контейнеров могут требовать иной конфигурации.
  • Поддерживаются только серверы на Linux и Windows (через WSL2).
  • WSL2 не поддерживает Quick Sync.
  • Raspberry Pi в настоящее время не поддерживается.
  • Двухпроходный режим поддерживается только для NVENC. Другие API игнорируют эту настройку.
  • По умолчанию аппаратно ускоряется только кодирование. Это означает, что процессор по-прежнему используется для программного декодирования и обработки тона.
    • Вы можете использовать полное аппаратное ускорение, включив аппаратное декодирование в настройках видеоперекодирования.
  • Зависимость от оборудования
    • Поддержка кодеков различается, но обычно поддерживаются H.264 и HEVC.
      • Заметьте, что GPU от NVIDIA и AMD не поддерживают кодирование VP9.
    • Более новые устройства, как правило, обеспечивают более высокое качество перекодирования.

Требования

NVENC

  • Официальный драйвер NVIDIA должен быть установлен на сервере.
  • На Linux (за исключением WSL2) также необходимо установить NVIDIA Container Toolkit.

QSV

  • Для работы VP9:
    • Должен быть процессор Intel 9-го поколения или новее.
    • Если у вас процессор 11-го поколения или более старый, возможно, потребуются эти инструкции, так как требуется режим Low-Power.
    • Если сервер имеет процессор 11-го поколения и работает под ядром 5.15 (поставляется с Ubuntu 22.04 LTS), то потребуется обновить это ядро (см. документация Jellyfin).

RKMPP

Для работы RKMPP:

  • Должен быть поддерживаемый ARM SoC от Rockchip.
  • Только RK3588 поддерживает аппаратное преобразование тонов, другие SoC используют более медленное программное преобразование тонов, но всё же используют аппаратное кодирование.
  • Для преобразования тонов требуется наличие /usr/lib/aarch64-linux-gnu/libmali.so.1 на хост-системе. Установите libmali версию, соответствующую вашему графическому процессору Mali (libmali-valhall-g610-g13p0-gbm для RK3588) и измените файл hwaccel.transcoding.yml:
    • В разделе rkmpp раскомментируйте 3 строки для OpenCL преобразования тонов, удалив символ # в начале каждой строки.
    • - /dev/mali0:/dev/mali0
    • - /etc/OpenCL:/etc/OpenCL:ro
    • - /usr/lib/aarch64-linux-gnu/libmali.so.1:/usr/lib/aarch64-linux-gnu/libmali.so.1:ro

Настройка

Базовая настройка

  1. Если вы ещё не сделали этого, скачайте последнюю версию файла hwaccel.transcoding.yml и убедитесь, что он находится в одной папке с docker-compose.yml.

  2. В docker-compose.yml в разделе immich-server раскомментируйте секцию extends и измените cpu на подходящий бэкенд.

    Примечание: Для VAAPI на WSL2 используйте vaapi-wsl вместо vaapi.

  3. Перезапустите контейнер immich-server с обновленными настройками.

  4. На странице администратора в разделе Настройки перекодирования видео измените настройку аппаратного ускорения на соответствующую опцию и сохраните.

    Примечание: Для процессоров Jasper Lake и Elkhart Lake установите Аппаратное ускорение -> Режим постоянного качества в CQP.

  5. (Опционально) Включите аппаратное декодирование для оптимальной производительности.

Файл Compose "Все-в-одном"

Некоторые платформы, включая Unraid и Portainer, пока не поддерживают использование нескольких файлов Compose. В качестве альтернативы вы можете встроить содержимое файла hwaccel.transcoding.yml непосредственно в сервис immich-server.

Например, секция qsv в этом файле выглядит так:

devices:
- /dev/dri:/dev/dri

Вы можете добавить это в сервис immich-server вместо использования extends из hwaccel.transcoding.yml:

immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# Обратите внимание на отсутствие секции `extends`
devices:
- /dev/dri:/dev/dri
volumes:
...

После этого можно переходить к шагу 3 из раздела "Базовая настройка".

Все-в-одном - настройка Unraid

QSV
  1. Unraid > Docker > (Остановить) Контейнер Immich > Редактировать.
  2. Прокрутите вниз и выберите Добавить еще один путь, порт, переменную, метку или устройство.
  3. В выпадающем меню выберите Устройство и добавьте запись с любым именем и значением /dev/dri.
  4. Продолжите с шага 4 из "Базовой настройки".
NVENC
  1. В приложении контейнера добавьте эту переменную среды: Ключ=NVIDIA_VISIBLE_DEVICES Значение=all.
  2. Все еще в приложении контейнера измените режим контейнера с базового на улучшенный и добавьте следующий параметр в поле "Дополнительные параметры": --runtime=nvidia.
  3. Перезапустите приложение контейнера.
  4. Продолжите с шага 4 из "Базовой настройки".

Советы

  • Возможно, вам стоит выбрать более медленный пресет для аппаратного перекодирования, чтобы сохранить качество и эффективность.
  • Хотя вы можете использовать VAAPI с устройствами NVIDIA и Intel, лучше предпочесть более специфичные API, так как они более оптимизированы для соответствующего оборудования.
  • Вы можете проверить, распознается ли устройство и используется ли оно, проверив его загрузку (например, через nvtop для NVIDIA, intel_gpu_top для Intel и т.д.) во время перекодирования. Отсутствие ошибок в логах во время перекодирования также говорит о том, что устройство используется.