This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

TemporalDegrain2 issue
#11
Looking at the script, the doc of it states:
Quote: recommendations to be followed for each new movie:
1. start with default settings
2. if less denoising is needed set grainLevel to 0, if you need more degraining start over reading at next paragraph
3. if you need even less denoising:
- EITHER: set outputStage to 1 or even 0 (faster)
- OR: use the postMix setting and increase the value from 0 to as much as 100 (slower)

recommendations for strong degraining:
1. start with default settings
2. search the noisiest* patch of the entire movie, enable grainLevelSetup (=true), zoom in as much as you can and prepare yourself for pixel peeping. (*it really MUST be the noisiest region where you want this filter to be effective)
3. compare the output on this noisy* patch of your movie with different settings of grainLevel (0 to 3) and use the setting where the noise level is lowest (irrespectable of whether you find this to be too much filtering).
If multiple grainLevel settings yield comparable results while grainLevelSetup=true and observing at maximal zoom be sure to use the lowest setting! If you're unsure leave it at the default (2), your result might no be optimal, but it will still be great.
4. disable grainLevelSetup (=false), or just remove this argument from the function call. Now revert the zoom and look from a normal distance at different scenes of the movie and decide if you like what you see.
5. if more denoising is needed try postFFT=1 with postSigma=1, then tune postSigma (obvious blocking and banding of regions in the sky are indications of a value which is at least a factor 2 too high)
6. if you would need a postSigma of more than 2, try first to increase degrainTR to 2. The goal is to balance the numerical values of postSigma and degrainTR, some prefer more simga and others more TR, it's up to you. However, do not increase degrainTR above 1/8th of the fps (at 24fps up to 3).
7. if you cranked up postSigma higher than 3 then try postFFT=3 instead. Also if there are any issues with banding then try postFFT=3.
8. if the luma is clean but you still have visible chroma noise then you can adjust postSigmaC which will separately clean the chroma planes (at a considerable amount of processing speed).

use only the following knobs (all other settings should already be where they need to be):
- degrainTR (1), temporal radius of degrain, usefull range: min=default=1, max=fps/8. Higher values do clean the video more, but also increase probability of wrongly identified motion vectors which leads to washed out regions
- grainLevel (2), if input noise level is relatively low set this to 0, if its unusually high you might need to increase it to 3. The right setting must be found using grainLevelSetup=true while all other settings are at default. Set this setting such that the noise level is lowest.
- grainLevelSetup (false), only to be used while finding the right setting for grainLevel. This will skip all your other settings!
- postFFT (0), if you want to remove absolutely all remaining noise suggestion is to use 1 or 2 (ff3dfilter) or for slightly higher quality at the expense of potentially worse speed 3 (dfttest). 4 is KNLMeansCL. 0 is simply RemoveGrain(1)
- postSigma (1), increase it to remove all the remaining noise you want removed, but do not increase too much since unnecessary high values have severe negative impact on either banding and/or sharpness
- degrainPlane (4), if you just want to denoise only the chroma use 3 (this helps with compressability while the clip is almost identical to the original)
- outputStage (2), if the degraining is too strong, you can output earlier stages
- postMix (0), if the degraining is too strong, increase the value going from 0 to 100
- fftThreads (1), usefull if you have processor cores to spare, increasing to 2 will probably help a little with speed.
- rec (false), enables use of Recalculate for refining motion analysis. Enable for higher quality motion estimation but lower performance.

Looking at what GainLevelSetup does:
if grainLevelSetup:
        outputStage = 0
        degrainTR = 3
source: https://github.com/Selur/VapoursynthScri...1-L2337C22
(outputStage = 2 and degrainTR=1 are default)
degrainTR should smooth more
and outputStage=0 causes the script to output after the first NoiseReduction step
see: https://github.com/Selur/VapoursynthScri...3-L2521C17
With degrainTR it's no surprise that this is smoothing a lot.

Doing a quick test I see differences between the output using different grainLevels https://imgsli.com/Mjk0MTY2, not much, but since it's about grain not noise, I didn't expect much.

