하드웨어 트랜스코딩
이 기능을 사용하면 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 인코딩을 지원하지 않습니다.
- 최신 장치일수록 트랜스코딩 품질이 높아지는 경향이 있습니다.
- 코덱 지원은 다양하지만, H.264와 HEVC는 일반적으로 지원됩니다.
사전 준비 사항
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
설정
기본 설정
-
최신
hwaccel.transcoding.yml
파일을 다운로드하고,docker-compose.yml
과 동일한 폴더에 있는지 확인합니다. -
docker-compose.yml
의immich-server
섹션에서extends
를 주석 해제하고cpu
를 적절한 백엔드로 변경하세요.참고: WSL2에서 VAAPI를 사용할 땐
vaapi
대신vaapi-wsl
을 사용하세요. -
업데이트된 설정으로
immich-server
컨테이너를 다시 배포하세요. -
관리자 페 이지의
비디오 트랜스코딩 설정
에서 하드웨어 가속 설정을 적절한 옵션으로 변경하고 저장하세요.참고: Jasper Lake 및 Elkhart Lake CPU의 경우
하드웨어 가속
->일정 품질 모드
를CQP
로 설정해야 합니다. -
(옵션) 최적의 성능을 위해 하드웨어 디코딩을 활성화하세요.
단일 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
- Unraid > Docker > (중지) Immich 컨테이너 > 편집
- 아래로 스크롤하여
경로, 포트, 변수, 레이블 또는 장치 추가
를 선택합니다. - 드롭다운 메뉴에서
장치
를 선택하고, 이름과 값/dev/dri
로 항목을 추가합니다. - "기본 설정"의 4단계로 계속 진행하십시오.
NVENC
- 컨테이너 앱에서 이 환경 변수를 추가합니다: Key=
NVIDIA_VISIBLE_DEVICES
Value=all
- 여전히 컨테이너 앱에서, 컨테이너를 기본 모드에서 고급 모드로 변경하고 추가 매개변수 필드에 다음 매개변수를 추가합니다:
--runtime=nvidia
- 컨테이너 앱을 다시 시작하세요.
- "기본 설정"의 4단계로 계속 진행하세요.
팁
- 품질과 효율성을 유지하기 위해 소프트웨어 트랜스코딩보다 느린 프리셋을 선택하는 것을 고려하세요.
- VAAPI를 NVIDIA 및 Intel 장치와 함께 사용할 수 있지만, 그 장치에 최적화된 구체적인 API를 사용하는 것이 좋습니다.
- 트랜스코딩 시 (NVIDIA의 경우
nvtop
, Intel의 경우intel_gpu_top
등을 통해) 장치가 인식되고 사용되는지 확인하거나, 트랜스코딩 시 오류 로그가 없음을 확인할 수 있습니다.