메인 콘텐츠로 바로가기

하드웨어 트랜스코딩

이 기능을 사용하면 GPU를 사용하여 트랜스코딩을 가속하고 CPU 부하를 줄일 수 있습니다. 하드웨어 트랜스코딩은 유사한 설정을 사용할 때 소프트웨어 트랜스코딩보다 품질이 떨어지는 경우가 많으며 영상 크기가 훨씬 커집니다. 느린 프리셋을 사용하고 더 효율적인 코덱을 선호하면 이러한 격차를 줄일 수 있습니다. 이 기능은 새롭게 추가된 실험적 기능으로, 모든 시스템에서 작동하지 않을 수 있습니다.

정보

하드웨어 가속을 활성화한 후에는 이미 진행된 트랜스코딩 작업을 다시 실행할 필요가 없습니다. 활성화 이후에 실행되는 작업에 가속 장치가 사용됩니다.

지원 API

  • NVENC (NVIDIA)
  • 퀵 싱크 (Intel)
  • RKMPP (Rockchip)
  • VAAPI (AMD / NVIDIA / Intel)

제한 사항

  • 여기서 제공되는 지침 및 구성은 Docker Compose에 구체적으로 적용됩니다. 다른 컨테이너 엔진은 다른 구성이 필요할 수 있습니다.
  • Linux와 Windows(WSL2를 통해) 서버만 지원됩니다.
  • WSL2는 퀵 싱크를 지원하지 않습니다.
  • Raspberry Pi는 현재 지원되지 않습니다.
  • 2패스 모드는 NVENC에서만 지원됩니다. 다른 API는 이 설정을 무시합니다.
  • 기본적으로 인코딩만 하드웨어 가속됩니다. 소프트웨어 디코딩 및 톤 매핑에는 여전히 CPU가 사용됩니다.
    • 비디오 트랜스코딩 설정에서 하드웨어 디코딩을 활성화하면 전체적인 가속 효과를 얻을 수 있습니다.
  • 하드웨어에 따라 달라짐
    • 코덱 지원은 다양하지만, H.264와 HEVC는 일반적으로 지원됩니다.
      • 특히 NVIDIA와 AMD GPU는 VP9 인코딩을 지원하지 않습니다.
    • 최신 장치일수록 트랜스코딩 품질이 높아지는 경향이 있습니다.

사전 준비 사항

NVENC

  • 서버에 NVIDIA 공식 드라이버를 설치해야 합니다.
  • Linux(WLS2 제외)에서는 NVIDIA Container Toolkit도 설치해야 합니다.

QSV

  • VP9을 사용하려면:
    • 9세대 Intel CPU 이상이 필요합니다.
    • 11세대 CPU 이하를 사용하는 경우, 여기의 지침을 따라야 할 수 있습니다. 로우 파워 모드가 필요하기 때문입니다.
    • 또한 서버가 특적으로 11세대 CPU를 실행 중이고 커널 버전이 Ubuntu 22.04 LTS에 포함된 5.15인 경우 커널을 업그레이드해야 합니다(Jellyfin 문서 참조).

RKMPP

RKMPP를 사용하려면:

  • 지원되는 Rockchip ARM SoC가 있어야 합니다.
  • RK3588만 하드웨어 톤 매핑을 지원하며, 나머지 SoC는 하드웨어 인코딩을 사용하는 동안 느린 소프트웨어 톤 매핑을 사용합니다.
  • 톤 매핑을 위해 /usr/lib/aarch64-linux-gnu/libmali.so.1 파일이 호스트 시스템에 있어야 합니다. Mali GPU에 해당하는 libmali 릴리스를 설치하고 hwaccel.transcoding.yml 파일을 수정하십시오:
    • rkmpp 섹션에서 OpenCL 톤 매핑을 위해 필요한 3개의 줄의 앞에 있는 # 기호를 제거하고 주석을 해제합니다.
    • - /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.ymlimmich-server 섹션에서 extends를 주석 해제하고 cpu를 적절한 백엔드로 변경하세요.

    참고: WSL2에서 VAAPI를 사용할 땐 vaapi 대신 vaapi-wsl을 사용하세요.

  3. 업데이트된 설정으로 immich-server 컨테이너를 다시 배포하세요.

  4. 관리자 페이지의 비디오 트랜스코딩 설정에서 하드웨어 가속 설정을 적절한 옵션으로 변경하고 저장하세요.

    참고: Jasper Lake 및 Elkhart Lake CPU의 경우 하드웨어 가속 -> 일정 품질 모드CQP로 설정해야 합니다.

  5. (옵션) 최적의 성능을 위해 하드웨어 디코딩을 활성화하세요.

단일 Compose 파일

Unraid 및 Portainer와 같은 일부 플랫폼은 작성 시 여러 Compose 파일을 지원하지 않습니다. 대안으로 hwaccel.transcoding.yml 파일의 관련 내용을 immich-server 서비스에 직접 "인라인"하십시오.

예를 들어, 이 파일의 qsv 섹션은 다음과 같습니다:

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

이를 immich-server 서비스에 추가하면 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. 컨테이너 앱에서 이 환경 변수를 추가합니다: Key=NVIDIA_VISIBLE_DEVICES Value=all
  2. 여전히 컨테이너 앱에서, 컨테이너를 기본 모드에서 고급 모드로 변경하고 추가 매개변수 필드에 다음 매개변수를 추가합니다: --runtime=nvidia
  3. 컨테이너 앱을 다시 시작하세요.
  4. "기본 설정"의 4단계로 계속 진행하세요.

  • 품질과 효율성을 유지하기 위해 소프트웨어 트랜스코딩보다 느린 프리셋을 선택하는 것을 고려하세요.
  • VAAPI를 NVIDIA 및 Intel 장치와 함께 사용할 수 있지만, 그 장치에 최적화된 구체적인 API를 사용하는 것이 좋습니다.
  • 트랜스코딩 시 (NVIDIA의 경우 nvtop, Intel의 경우 intel_gpu_top 등을 통해) 장치가 인식되고 사용되는지 확인하거나, 트랜스코딩 시 오류 로그가 없음을 확인할 수 있습니다.