Reviews NVIDIA NvEnc vs. CPU-Encoding: Kann der Video-Encoder der Turing-Chips für Twitch-Streaming & Co. mit einer CPU mithalten? Analyse mit Netflix VMAF

Ja, herzlich willkommen im Club :D
 
@Loading--------: vielen Dank für die Auskunft. Kannst du verraten, ob und wie sich das Ergebnis verändert, wenn H.265 Anwendung findet?
 
Aso, selber nicht getestet: Ich hoffte, dass das vielleicht ein anderer Teil deiner Arbeit gewesen war. Was dir weitere Fragen von mir erspart, ist ja auch was^^
 
Quantitativen Analysetools stehe ich skeptisch gegenüber, ist aber natürlich leichter zu machen als stundenlang Videoclips in blinden A/B Proben zu vergleichen. Die Ergebnis Balken sollte man nicht als das letzte Wort akzeptieren.

Turing nvenc ist schon sehr beeindruckend wenn mal sich diverse twitch Streamer anschaut. Keine störende Blockbildung bei schnellen Bewegungen auch bei dichtem Laub/foliage, sauberer Text alles 1A und das bei den mageren Bitraten mit 60fps.

Die Integration mit OBS usw scheint auch prima zu klappen und ist immer auf dem neuesten Stand, da Nvidia kräftig mithilft. Da hat AMD einfach jahrelang gepennt, denen ihr VCE hardware encode interface war schon immer ein Desaster und da scheint sich nicht viel getan zu haben.
Ich mein twitch/YT sind jetzt wahrlich kein neues Phänomen mehr und diese Zielgruppe wurde einfach aufgegeben, wie schwer kann es sein ein kleines Team aufzustellen welches den H.264 encoder auf die Sprünge bringt?
 
Zuletzt bearbeitet :
@mahatma Funfact: Ursprünglich sollte eine standardisierte Studie der Dreh-und Angelpunkt meiner Arbeit sein. Wurde durch die Corona-Beschränkungen dann aber nicht mehr machbar. Also habe ich mir diverse Bewertungsmethoden angeschaut und da hat Netflix VMAF sich als die beste rausgestellt. Ich zitiere einafch mal den entsprechenden Abschnitt:
Den zentralen Bestandteil dieser Arbeit wird die Analyse mithilfe des VMAF von Netflix bilden. Diese Metrik wurde gewählt, da die Ergebnisse am besten mit denen aus Laborexperimenten mit menschlichen Teilnehmern übereinstimmen und das Verfahren in der Industrie weitgehend anerkannt ist (Barman et al., 2018, S. 9; Li, Bampis, et al., 2018; Rassool, 2017, S. 2). VMAF kombiniert die Modellierung des menschlichen Sehens mit maschinellem Lernen. Es wurde von Netflix in Zusammenarbeit mit der University of Southern California entwickelt. Im Juni 2016 hat Netflix VMAF als Open Source auf GitHub veröffentlicht (Li, 2020).
[...]
Der Datensatz von Netflix besteht aus 34 Referenzvideos aus der Netflix Datenbank mit je sechs Sekunden Länge sowie einer Auswahl von öffentlich verfügbarem Material. Die Inhalte der Quellclips decken eine breite Palette ab, etwa Animation, Menschen, Kamerabewegung, Nahaufnahmen, Wasser und mehr. Die Clips unterscheiden sich außerdem in Filmkörnung, Helligkeit, Kontrast, Farbsättigung, Bewegung, Textur und Schärfe. Aus den Referenzclips werden H.264/AVC kodierte Clips mit Auflösungen von 384x288 bis 920x1080 und Bitraten von 375 kbps bis 20 000 kbps berechnet. Die berechneten degradierten Clips werden anschließend in standardisierten Tests unter Beachtung der ITU-R BT.500–13 Empfehlung einer Kontrollgruppe mittels der Double Stimulus Impairment Scale (DSIS) Methode präsentiert. De Teilnehmer bekommen das degradierte und das Referenzvideo nacheinander zu sehen und sollten den Grad der Qualitätsverschlechterung anhand einer Skala von 1 (sehr störend) bis 5 (nicht wahrnehmbar) angeben. Aus den Ergebnissen wird ein Differential Mean Opinion Score (DMOS) ermittelt und auf einer Skala von 0-100 normalisiert. Das Referenzvideo hat einen VMAF Score von 100. Bei den Teilnehmern handelte es sich um keine Experten aus dem Videobereich. Die so ermittelten DMOS Werte dienen als Grundlage für das maschinelle Lernen, womit das VMAF Modell trainiert getestet wird. Der VMAF Algorithmus kombiniert modifiziere Versionen der Metriken VIF und DLM miteinander und misst die zeitliche Differenz zwischen nebeneinanderliegenden Frames. Die elementaren Metriken werden vom Machine-Learning Algorithmus gewichtet, woraus die endgültige Metrik resultiert. (Li, 2020)
Netflix-eigene Vergleiche mit anderen Metriken zeigen, dass VMAF den Studien-ergebnissen am nächsten entspricht. Es kann auch dazu genutzt werden, um Qualität von Codecs miteinander zu vergleichen, was für diese Arbeit von zentraler Bedeutung ist. Seit dem GitHub Release 2016 wurde die Performance von VMAF stark verbessert sowie mit libvmaf eine C-Bibliothek entwickelt, welche als Filter in FFmpeg integriert ist (ffmpeg.org, 2020a). Das erleichtert den Einsatz und erlaubt sogar komprimierte Daten als Input / Referenz. Außerdem wurde die Genauigkeit laut Netflix verbessert (Li, Bampis, et al., 2018).

