Videos unter Linux schneller rendern mit GPU Beschleunigung

Videoschnitt ist ja eines meiner Hobbies, gerade als Podcaster, kommt man ja nicht immer drum herum. Nun betreibe ich ja nur ziemlich einfachen Videoschnitt via Kdenlive unter Linux und meist sind es auch nur im Falle des Techview VLogs nur Konvertierungen mit Ein- und Ausblendeffekten.

Im Falle der Techview Podcast Show wird das ganze etwas aufwendiger mit Überganagseffekten und eben etwas mehr B-Roll Schnitt der hineingemischt wird, oder auch Titel Einblendungen usw.
Etwas gestört hat mich dort bisher immer der etwas lange Atem den man haben musste, nachdem ein Video fertig geschnitten war, dieses auch herausrendern zu können. Hier ist es manchmal etwas lässtig, wenn man für ein 15 Minuten Video 30 Minuten braucht um es zu rendern.

Kdenlive


Diese Zeiten sind bedingt durch die standardmäßig in vielen Videoschnittprogrammen unter Linux verwendeten Renderprofile, die nur CPU Rendering beinhalten.
Nun gibt es aber mit VAAPI eine Schnittstelle und einen Enkodierer, sowie Dekodierer für ffmpeg, der so etwas auch auf die durchaus besser dafür geeignete GPU auslagern kann, bzw. diese mitbenutzen kann für das Rendern.

Das erfreuliche, dank sehr guter Arbeiten der Grafiktreiberentwickler für Linux ist diese Schnittstelle quasi zum Standard geworden und alle gängigen aktuellen Karten von AMD, Intel und sogar Nvidia (mittels Nouveau) unterstützen es.
Da auch aktuelle Distributionen in ihre ffmpeg Versionen die Unterstützung dafür hineinkompilieren, steht also dem Rendern eines Videoclips mittels dieser Technik nicht viel im Wege.

Auf meinen Neptune und Netrunner Systemen, basierend auf Debian Stable bzw. Testing, ist es dank der ebenfalls aktivierten vaapi Enkodierfähigkeit in der Bibliothek Melt auch in meinem Lieblingsvideoschnittprogramm Kdenlive möglich auf diese Fähigkeit zu setzen.

Renderprofile von Kdenlive


Leider liefert Kdenlive momentan noch (es ändert sich in der Zukunft, so hoffe ich) kein Standardprofil dafür aus. Deshalb habe ich etwas Hand angelegt und möchte euch hier zeigen, wie man sich sein eigenes Renderprofil unter Kdenlive erstellen kann, dass auf den VAAPI Codec für die H.264 Videokodierung setzt.
Dazu muss man einfach ein neues Renderprofil erzeugen. Ich habe eines auf Basis des vorhandenen MP4 Profils erstellt, da meine GPU nur in der Lage ist H264 ordentlich zu dekodieren und zu enkodieren. Infos darüber was eure GPU kann verrät der Befehl

vainfo

den man in ein Terminal eingeben kann. (Vorrausgesetzt das gleichnamige Paket ist installiert)

Mein "LLs Podcast Option" Profil mit VAAPI


Nun habe ich folgende Werte für mein neues LLs Podcast Option Profil eingetragen (siehe auch Foto oben):

vaapi_device=/dev/dri/renderD128 vf='format=nv12,hwupload' properties=x264-medium f=mp4 vcodec=h264_vaapi threads=4 real_time=-1 preset=faster acodec=aac g=120 crf=%quality ab=%audiobitrate+'k'

Mit diesen Einstellungen erziele ich einen deutlichen Performancegewinn, wenn es um das Rendern von Videos geht. Hier mal ein Vergleich zu einem Techview VLog den ich geschnitten habe einmal die Renderzeit mit dem MP4 Profil von Kdenlive:

Renderzeit mit Standard MP4 Profil von Kdenlive

 Und hier zum Vergleich das gleiche Renderprojekt mit meinem Profil und VAAPI Enkodierung:

Renderzeit mit VAAPI Enkodierer Profil

Wie man sehen kann ist der Unterschied schon gewaltig. Ich kann bei dem Video was etwas über 24 Minuten geht meine Renderzeit halbieren und komme so auf einen Renderwert der unter Echtzeit liegt, also mit etwa 20 Minuten kürzer ist als das Video selbst.

Das ganze jetzt auf einem noch nicht mehr so taufrischen Thinkpad E555 mit AMD A8-7100 und einer R5 Radeon Grafikeinheit in dieser APU.
Neben der schnelleren Renderzeit werden auch die CPU Kernel nicht die ganze Zeit sehr hoch belastet, so dass auch die Hitzeentwicklung nicht mehr so deutlich ansteigt bei diesem Notebook. Zumal auch bei einer kürzeren Renderzeit die Prozessoren evtl. auch gar nicht so weit wegen Hitze heruntertakten müssen.

Natürlich schneide ich nun meine Videos nicht nur auf diesem Laptop, sondern auch einem potenteren AMD Sechskern Desktop System (AMD FX-6100) das mit einer Nvidia Geforce 650 TI ausgestattet ist. Nun könnte ich hier auch auf VAAPI setzen. Aber auf diesem System ist tatsächlich der proprietäre Nvidia Treiber installiert, da ich darauf auch ab und zu Spiele spiele, die der Nouveau Treiber nicht schafft.

Der Nvidia Treiber bietet eine weitere clevere GPU Optimierung fürs Dekodieren, aber auch Enkodieren von Videos. NVENC nennt sich das ganze und ist ebenfalls in aktuellen Distros in ffmpeg und melt enthalten.
Wer also den proprietären Nvidia Treiber sein eigen nennt kann anstatt VAAPI auch NVENC zum enkodieren von Videos benutzen.

NVEnc Renderprofil


Mein Profil auf diesem Desktop Rechner sieht dann so aus:

properties=x264-medium f=mp4 vcodec=nvenc_h264 acodec=aac g=120 crf=%quality ab=%audiobitrate+'k' preset=fast

Mit diesem Profil erreiche ich auch gute Werte für das Videorendering.

Jedem sollte aber klar sein, je nachdem was man für Videos schneidet sind die Einsparoptionen  mittels der Nutzung von VAAPI oder NVEnc beim Rendern von Videos nicht immer so hoch wie in meinem Beispiel. Lohnen tut es sich aber allemal, gerade auch wenn man wie ich einen etwas älteren Rechner einsetzt und über eine potente Grafikeinheit verfügt.



2 Kommentare:

pappl hat gesagt…

Hallo, gibt es zu den vaapi encoding Einstellungen auch eine Dokumentation.
Was tut die Option properties=, g=, real_time=, vf=, vaapi_device=,....
Wie kann man die Bitrate einstellen.
Mit den Settings bekomme ich ein recht großes Video mit hoher Bitrate.

yanmaneee hat gesagt…

stephen curry shoes
yeezy boost 700
supreme clothing
yeezy boost 350
moncler jackets
jordans
balenciaga shoes
hermes
supreme clothing
yeezy shoes