VideoHelp Forum
+ Reply to Thread
Results 1 to 10 of 10
Thread
  1. I understand that NTSC-J has a different black level than plain old NTSC. I have a couple of imported DVDs, and when played on the PC they are indeed showing slightly more washed out than they should be. Now the question is, what would be the exact tweaking to recover a proper level? I want it to be as accurate as possible, maybe someone here has the exact filter for that.

    I've tried Tweak(bright=-16.0) as I had found a suggestion of doing just that, but it comes out too dark, so I'd rather have a tried and true setting, one that can be mathematically justified instead of eyeballing it.
    Quote Quote  
  2. You can use a waveform monitor (histogram() in avisynth) to help guide your adjustments

    There is not necessarily any exact or "tried and true setting", because many different things might have occurred between the original source and what you have for that specific DVD .
    Quote Quote  
  3. Well I guess you're right, but there ought to be a baseline. I mean a DVD might have a poor color grading, but it does not change the fact that you'll want to compensate the difference in format first. If I understand correctly NTSC-J are 7.5% "brighter" (more precisely blacks are 7.5% less deep) but can this be offset without crushing the levels altogether? Adjusting for 7.5% brightness would be -19.125 on a 255-scale (Tweak) and that's quite dark. But I'm not sure Tweak is using a linear scale for this.
    Quote Quote  
  4. The digital level for reference black is the same for NTSC-J, Y=16. The "7.5%" is for analog equipment

    You can use levels, curves if you don't like tweak

    Also tweak() and levels() clip Y data 16-235, unless you use coring=false - another reason you should use scopes to monitor your adjustments
    Last edited by poisondeathray; 18th Feb 2022 at 10:38.
    Quote Quote  
  5. The problem is I has no knowledge on how to read level histograms or waveforms. I can see on the histograms that the black level is floored at 16, but that's about it. I'm trying to apply this transform Levels(16, 1, 235, 0, 255, coring=false) but it does look a bit too much.

    The digital level for reference black is the same for NTSC-J, Y=16
    Wait, does it mean the video should be encoded with a partial range? Sorry, this whole topic is a little confusing to me
    Quote Quote  
  6. Originally Posted by Axymeus View Post
    The problem is I has no knowledge on how to read level histograms or waveforms.
    Maybe this will help: https://forum.videohelp.com/threads/340804-colorspace-conversation-elaboration#post2121568

    Originally Posted by Axymeus View Post
    The digital level for reference black is the same for NTSC-J, Y=16
    Wait, does it mean the video should be encoded with a partial range? Sorry, this whole topic is a little confusing to me
    Yes. Limited range YUV (used for almost all commercial distribution) has full black at Y=16, full white at Y=235. Upon conversion to RGB for display full black (and everything below it) becomes RGB=0, full white (and everything above it) RGB=255, and everything between the two stretched linearly.
    Quote Quote  
  7. OK so I took a better look at my footage armed with this information. Pure white shows off correctly at 235 (just bordering the yellow top-zone) but blacks are higher than 16, with a floor obviously too high, which is why it looks a little washed out

    Image
    [Attachment 63449 - Click to enlarge]


    First, you can notice there's a bit of noise in the yellow zones, it's not much but it's there, I suppose it can be safely ignored for the purpose of regrading the footage?

    So, my goal should be to lower the floor to be bording the yellow bottom-zone of 16, is that right? However I do not want to lower the whites, so using tweak to lower the brightness is not the correct approach. I believe my best bet is to use Levels(X, 1, 235, 16, 235, coring=false) and find which value of X to use. Technically speaking it should be the current floor value. But how do I find this value, beside trial and error? Can Histogram give me an actual minimum value I can use?
    Quote Quote  
  8. Originally Posted by Axymeus View Post
    First, you can notice there's a bit of noise in the yellow zones, it's not much but it's there, I suppose it can be safely ignored for the purpose of regrading the footage?
    Yes. Those are typically from sharpening filters and compression artifacts (DCT ringing). That's why there is headroom and footroom in the limited range spec.

    Originally Posted by Axymeus View Post
    So, my goal should be to lower the floor to be bording the yellow bottom-zone of 16, is that right?
    Yes -- assuming that area is supposed to be full black.

    Originally Posted by Axymeus View Post
    However I do not want to lower the whites, so using tweak to lower the brightness is not the correct approach.
    Yes, again assuming the peak is supposed to be full white.

    Originally Posted by Axymeus View Post
    I believe my best bet is to use Levels(X, 1, 235, 16, 235, coring=false)
    It's one way. You can also use ColorYUV, Tweak, etc. But Levels() is pretty intuitive for this kind of adjustment.

    Originally Posted by Axymeus View Post
    and find which value of X to use. Technically speaking it should be the current floor value. But how do I find this value, beside trial and error? Can Histogram give me an actual minimum value I can use?
    Histogram can't give you a value. But looking at the graph, the bottom yellow bar is 16 units thick. So the distance between the bar and the dark patch above it about 6 to 8 units. Try something like Levels(8, 1, 255, 0, 235, coring=false).

    ColorYUV(analyze=true) reports a "loose minimum" value. That ignores the lowest percent or so of values -- ie, ignores some of that noise.
    Quote Quote  
  9. Alright this is starting to make sense thank you very much. One last thing though, you say Levels(8, 1, 255, 0, 235, coring=false) but it should be Levels(8, 1, 255, 0, 255, coring=false) to keep the whites at their current level right? Unless I misunderstood something on the usage of levels.
    Quote Quote  
  10. Yes, you are correct. It should be Levels(8, 1, 255, 0, 255, coring=false). Sorry for the typo. I originally wrote Levels(8, 1, 235, 0, 235, coring=false) but when I tested that the output was clamped at 235 (I didn't realize this but it always clamps to the output range, regardless of the coring setting). When I posted I changed the first 235 to 255 but forgot to change the second).
    Last edited by jagabo; 18th Feb 2022 at 20:40.
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!