TLDR: die Metrik wurde vielfach unabhängig von Expertengruppen (Videostandards-Konsortium u.a.) getestet und hat eine sehr hohe Übereinstimmung mit Studienergebnissen wo echte Testpersonen einen Fragebogen bearbeiteten. Das VMAF KI-Modell wird nämlich mit genau diesen Studienergebnissen (ermittelte MOS-Scores unter strengen Laborbedingungen) gefüttert.

P.S. Was ist an den Balken nicht ernstzunehmen? Achsenskalierung ist schließlich neutral gehalten und die errechneten Scores 100 % reproduzierbar. Habe extra öffentlich verfügbares Material und Methode verwendet. VMAF steht auf GitHub frei zum Download, einen selbst kompilierten Windows-Build kann ich dir bei Interesse zusenden.
 
Zuletzt bearbeitet :
Danke für die ausführliche Antwort :)
Diese neuen AI tools lesen sich nett. Simple analyzer hatten halt einen schlechten Ruf vor ein paar Jahren sowohl im Audio- (mein Interesse) als auch Videobereich. Schön, dass sich in diesem Bereich so viel bewegt.
 
Gerne ;) Ja leider wird noch viel zu oft für Qualitätsvergleiche das PSNR verwendet. Lässt sich zwar super schnell errechnen ist aber nix mehr als Signal-Rauschabstand und sagt nicht viel über die menschliche Wahrnehmung aus. Da kommen dann Faktoren wie Sitzabstand, Sehgewohnheiten, Beschaffung des Betrachtungsbildschirms, Umgebungslicht, Sichtwinkel, gelenkter Fokus auf bestimmte Bildbereiche etc. hinzu. Da hat Netflix was sehr solides gebastelt was den heutigen Auflösungen gerecht wird (gibt extra 4K-Modell und Smartphone-Modell neben dem Standardmodell, beachtet entsprechende Sichtwinkel und Betrachtungsabstände).
 
Bin gerade auf den Artikel gestoßen, weil ich selber ein bisschen rumprobiert habe mit dem Encoding, allerdings nur Aufzeichnen, ohne Streaming.

