import vapoursynth as vs from vivy_common import (VivyConfig, VivySource, antialias, deband, denoise, finalize, fsrcnnx_rescale, letterbox_edgefix, regrain) from yt_common.automation import SelfRunner from yt_common.source import waka_replace from lvsfunc.types import Range from lvsfunc.dehardsub import HardsubLineFade, HardsubLine, HardsubSignFade, HardsubMask, bounded_dehardsub from vsutil import Range as CRange from typing import List import os core = vs.core EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) CONFIG: VivyConfig = VivyConfig(EPNUM) SOURCE: VivySource = VivySource(CONFIG) WAKA_REPLACE: List[List[Range]] = [ [], [], ] SIGNS_RU: List[HardsubMask] = [ HardsubLine([ (1878, 2034), (2045, 2230), (2342, 2493), (2716, 2840), (3102, 3220), (3225, 3360), (3366, 3483), (3487, 3634), (3673, 3716), (3740, 3890), (3899, 3943), (3947, 4090), (4094, 4206), (4211, 4348), (4359, 4468), (4480, 4599), (4605, 4709), (4713, 4830), (8722, 8825), (8831, 9017), (9036, 9087), (18822, 18885), (19935, 19992), (21046, 21138), (21801, 21867), (25730, 25847), (25851, 25994), (25999, 26124), (26128, 26243), (26249, 26290), (26314, 26358), (26379, 26539), (26544, 26596), (26605, 26741), (26747, 26865), (26870, 27010), (27016, 27143), (27147, 27262), (27268, 27380), (27385, 27492), (28681, 28802), (28806, 28974), (28978, 29067), (29076, 29219), (29223, 29371), (29376, 29523), (29527, 29652), (29656, 29774), (29779, 29891), (29896, 30018), ], ((300, 840), (1313, 185))), HardsubLineFade([ (30519, 30541), (30541, 30589), (30590, 30637), (30638, 30685), (30686, 30733), (30734, 30781), (30782, 30829), (30830, 30901), (30902, 30973), (30974, 31045), ], ((333, 50), (1361, 167))), HardsubLineFade([ (31046, 31117), (31118, 31189), ], ((9, 70), (1239, 149))), HardsubSignFade([ (4890, 5010), (15951, 16054), (16055, 16120), (16121, 16202), (29617, 29628), (33949, 34045), ]), ] NOSCALE: List[Range] = [] AA_NONE: List[Range] = [(33870, 33873)] LETTERBOX: List[Range] = [(0, 2150), (8791, 10693), (13427, 15153), (27878, 28006)] def filter_basic() -> vs.VideoNode: wakas, ref = SOURCE.dhs_source() wakas = [w[:33669] + w.std.BlankClip(length=17) + w[33669:] for w in wakas] ref = ref.resize.Point(range_in=CRange.FULL, range=CRange.LIMITED) if SOURCE.ref_is_funi else ref waka = wakas[0] waka, wakas = waka_replace(waka, wakas[1:], WAKA_REPLACE) src = bounded_dehardsub(waka, ref, SIGNS_RU, wakas) src.set_output(1) return src def filter() -> vs.VideoNode: src = filter_basic() rescale = fsrcnnx_rescale(src, NOSCALE) den = denoise(rescale) deb = deband(den) aa = antialias(deb, noaa=AA_NONE) grain = regrain(aa) edgefix = letterbox_edgefix(grain, LETTERBOX) final = finalize(edgefix) final.set_output() return final if __name__ == "__main__": SelfRunner(CONFIG, SOURCE, filter, filter_basic) else: filter()