# Nvenc H264 und H264 unterschiedlich?



## BloodSteam (31. Dezember 2017)

Hallo,
ich weiß nicht ob ich es richtig verstehe.
Seit der GTX600 Serie gibt es ein dedizierten Chip (NVENC) für das H264 encoding, somit wird die GPU an sich nicht belastet sondern der NVENC Chip?

Wie kann ich dann den H264 nutzen und nicht NVENC? Brauche ich eine Quadro GPU bzw AMD Gpus ?

Bisschen weiter gelernt ist quasi H264 eine Weiterentwicklung von dem X264 Codec. Zb wie IDR Frames.
NVENC ist nur eine Funktion von Nvidia die leicht die CPU entlastet aber NICHT auf GPU basiert sonder immer noch wie der x264 auf der CPU?


----------



## Incredible Alk (31. Dezember 2017)

Es gibt keinen "NVENC-Chip" - die Videoeinheiten in der GPU können en-und decodieren, sprich die GPU selbst macht das.
H264 nutzen ohne NVENC ist dann auf der CPU - dazu nutzt du einfach die x264-libraries mit Programmen wie beispielsweise Handbrake. Das Ergebnis auf der CPU ist langsamer als per nvenc aber qualitativ (und von der Kompression=Dateigröße) her deutlich besser (da GPUs den Funktionsumfang von h264/265 nur sehr begrenzt ausnutzen - deswegen ists ja so schnell...).

Und nein, h264 ist keine Weiterentwicklung von x264, der Codec ist der gleiche. x264 ist ein Anbieter, der den AVC-Codec benutzt. Die (bei weitem bessere) Weiterentwicklung ist der HEVC, ein Marktname davon ist x265. NVENC kann den auch mittlerweile aber auch hier nur Grundfunktionen davon. Extrem schnell aber ineffizient was Qualität/Dateigröße angeht. Super zum streamen (was ja auch die Anwendung ist), weniger gut zum Verstauen privater Videodateien beispielsweise.


----------



## Gimmick (31. Dezember 2017)

BloodSteam schrieb:


> Wie kann ich dann den H264 nutzen und nicht NVENC? Brauche ich eine Quadro GPU bzw AMD Gpus ?



Das hat nichts miteinander zu tun. NVENC ist die Bezeichnung von nV für ihre Encodingengine auf der GPU.
H.264 ist der Codec, x264 ist ein Open-Source H.264 Encoder.



Incredible Alk schrieb:


> Es gibt keinen "NVENC-Chip" - die Videoeinheiten in der GPU können en-und decodieren, sprich die GPU selbst macht das.



Um Verwirrung zu vermeiden:
 Es gibt eine dedizierte Einheit auf der GPU, die das Encoding im Falle von NVENC übernimmt. Man kann also sagen "die GPU encodiert", aber es sind nicht die Grafikeinheiten über CUDA oder ähnliches beteiligt.


----------



## soth (31. Dezember 2017)

Das wichtigste wurde eigentlich schon gesagt.

H.264 ist der Codec.
x.264 ist ein rein CPU-basierter H.264 Encoder. Andere häufig genutzte H.264 stammen bspw. von MainConcept oder Elecard.
NVENC ist die Bezeichnung für einen dedizierten Hardware-Encoder in der GPU.
Man kann auch über die Grafikeinheiten (CUDA) encoden, MainConcept bietet hierfür bspw. einen Encoder an.


----------



## BloodSteam (31. Dezember 2017)

Gibt es bei dem x264 Codec irgendwelche Preferencen was Kerne und Takt angeht? Zb 8700k mit zb 5Ghz vs einen 1700 ?


----------



## Incredible Alk (1. Januar 2018)

Ja - aber das ist weitaus komplizierter als nur Takt und Kerne (mehr von beidem ist immer besser bei Videokompression).
Sieh dir einfach entsprechende Tests an wo h264/265 als Benchmark genutzt wird. 

