Transcodificación por Hardware
Esta función te permite utilizar una GPU para acelerar la transcodificación y reducir la carga del procesador. Ten en cuenta que la transcodificación por hardware produce videos significativamente más grandes que la transcodificación por software con configuraciones similares, generalmente con menor calidad. Usar presets lentos y preferir códecs más eficientes puede reducir esta brecha. Dado que esta es una función nueva, aún es experimental y puede que no funcione en todos los sistemas.
No necesitas rehacer ningún trabajo de transcodificación después de habilitar la aceleración por hardware. El dispositivo de aceleración se usará para cualquier trabajo que se ejecute después de habilitarlo.
APIs compatibles
- NVENC (NVIDIA)
- Quick Sync (Intel)
- RKMPP (Rockchip)
- VAAPI (AMD / NVIDIA / Intel)
Limitaciones
- Las instrucciones y configuraciones aquí son específicas de Docker Compose. Otros motores de contenedores pueden requerir configuraciones diferentes.
- Solo se admiten servidores Linux y Windows (a través de WSL2).
- WSL2 no admite Quick Sync.
- Raspberry Pi no es compatible actualmente.
- El modo de dos pasadas solo es compatible con NVENC. Otras APIs ignorarán esta configuración.
- Por defecto, solo la codificación está acelerada por hardware actualmente. Esto significa que el procesador aún se utiliza para la decodificación por software y el tone-mapping.
- Puedes beneficiarte de una aceleración de extremo a extremo habilitando la decodificación por hardware en la configuración de transcodificación de video.
- Dependiente del hardware
- El soporte de códecs varía, pero H.264 y HEVC suelen estar soportados.
- Cabe destacar que las GPUs de NVIDIA y AMD no admiten la codificación VP9.
- Los dispositivos más nuevos tienden a tener una calidad de transcodificación más alta.
- El soporte de códecs varía, pero H.264 y HEVC suelen estar soportados.
Prerrequisitos
NVENC
- Debes tener instalado el controlador oficial de NVIDIA en el servidor.
- En Linux (excepto WSL2), también necesitas tener instalado el NVIDIA Container Toolkit.
QSV
- Para que VP9 funcione:
- Debes tener una CPU Intel de 9ª generación o más reciente
- Si tienes una CPU de 11ª generación o anterior, entonces es posible que debas seguir estas instrucciones, ya que se requiere el modo de baja potencia.
- Además, si el servidor tiene específicamente una CPU de 11ª generación y está ejecutando el kernel 5.15 (incluido con Ubuntu 22.04 LTS), entonces tendrás que actualizar este kernel (según docs de Jellyfin)
RKMPP
Para que RKMPP funcione:
- Debes tener un SoC ARM Rockchip compatible.
- Solo RK3588 admite tone-mapping por hardware, otros SoCs usan un tone-mapping más lento por software mientras siguen usando codificación por hardware.
- El tone-mapping requiere que
/usr/lib/aarch64-linux-gnu/libmali.so.1
esté presente en tu sistema anfitrión. Instala la versión delibmali
correspondiente a tu GPU Mali (libmali-valhall-g610-g13p0-gbm
en RK3588) y modifica el archivohwaccel.transcoding.yml
:- bajo
rkmpp
descomenta las 3 líneas requeridas para el tone-mapping de OpenCL eliminando el símbolo#
al principio de cada línea - /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
- bajo
Configuración
Configuración básica
-
Si aún no lo tienes, descarga la última versión del archivo
hwaccel.transcoding.yml
y asegúrate de que esté en la misma carpeta que el archivodocker-compose.yml
. -
En el archivo
docker-compose.yml
bajoimmich-server
, descomenta la secciónextends
y cambiacpu
al backend adecuado.Nota: Para VAAPI en WSL2, asegúrate de usar
vaapi-wsl
en lugar devaapi
-
Vuelve a desplegar el contenedor
immich-server
con estas configuraciones actualizadas. -
En la página de administración bajo
Configuración de transcodificación de video
, cambia la configuración de aceleración por hardware a la opción adecuada y guarda.Nota: Para las CPUs Jasper Lake y Elkhart Lake, deberás configurar el modo
Aceleración de hardware
->Modo de calidad constante
aCQP
-
(Opcional) Habilita la decodificación por hardware para rendimiento óptimo.
Archivo Compose único
Algunas plataformas, incluido Unraid y Portainer, no admiten múltiples archivos Compose al momento de escribir esto. Como alternativa, puedes "incrustar" el contenido relevante del archivo hwaccel.transcoding.yml
directamente en el servicio immich-server
.
Por ejemplo, la sección qsv
en este archivo es:
devices:
- /dev/dri:/dev/dri
Puedes agregar esto al servicio immich-server
en lugar de extender desde hwaccel.transcoding.yml
:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# Nota la ausencia de una sección `extends`
devices:
- /dev/dri:/dev/dri
volumes:
...
Una vez hecho esto, puedes continuar al paso 3 de "Configuración básica".
Configuración Todo-en-Uno - Unraid
QSV
- Unraid > Docker > (Detener) Contenedor Immich > Editar
- Desplázate hacia abajo y selecciona
Agregar otro Camino, Puerto, Variable, Etiqueta o Dispositivo
- En el menú desplegable, selecciona
Dispositivo
y una entrada con cualquier nombre y el valor/dev/dri
. - Continúa con el paso 4 de "Configuración básica".
NVENC
- En la aplicación del contenedor, agrega esta variable ambiental: Clave=
NVIDIA_VISIBLE_DEVICES
Valor=all
- Mientras sigues en la aplicación del contenedor, cambia el contenedor de Modo Básico a Modo Avanzado y agrega el siguiente parámetro al campo Parámetros Extra:
--runtime=nvidia
- Reinicia la aplicación del contenedor.
- Continúa con el paso 4 de "Configuración básica".
Consejos
- Puede que desees elegir un preset más lento que para la transcodificación por software para mantener la calidad y eficiencia.
- Aunque puedes usar VAAPI con dispositivos NVIDIA e Intel, prefiere las APIs más específicas ya que están más optimizadas para sus dispositivos respectivos.
- Puedes confirmar que el dispositivo está siendo reconocido y usado verificando su utilización (mediante
nvtop
para NVIDIA,intel_gpu_top
para Intel, etc.) durante la transcodificación. La ausencia de registros de errores durante la transcodificación también indica que se está utilizando.