From 1b177813a9d65770d84b3578ce594e3db08f30ce Mon Sep 17 00:00:00 2001 From: louis <louis@poweris.moe> Date: Fri, 14 May 2021 16:33:48 -0400 Subject: [PATCH] yt_common: bm3d: upstream to lvsfunc --- Princess Principal/pripri_common/filter.py | 2 +- Vivy/vivy_common/config.py | 12 ++-- Vivy/vivy_common/filter.py | 2 +- yt_common/yt_common/__init__.py | 2 +- yt_common/yt_common/denoise.py | 65 ---------------------- 5 files changed, 9 insertions(+), 74 deletions(-) delete mode 100644 yt_common/yt_common/denoise.py diff --git a/Princess Principal/pripri_common/filter.py b/Princess Principal/pripri_common/filter.py index 44d054d..dcec794 100644 --- a/Princess Principal/pripri_common/filter.py +++ b/Princess Principal/pripri_common/filter.py @@ -5,11 +5,11 @@ from typing import Any, Dict, Optional from yt_common.antialiasing import sraa_clamp, mask_strong from yt_common.data import FSRCNNX -from yt_common.denoise import bm3d from G41Fun import MaskedDHA from awsmfunc import bbmod from kagefunc import retinex_edgemask +from lvsfunc.denoise import bm3d from lvsfunc.kernels import Bicubic, Kernel from lvsfunc.misc import replace_ranges, scale_thresh from lvsfunc.scale import descale as ldescale diff --git a/Vivy/vivy_common/config.py b/Vivy/vivy_common/config.py index 4e1a896..b6e0467 100644 --- a/Vivy/vivy_common/config.py +++ b/Vivy/vivy_common/config.py @@ -14,10 +14,10 @@ TITLE_LONG: str = f"{TITLE} - Fluorite Eye's Song" RESOLUTION: int = 1080 DATAPATH: str = os.path.dirname(__file__) -WAKA_RU_FILENAME: str = f"{TITLE}_{{epnum:02d}}_RU_HD.mp4" -WAKA_FR_FILENAME: str = f"{TITLE}_{{epnum:02d}}_FR_HD.mp4" -WAKA_DE_FILENAME: str = f"{TITLE} - Fluorite Eyes Song E{{epnum:02d}} [1080p][AAC][JapDub][GerSub][Web-DL].mkv" -AMAZON_FILENAME: str = "{title_long} - {epnum:02d} (Amazon Prime VBR {resolution}p).mkv" +WAKA_RU_FILENAME: str = f"{TITLE}_{{epnum:s}}_RU_HD.mp4" +WAKA_FR_FILENAME: str = f"{TITLE}_{{epnum:s}}_FR_HD.mp4" +WAKA_DE_FILENAME: str = f"{TITLE} - Fluorite Eyes Song E{{epnum:s}} [1080p][AAC][JapDub][GerSub][Web-DL].mkv" +AMAZON_FILENAME: str = "{title_long} - {epnum:s} (Amazon Prime VBR {resolution}p).mkv" core = vs.core @@ -37,13 +37,13 @@ class VivyConfig(Config): class VivySource(source.FunimationSource): def get_amazon(self) -> vs.VideoNode: # ep1-3 have good funi video, let's just use that - if self.config.epnum < 4: + if int(self.config.desc) < 4: raise FileNotFoundError() if not os.path.isfile(self.config.format_filename(AMAZON_FILENAME_VBR)): log.warn("Amazon not found, falling back to Funimation") raise FileNotFoundError() log.success("Found Amazon video") - return core.ffms2.Source(self.config.format_filename(AMAZON_FILENAME_VBR)) + return self._open(self.config.format_filename(AMAZON_FILENAME_VBR)) def get_waka_filenames(self) -> List[str]: return [self.config.format_filename(f) for f in [ diff --git a/Vivy/vivy_common/filter.py b/Vivy/vivy_common/filter.py index 1a377ae..ef62e30 100644 --- a/Vivy/vivy_common/filter.py +++ b/Vivy/vivy_common/filter.py @@ -6,6 +6,7 @@ import vardefunc as vdf from awsmfunc import bbmod from debandshit import f3kbilateral from lvsfunc.aa import upscaled_sraa +from lvsfunc.denoise import bm3d from lvsfunc.kernels import Bicubic from lvsfunc.misc import replace_ranges from lvsfunc.types import Range @@ -13,7 +14,6 @@ from typing import List, Optional, Union from yt_common import antialiasing from yt_common.data import FSRCNNX -from yt_common.denoise import bm3d from yt_common.deband import morpho_mask import vsutil diff --git a/yt_common/yt_common/__init__.py b/yt_common/yt_common/__init__.py index 99c657c..6b683c2 100644 --- a/yt_common/yt_common/__init__.py +++ b/yt_common/yt_common/__init__.py @@ -1 +1 @@ -from . import antialiasing, automation, config, data, deband, denoise, logging, source # noqa: F401 +from . import antialiasing, automation, config, data, deband, logging, source # noqa: F401 diff --git a/yt_common/yt_common/denoise.py b/yt_common/yt_common/denoise.py deleted file mode 100644 index 65ace4d..0000000 --- a/yt_common/yt_common/denoise.py +++ /dev/null @@ -1,65 +0,0 @@ -import vapoursynth as vs -from vsutil import iterate, Range, get_y -from typing import Any, Dict, List, Optional, Union - - -core = vs.core - - -# always uses float OPP -# mvsfunc is an unreadable mess and i was having bm3d issues so i rewrote the wrapper -# turns out, it's still an unreadable mess -def bm3d(clip: vs.VideoNode, matrix_s: str = "709", sigma: Union[float, List[float]] = 0.75, - radius: Union[int, List[int], None] = None, ref: Optional[vs.VideoNode] = None, - pre: Optional[vs.VideoNode] = None, refine: int = 1, - basic_args: Dict[str, Any] = {}, final_args: Dict[str, Any] = {}) -> vs.VideoNode: - assert clip.format is not None - isGray = clip.format.color_family == vs.GRAY - - def to_opp(clip: vs.VideoNode) -> vs.VideoNode: - return clip.resize.Bicubic(format=vs.RGBS, matrix_in_s=matrix_s).bm3d.RGB2OPP(sample=1) - - def to_fullgray(clip: vs.VideoNode) -> vs.VideoNode: - return get_y(clip).resize.Point(format=vs.GRAYS, range_in=Range.LIMITED, range=Range.FULL) - - sigmal = [sigma] * 3 if not isinstance(sigma, list) else sigma + [sigma[-1]]*(3-len(sigma)) - sigmal = [sigmal[0], 0, 0] if isGray else sigmal - isGray = True if sigmal[1] == 0 and sigmal[2] == 0 else isGray - if len(sigmal) != 3: - raise ValueError("bm3d: 'invalid number of sigma parameters supplied'") - radiusl = [0, 0] if radius is None else [radius] * 2 if not isinstance(radius, list) \ - else radius + [radius[-1]]*(2-len(radius)) - if len(radiusl) != 2: - raise ValueError("bm3d: 'invalid number or radius parameters supplied'") - - if sigmal[0] == 0 and sigmal[1] == 0 and sigmal[2] == 0: - return clip - - pre = pre if pre is None else to_opp(pre) if not isGray else to_fullgray(pre) - - def basic(clip: vs.VideoNode) -> vs.VideoNode: - return clip.bm3d.Basic(sigma=sigmal, ref=pre, matrix=100, **basic_args) if radiusl[0] < 1 \ - else clip.bm3d.VBasic(sigma=sigmal, ref=pre, radius=radiusl[0], matrix=100, **basic_args) \ - .bm3d.VAggregate(radius=radiusl[0], sample=1) - - clip_in = to_opp(clip) if not isGray else to_fullgray(clip) - refv = basic(clip_in) if ref is None else to_opp(ref) if not isGray else to_fullgray(ref) - - def final(clip: vs.VideoNode) -> vs.VideoNode: - return clip.bm3d.Final(sigma=sigmal, ref=refv, matrix=100, **final_args) if radiusl[1] < 1 \ - else clip.bm3d.VFinal(sigma=sigmal, ref=refv, radius=radiusl[1], matrix=100, **final_args) \ - .bm3d.VAggregate(radius=radiusl[1], sample=1) - - den = iterate(clip_in, final, refine) - - # boil everything back down to whatever input we had - den = den.bm3d.OPP2RGB(sample=1).resize.Bicubic(format=clip.format.id, matrix_s=matrix_s) if not isGray \ - else den.resize.Point(format=clip.format.replace(color_family=vs.GRAY, subsampling_w=0, subsampling_h=0).id, - range_in=Range.FULL, range=Range.LIMITED) - # merge source chroma if it exists and we didn't denoise it - den = core.std.ShufflePlanes([den, clip], planes=[0, 1, 2], colorfamily=vs.YUV) \ - if isGray and clip.format.color_family == vs.YUV else den - # sub clip luma back in if we only denoised chroma - den = den if sigmal[0] != 0 else core.std.ShufflePlanes([clip, den], planes=[0, 1, 2], colorfamily=vs.YUV) - - return den