Transcodage matériel
Cette fonctionnalité vous permet d'utiliser un GPU pour accélérer le transcodage et réduire la charge du CPU. Notez que le transcodage matériel produit des vidéos significativement plus volumineuses que le transcodage logiciel avec des paramètres similaires, souvent avec une qualité moindre. L'utilisation de préréglages lents et la préférence pour des codecs plus efficaces peuvent réduire cet écart. Étant donné que cette fonctionnalité est nouvelle, elle est encore expérimentale et peut ne pas fonctionner sur tous les systèmes.
Vous n'avez pas besoin de refaire les tâches de transcodage après avoir activé l'accélération matérielle. Le périphérique d'accélération sera utilisé pour toutes les tâches qui seront exécutées après activation.
APIs supportées
- NVENC (NVIDIA)
- Quick Sync (Intel)
- RKMPP (Rockchip)
- VAAPI (AMD / NVIDIA / Intel)
Limitations
- Les instructions et configurations ici sont spécifiques à Docker Compose. D'autres moteurs de conteneurs peuvent nécessiter une configuration différente.
- Seuls les serveurs Linux et Windows (via WSL2) sont pris en charge.
- WSL2 ne prend pas en charge Quick Sync.
- Le Raspberry Pi n'est actuellement pas pris en charge.
- Le mode deux passes est uniquement pris en charge pour NVENC. Les autres APIs ignoreront ce paramètre.
- Par défaut, seul l'encodage est actuellement accéléré matériellement. Cela signifie que le CPU est encore utilisé pour le décodage logiciel et la conversion de tonalités.
- Vous pouvez bénéficier d'une accélération de bout en bout en activant le décodage matériel dans les paramètres de transcodage vidéo.
- Dépend du matériel
- Le support des codecs varie, mais H.264 et HEVC sont généralement pris en charge.
- Notamment, les GPU NVIDIA et AMD ne prennent pas en charge l'encodage VP9.
- Les nouveaux appareils ont tendance à avoir une qualité de transcodage supérieure.
- Le support des codecs varie, mais H.264 et HEVC sont généralement pris en charge.
Conditions préalables
NVENC
- Vous devez avoir le pilote officiel NVIDIA installé sur le serveur.
- Sur Linux (sauf pour WSL2), vous devez également avoir NVIDIA Container Toolkit installé.
QSV
- Pour que VP9 fonctionne :
- Vous devez avoir un CPU Intel de 9ème génération ou plus récent.
- Si vous avez un processeur Intel de 11ème génération ou antérieur, vous devrez peut-être suivre ces instructions car le mode basse consommation est requis.
- De plus, si le serveur a spécifiquement un CPU de 11ème génération et exécute le noyau 5.15 (livré avec Ubuntu 22.04 LTS), vous devrez mettre à jour ce noyau (selon les docs de Jellyfin).
RKMPP
Pour que RKMPP fonctionne :
- Vous devez posséder un SoC ARM Rockchip pris en charge.
- Seul RK3588 prend en charge la conversion de tonalités matérielle, les autres SoCs utilisent une conversion de tonalités logicielle plus lente tout en utilisant un encodage matériel.
- La conversion de tonalités nécessite que
/usr/lib/aarch64-linux-gnu/libmali.so.1
soit présent sur votre système hôte. Installez la versionlibmali
correspondante à votre GPU Mali (libmali-valhall-g610-g13p0-gbm
sur RK3588) et modifiez le fichierhwaccel.transcoding.yml
:- Sous
rkmpp
, décommentez les 3 lignes nécessaires à la conversion de tonalités OpenCL en supprimant le symbole#
au début de chaque ligne. - /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
- Sous
Configuration
Configuration de base
-
Si vous ne l'avez pas déjà, téléchargez le dernier fichier
hwaccel.transcoding.yml
et assurez-vous qu'il est dans le même dossier que le fichierdocker-compose.yml
. -
Dans le fichier
docker-compose.yml
sousimmich-server
, décommentez la sectionextends
et changezcpu
en le backend approprié.Remarque : Pour VAAPI sur WSL2, veillez à utiliser
vaapi-wsl
plutôt quevaapi
. -
Redéployez le conteneur
immich-server
avec ces paramètres mis à jour. -
Sur la page Admin sous les paramètres de transcodage vidéo, changez le paramètre d'accélération matérielle en l'option appropriée et sauvegardez.
Remarque : Pour les CPUs Jasper Lake et Elkhart Lake, vous devrez régler
Accélération matérielle
->Mode qualité constante
surCQP
. -
(Optionnel) Activez le décodage matériel pour des performances optimales.
Un seul fichier Compose
Certaines plateformes, comme Unraid et Portainer, ne supportent pas les fichiers Compose multiples au moment de rédiger ceci. Comme alternative, vous pouvez « incorporer » le contenu pertinent du fichier hwaccel.transcoding.yml
directement dans le service immich-server
.
Par exemple, la section qsv
dans ce fichier est :
devices:
- /dev/dri:/dev/dri
Vous pouvez ajouter ceci au service immich-server
au lieu de l'étendre depuis hwaccel.transcoding.yml
:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# Notez l'absence de section `extends`
devices:
- /dev/dri:/dev/dri
volumes:
...
Une fois cela fait, vous pouvez continuer à l'étape 3 de « Configuration de base ».
Tout-en-un - Configuration Unraid
QSV
- Unraid > Docker > (Stop) conteneur Immich > Modifier
- Faites défiler vers le bas et sélectionnez
Ajouter un autre Chemin, Port, Variable, Étiquette ou Périphérique
. - Dans le menu déroulant, sélectionnez
Périphérique
et une entrée avec n'importe quel nom et la valeur/dev/dri
. - Continuez à l'étape 4 de « Configuration de base ».
NVENC
- Dans l'application du conteneur, ajoutez cette variable d'environnement : Clé=
NVIDIA_VISIBLE_DEVICES
Valeur=all
. - Toujours dans l'application du conteneur, passez du mode basique au mode avancé et ajoutez le paramètre suivant au champ Paramètres supplémentaires :
--runtime=nvidia
. - Redémarrez l'application du conteneur.
- Continuez à l'étape 4 de « Configuration de base ».
Conseils
- Vous pouvez choisir un préréglage plus lent par rapport au transcodage logiciel pour maintenir la qualité et l'efficacité.
- Bien que vous puissiez utiliser VAAPI avec des périphériques NVIDIA et Intel, privilégiez les APIs les plus spécifiques, car elles sont mieux optimisées pour leurs appareils respectifs.
- Vous pouvez confirmer que le périphérique est reconnu et utilisé en vérifiant son utilisation (via
nvtop
pour NVIDIA,intel_gpu_top
pour Intel, etc.) lors du transcodage. L'absence de journaux d'erreurs lors du transcodage indique également son utilisation.