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.1esteja presente no sistema anfitrião. Instale a versãolibmalicorrespondente ao seu Mali GPU (libmali-valhall-g610-g13p0-gbmno 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.ymlmais recente e certifique-se de que ele esteja na mesma pasta dodocker-compose.yml. -
No
docker-compose.ymlsobimmich-server, descomente a seçãoextendse substituacpupelo backend apropriado.Nota: Para VAAPI no WSL2, certifique-se de usar
vaapi-wslem vez devaapi -
Reimplante o contêiner
immich-servercom 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 ConstanteparaCQP -
(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
Dispositivoe 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_DEVICESValor=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
nvtoppara NVIDIA,intel_gpu_toppara Intel, etc.) ao transcodificar. A ausência de logs de erro durante a transcodificação também indica que ele está sendo usado.