Beispielsweise ist ein Skylake-X sehr viel schneller wenn man das neue AVX nutzt was Ryzen nicht kann (http://extreme.pcgameshardware.de/a...1654-alkis-blog-37-avx-skl_vs_bdw_speedup.png), ohne AVX kann Ryzen wiederum gut mithalten weil der Codec der ZEN-Architektur "gut liegt".
Und dann kommts auf die Einstellungen des Codecs an - je nachdem welche Funktionen von h264/265 du nutzt kanns auf der einen oder der anderen CPU (viel) schneller sein.


----------



## BloodSteam (1. Januar 2018)

Ich weiß nicht ob ich mir ein 8700k, 1700(x) oder ein Threadripper 1950X holen will. Ob es überhaupt Sinn macht. Ich kann bei OBS nur x264 oder NVENC machen. Ich kann nicht h264/5  auf CPU machen. Die CPU läuft bei NVENC auf 0.5-1% mehr.

Also es soll schon ein Streaming PC werden.


----------



## soth (1. Januar 2018)

x264 läuft auf der CPU ...


----------



## BloodSteam (1. Januar 2018)

soth schrieb:


> x264 läuft auf der CPU ...



Das wissen alle hier, nichts neues. Leider reden wir von Nvenc und H264. Bzw wie man H265 bei OBS einstellen kann.


----------



## soth (1. Januar 2018)

Das liest sich aber anders ...


BloodSteam schrieb:


> Ich kann bei OBS nur x264 oder NVENC machen. Ich kann nicht h264/5  auf CPU machen.



Wie dem auch sei, x265, bzw. HEVC über NVENC wird meines Wissens derzeit nur für die Recording-Funktion angeboten.


----------



## BloodSteam (1. Januar 2018)

soth schrieb:


> Das liest sich aber anders ...
> 
> 
> Wie dem auch sei, x265, bzw. HEVC über NVENC wird meines Wissens derzeit nur für die Recording-Funktion angeboten.



x = CPU
h = GPU
Laut Wikipedia.
Also bei mir ließt es sich richtig. "Ich kann bei OBS nur x264 oder NVENC machen." steht auch dass ich h265 nicht auf CPU machen kann.
Generell bin ich bisschen verwirrt. Dass X264 und X265 auf CPU sind ist mir klar, aber ich verstehe dieses H264 und H265 nicht, da steht nichts von CPU oder GPU.


----------



## Incredible Alk (1. Januar 2018)

BloodSteam schrieb:


> x = CPU
> h = GPU
> Laut Wikipedia.



Die Stelle würde ich mal gerne sehen - wenn das wirklich so da steht ists schlichtweg falsch (ja, auch auf Wikipedia stehen falsche Dinge, die oftmals von ihren Verbreitern auch rigoros verteidigt werden^^).



BloodSteam schrieb:


> ich verstehe dieses H264 und H265 nicht, da steht nichts von CPU oder GPU.


Das liegt daran dass es hier um einen Codec geht. Auf welchem Chip dieser berechnet wird spielt keine Rolle. h264 (eigentlich: "MPEG4-AVC") kannste auf CPUs, GPUs, ASICs, ARMs, was auch immer berechnen.
x264 ist kein Codec, sondern sozusagen ein Programm das diesen verwendet... und der Entwickler hats eben für CPUs geschrieben.


----------



## BloodSteam (1. Januar 2018)

Also ist h264 ein Codec und NVENC is halt die GPU die den H264 Codec verwendet, okay.
Ist der H265 codec genauso schnell wie X265 ?


----------



## Incredible Alk (1. Januar 2018)

BloodSteam schrieb:


> Ist der H265 codec genauso schnell wie X265 ?



Du verstehsts immer noch nicht, oder? 

H264 = MPEG4-AVC = Codec
X264 = Programm das AVC verwendet und auf der CPU rechnet

H265 = MPEG4-HEVC = Codec
X265 = Programm das HEVC verwendet und auf der CPU rechnet

NVENC = Programm von NVidia das AVC oder HEVC in vereinfachter Form (=viel ineffizienter aber viel schneller) auf der GPU rechnet


----------



## soth (1. Januar 2018)

Incredible Alk schrieb:


> H265 = MPEG4-HEVC = Codec
> X265 = Programm das HEVC verwendet und auf der CPU rechnet
> 
> NVENC = Programm von NVidia das AVC oder HEVC in vereinfachter Form (=viel ineffizienter aber viel schneller) auf der GPU rechnet


HEVC/H.265 ist MPEG-H .
Ich würde da ganz klar zwischen GPU (CUDA) und Hardware-Encoding (QuickSync, NVENC) unterscheiden.


----------



## Incredible Alk (1. Januar 2018)

Jo stimmt (zu viel copy-paste^^).

Detaillierter unterscheiden zwischen nvenc und Cuda und Quicksync usw. kann man, würde aber den TE vermutlich aktuell noch mehr verwirren und ist für den praktischen Einsatz auch ziemlich wurscht für die meisten Heimanwender.

Wenn gestreamt werden soll kann man das simpel über Shadowplay/Nvenc tun und das wars - für die allermeisten Normalnutzer ist das locker ausreichend.


----------



## BloodSteam (2. Januar 2018)

Incredible Alk schrieb:


> Jo stimmt (zu viel copy-paste^^).
> 
> Detaillierter unterscheiden zwischen nvenc und Cuda und Quicksync usw. kann man, würde aber den TE vermutlich aktuell noch mehr verwirren und ist für den praktischen Einsatz auch ziemlich wurscht für die meisten Heimanwender.
> 
> Wenn gestreamt werden soll kann man das simpel über Shadowplay/Nvenc tun und das wars - für die allermeisten Normalnutzer ist das locker ausreichend.



Also Ich mag nicht dieses Coding verstanden haben, man muss aber nicht sofort denken das Ich ein totaler leihe bin und Shadowplay nutzen muss. Also Ich kann schon denken. H.xxx = Codec, X.xxx = Programm was auf der CPU ausgeführt wird.

Muss Ich dann einfach X265 aufm PC installieren um es in OBS zu nutzen ?


----------



## Gimmick (2. Januar 2018)

BloodSteam schrieb:


> Also Ich mag nicht dieses Coding verstanden haben, man muss aber nicht sofort denken das Ich ein totaler leihe bin und Shadowplay nutzen muss. Also Ich kann schon denken. H.xxx = Codec, X.xxx = Programm was auf der CPU ausgeführt wird.
> 
> Muss Ich dann einfach X265 aufm PC installieren um es in OBS zu nutzen ?



Ne das geht nur über ffmpeg (Einstellungen -> Ausgabe -> Aufnehmen -> Art -> FFmpeg) und nur wenn man das von OBS mitgebrachte ffmpeg durch ein anderes ersetzt (außer das ist mittlerweile standardmäßig dabei, meine aber nicht).

Per CPU in HEVC aufnehmen ist aber leistungsbedingt sowieso nicht möglich. Standardmäßig dabei ist aber nvenc_hevc - das bringt aber keinen Vorteil im Bezug auf Größe und Qualität.
Zudem nehmen Streamingdienste kein HEVC an und beim Bearbeiten von HEVC Aufnahmen hat man oft Kompatibilitätsprobleme.

Ähnlich siehts bei vp9 aus (ähnliche Codiereffizienz wie hevc, einstellbar über ffmpeg -> webm Container). Der Encoder ist so langsam, da kann man jede Aufnahme vergessen.


----------



## soth (2. Januar 2018)

OBS Studio basiert auf ffmpeg und kann dementsprechend H.265 über x265 und NVENC encoden. Das funktioniert aber nur für Recording über Custom Output.


----------

