Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion. Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules. |
|
|
Thread Tools | Search this Thread | Display Modes |
14th October 2019, 05:13 | #1361 | Link | |
Registered User
Join Date: May 2015
Posts: 68
|
Quote:
I'd prefer to use the GPU for degraining, as my encoding is already very slow. That's why I'm trying KNLmeansCL. In general, for removing grain, does increasing the temporal parameter (d) help? How high can I increase the h parameter, without starting to lose other details? Are there any grain removal specific combinations of the settings? Also, which weighting function should I use? |
|
14th October 2019, 19:33 | #1363 | Link |
Useful n00b
Join Date: Jul 2014
Posts: 1,667
|
There's no formal definition of "grain", so we can't be sure what you mean by degraining. For me, grain is a film thing and it doesn't cross frames, so temporal processing is not needed. Tell us more or better still give us a sample.
|
14th October 2019, 20:56 | #1366 | Link |
RipBot264 author
Join Date: May 2006
Location: Poland
Posts: 7,806
|
You obviously have never used temporal mdegrain1/2/3 filter If you think that temporal processing is basically useless.
__________________
Windows 7 Image Updater - SkyLake\KabyLake\CoffeLake\Ryzen Threadripper |
14th October 2019, 21:29 | #1368 | Link |
RipBot264 author
Join Date: May 2006
Location: Poland
Posts: 7,806
|
Temporal mdegrain will always give you better quality than knlmeanscl or any other spatial filter. Deal with IT. Spatial denoising like knlmeanscl destroys details like crazy. After all those years You are still such a noob...
__________________
Windows 7 Image Updater - SkyLake\KabyLake\CoffeLake\Ryzen Threadripper |
22nd October 2019, 21:39 | #1371 | Link | |
Registered User
Join Date: Sep 2007
Posts: 5,345
|
Quote:
either a) double rate deinterlace; or b) separate grouped even /odd fields and apply to each separately then weave back . For (b) you retain original fields, but you don't get temporal denoising between even/odd fields . I would say (a) is preferred |
|
22nd October 2019, 21:57 | #1372 | Link | |
Cary Knoop
Join Date: Feb 2017
Location: Newark CA, USA
Posts: 397
|
Quote:
I was thinking about doing a first run using option b and then deinterlace (with frame doubling) and apply a second run. But the question is if that is worth it? Last edited by Cary Knoop; 22nd October 2019 at 21:59. |
|
22nd October 2019, 22:09 | #1373 | Link | |
Registered User
Join Date: Sep 2007
Posts: 5,345
|
Quote:
If there was some type of defect limited to , say the even fields, then you might do that as to not contaminate the other odd fields with temporal processing (denoising or double rate deinterlacing with temporal smoothing like QTGMC). Or if one group had more noise (e.g. maybe chroma noise) than the other , you might preprocess them separately with different strengths and filters applied to even vs. odd |
|
26th October 2019, 12:47 | #1374 | Link |
Registered User
Join Date: May 2015
Posts: 68
|
KNLmeansCL seems to have no effect on the output file when the weighing function chosen is anything other than Welsch. Has anybody else experienced this? During the encode, the GPU runs at high power, but the output file remains un-denoised, if I select any other weighing function.
I mentioned this to @selur, as I thought it's a bug in his program "Hybrid", and he was able to confirm the bug - but he stated that the bug is in KNLmeansCL. Last edited by aymanalz; 26th October 2019 at 17:08. |
26th October 2019, 13:21 | #1375 | Link |
Registered User
Join Date: Oct 2001
Location: Germany
Posts: 7,259
|
Hybrid properly uses:
Code:
clip = core.knlm.KNLMeansCL(clip=clip) clip = core.knlm.KNLMeansCL(clip=clip, wmode=1) clip = core.knlm.KNLMeansCL(clip=clip, wmode=2) clip = core.knlm.KNLMeansCL(clip=clip, wmode=3) (Hybrid uses KNLMeansCL 1.1.1) Cu Selur |
26th October 2019, 17:11 | #1377 | Link | |
Registered User
Join Date: May 2015
Posts: 68
|
Quote:
Additionally, and I'm not sure if this is important, but what are you encoding from and to? x264/x265/something else? Last edited by aymanalz; 26th October 2019 at 17:16. |
|
26th October 2019, 18:30 | #1378 | Link | |
Cary Knoop
Join Date: Feb 2017
Location: Newark CA, USA
Posts: 397
|
Quote:
No, the codec is not relevant. When I do a diff using Vapoursynth Editor, I can see a clear difference. |
|
27th October 2019, 06:14 | #1379 | Link |
Registered User
Join Date: Oct 2001
Location: Germany
Posts: 7,259
|
You are right there are differences using:
Code:
# Imports import vapoursynth as vs core = vs.get_core() # Loading Plugins core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/DenoiseFilter/KNLMeansCL/KNLMeansCL.dll") core.std.LoadPlugin(path="I:/Hybrid/64bit/vsfilters/SourceFilter/FFMS2/ffms2k.dll") # Loading source using FFMS2K clip = core.ffms2.Source(source="F:/TESTCL~1/files/test.avi",cachefile="E:/Temp/avi_078c37f69bb356e7b5fa040c71584c40_853323747.ffindex",format=vs.YUV420P8,alpha=False) # making sure input color matrix is set as 470bg clip = core.resize.Point(clip, matrix_in_s="470bg",range_s="limited") # making sure frame rate is set to 25 clip = core.std.AssumeFPS(clip, fpsnum=25, fpsden=1) # Setting color range to TV (limited) range. clip = core.std.SetFrameProp(clip=clip, prop="_ColorRange", intval=1) original = clip # denoising using KNLMeansCL clip = core.knlm.KNLMeansCL(clip=clip, wmode=2) # adjusting for FilterView if original.format.id != clip.format.id: if (original.format.color_family == vs.RGB and clip.format.color_family != vs.RGB): original = core.resize.Bicubic(original, format=clip.format.id, matrix_s="470bg", range_s="limited") elif (original.format.color_family == clip.format.color_family): original = core.resize.Bicubic(original, format=clip.format.id, range_s="limited") else: original = core.resize.Bicubic(original, format=clip.format.id, matrix_in_s="470bg", range_s="limited") diff = core.std.MakeDiff(clip, original) # Output diff.set_output() Instead of Code:
diff = core.std.MakeDiff(clip, original) # Output diff.set_output() Code:
original = core.text.Text(original,"Original") clip = core.text.Text(clip,"Filtered") interleaved = core.std.Interleave([original, clip]) # Output interleaved.set_output() Cu Selur |
Thread Tools | Search this Thread |
Display Modes | |
|
|