Transcodificação de Hardware
Este recurso permite utilizar uma GPU para acelerar a transcodificação e reduzir a carga da CPU. Observe que a transcodificação de hardware produz vídeos significativamente maiores do que os da transcodificação de software com configurações semelhantes, geralmente com menor qualidade. Usar predefinições mais lentas e preferir codecs mais eficientes pode reduzir essa diferença. Como este é um recurso novo, ainda está em fase experimental e pode não funcionar em todos os sistemas.
Não é necessário refazer nenhum trabalho de transcodificação após ativar a aceleração de hardware. O dispositivo de aceleração será usado para quaisquer trabalhos que sejam executados após sua ativação.
APIs Suportadas
- NVENC (NVIDIA)
- Quick Sync (Intel)
- RKMPP (Rockchip)
- VAAPI (AMD / NVIDIA / Intel)
Limitações
- As instruções e configurações aqui são específicas para Docker Compose. Outros motores de contêiner podem exigir configurações diferentes.
- Apenas servidores Linux e Windows (através do WSL2) são suportados.
- O WSL2 não suporta Quick Sync.
- O Raspberry Pi atualmente não é suportado.
- O modo de duas passagens é suportado apenas para NVENC. Outras APIs irão ignorar esta configuração.
- Por padrão, apenas a codificação é acelerada por hardware. Isso significa que a CPU ainda é usada para decodificação e mapeamento de tons via software.
- Você pode se beneficiar da aceleração de ponta a ponta ao ativar a decodificação de hardware nas configurações de transcodificação de vídeo.
- Dependente de hardware
- O suporte a codecs varia, mas H.264 e HEVC geralmente são suportados.
- Notavelmente, GPUs NVIDIA e AMD não suportam codificação VP9.
- Dispositivos mais novos tendem a ter maior qualidade na transcodificação.
- O suporte a codecs varia, mas H.264 e HEVC geralmente são suportados.
Pré-requisitos
NVENC
- Você deve ter o driver oficial da NVIDIA instalado no servidor.
- No Linux (exceto para o WSL2), também é necessário ter o NVIDIA Container Toolkit instalado.
QSV
- Para o VP9 funcionar:
- É necessário ter uma CPU Intel de 9ª geração ou mais recente
- Se você possui uma CPU de 11ª geração ou mais antiga, talvez seja necessário seguir estas instruções, já que o modo de baixo consumo é necessário
- Além disso, se o servidor possui especificamente uma CPU de 11ª geração e está executando o kernel 5.15 (fornecido com o Ubuntu 22.04 LTS), será necessário atualizar este kernel (consulte os docs do Jellyfin)
RKMPP
Para o RKMPP funcionar:
- É necessário ter um SoC Rockchip ARM compatível.
- Apenas o RK3588 suporta mapeamento de tons por hardware; outros SoCs utilizam mapeamento de tons mais lento por software, ainda que utilizem codificação por hardware.
- O mapeamento de tons exige que
/usr/lib/aarch64-linux-gnu/libmali.so.1
esteja presente no sistema anfitrião. Instale a versãolibmali
correspondente ao seu Mali GPU (libmali-valhall-g610-g13p0-gbm
no RK3588) e modifique o arquivohwaccel.transcoding.yml
:- No
rkmpp
, descomente as 3 linhas necessárias para o mapeamento de tons OpenCL removendo o símbolo#
no início de cada linha - /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
- No
Configuração
Configuração Básica
-
Se você ainda não tiver, baixe o arquivo
hwaccel.transcoding.yml
mais recente e certifique-se de que ele esteja na mesma pasta dodocker-compose.yml
. -
No
docker-compose.yml
sobimmich-server
, descomente a seçãoextends
e substituacpu
pelo backend apropriado.Nota: Para VAAPI no WSL2, certifique-se de usar
vaapi-wsl
em vez devaapi
-
Reimplante o contêiner
immich-server
com essas configurações atualizadas. -
Na página de Administração, sob
Configurações de Transcodificação de Vídeo
, altere a configuração de aceleração de hardware para a opção apropriada e salve.Nota: Para CPUs Jasper Lake e Elkhart Lake, você precisará configurar
Aceleração de Hardware
->Modo de Qualidade Constante
paraCQP
-
(Opcional) Ative a decodificação de hardware para obter desempenho ideal.
Arquivo de Composição Único
Algumas plataformas, incluindo Unraid e Portainer, não suportam vários arquivos Compose até o momento. Como alternativa, você pode "integrar" os conteúdos relevantes do arquivo hwaccel.transcoding.yml
diretamente no serviço immich-server
.
Por exemplo, a seção qsv
neste arquivo é:
devices:
- /dev/dri:/dev/dri
Você pode adicionar isso ao serviço immich-server
em vez de estender a partir de hwaccel.transcoding.yml
:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# Observe a ausência de uma seção `extends`
devices:
- /dev/dri:/dev/dri
volumes:
...
Depois de feito isso, você pode continuar para o passo 3 de "Configuração Básica".
Tudo-em-Um - Configuração do Unraid
QSV
- Unraid > Docker > (Pare) contêiner do Immich > Editar
- Role para baixo e selecione
Adicionar outro Caminho, Porta, Variável, Rótulo ou Dispositivo
. - No menu suspenso, selecione
Dispositivo
e insira uma entrada com qualquer nome e o valor/dev/dri
. - Continue para o passo 4 de "Configuração Básica".
NVENC
- No aplicativo de contêiner, adicione esta variável ambiental: Chave=
NVIDIA_VISIBLE_DEVICES
Valor=all
- Ainda no aplicativo de contêiner, altere o contêiner do Modo Básico para o Modo Avançado e adicione o seguinte parâmetro no campo Parâmetros Extras:
--runtime=nvidia
- Reinicie o aplicativo de contêiner.
- Continue para o passo 4 de "Configuração Básica".
Dicas
- Você pode preferir escolher uma predefinição mais lenta do que para a transcodificação de software para manter a qualidade e eficiência
- Embora seja possível usar VAAPI com dispositivos NVIDIA e Intel, prefira as APIs mais específicas, pois são mais otimizadas para seus respectivos dispositivos
- Você pode confirmar que o dispositivo está sendo reconhecido e usado verificando sua utilização (via
nvtop
para NVIDIA,intel_gpu_top
para Intel, etc.) ao transcodificar. A ausência de logs de erro durante a transcodificação também indica que ele está sendo usado.