15.04.2025, 18:55
Thank you for detailed and fast response dear @Selur
Indeed some meaningless variables there in old x264 preset and honestly I was never able to stream because of lacking connection...but what is really odd is popular streaming services using fixed GOP size. It has to be 2 seconds for twitch for example. Limiting 60fps stream to 120 Keyint, 30fps to 60 keyint. No other way around it. Which is why I had to dive into all this encoder technology in the first place as noob, trying to squeeze the max. amount of compression to that small, limited GOP
Yeah adding OpenCL made quality worse, but at that time It was the only way to take some load off from CPU (It was overloading, and I didn't wanted to increase threads since it ruined quality further) So had to make that decision there.
At some point, I even read the intraRefresh parts of source code of x264 thinking maybe I can do it somehow with 2 second GOP limit and have a better distribution of data, and eliminate pulsation of quality with every I frame, then losing it all after some frames, then repeat. No luck there either.
So best tweak I could find was the strict B-Pyramid trick, with 64 fps. Even a naked eye comparison, it is still visible. Back then I did some VMAF tests on lossless in-game footage and saw it working great with measureable means as well in terms of compression.
For NVencoder tests I wanted to use FFMpeg Advanced tab in OBS but couldn't figure out why video encoder commands are not passing. Even prompting rate control as CBR and limiting bitrate doesn't work using commands such as:
rc=cbr maxBitrate=1000 averageBitRate=1000 vbvBufferSize=1000
and this doesn't pass to encoder settings.
From regular tab I have tested command you gave
[obs-nvenc: 'advanced_video_recording'] settings:
codec: H264
rate_control: CQVBR
max_bitrate: 6000
cq: 23
keyint: 128
preset: p7
tuning: hq
multipass: fullres
profile: high
width: 1920
height: 1080
b-frames: 4
b-ref-mode: 0
lookahead: true (31 frames)
aq: true
user opts: useBFramesAsRef=1 frameIntervalP=3 lookaheadDepth=31
added other two more options,
From what Ive read https://obsproject.com/kb/advanced-nvenc-options frameInterval setting changes the way how GOP starts and without any measurement, looks better at setting 2 and 3 gop patterns. how do I know with no measurement but some text looks less degraded with it, seems to have positive impact on data distribution. Not sure ofcourse. Again Thanks for reply. I will now have to figure out why settings at advanced ffmpeg tab doesn't pass to encoder. Always confusing. I don't get it. Should be this code:
https://www.ffmpeg.org/doxygen/trunk/nvE...ource.html
passing into encoder in ffmpeg right? why it doesn't work
EDIT:aaaaahhh... OBS ffmpeg option input expects a unit like M or k at end of bitrate definition.. like averageBitrate=500k it works. my bad
Indeed some meaningless variables there in old x264 preset and honestly I was never able to stream because of lacking connection...but what is really odd is popular streaming services using fixed GOP size. It has to be 2 seconds for twitch for example. Limiting 60fps stream to 120 Keyint, 30fps to 60 keyint. No other way around it. Which is why I had to dive into all this encoder technology in the first place as noob, trying to squeeze the max. amount of compression to that small, limited GOP

At some point, I even read the intraRefresh parts of source code of x264 thinking maybe I can do it somehow with 2 second GOP limit and have a better distribution of data, and eliminate pulsation of quality with every I frame, then losing it all after some frames, then repeat. No luck there either.
So best tweak I could find was the strict B-Pyramid trick, with 64 fps. Even a naked eye comparison, it is still visible. Back then I did some VMAF tests on lossless in-game footage and saw it working great with measureable means as well in terms of compression.
For NVencoder tests I wanted to use FFMpeg Advanced tab in OBS but couldn't figure out why video encoder commands are not passing. Even prompting rate control as CBR and limiting bitrate doesn't work using commands such as:
rc=cbr maxBitrate=1000 averageBitRate=1000 vbvBufferSize=1000
and this doesn't pass to encoder settings.
From regular tab I have tested command you gave
[obs-nvenc: 'advanced_video_recording'] settings:
codec: H264
rate_control: CQVBR
max_bitrate: 6000
cq: 23
keyint: 128
preset: p7
tuning: hq
multipass: fullres
profile: high
width: 1920
height: 1080
b-frames: 4
b-ref-mode: 0
lookahead: true (31 frames)
aq: true
user opts: useBFramesAsRef=1 frameIntervalP=3 lookaheadDepth=31
added other two more options,
From what Ive read https://obsproject.com/kb/advanced-nvenc-options frameInterval setting changes the way how GOP starts and without any measurement, looks better at setting 2 and 3 gop patterns. how do I know with no measurement but some text looks less degraded with it, seems to have positive impact on data distribution. Not sure ofcourse. Again Thanks for reply. I will now have to figure out why settings at advanced ffmpeg tab doesn't pass to encoder. Always confusing. I don't get it. Should be this code:
https://www.ffmpeg.org/doxygen/trunk/nvE...ource.html
passing into encoder in ffmpeg right? why it doesn't work
EDIT:aaaaahhh... OBS ffmpeg option input expects a unit like M or k at end of bitrate definition.. like averageBitrate=500k it works. my bad