Zum Artikel, finde ich schön geschrieben, aber ich muss auch den Netflix VMAF bemängeln. Mir ist bewusst, dass es zwar eine der besten Metriken ist und dass der Tester keinen Einfluss darauf hat, aber mMn ist die trotzdem nicht gut genug ist. 6MBit/s ist schon ganz schön wenig, aber wenn die Referenz das unkomprimierte Bild ist finde ich die Scores zu hoch. Wenn man sich z.B. mal das Minecraft Bild in groß anschaut, ist an vielen Stellen nur noch Pixelmatsch übrig; trotzdem hat das Bild einen Score von 88/100 wenn ein Score von 80 Punkten eine leichte Beeinträchtigung der Qualität darstellen soll.

Beim kurzen Überfliegen vom Netflix Artikel zu VMAF fand ich diese Aussage interessant.
"[...] the viewers sit in front of a 1080p display in a living room-like environment with the viewing distance of 3x the screen height (3H)."
"In applying this model to the mobile phone viewing, however, we found that it did not accurately reflect how a viewer perceives quality on a phone. In particular, due to smaller screen size and longer viewing distance relative to the screen height (>3H), viewers perceive high-quality videos with smaller noticeable differences."
Netflix verwendet ein anderes Modell fürs Schauen auf dem Handy. Daher würde ich schonmal davon ausgehen, dass das Modell für den PC auch nicht ganz passend ist, denn hier ist der Abstand häufig geringer im Verhältnis zur Bildschirmgröße, also wären hier Qualitätsunterschiede besser sichtbar, was sich mit meiner oben beschriebenen Beurteilung der Bildqualität deckt.
Ich könnte mir auch vorstellen, dass das Modell hauptsächlich mit Realfilmen getestet wurde und Animationen wenig betrachtet wurden, geschweige denn Echtzeit Computergrafiken.

Zum Schluss fände ich noch interessant, ob es möglich ist den Encoder einer sekundären Karte zu verwenden. Auch wenn es nicht unbedingt praktisch wäre, man könnte versuchen auf der primären Grafikkarte das Spiel zu rendern, und dann z.B. noch eine RTX 2060 verwenden, die das Encoding, verschiedene Stream Layer, RTX Voice und Camera usw. übernimmt um so die Performance Einbuße zu minimieren.
 
Zuletzt bearbeitet :
@EVPointMaster Die VMAF Bewertungsskala entstammt dem standardisierten MOS-Verfahren der ITU, ist lediglich hochskaliert von 1-5 auf 0-100.
Für VMAF-Berechnungen gibt es 3 Modelle wie in der Arbeit vorgestellt. Ich habe mit dem Standardmodell gearbeitet da es dem Sichtwinkel am PC-Monitor am besten entsprcht. Das Smartphone Model hätte höhere Scores produziert und das 4K-Modell ist auf 4K Material abgestimmt. Tatsächlich - je nach Bildschirmdiagonale und Sitzabstand - erkennt man Artefakte stärker als die Scores es vermuten lassen. Da aber stets mit der unkomprimierten Referenz abgeglichen wird, hat man dennoch eine gute Vergleichbarkeit.
Zum Datensatz von Netflix, das zum Trainieren der Modelle verwendet wird: Der ist mit über 600 Sequenzen in den unterschiedlichsten Auflösung-Bitraten-Kombinationen und von unterschiedlicher Art (Animationen, Schwarzweiß-Filme, Filmkörnung, analog und digital, ...) sehr umfassend. Videospiele unterscheiden sich vor allem durch sehr hohe Schärfe und schnelle Kamerabewegungen. Schnelle Schwenks wiederum verändern alle Pixel eines Bilds und beanspruchen die Encoder-Kompression extrem und führen eher zu sichtbaren Artefakten. Ich stimme zu, dass später Tests mit höheren Bitraten interessant wären. Da der Fokus der Arbeit jedoch klar auf Livestreaming liegt und Twitch als mit Abstand größte Plattform maximal 6 Mbit erlaubt war es hier nur logisch mit 6 Mbit zu testen.
Kleine Insider-Info: Nvidia hat NVENC auf Kameramaterial optimiert. Betrachtet man die Videos mit Gras und Laub, dann sieht man, dass der Algorythms meint, die Bereiche mit Menschen und vor allem Gesichter möglichst gut zu erhalten, dagegen Gras und Bäume zu einem Pixelbrei zu machen. So in der Parkszene z.B. Ob die meisten Menschen die Aufmerksamkeit tatsächlich eher weg von Grünflächen richten sei mal dahingestellt. Trotzdem interessant zu sehen wie der Algorythmus hier vorgeht. H.264 sieht für mich etwas softer aus und bügelt die Details und auch evtl. Fehler weich.
Das mit der sekundären Karte macht angesichts Kosten-Nutzen sehr wenig Sinn. Die 3D / CUDA Performance leidet nur minimal wenn der NVENC beansprucht wird, separater Chip eben.
 
