Wie installiere / kompiliere ich NVENC in Ubuntu?

Antworten:

19

Wie immer bei FFmpeg verschiebt sich die Weiterentwicklung des Ziels um ein Vielfaches, und dies gilt mit Sicherheit für nvenc und FFmpeg. Es gab 3 Phasen:

  1. Roll your own : Vor dem 27. August 2016 war es notwendig, eigene Header aufzuspüren, um nvenc zu erstellen. Mühsam und mehr als ein bisschen verwirrend.
  2. Eingebaut in die Quelle : Am 27. August 2016 wurden die erforderlichen Header als Teil der FFmpeg-Quelle eingefügt. Es ist nichts anderes erforderlich, als die FFmpeg-Quelle aus git zu kompilieren oder eine "Release" -Version zu verwenden, die zu diesem Zeitpunkt aus git herausgeschnitten wurde.
  3. Verwenden Sie NV-Codec-Header : Am 26. Februar 2018 wurden die NVidia-Header aus der FFmpeg-Quelle entfernt . Ein separates Git-Repository wurde erstellt, um die Arbeit mit diesen Headern fortzusetzen. Momentan müssen diese Header sowie FFmpeg von git installiert sein , um Zugriff auf nvenc und Freunde zu erhalten.

Zwei Schritte sind erforderlich:

1. Installieren Sie das Paket nv-codec-headers :

So etwas wie die folgenden Terminalbefehle sollten ausreichen:

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

Wenn Sie es sich aus irgendeinem Grund anders überlegen und die installierten Dateien sowie das Build-Verzeichnis vollständig entfernen möchten, führen Sie einfach die folgenden beiden Terminal-Befehle aus:

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

Und Ihr System wurde gereinigt. Wenn Sie jedoch fortfahren möchten, gehen Sie wie folgt vor:

2. Kompilieren Sie FFmpeg :

Verwenden Sie diese sehr gut getestete Anleitung:

Das nv-codec-headerswird automatisch erkannt (es werden keine zusätzlichen ./configureOptionen benötigt) und nvenc wird erfolgreich erstellt.

Testen:

Ich habe dies auf Bionic Beaver LTS getestet und die Ergebnisse sind:

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:~$

Und wenn Sie ein ähnliches Bild wie oben sehen und eine unterstützte Grafikkarte haben , sind Sie richtig :)

Anmerkungen:

  • Die neueste Version entspricht Video Codec SDK Version 9.1.23 und erfordert NVidia-Treiber Version 435.21 oder neuer.
  • Ältere Versionen : Es gibt jetzt eine automatisierte Github-Kopie der NV-Codec-Header, die auch Tarballs erstellt, die perfekt für die Verwendung einer älteren Version der Header geeignet sind . Ideal, wenn die Header mit einer älteren Version der NVidia-Treiber synchronisiert werden sollen, die Sie nicht aktualisieren können oder möchten.
  • Hardwarebeschleunigungshandbuch für FFmpeg : FFmpeg Wiki-Handbuch für die Hardwarebeschleunigung im Allgemeinen mit FFmpeg, einem kanonischen Abschnitt zum Kompilieren und ...
andrew.46
quelle
Vielen Dank für diese ausführliche Anleitung. Ich habe ähnliche Ergebnisse von Ihrer Testsektion erhalten, was großartig ist. Müssen wir neben den nVidia-Treibern auch das Cuda SDK installieren, damit FFMPEG die installierte GPU verwendet?
Kimberly W
@KimberlyW Auf meinem System nicht erforderlich, habe ich gerade getestet ...
andrew.46
@ andrew.46 Ich habe getan, was Sie gesagt haben, aber ich habe immer noch nicht die Hardware-Beschleunigung für vp9: /
Freedo
@Freedo Leider ist nvenc für H.264 und HEVC-Codierung ...
andrew.46
@ andrew.46 weißt du wie ich vp9 encoding bekommen kann? Ich habe eine GTX 1080p , die es nach dieser unterstützt developer.nvidia.com/video-encode-decode-gpu-support-matrix
Freedo
0

@ andrew.46 deine antwort ist super, danke. Mein Ruf liegt unter der Schwelle, um dies als Kommentar zu veröffentlichen. Wenn möglich, erweitern Sie Ihre Antwort mit den folgenden Informationen.

Wenn Sie zu einer früheren Version von zurückkehren müssen nv-codec-headers, laden Sie eine frühere Version von https://github.com/FFmpeg/nv-codec-headers/releases herunter und kompilieren Sie sie .

Dies kann erforderlich sein, wenn Sie ffmpeggegen die neueste nv-codec-headersVersion kompilieren , Ihr Grafiktreiber jedoch eine Version aufweist, die noch nicht die von CUDA vorgeschriebene Mindestversion der API unterstützt nv-codec-headers. Das Symptom wird sein, dass ffmpegdas Transcodieren von Videostreams fehlschlägt. In meinem Fall war nv-codec-headersCUDA API 9.1 erforderlich, während die neueste nvidia-driverVersion für meine Distribution (Tests) noch eine Version mit 9.0 hatte.

Das Zurücksetzen auf eine frühere Version nv-codec-headersist wahrscheinlich sicherer, als den neuesten Treiber direkt von Nvidia herunterzuladen und außerhalb des Aktualisierungsmechanismus Ihrer Distribution zu erstellen.

Xavras Wyzryn
quelle
Vielen Dank! Ich habe dies im Abschnitt "Notizen" hinzugefügt ...
andrew.46