Como instalar / compilar NVENC no ubuntu?

Respostas:

19

Como sempre com o FFmpeg, o desenvolvimento contínuo muda as postagens muitas vezes, e isso certamente é verdade para o nvenc e o FFmpeg. Houve três fases:

  1. Crie seu próprio : antes de 27 de agosto de 2016, era necessário rastrear seus próprios cabeçalhos para criar o nvenc. Difícil e um pouco confuso.
  2. Incorporado à fonte : em 27 de agosto de 2016, os cabeçalhos necessários foram incorporados como parte da fonte FFmpeg , nada necessário, mas a capacidade de compilar a fonte FFmpeg a partir do git ou usar uma versão 'release' cortada do git no momento.
  3. Usar cabeçalhos nv-codec : em 26 de fevereiro de 2018, os cabeçalhos NVidia foram removidos da fonte FFmpeg . Um repositório git separado foi criado para manter o trabalho contínuo com esses cabeçalhos. No momento, esses cabeçalhos devem ser instalados , bem como o FFmpeg do git, para obter acesso ao nvenc e aos amigos.

São necessárias duas etapas:

1. Instale o pacote nv-codec-headers :

Algo como os seguintes comandos do Terminal deve ser suficiente:

sudo apt-get install make git
mkdir $HOME/nv-codec-headers_build && cd $HOME/nv-codec-headers_build
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make && sudo make install

Se, por algum motivo, você mudar de idéia e desejar remover completamente os arquivos instalados, bem como o diretório de compilação, basta executar os dois comandos do Terminal a seguir:

sudo rm -v /usr/local/{lib/pkgconfig/ffnvcodec.pc,include/ffnvcodec/*.h}
rm -rfv $HOME/nv-codec-headers_build

E seu sistema foi limpo. Se, no entanto, você deseja continuar, use a seguinte etapa:

2. Compile o FFmpeg :

Use este guia muito bem testado:

O nv-codec-headersserá automagicamente reconhecido (nenhuma ./configureopção extra é necessária) e o nvenc será construído com sucesso.

Teste:

Eu testei isso no Bionic Beaver LTS e os resultados são:

andrew@ilium:~$ ffmpeg -encoders 2>/dev/null | grep nvenc
 V..... h264_nvenc           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc                NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_h264           NVIDIA NVENC H.264 encoder (codec h264)
 V..... nvenc_hevc           NVIDIA NVENC hevc encoder (codec hevc)
 V..... hevc_nvenc           NVIDIA NVENC hevc encoder (codec hevc)
andrew@ilium:~$

E se você vir uma imagem semelhante à anterior e tiver uma placa de vídeo suportada , está certo: :)

Notas:

  • A versão mais recente corresponde ao Video Codec SDK versão 9.1.23 e requer os drivers NVidia versão 435.21 ou mais recente.
  • Versões anteriores : Agora existe uma cópia automatizada do github dos cabeçalhos nv-codec, que também cria tarballs perfeitos para o uso de uma versão mais antiga dos cabeçalhos. Ótimo se você deseja que os cabeçalhos sincronizem com uma versão mais antiga dos drivers da NVidia que você não pode ou não deseja atualizar.
  • Guia de aceleração de hardware para FFmpeg : Guia do FFmpeg Wiki para aceleração de hardware em geral com o FFmpeg, uma seção canônica para compilar e usar o nvenc ...
andrew.46
fonte
Muito obrigado por este guia detalhado. Recebi resultados semelhantes na sua seção de testes, o que é ótimo. Além dos drivers da nVidia, também precisamos instalar o Cuda SDK para que o FFMPEG use a GPU instalada?
Kimberly W
@KimberlyW Não necessário no meu sistema, eu tenho só agora testado ...
andrew.46
@ andrew.46 Eu fiz o que você disse, mas eu ainda não tenho a aceleração de hardware para VP9: /
Freedo
@Freedo Infelizmente, o nvenc é para codificação H.264 e HEVC ...
andrew.46 #
@ andrew.46 você sabe como posso obter a codificação vp9? Eu tenho um GTX 1080p que suporta-lo de acordo com este developer.nvidia.com/video-encode-decode-gpu-support-matrix
Freedo
0

@ andrew.46 sua resposta é ótima, obrigado. Minha reputação está abaixo do limite para postar isso como um comentário. Se possível, expanda sua resposta com as seguintes informações.

Se você precisar reverter para uma versão anterior nv-codec-headers, faça o download e compile uma versão anterior em https://github.com/FFmpeg/nv-codec-headers/releases .

Isso pode ser necessário se você compilar ffmpegas nv-codec-headersversões mais recentes , mas o driver gráfico é de uma versão que ainda não lida com a versão mínima da API CUDA exigida por nv-codec-headers. O sintoma será que ffmpegfalhará na transcodificação dos fluxos de vídeo. No meu caso, era nv-codec-headersnecessário a API CUDA 9.1, enquanto a mais recente nvidia-driverpara minha distribuição (teste) ainda estava em uma versão usando 9.0.

A reversão para uma versão anterior nv-codec-headersé provavelmente mais segura do que baixar o driver mais recente diretamente da Nvidia e construí-lo fora do mecanismo de atualização da sua distribuição.

Xavras Wyzryn
fonte
Obrigado! Eu adicionei isso na seção 'Notas' ...
andrew.46