5
0

pripri: bd: all hail the debander

This commit is contained in:
louis f 2021-05-20 18:49:23 -04:00
parent 92b1b98219
commit 53aa19530f
Signed by: louis
GPG Key ID: 44D7E1DE4E23D6F2
16 changed files with 65 additions and 33 deletions

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -30,7 +30,8 @@ def filter() -> vs.VideoNode:
rescale = descale(den) rescale = descale(den)
rescalem = descale(den, mask=True) rescalem = descale(den, mask=True)
rescale = replace_ranges(rescale, rescalem, [(31722, 34767)]) rescale = replace_ranges(rescale, rescalem, [(31722, 34767)])
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -26,7 +26,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
final = finalize(ed) final = finalize(ed)

View File

@ -1,13 +1,14 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
from lvsfunc.misc import replace_ranges from lvsfunc.misc import replace_ranges
from lvsfunc.types import Range
from typing import Optional from typing import List, Optional
import os import os
@ -20,6 +21,12 @@ SOURCE: SimpleSource = SimpleSource(
) )
ED: Optional[int] = None ED: Optional[int] = None
DEBAND_STRONG: List[Range] = [
(32710, 32757),
(33104, 33388),
(34406, 34534),
]
def filter() -> vs.VideoNode: def filter() -> vs.VideoNode:
src = SOURCE.source() src = SOURCE.source()
@ -28,7 +35,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale, strong=DEBAND_STRONG)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
ed = scenefilter_ed(grain, src, ED) ed = scenefilter_ed(grain, src, ED)
cr = replace_ranges(ed, src, [(29971, 32128)]) cr = replace_ranges(ed, src, [(29971, 32128)])

View File

@ -1,6 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
from pripri_common import PriPriConfig, edgefix, denoise, descale, antialias, regrain, finalize from pripri_common import PriPriConfig, edgefix, denoise, descale, deband, antialias, regrain, finalize
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import FileTrim, SimpleSource from yt_common.source import FileTrim, SimpleSource
@ -21,7 +21,8 @@ def filter() -> vs.VideoNode:
ef = edgefix(src) ef = edgefix(src)
den = denoise(ef) den = denoise(ef)
rescale = descale(den) rescale = descale(den)
aa = antialias(rescale) deb = deband(rescale)
aa = antialias(deb)
grain = regrain(aa) grain = regrain(aa)
final = finalize(grain) final = finalize(grain)
src.set_output(1) src.set_output(1)

View File

@ -1,3 +1,3 @@
from .config import PriPriConfig # noqa: F401 from .config import PriPriConfig # noqa: F401
from .filter import edgefix, denoise, descale, antialias, regrain, scenefilter_ed, finalize # noqa: F401 from .filter import edgefix, denoise, descale, deband, antialias, regrain, scenefilter_ed, finalize # noqa: F401
from . import filter # noqa: F401 from . import filter # noqa: F401

View File

@ -1,7 +1,7 @@
import vapoursynth as vs import vapoursynth as vs
import os import os
from typing import Any, Dict, Optional from typing import Any, Dict, List, Optional
from yt_common.antialiasing import sraa_clamp, mask_strong from yt_common.antialiasing import sraa_clamp, mask_strong
from yt_common.data import FSRCNNX from yt_common.data import FSRCNNX
@ -11,9 +11,11 @@ from awsmfunc import bbmod
from kagefunc import retinex_edgemask from kagefunc import retinex_edgemask
from lvsfunc.denoise import bm3d from lvsfunc.denoise import bm3d
from lvsfunc.kernels import Bicubic, Kernel from lvsfunc.kernels import Bicubic, Kernel
from lvsfunc.mask import detail_mask
from lvsfunc.misc import replace_ranges, scale_thresh from lvsfunc.misc import replace_ranges, scale_thresh
from lvsfunc.scale import descale as ldescale from lvsfunc.scale import descale as ldescale
from vardefunc import fsrcnnx_upscale, diff_creditless_mask from lvsfunc.types import Range
from vardefunc import fsrcnnx_upscale, diff_creditless_mask, dumb3kdb
from vsutil import depth from vsutil import depth
from vsutil import Range as CRange from vsutil import Range as CRange
@ -28,8 +30,11 @@ def edgefix(clip: vs.VideoNode) -> vs.VideoNode:
return bb return bb
def denoise(clip: vs.VideoNode) -> vs.VideoNode: def denoise(clip: vs.VideoNode, sigma: float = 0.75, h: float = 0.4) -> vs.VideoNode:
return bm3d(clip, sigma=0.75, radius=1) return core.std.ShufflePlanes([
bm3d(core.std.ShufflePlanes(clip, planes=0, colorfamily=vs.GRAY), sigma=sigma, radius=1),
clip.knlm.KNLMeansCL(d=3, a=1, h=h)
], planes=[0, 1, 2], colorfamily=vs.YUV)
def _nnedi3_double(clip: vs.VideoNode) -> vs.VideoNode: def _nnedi3_double(clip: vs.VideoNode) -> vs.VideoNode:
@ -55,6 +60,13 @@ def descale(clip: vs.VideoNode, kernel: Kernel = Bicubic(b=0, c=1/2), mask: bool
else depth(ldescale(clip, height=720, kernel=kernel, upscaler=_fsrlineart, mask=None), 16) else depth(ldescale(clip, height=720, kernel=kernel, upscaler=_fsrlineart, mask=None), 16)
def deband(clip: vs.VideoNode, strong: Optional[List[Range]] = None) -> vs.VideoNode:
mask = detail_mask(clip)
deband = core.std.MaskedMerge(dumb3kdb(clip, radius=16, threshold=40), clip, mask)
deband_strong = core.std.MaskedMerge(dumb3kdb(clip, radius=16, threshold=50), clip, mask)
return replace_ranges(deband, deband_strong, strong or [])
def antialias(clip: vs.VideoNode) -> vs.VideoNode: def antialias(clip: vs.VideoNode) -> vs.VideoNode:
def _sraa_pp_dehalo(sraa: vs.VideoNode) -> vs.VideoNode: def _sraa_pp_dehalo(sraa: vs.VideoNode) -> vs.VideoNode:
sraa = MaskedDHA(sraa, rx=2.4, darkstr=0.1, brightstr=0.75) sraa = MaskedDHA(sraa, rx=2.4, darkstr=0.1, brightstr=0.75)

View File

@ -85,7 +85,7 @@ class SimpleSource(FileSource):
return self.src return self.src
def source(self) -> vs.VideoNode: def source(self) -> vs.VideoNode:
return depth(core.std.Splice([s.apply_trim(self._open(s.path)) for s in self.src]), 16) return core.std.Splice([s.apply_trim(self._open(s.path)) for s in self.src])
class DehardsubFileFinder(FileSource): class DehardsubFileFinder(FileSource):