I am interesting can we just use remove dirt function from removenoise mc function.

This is RemoveNoiseMC function:

Code:
function RemoveTempGrain(clip input, int _mode)
{
  rg = RemoveGrain(input, mode=_mode)
  return TemporalRepair(rg, input)
}

function RemoveDirt(clip input, int limit, int rgrain, bool "_grey")
{
  _grey = default(_grey, false)
  _dgr1 = 0.35+rgrain*0.3
  _dgr2 = 0.45+rgrain*0.4
  repmode = 1
  clensed = Clense(input, grey=_grey, cache=4)
  restore = input.FluxSmoothST(3+3*rgrain,rgrain)
  restore = Repair(restore, input, mode=repmode, modeU= _grey ? -1 : repmode)
  restore = rgrain==0 ? restore.RemoveGrain(1) : \
    restore.VagueDenoiser(threshold=_dgr1, chromaT=_dgr1, nsteps=7, percent=75).RemoveGrain(1)
  alt = input.VagueDenoiser(threshold=_dgr2, chromaT=_dgr2, nsteps=7, percent=100).RemoveGrain(5)
  return RestoreMotionBlocks(clensed, restore, neighbour=input, alternative=alt, pthreshold=4+2*rgrain, cthreshold=6+2*rgrain, gmthreshold=40, dist=1, dmode=2, debug=false, noise=limit, noisy=12, grey=_grey)
}

global idx_c = 25

function RemoveNoiseMC(clip,int "rdlimit", int "rgrain", int "denoise", bool "sharp", float "csharpen", bool "_grey")
{
  rdlimit = default(rdlimit,11)
  rgrain = default(rgrain,2)
  denoise = default(denoise,8)
  sharp = (rgrain<1) ? default(sharp,true) : default(sharp,false)
  csharpen = (rgrain>2) ? default(csharpen,0.17) : (rgrain>1) ? default(csharpen,0.15) : default(csharpen,0.13)
  csharpen = sharp ? csharpen : csharpen+0.08
  _grey = default(_grey,false)
  _dgr = 0.45+rgrain*0.4
  dummy = clip.BlankClip(length=0)
  global idx_c = idx_c+1
  cbs = 8
  cov = (cbs>4) ? cbs/4 : 0
  ccf = cbs*cbs/64
  cpn = (denoise>12) ? 50*ccf : (denoise>8) ? 58*ccf : (denoise>5) ? 66*ccf : 72*ccf
  csh = sharp ? 1 : 0
  bvec2 = clip.MVAnalyse(isb=false, blksize=cbs, delta=2, pel=2, sharp=csh, overlap=cov, truemotion=true, pnew=cpn, idx=idx_c)
  bvec1 = clip.MVAnalyse(isb=false, blksize=cbs, delta=1, pel=2, sharp=csh, overlap=cov, truemotion=true, pnew=cpn, idx=idx_c)
  fvec1 = clip.MVAnalyse(isb=true, blksize=cbs, delta=1, pel=2, sharp=csh, overlap=cov, truemotion=true, pnew=cpn, idx=idx_c)
  fvec2 = clip.MVAnalyse(isb=true, blksize=cbs, delta=2, pel=2, sharp=csh, overlap=cov, truemotion=true, pnew=cpn, idx=idx_c)
  backw1 = rdlimit>13 ? \
    rdlimit>20 ? \
      clip.MVFlow(bvec1, idx=idx_c).Deblock(quant=22, aOffset=6, bOffset=6) : \
      clip.MVFlow(bvec1, idx=idx_c).Deblock(quant=16, aOffset=4, bOffset=4) : \
    clip.MVFlow(bvec1, idx=idx_c)
  forw1  = rdlimit>13 ? \
    rdlimit>20 ? \
      clip.MVFlow(fvec1, idx=idx_c).Deblock(quant=22, aOffset=6, bOffset=6) : \
      clip.MVFlow(fvec1, idx=idx_c).Deblock(quant=16, aOffset=4, bOffset=4) : \
    clip.MVFlow(fvec1, idx=idx_c)
  clp = interleave(backw1,clip,forw1)
  clp = clp.RemoveDirt(rdlimit,rgrain,_grey)
  dnc = denoise==0 ? clp.RemoveTempGrain(rgrain).SelectEvery(3,1) : dummy
  clp = clp.SelectEvery(3,1)
  dnc = denoise==0 ? dnc : \
    clp.MVDenoise(bvec2, bvec1, fvec1, fvec2, thT=denoise, thSAD=190+15*denoise, thmv=40, thSCD1=230+5*denoise)
  vid_mo = dnc.VagueDenoiser(threshold=_dgr, chromaT=_dgr, nsteps=7, percent=75)
  vid_mo = rgrain==1 ? vid_mo.RemoveGrain(1) : vid_mo.RemoveGrain(5)
  dnc = dnc.ConditionalFilter(dnc, vid_mo, "(YDifferenceFromPrevious()+YDifferenceToNext())/AverageLuma()", "<", "0.3")
  clp = clp.SeeSaw(dnc, Sstr=csharpen, Szp=12, SdampHi=20, bias=40)
  return clp
}
Some paramtars

Code:
function mq_filter(clip c)
{
  c=c.RemoveNoiseMC(rdlimit=10,rgrain=2,denoise=8)
  c=c.LimitedSharpenFaster(Smode=4,strength=20,overshoot=1,wide=false,ss_x=1.3,ss_y=1.3)
  return c
}


This function RemoveNoiseMC work excellent and very good clean spots. But this function is very slow and dosnt work with interlaced material. It could work with bobber but than is relly slow(1 fps on dual amd)

So my question is how just to use remove dirt from that function ?

See results:

ORIGINAL


Removenoise mc