Hardware-Transkodierung
Diese Funktion ermöglicht es Ihnen, eine GPU zu verwenden, um die Transkodierung zu beschleunigen und die CPU-Belastung zu reduzieren. Beachten Sie, dass die Hardware-Transkodierung deutlich größere Videos als die Software-Transkodierung mit ähnlichen Einstellungen produziert, normalerweise mit geringerer Qualität. Die Verwendung langsamer Voreinstellungen und effizienterer Codecs kann diese Lücke verringern. Da dies eine neue Funktion ist, befindet sie sich noch im experimentellen Stadium und funktioniert möglicherweise nicht auf allen Systemen.
Es ist nicht erforderlich, Transkodierungsaufgaben erneut auszuführen, nachdem die Hardware-Beschleunigung aktiviert wurde. Das Beschleunigungsgerät wird für alle Aufgaben verwendet, die nach der Aktivierung ausgeführt werden.
Unterstützte APIs
- NVENC (NVIDIA)
- Quick Sync (Intel)
- RKMPP (Rockchip)
- VAAPI (AMD / NVIDIA / Intel)
Einschränkungen
- Die hier beschriebenen Anweisungen und Konfigurationen beziehen sich speziell auf Docker Compose. Andere Container-Engines erfordern möglicherweise unterschiedliche Konfigurationen.
- Nur Linux- und Windows-Server (über WSL2) werden unterstützt.
- WSL2 unterstützt Quick Sync nicht.
- Raspberry Pi wird derzeit nicht unterstützt.
- Der Zwei-Pass-Modus wird nur von NVENC unterstützt. Andere APIs ignorieren diese Einstellung.
- Standardmäßig wird nur das Encoding derzeit hardwarebeschleunigt. Das bedeutet, dass die CPU weiterhin für das Decoding und Tone-Mapping verwendet wird.
- Sie können von einer End-to-End-Beschleunigung profitieren, indem Sie das Hardware-Decoding in den Videotranscodierungseinstellungen aktivieren.
- Hardwareabhängig
- Die Codec-Unterstützung variiert, aber H.264 und HEVC werden normalerweise unterstützt.
- Bemerkenswert ist, dass NVIDIA- und AMD-GPUs kein VP9-Encoding unterstützen.
- Neuere Geräte haben tendenziell eine höhere Transkodierungsqualität.
- Die Codec-Unterstützung variiert, aber H.264 und HEVC werden normalerweise unterstützt.
Voraussetzungen
NVENC
- Sie müssen den offiziellen NVIDIA-Treiber auf dem Server installiert haben.
- Unter Linux (außer WSL2) müssen Sie zusätzlich das NVIDIA Container Toolkit installiert haben.
QSV
- Damit VP9 funktioniert:
- Sie müssen eine Intel-CPU der 9. Generation oder neuer haben.
- Wenn Sie eine CPU der 11. Generation oder älter haben, müssen Sie möglicherweise diese Anweisungen befolgen, da der Low-Power-Modus erforderlich ist.
- Wenn der Server speziell eine CPU der 11. Generation hat und mit Kernel 5.15 (bereitgestellt mit Ubuntu 22.04 LTS) ausgeführt wird, müssen Sie diesen Kernel aktualisieren (aus Jellyfin-Dokumentation).
RKMPP
Damit RKMPP funktioniert:
- Sie müssen einen unterstützten Rockchip ARM SoC besitzen.
- Nur RK3588 unterstützt Hardware-Tonemapping, andere SoCs verwenden langsameres Software-Tonemapping, während sie weiterhin Hardware-Encoding verwenden.
- Tonemapping erfordert, dass
/usr/lib/aarch64-linux-gnu/libmali.so.1
auf Ihrem Hosts-System vorhanden ist. Installieren Sie dielibmali
-Version, die Ihrer Mali-GPU entspricht (libmali-valhall-g610-g13p0-gbm
auf RK3588), und ändern Sie die [hwaccel.transcoding.yml
] hw-file-Datei:- Unter
rkmpp
kommentieren Sie die 3 für das OpenCL-Tonemapping erforderlichen Zeilen aus, indem Sie das#
-Symbol am Anfang jeder Zeile entfernen. - /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
- Unter
Einrichtung
Basis-Einrichtung
-
Falls Sie sie noch nicht haben, laden Sie die neueste
hwaccel.transcoding.yml
-Datei herunter und stellen Sie sicher, dass sie im gleichen Ordner wie diedocker-compose.yml
liegt. -
Kommentieren Sie in der
docker-compose.yml
unterimmich-server
dieextends
-Sektion aus und wechseln Sie voncpu
zum entsprechenden Backend.Hinweis: Für VAAPI auf WSL2 verwenden Sie
vaapi-wsl
stattvaapi
. -
Stellen Sie den
immich-server
-Container mit diesen aktualisierten Einstellungen erneut bereit. -
Ändern Sie auf der Administrationsseite unter
Video-Transkodierungseinstellungen
die Einstellung für die Hardware-Beschleunigung zur entsprechenden Option und speichern Sie.Hinweis: Für Jasper Lake- und Elkhart Lake-CPUs müssen Sie die
Hardwarebeschleunigung
->Modus für konstante Qualität
aufCQP
setzen. -
(Optional) Aktivieren Sie Hardware-Decoding für optimale Leistung.
Datei mit einem einzigen Compose
Einige Plattformen, darunter Unraid und Portainer, unterstützen derzeit keine mehrere Compose-Dateien. Alternativ können Sie die relevanten Inhalte der hwaccel.transcoding.yml
-Datei direkt in den immich-server
-Dienst "inline" einfügen.
Zum Beispiel lautet die qsv
-Sektion in dieser Datei:
devices:
- /dev/dri:/dev/dri
Sie können dies der immich-server
-Service hinzufügen, anstatt von hwaccel.transcoding.yml
zu erweitern:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# Beachten Sie das Fehlen einer `extends`-Sektion
devices:
- /dev/dri:/dev/dri
volumes:
...
Nachdem dies erledigt ist, können Sie mit Schritt 3 der "Basis-Einrichtung" fortfahren.
Alles-in-einem - Unraid-Einrichtung
QSV
- Unraid > Docker > (Stoppen) Immich-Container > Bearbeiten
- Nach unten scrollen und
Add another Path, Port, Variable, Label or Device
auswählen. - Im Dropdown-Menü
Device
auswählen und einen Eintrag mit beliebigem Namen und dem Wert/dev/dri
erstellen. - Weiter zu Schritt 4 der "Basis-Einrichtung".
NVENC
- Fügen Sie in der Container-App diese Umgebungsvariable hinzu: Schlüssel=
NVIDIA_VISIBLE_DEVICES
Wert=all
- Während Sie sich immer noch in der Container-App befinden, wechseln Sie die Ansicht vom Basis-Modus zum erweiterten Modus und fügen Sie den folgenden Parameter ins Feld für zusätzliche Parameter hinzu:
--runtime=nvidia
- Starten Sie die Container-App neu.
- Weiter zu Schritt 4 der "Basis-Einrichtung".
Tipps
- Sie möchten möglicherweise eine langsamere Voreinstellung als für die Software-Transkodierung wählen, um Qualität und Effizienz zu erhalten.
- Während Sie VAAPI mit NVIDIA- und Intel-Geräten verwenden können, bevorzugen Sie die spezifischeren APIs, da sie für ihre jeweiligen Geräte besser optimiert sind.
- Sie können bestätigen, dass das Gerät erkannt und verwendet wird, indem Sie seine Auslastung überprüfen (über
nvtop
für NVIDIA,intel_gpu_top
für Intel usw.) während der Transkodierung. Das Fehlen von Fehlerprotokollen bei der Transkodierung zeigt ebenfalls an, dass es verwendet wird.