Question / Help Faithful colors...

rwoodley

New Member
I know there are many articles on this topic on the forum. I feel like I have read them all. But I still can't get this right.

Running Windows 10 with an Nvidia GeForce RTX 2080 card.

See the attached photo. On the left is a screen shot of a video I want to record.
There are 2 green circles. In Chrome the left circle is RGB: (0,0,255), the right circle is (0,0,240).

By using the following settings (this took forever to get right), I can record a video with OBS where the 2 green circles have the correct color.
------------------------
Output tab:
Quality: High,
Format: MP4
Hardware: NVENC

Advanced tab:
Color Format: NV12
YUV Color Space: 709
YUV Color Range: Full

Nvidia Card is set to Full.

I view the video in Chrome.
-----------------------------
No other set of settings was as good. Not 'partial'. Not x264. etc.

The attachment shows the original on the left and the recording on the right.
HOWEVER, even though I get the 2 green circles correct, the other colors are kind of washed out as you can see on the right.

I have updated the current log: https://obsproject.com/logs/yb9iEXd2SahNZQkN
This shows me trying various settings. The right-hand image in the attachment is the last thing I did in that log file.

Any ideas on how to make a more faithful color rending would be helpful.



Comparison.png
 

Attachments

  • Best.png
    Best.png
    137.9 KB · Views: 7

R1CH

Forum Admin
Developer
You will need to use lossless recording to avoid the encoder damaging color information, as well as set OBS to RGB output. Be aware that this is not a well supported combination as most video players and encoders / decoders are designed for other color formats.
 

koala

Active Member
Slightly diluted colors at hard color contrast borders are the result of the color format. NV12 only saves the luma (brightness) information for each pixel, while saving chroma (color) information with less resolution to save space and processing time. See https://en.wikipedia.org/wiki/Chroma_subsampling. NV12 is the common format for almost all video production. If you don't want this, use RGB, but this needs significantly higher processing power.

The next aspect is the Color Space (601 or 709). 709 allows for a slightly larger amount of colors and is standard for high resolution digital video.
The last color aspect is the color range - full or partial. Full saves every color as it is, while partial only saves 220 of the 256 range. This is also to reduce required bandwidth.

So if you change your color format from NV12 to RGB, color space to 709 and color range to full, you will be able to get the most accurate color representation for each pixel. The last say has the encoder - in older versions of OBS, I was never able to actually create a real lossless video with NVENC - it always created a 4:2:0-encoded video (NV12), no 4:4:4-encoded (RGB). It worked only with x264. Current versions of OBS may have been fixed in this regard and also be able to do this with nvenc. Important is to look at the created video with MediaInfo how the parameters were really set in the video.
 

rwoodley

New Member
That was a very helpful explanation. I learned a lot!

Thanks to MediaInfo, I realized that RGB was in fact outputting 4:2:0. Once I switched to I444 I got 4:4:4 output and the color was much improved.

Interestingly, setting the encoder to x264 low CPU usage preset,increases file size gave a small but noticeable improvement to the color vs plain old x264.

It is still not quite perfect, but very close. I wonder if the media player is degrading the output. I am using ffplay and Chrome to play back. They give identical results for me. What is considered the best media player?
 
Top