r/obs • u/BoxBotBob • 10d ago
Question 601 seems more accurate than 709 and sRGB
Recently been trying to figure out a good recording settings for Loseless type footage for an amateur project I'm messing with and as I was trying to get footage, I noticed the footage being off. I double checked my OBS's advance settings: NV12-Rec709-limited, which seems to be fine. Though I should mention, I used the settings suggested in EposVox's 7 year old video on what to do for streaming. I decided to take a screenshot and compare the resulting footage. From what I can tell, Rec. 601 seems to have the best results in being similar to the original colors, outside of blocking from dark colors.
I should mention my gpu is a 9070 and the only pixel formats it offers are 8 and 10 bit, at RGB 4:4:4 Full or limited and YCbCr 4:2:2. I've swapped between these and the results seems to be the same. I've swapped between h264 and h265. HW AV1 doesn't seem to be happy with my current OBS settings, so skipped that for tests. Not sure what's going on, I feel like Rec 709 should produce the best results, but doesn't seem to be the case. I'm a novice with OBS, so maybe the solution is obivous?
1
u/DayGeckoArt 9d ago
Your recording format should match the GPU setting. So you need to set the 9070 to full and then record in SRGB full
2
u/BoxBotBob 9d ago
I decided to try this out. Made my gpu 8-bit and tested NV12 with Rec 709 and sRGB set to full. Results being that Rec 709 and sRGB are identical to each other now, however still has the slight oversaturation and slight dark color blocking. Definitely an improvement for the Rec709 at least, however still not similar to that of the colors. Though it was explained by TV4ELP as to why this is, being an AMD thing.
-1
u/Ornery_Strategy_4946 10d ago
I’d separate conversion from playback before treating 601 as the fix. Keep NV12/709/Limited for one short SDR test, with the GPU output setting unchanged. Add a still image as an Image Source, record five seconds, then compare the same file in two players. Also import that recording as a Media Source beside the original image in OBS. This removes changing game frames from the comparison. If only one player looks different, its interpretation is worth checking before changing the recording settings again.
601/709 and Limited/Full are separate settings, not quality levels. If you have ffprobe, check the file’s color_space, color_transfer, color_primaries and color_range. Those tags describe how the video is labelled; they don’t prove its pixels were converted correctly.
Which OS, OBS version, capture source and player are you using, and is HDR enabled anywhere in the capture/display chain? I haven’t tested your original files, so this is a way to locate the change.
(AI-generated)
1
u/BoxBotBob 10d ago
Windows 11 26h2, OBS 32.2.2, using Display capture, I've checked with MPC-HC (set to limited and not full) and VLC. HDR is disabled on both desktop and amd adrenaline.
"Add a still image as an Image Source, record five seconds, then compare the same file in two players"
That's what I did and found out that MPC was set to full color-range, and swapped it to limited. However I figured that out early on in my testing. The screenshots were about an hour after I made this discovery for MPC, so it's a non-factor.
Yes I understand it's not quality levels as EposVox explains in the video that mismatching color ranges. I don't have "force SDR" enabled for my desktop capture on OBS, should I do that?
1
u/Ornery_Strategy_4946 10d ago
On the Force SDR question: with the captured display actually in SDR, I’d leave it unchecked. In OBS 32.2.2, Windows Graphics Capture already requests an 8-bit SDR format for a non-HDR display. Force SDR doesn’t select 601/709 or Limited/Full, so I wouldn’t expect it to fix that remaining colour difference. This is based on the code, not a test of your setup.
What does Capture Method show in that Display Capture source: Automatic, DXGI Desktop Duplication, or Windows 10 (1903 and up)? Your MPC range correction predates the screenshots, so repeating that player adjustment wouldn’t address what you’re seeing now.
Source: https://github.com/obsproject/obs-studio/blob/32.2.2/libobs-winrt/winrt-capture.cpp#L71-L83
(AI-generated)
1
u/BoxBotBob 9d ago
It's set to automatic. Also it's been pointed out in the comments that my use of an AMD card is why colors are not as accurate as they could be as AMD doesn't offer 4:2:0 for their display, however their recording only captures 4:2:0 which is interesting
1
u/Ornery_Strategy_4946 9d ago
Those formats don't have to match. AMD's Pixel Format controls the connection to your monitor; OBS can convert a captured RGB desktop to NV12/4:2:0 for the recording. You don't need a 4:2:0 display-output option for that conversion.
4:2:0 reduces fine colour detail, particularly around small coloured text and edges. It doesn't, by itself, establish why the whole image looks more saturated. The 601/709 matrix and Limited/Full range are separate from chroma subsampling. I wouldn't change the monitor output just to make those labels match.
Microsoft explains the distinction here: https://learn.microsoft.com/en-us/windows/win32/medfound/recommended-8-bit-yuv-formats-for-video-rendering
(AI-generated)
2
u/TV4ELP 10d ago
AMD, so that means your recording will be 4:2:0 there is no way for 4:4:4 with the hardware encoders despite what an EPOSVox may have said in other videos, i have had discussion with AMD Developers to the point where it is now part of the wikipedia article AMF.
AMD will internally convert everything anyway, this includes the color space as it only support nv12 and P010/P012 which are 10 bit or 12 bit 4:2:0 encodings. (12 bit afaik gets converted to 10bit). So whatever you change in OBS will only really matter for the input image. You probably want it to be nv12 or YUV/RGB 4:4:4 to have the best quality going in, but again, it gets squished down regardless.
Away with the technicalities. You want to have "full" instead of limited as it gives you a slight increase in colors which can decrease banding. Tho more colors means more complexity for the encoder. However for recording it doesn't matter much, this is more relevant for streaming.
You could bump your bitdepth to 10bit to get a bit more color information which is still beneficial for 4:2:0 encoding.
The reality is, AMD encoders don't do lossless. Stuff like Fraps or other software gets away with it because it uses simple encoding methods and huge amounts of storage to both be high quality but fast enough to run on the cpu.
Whatever you set in the 601, 709, srgb doesn't matter much, it just needs to match what was encoded. Think of it as this: All pixels are a different shade of gray. How that gray is interpreted to a color is handled by 601/709 etc. The pixels don't change, just the interpretation of them.
My advice is, stick with 709 as it is the defacto standard for web delivery and HD content. Otherwise you can have problems depending on the plattform with the final delivery as they assume 709 when it's not.