5
0

vivy: tv: harder debanding

This commit is contained in:
louis f 2021-04-25 09:50:00 -04:00
parent e2a47f8716
commit 2784de289a
Signed by: louis
GPG Key ID: 44D7E1DE4E23D6F2
4 changed files with 30 additions and 9 deletions

View File

@ -1,7 +1,7 @@
import vapoursynth as vs import vapoursynth as vs
from vivy_common import (VivyConfig, VivySource, antialias, deband, denoise, from vivy_common import (VivyConfig, VivySource, antialias, deband, denoise,
finalize, fsrcnnx_rescale, letterbox_edgefix) finalize, fsrcnnx_rescale, letterbox_edgefix, regrain)
from yt_common.automation import SelfRunner from yt_common.automation import SelfRunner
from yt_common.source import waka_replace from yt_common.source import waka_replace
@ -14,6 +14,7 @@ from typing import List
import os import os
core = vs.core core = vs.core
core.num_threads = 16
EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0]))
@ -43,6 +44,7 @@ def filter_basic() -> vs.VideoNode:
waka = wakas[0] waka = wakas[0]
waka, wakas = waka_replace(waka, wakas[1:], WAKA_REPLACE) waka, wakas = waka_replace(waka, wakas[1:], WAKA_REPLACE)
src = bounded_dehardsub(waka, ref, SIGNS_RU, wakas) src = bounded_dehardsub(waka, ref, SIGNS_RU, wakas)
src.set_output(1)
return src return src
@ -52,7 +54,8 @@ def filter() -> vs.VideoNode:
den = denoise(rescale) den = denoise(rescale)
deb = deband(den) deb = deband(den)
aa = antialias(deb, NOAA) aa = antialias(deb, NOAA)
edgefix = letterbox_edgefix(aa, LETTERBOX) grain = regrain(aa)
edgefix = letterbox_edgefix(grain, LETTERBOX)
final = finalize(edgefix) final = finalize(edgefix)
final.set_output() final.set_output()
return final return final

View File

@ -1,2 +1,2 @@
from .filter import antialias, deband, denoise, finalize, fsrcnnx_rescale, letterbox_edgefix # noqa: F401 from .filter import antialias, deband, denoise, finalize, fsrcnnx_rescale, letterbox_edgefix, regrain # noqa: F401
from .config import VivyConfig, VivySource # noqa: F401 from .config import VivyConfig, VivySource # noqa: F401

View File

@ -4,11 +4,13 @@ import lvsfunc as lvf
import vardefunc as vdf import vardefunc as vdf
from awsmfunc import bbmod from awsmfunc import bbmod
from debandshit import f3kbilateral
from lvsfunc.types import Range from lvsfunc.types import Range
from mvsfunc import BM3D from mvsfunc import BM3D
from typing import List, Optional from typing import List, Optional
from yt_common import antialiasing from yt_common import antialiasing
from yt_common.deband import morpho_mask
import os import os
import vsutil import vsutil
@ -38,14 +40,24 @@ def letterbox_edgefix(clip: vs.VideoNode, ranges: List[Range]) -> vs.VideoNode:
return lvf.misc.replace_ranges(clip, edgefix, ranges) return lvf.misc.replace_ranges(clip, edgefix, ranges)
def denoise(clip: vs.VideoNode, sigma: float = 0.75) -> vs.VideoNode: def denoise(clip: vs.VideoNode, sigma: float = 1.5) -> vs.VideoNode:
bm3d: vs.VideoNode = BM3D(clip, sigma=sigma, depth=16) bm3d: vs.VideoNode = BM3D(clip, sigma=sigma, depth=16)
return bm3d return bm3d
def deband(clip: vs.VideoNode) -> vs.VideoNode: def deband(clip: vs.VideoNode) -> vs.VideoNode:
deb: vs.VideoNode = vdf.dumb3kdb(clip, radius=18, threshold=36, grain=[24, 0]) grad_mask, yrangebig = morpho_mask(clip.dfttest.DFTTest(sigma=14, sigma2=10, sbsize=1, sosize=0)
return deb .rgvs.RemoveGrain(3))
y = vsutil.get_y(clip)
mask = lvf.mask.detail_mask(clip)
deband_dumb: vs.VideoNode = vdf.dumb3kdb(clip)
deband_weak: vs.VideoNode = core.std.MaskedMerge(vsutil.get_y(deband_dumb), y, mask)
deband_norm: vs.VideoNode = f3kbilateral(y, y=36)
deband_strong: vs.VideoNode = f3kbilateral(y, y=65)
deband = core.std.MaskedMerge(deband_strong, deband_norm, grad_mask)
deband = core.std.MaskedMerge(deband, deband_weak, yrangebig)
deband = core.std.ShufflePlanes([deband, deband_dumb], planes=[0, 1, 2], colorfamily=vs.YUV)
return deband
def antialias(clip: vs.VideoNode, noaa: Optional[List[Range]] = None) -> vs.VideoNode: def antialias(clip: vs.VideoNode, noaa: Optional[List[Range]] = None) -> vs.VideoNode:
@ -53,6 +65,12 @@ def antialias(clip: vs.VideoNode, noaa: Optional[List[Range]] = None) -> vs.Vide
return lvf.misc.replace_ranges(clamp, clip, noaa) if noaa else clamp return lvf.misc.replace_ranges(clamp, clip, noaa) if noaa else clamp
def regrain(clip: vs.VideoNode) -> vs.VideoNode:
sgrain: vs.VideoNode = kgf.adaptive_grain(clip, 0.15, luma_scaling=10)
dgrain: vs.VideoNode = kgf.adaptive_grain(clip, 0.1, luma_scaling=25, static=False)
grain = dgrain.std.MergeDiff(clip.std.MakeDiff(sgrain))
return grain
def finalize(clip: vs.VideoNode) -> vs.VideoNode: def finalize(clip: vs.VideoNode) -> vs.VideoNode:
grain = kgf.adaptive_grain(clip, 0.1) return vsutil.depth(clip, 10)
return vsutil.depth(grain, 10)

View File

@ -1 +1 @@
x265 --input - --y4m --input-depth 10 --output-depth 10 --input-csp i420 --profile main10 --colormatrix bt709 --colorprim bt709 --transfer bt709 --preset slower --rc-lookahead 72 --keyint 360 --min-keyint 23 --subme 5 --qcomp 0.7 --crf 15 --aq-mode 3 --aq-strength 0.9 --bframes 16 --psy-rd 0.95 --psy-rdoq 1.8 --rdoq-level 1 --deblock -2:-2 --no-sao --no-open-gop --frames {frames:d} --output {filename:s}.h265 x265 --input - --y4m --input-depth 10 --output-depth 10 --input-csp i420 --profile main10 --colormatrix bt709 --colorprim bt709 --transfer bt709 --preset slower --rc-lookahead 72 --keyint 360 --min-keyint 23 --subme 5 --qcomp 0.7 --crf 15 --aq-mode 3 --aq-strength 0.9 --bframes 16 --psy-rd 2.0 --psy-rdoq 1.8 --rdoq-level 1 --deblock -2:-2 --no-sao --no-open-gop --no-wpp --frames {frames:d} --output {filename:s}.h265