Und ja, AMD steht bezüglich Hardware-Encoder mittlerweile wirklich unter Zugzwang. Immer mehr Leute streamen auf Twitch / YouTube und dafür ist ne RTX Karte mangels Konkurrenz zurzeit ein absoluter no-Brainer. Premiere Pro kann seit neuestem auch NVENC beim Exportieren verwenden.Kommt der bessere Support von Profi-Software (CUDA) noch dazu.

In dem Sinne, nochmal vielen Dank an @Igor Wallossek für das Angebot einen Artikel für igorslab zu schreiben. Freut mich wirklich dass es Interesse an den Ergebnissen gibt.
Habe auch gerade diese Webseite und diesen Artikel entdeckt und möchte mich herzlich bedanken.

Ich würde mich sehr freuen, wenn anlässlich der kommenden 6000er AMD Grafikkarten mit der Methodik nicht nur nach Streaming Encodierung (also vorgegebene Bitrate), sondern auch Videorecodierung (also vorgegebene Qualität) getestet würde.
(Und wie wirkt sich SAM aus?)
 
Vielen Dank für den spannenden Artikel! Man findet sonst kaum gute Informationen über NVENC vs. x264/265 im Netz! Leider bin ich hier auch nur einiges aber nicht viel schlauer geworden :( das liegt aber an meiner speziellen Fragestellung: den besten Qualität / Dateigröße / Transcoding-Zeit Kompromiss mit einem Turing Karte und aktuellem Mainstream CPU für"offline" Transkodierung zB mit Handbrake zu finden. Dann nutzt man auch
- h265 und nicht bei h246 (bei Turing produziert HVEC eine viel bessere Qualität als h264)
- x265 nutzt man CRF, nicht bitrate gesteuert (constant quality). Das ist doch einer der Hauptgründe für die Nutzung von CPU; was man bei NVENC auch bitter vermisst. Nutzt man x265 in VBR Mode, schickt man den Endoder mit Absicht verkrüppelt in den Kampf

Des weiteren 6000 kbps ist (bei 24-25 fps 1080p) recht viel... Bei 60fps vs 24 fps hätte man die Bitrate auch massiv anpassen sollen. Die möglicherweise starke Unterschiede in bit/pixel können starken Einfluss auf das Ergebnis haben. Bei mageren Bitrates würde wahrscheinlich NVENC viel schlechter abscheiden als x265/cq als bei höheren. 0,05-0,1 bits/pixel ist der Bereich, was interessant ist, wenn man echt Platz sparen will.
Waren Sie auch sicher, dass Handbrake B-Frames bei NVENC genutzt hat?

Mein Vorschlag wäre (was ich auch probiere zuhause), die folgende Testläufe in Handbrake zu nutzen:
1. x265 constant quality CRF 19-22 -> video bitrates notieren
2. NVENC 265 Turing Karte, B-Frames aktiviert (zB 4), VBR-HQ oder 2-Pass VBR mit den gleichen Bitrates
des weiteren könnte bei x265 10 bit als Ausgabe nutzen, das sollte die Kompression und Qualität weiter verbessern. Das kann NVENC auch nicht.
Am Ende hätte man schöne Nomogramme statt einfache Balkendiagramme.
hätten Sie die Links zu den Testvideos? Vielleicht nehme ich mir Zeit für paar Testläufe.
Grüße
 
Zuletzt bearbeitet :
Habe auch gerade diese Webseite und diesen Artikel entdeckt und möchte mich herzlich bedanken.

Ich würde mich sehr freuen, wenn anlässlich der kommenden 6000er AMD Grafikkarten mit der Methodik nicht nur nach Streaming Encodierung (also vorgegebene Bitrate), sondern auch Videorecodierung (also vorgegebene Qualität) getestet würde.
(Und wie wirkt sich SAM aus?)
Nicht mal mit NVENC kann man eine Transcodierung nach vorgegebener Qualität machen. Hier ist es auch nicht getestet worden. Im besten Fall CQP (constant quantisation parameter) möglich, was aber kein CRF ist und davon wird immer abgeraten. NVENC bleibt immer bitrate gesteuert. Das Beste, was man daraus machen kann, ist 2-pass-VBR (solange gut implementiert... Handbrake kann es gar nicht, DVDfab oder Xmedia Recode kann es).
 
Ich habe meine eigene Testläufe mit einem Avengers Trailer gemacht (dunkle Szenen, schnelle Szenen, alles dabei)
erst einen Referenzlauf mit x.265 preset medium und slow , beide kamen auf ca. 2500 kbit/sec
danach mit 2550 kbps VBR NVENC getestet, VMAF durchgeführt. Alle output Files waren ca. gleich groß, mit 0,07 bit/pixel

Eregbnisse:
x.265 CRF 21 slow - Score 96,8
x.265 CRF 21 medium - Score 96,7
dvdfab 12, NVENV VBR HQ, geForce 1650 super (Turing) - Score 95,6
Handbrake NVENC HQ slow geForce 1650 super (Turing) - Score 95,6
Handbrake NVENC HQ slow geForce 1050ti (Pascal) - Score 93,5
XMediaRecode NVENC HQ slow VBR geForce 1650 super (Turing) - Score 96,2
XMediaRecode NVENC HQ slow VBR-2-Pass geForce 1650 super (Turing) - Score 96,2

Einige behaupten, sie würden einen VMAF Unterschied von 1 schon wahrnehmen.

Gewinner: xMedia Recode mit Turing Encoder, VBR-HQ (2-pass ist nicht besser)

Verlierer: NVENC mit Pascal Endoder, mit Abstand (ca. 3 Punkte)

Goldstandard: x.265 immer noch mit ca. 1 Punkt, der kleine Qualitätsunterschied gerechtfertigt aber den Zeitaufwand meist nicht

Interessant, dass NVENC sollte bei Turing B-Frames nutzen. Nur dvdFab nutzte es (ffprobe), XMediaREcode und Handbrake nicht. Trotzdem schneidete der 1650 super mit Turing wesentlich besser ab als der 1050ti mit Pascal. Warum XMedia REcode ein wenig bessere Qualität ist als HandBrake oder dvdFab, kann ich nicht erklären.
 
Für die Freaks von HW-transcoding ;) weitere Scores:

1. Hybrid 20.10.11.1 (cuda de- und encoding), Turing NVENC gen 7: Score 94,8, blitzschnell
2. XMedia Recode 3.5.2.3 (CPU decoding, GPU encoding), Turing NVENC Gen. 7: Score 96,1
3. XMedia Recode 3.5.2.3 (GPU de- und encoding), Turing NVENC Gen. 7: Score 96,1 aber einiges schneller als Punkt 2

Bei der CPU de- / GPU encoding unter Punkt 2 war mein Ryzen 2600x kaum ausgelastet, trotzdem langsamer (ca 150 fps vs 210 fps). Es liegt sicherlich am Flaschenhals zwischen RAM und DDR6 VRAM (unter Punkt 1 und 3 läuft alles in VRAM ab)

Hybrid nutzte B-Frames, XMedia Recode wieder nicht, trotzdem liefert es besser ab. Unglaublich.

Ergänzung:
ich habe den berühmten crowdrun clip (extrem schwierig zu komprimieren) auch durchlaufen lassen:
XMediaRecode x.265 CRF 22 preset slow als "Goldstandard": Score 56,8 (kam 3260 kbps raus)
XMediaRecode Turing NVENC Gen 7, VBR HQ Bitrate 3260 kbps: Score 54,9

Tempounterschied ca. Faktor 10 wenn nicht mehr... NVENC Gen. 7 ist scheinbar mehr als brauchbar! Es ist verdammt nach an x.265 (sogar slow), ca. 10x so schnell und braucht kaum Strom (CPU nahezu Idle 40 °C, der Lüfter meiner semi-silent 1650 Super bleibt ganze Zeit stehen da GPU <51 °C)
 
