Diese Anleitung bezieht sich auf eine Aufnahmemethode die De-M-oN immer wieder für Capture Karten mit FFMPEG Empfohlen hat, die mittlerweile durch ein Drittanbieter Plugin auch in OBS Studio mit NVIDIA Karten möglich ist und bei mir sehr gute Ergebnisse erzielt. Dies ist keine Anleitung für die Verwendung oder Standardkonfiguration von OBS Studio.
Im wesentlichen geht es darum, dass man neben einen festen Quantizer in NVENC auch einen minimalen und maximalen Quantizer angeben kann, wodurch z.B dunkle Szenen in Aufnahmen viel bessere Qualität erzielen, ohne wirklich viel mehr Performance oder Speicher zu kosten (Da diese Szenen sehr gut komprimierbar sind). Dazu zitiere ich am besten einmal De-M-oN, da dieser sich um einiges besser mit encoding auskennt:
Das Problem ist halt das OBS keine qmin, qmax Kombo anbietet wie ffmpeg es tut.
Dadurch leidet Dunkelheit relativ schnell, weil die ja dann auch mit 16 quantisiert wird. qmin würde dann die Dunkelheit kleinere Quantizer geben (zumal die eh gut komprimierbar ist) und dann würde man sogar mit CQP19 auskommen, bissl puffer für re-encode schadet aber nicht und 16 ist dann schon ein sehr guter Weg.
Aber da OBS diese kombo nicht hat, würd ich bei OBS eher zu CQP10 raten. Dann brauchts bei 4k/UHD aber schon recht gute Schreibrate.
Zusammengefasst
Mit OBS-Studio hat man also das Problem, dass man nur einen festen Quantizer angeben kann (Wenn man für die Aufnahme: CQP verwendet) z.B CQP 16
Kleine Quantizer z.B QCP 1 = Hohe Qualität/Bitrate
Großer Quantizer z.B QCP 25 = Niedrige Qualität/Bitrate
In FFMPEG wird dies durch qmin und qmax gelöst, wodurch ein dynamischer Quantizer erreicht wird, der also nicht nur einen festen CQP Wert verwendet.
Lösung durch StreamFX Plugin
Damit wir jetzt auch diese qmin und qmax Kombination für einen dynmaischen Quantizer in OBS-Studio verwenden können, müssen wir uns das Plugin StreamFX, welches weitere Encoder für OBS enthält, von Xaymar (Ein deutscher Entwickler, der sehr aktiv an der Entwicklung von OBS-Studio beteiligt ist) herunterladen. Zuvor war StreamFX in zwei unterschiedlichen Plugins aufgesplittet: Stream effekte und FFMPEG Encoder. Zur Vereinfachung von Updates wurde beides in ein Projekt zusammengeführt.
StreamFX download: https://github.com/Xaymar/obs-StreamFX/releases/latest
Für den Download nach ganz unten unter "Assets" scrollen und die Version mit den Dateinamen ".exe" herunterladen.
Das Setup kann normal ausgeführt werden und installiert das Plugin StreamFX in eure aktuelle OBS Studio Version. Das Plugin kann über die Windows Systemsteuerung auch einfach wieder deinstalliert werden.
OBS Studio Konfiguration
Für die Konfiguration des dynmaischen Quantizer geht ihr als erstes in OBS Studio oben links auf:
Datei > Einstellungen > Ausgabe > Ausgabemodus: Erweitert > Reiter: Aufnahme.
Oben könnt ihr eure Standardeinstellung wie den Pfad, Format und Audiotracks definieren.
Wichtig ist, dass Ihr als Kodierer folgendes vom StreamFX Plugin auswählt:
H.264/AVC Nvidia NVENC
StreamFX Konfiguration
Sobald der Kodierer ausgewählt wurde, kann in den Aufnahmeeinstellungen vieles für die H.264 Nvidia NVENC Aufnahme konfiguriert werden. Die Konfiguration wird auf eine hohe Performance mit den dynamischen Quantizer konfiguriert.
Einstellungen die nicht genannt werden, sind auf den Standard belassen, befinden sich aber noch mal unter den Button "Alle Einstellungen":
- Preset: High Performance
- Profile: Main
- Mode: Variable Bitrate
- Buffer Size: 0 kbit/s
- Target Bitrate: 0 kbit/s
- Maximum Bitrate: 0 kbit/s
- Target Quality: 0,00
- Minimum Quality: -1
- Maximium Quality: -1
- Interval Type: Seconds
- Interval: 2,00 seconds
- Custom Settings: -b=0 -maxrate=0 -bufsize=0 -qmin=1 -qmax=16
- Preset: High Performance
- Profile: Main
- Level: Automatic:
- Mode: Variable Bitrate
- Two Pass: Default
- Look Ahead: -1 frames
- Adaptive I-Frames: Default
- Adaptive B-Frames: Default
- Buffer Size: 0 kbit/s
- Target Bitrate: 0 kbit/s
- Maximum Bitrate: 0 kbit/s
- Target Quality: 0,00
- Minimum Quality: -1
- Maximium Quality: -1
- I-Frame QP: 21
- P-Frame QP: 21
- B-Frame QP: 21
- Spatial Adaptive Quantization: Default
- Temporal Adaptive Quantization: Default
- Maximum B-Frames: -1 frames
- B-Frame Reference Mode: Default
- Zero Latency: Default
- Weighted Predition: Default
- Non-reference P-Frames: Default
- Access Unit Delimiter: Default
- Decoded Picture Buffer Size: -1 frames
- Interval Type: Seconds
- Interval: 2,00 seconds
- Custom Settings: -b=0 -maxrate=0 -bufsize=0 -qmin=1 -qmax=16
- GPU: -1
- Override Color Format: Automatic
- Standard Compliance: Strict
Am wichtigsten sind die Custom Settings, welche FFMPEG Parameter zulassen und Einstellungen in der Graphischen Oberfläche überschreiben. Hier definieren wir also den dynmaischen Quantizer, welcher für euren Bedarf angepasst werden kann. Es sollte nur -qmin und -qmax angepasst werden, da die anderen Werte in den genannten "Custom Settings" für die Methode auf 0 stehen müssen.
Empfohlene qmin und qmax Einstellungen
-qmin=1 und -qmax=16 wird für eine Aufnahme in 1920x1080@60fps empfohlen, da die Bitraten für normale Festplatten tragbar sein sollten. Falls die Festplattengeschwindigkeit nicht ausreichen sollte, muss der -qmax Wert angehoben werden. Hier aber am besten nicht über 20 gehen, da die Qualität sonst leiden könnte (Am besten selber testen!).
Ich selber hatte mit -qmin=1 in dem Spiel Apex Legends Probleme, wodurch die Aufnahme ab und zu gehangen hat. Deswegen verwende ich für Apex Legends einen -qmin Wert von 10, wodurch bei meinen Setup keine Probleme aufkommen. Warum der -qmin Wert in Apex Probleme macht, kann ich leider nicht beantworten.
Als zusätzlichen Test habe ich eine Aufnahme mit einen festen CQP Wert von 20 aufgenommen und danach eine Aufnahme mit den StreamFX Plugin -qmin 1 -qmax 20 gestartet.
In der Aufnahme bin ich in einen dunklen Bereich gelaufen, um zu überprüfen wie sich die Bitraten verhalten:
Aufnahme fester CQP Wert 20
Offener Bereich: Ungefähr 50000 kbit/s
Dunkler Bereich: Ungefähr 9000 kbit/s
Aufnahme -qmin 1 -qmax 20:
Offener Bereich: Ungefähr 50000 kbit/s
Dunkler Bereich: Ungefähr 20000 kbit/s
Wie man anhand der Beispiele sieht, bleiben die "schwer" (Offenen) komprimierbaren Bereiche gleich von der Bitrate, aber Szenen die einfacher (Dunkle Bereiche) zu komprimieren sind, genießen mit der -qmin und -qmax Kombination mehr Bitrate.