Ir para o conteúdo principal

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.

informação

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.

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ão libmali correspondente ao seu Mali GPU (libmali-valhall-g610-g13p0-gbm no RK3588) e modifique o arquivo hwaccel.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

Configuração

Configuração Básica

  1. Se você ainda não tiver, baixe o arquivo hwaccel.transcoding.yml mais recente e certifique-se de que ele esteja na mesma pasta do docker-compose.yml.

  2. No docker-compose.yml sob immich-server, descomente a seção extends e substitua cpu pelo backend apropriado.

    Nota: Para VAAPI no WSL2, certifique-se de usar vaapi-wsl em vez de vaapi

  3. Reimplante o contêiner immich-server com essas configurações atualizadas.

  4. 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 para CQP

  5. (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
  1. Unraid > Docker > (Pare) contêiner do Immich > Editar
  2. Role para baixo e selecione Adicionar outro Caminho, Porta, Variável, Rótulo ou Dispositivo.
  3. No menu suspenso, selecione Dispositivo e insira uma entrada com qualquer nome e o valor /dev/dri.
  4. Continue para o passo 4 de "Configuração Básica".
NVENC
  1. No aplicativo de contêiner, adicione esta variável ambiental: Chave=NVIDIA_VISIBLE_DEVICES Valor=all
  2. 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
  3. Reinicie o aplicativo de contêiner.
  4. 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.