Zuletzt bearbeitet :
Ich bin begeistert, ich verstehe hiervon echt nur Bahnhof! :D
 
Für die Freaks von HW-transcoding ;) weitere Scores:

1. Hybrid 20.10.11.1 (cuda de- und encoding), Turing NVENC gen 7: Score 94,8, blitzschnell
2. XMedia Recode 3.5.2.3 (CPU decoding, GPU encoding), Turing NVENC Gen. 7: Score 96,1
3. XMedia Recode 3.5.2.3 (GPU de- und encoding), Turing NVENC Gen. 7: Score 96,1 aber einiges schneller als Punkt 2

Bei der CPU de- / GPU encoding unter Punkt 2 war mein Ryzen 2600x kaum ausgelastet, trotzdem langsamer (ca 150 fps vs 210 fps). Es liegt sicherlich am Flaschenhals zwischen RAM und DDR6 VRAM (unter Punkt 1 und 3 läuft alles in VRAM ab)

Hybrid nutzte B-Frames, XMedia Recode wieder nicht, trotzdem liefert es besser ab. Unglaublich.

Ergänzung:
ich habe den berühmten crowdrun clip (extrem schwierig zu komprimieren) auch durchlaufen lassen:
XMediaRecode x.265 CRF 22 preset slow als "Goldstandard": Score 56,8 (kam 3260 kbps raus)
XMediaRecode Turing NVENC Gen 7, VBR HQ Bitrate 3260 kbps: Score 54,9

Tempounterschied ca. Faktor 10 wenn nicht mehr... NVENC Gen. 7 ist scheinbar mehr als brauchbar! Es ist verdammt nach an x.265 (sogar slow), ca. 10x so schnell und braucht kaum Strom (CPU nahezu Idle 40 °C, der Lüfter meiner semi-silent 1650 Super bleibt ganze Zeit stehen da GPU <51 °C)
Danke für die Tests! Nutze NVENC Export mit hohen Bitraten (40-100 Mbit, meist 4K) aus Adobe Media Encoder und bin von der Qualität überzeugt, kommt fast an x264 / x265 slow ran.
 
Für die Freaks von HW-transcoding ;) weitere Scores:
Mich würde ja interessieren ob du Vergleiche zwischen NVENC CQP und x264/x265 CRF angestellt hast.
Ich habe bisher noch keinen so ausgefeilten Vergleich mit VMAF diesbezüglich gesehen.
Das würde mich sehr interessieren da ich vielleicht eine größere Videosammlung per NVENC neu encoden möchte um Platz zu sparen, ich möchte aber nicht für jedes Video / jede Kategorie an Inhalten selbst eine Bitrate wählen die am Ende doch mit der Qualität und dem Platzverbrauch nicht passt.
Speziell würde ich Inhalte mit hoher Bitrate in h264 nach NVENC CQP h265 encoden wollen.

Falls jemand doch etwas ähnliches gefunden hat wäre eine Verlinkung sehr nett.
 
Oben Unten