Cu Selur
Reply
#12
(05.09.2024, 04:10)Selur Wrote: Looking at the script, the doc of it states:
Quote:    recommendations to be followed for each new movie:
      1. start with default settings
      2. if less denoising is needed set grainLevel to 0, if you need more degraining start over reading at next paragraph
      3. if you need even less denoising:
        - EITHER: set outputStage to 1 or even 0 (faster)
        - OR: use the postMix setting and increase the value from 0 to as much as 100 (slower)

    recommendations for strong degraining:
      1. start with default settings
      2. search the noisiest* patch of the entire movie, enable grainLevelSetup (=true), zoom in as much as you can and prepare yourself for pixel peeping. (*it really MUST be the noisiest region where you want this filter to be effective)
      3. compare the output on this noisy* patch of your movie with different settings of grainLevel (0 to 3) and use the setting where the noise level is lowest (irrespectable of whether you find this to be too much filtering).
        If multiple grainLevel settings yield comparable results while grainLevelSetup=true and observing at maximal zoom be sure to use the lowest setting! If you're unsure leave it at the default (2), your result might no be optimal, but it will still be great.
      4. disable grainLevelSetup (=false), or just remove this argument from the function call. Now revert the zoom and look from a normal distance at different scenes of the movie and decide if you like what you see.
      5. if more denoising is needed try postFFT=1 with postSigma=1, then tune postSigma (obvious blocking and banding of regions in the sky are indications of a value which is at least a factor 2 too high)
      6. if you would need a postSigma of more than 2, try first to increase degrainTR to 2. The goal is to balance the numerical values of postSigma and degrainTR, some prefer more simga and others more TR, it's up to you. However, do not increase degrainTR above 1/8th of the fps (at 24fps up to 3).
      7. if you cranked up postSigma higher than 3 then try postFFT=3 instead. Also if there are any issues with banding then try postFFT=3.
      8. if the luma is clean but you still have visible chroma noise then you can adjust postSigmaC which will separately clean the chroma planes (at a considerable amount of processing speed).

    use only the following knobs (all other settings should already be where they need to be):
      - degrainTR (1), temporal radius of degrain, usefull range: min=default=1, max=fps/8. Higher values do clean the video more, but also increase probability of wrongly identified motion vectors which leads to washed out regions
      - grainLevel (2), if input noise level is relatively low set this to 0, if its unusually high you might need to increase it to 3. The right setting must be found using grainLevelSetup=true while all other settings are at default. Set this setting such that the noise level is lowest.
      - grainLevelSetup (false), only to be used while finding the right setting for grainLevel. This will skip all your other settings!
      - postFFT (0), if you want to remove absolutely all remaining noise suggestion is to use 1 or 2 (ff3dfilter) or for slightly higher quality at the expense of potentially worse speed 3 (dfttest). 4 is KNLMeansCL. 0 is simply RemoveGrain(1)
      - postSigma (1), increase it to remove all the remaining noise you want removed, but do not increase too much since unnecessary high values have severe negative impact on either banding and/or sharpness
      - degrainPlane (4), if you just want to denoise only the chroma use 3 (this helps with compressability while the clip is almost identical to the original)
      - outputStage (2), if the degraining is too strong, you can output earlier stages
      - postMix (0), if the degraining is too strong, increase the value going from 0 to 100
      - fftThreads (1), usefull if you have processor cores to spare, increasing to 2 will probably help a little with speed.
      - rec (false), enables use of Recalculate for refining motion analysis. Enable for higher quality motion estimation but lower performance.

Looking at what GainLevelSetup does:
if grainLevelSetup:
        outputStage = 0
        degrainTR = 3
source: https://github.com/Selur/VapoursynthScri...1-L2337C22
(outputStage = 2 and degrainTR=1 are default)
degrainTR should smooth more
and outputStage=0 causes the script to output after the first NoiseReduction step
see: https://github.com/Selur/VapoursynthScri...3-L2521C17
With degrainTR it's no surprise that this is smoothing a lot.

Doing a quick test I see differences between the output using different grainLevels https://imgsli.com/Mjk0MTY2, not much, but since it's about grain not noise, I didn't expect much.

Cu Selur


Ok so I tested the Avisynth version and difference between DegrainLevel values are very obvious.
On Vapoursynth version in Hybrid, I also see some differences, but they're so small, even between GrainLevel =-2 and GrainLevel=2

Maybe it's the Vapoursynth version that behave this way, but that seems odd.
Reply
#13
Quote:Maybe it's the Vapoursynth version that behave this way, but that seems odd.
If you see a mistake in the way Hybrid does call the function, I'm happy to look into it, but I suspect that they Avisynth and Vapoursynth functions are simple not exactly the same.

Cu Selur
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)