5
0

vivy: tv: 12

This commit is contained in:
louis f 2021-06-16 17:12:09 -04:00
parent 337be266de
commit f9bf2c3202
Signed by: louis
GPG Key ID: 44D7E1DE4E23D6F2

155
Vivy/12/12.vpy Normal file

@ -0,0 +1,155 @@
import vapoursynth as vs
from vivy_common import (VivyConfig, VivySource, antialias, deband, denoise,
finalize, fsrcnnx_rescale, letterbox_edgefix, letterbox_refix, regrain)
from yt_common.automation import SelfRunner
from yt_common.chapters import Chapter
from yt_common.source import waka_replace
from lvsfunc.types import Range
from lvsfunc.dehardsub import HardsubLine, HardsubSignFade, HardsubMask, bounded_dehardsub
from lvsfunc.mask import BoundingBox
from lvsfunc.misc import replace_ranges, scale_thresh
from awsmfunc import bbmod
from vsutil import Range as CRange
from vsutil import scale_value, split
from typing import List, Tuple
import os
core = vs.core
EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0]))
CONFIG: VivyConfig = VivyConfig(EPNUM)
SOURCE: VivySource = VivySource(CONFIG)
CHAPTERS: List[Chapter] = [
Chapter("Intro", 0),
Chapter("OP", 624),
Chapter("Part A", 2782),
Chapter("Part B", 10790),
Chapter("ED", 31530),
Chapter("PV", 33688),
]
WAKA_REPLACE: List[List[Range]] = [
[(31530, 32333)],
[],
]
SIGNS_RU: List[HardsubMask] = [
HardsubLine([
(630, 2744),
], ((283, 844), (1349, 204))),
HardsubSignFade([
(4202, 4322),
(6794, 6812),
(33951, 34047),
]),
]
NOSCALE: List[Range] = [
]
AA_NONE: List[Range] = [
]
AA_STRONGER: List[Range] = [
]
LETTERBOX: List[Range] = [
(33688, 33720),
(33764, 33820),
]
LETTERBOX_FADES: List[Range] = [
]
LETTERBOX_HOR_SHIFT: List[Range] = [
(2789, 3011),
(3242, 3703),
]
LETTERBOX_BW_VER_SHIFT: List[Range] = [
(2818, 2829),
]
WMASK_BLUR: List[Range] = [
(2789, 2799),
(2808, 2816),
(2857, 3915),
]
def black(clip: vs.VideoNode) -> Tuple[float, float, float]:
assert clip.format is not None
return (
scale_value(0, 8, clip.format.bits_per_sample, scale_offsets=True, range_in=CRange.FULL, range=CRange.LIMITED),
scale_thresh(0.5, clip),
scale_thresh(0.5, clip),
)
def letterbox_shift_hor(clip: vs.VideoNode, ranges: List[Range]) -> vs.VideoNode:
shift = clip.resize.Bicubic(src_left=241)
crop_y = shift.std.ShufflePlanes(planes=0, colorfamily=vs.GRAY).std.Crop(right=585)
bb_y = bbmod(crop_y, left=4)
borders = core.std.ShufflePlanes([
bb_y.std.AddBorders(left=292, right=293, color=black(clip)[0]),
shift.std.Crop(right=584).std.AddBorders(left=292, right=292, color=black(clip))
], planes=[0, 1, 2], colorfamily=vs.YUV)
return replace_ranges(clip, borders, ranges)
def letterbox_shift_vert_gray(clip: vs.VideoNode, ranges: List[Range]) -> vs.VideoNode:
assert clip.format is not None
shift = clip.resize.Bicubic(src_top=55)
crop_y = shift.std.ShufflePlanes(planes=0, colorfamily=vs.GRAY).std.Crop(bottom=190)
bb_y: vs.VideoNode = bbmod(crop_y, top=2, bottom=1)
# this is used for a range thats in black and white so fuck dealing with
# chroma subsampling bullshit
borders = bb_y.std.AddBorders(top=95, bottom=95, color=black(clip)[0]).resize.Bicubic(format=clip.format.id)
return replace_ranges(clip, borders, ranges)
def stupid_bullshit(clip: vs.VideoNode, ranges: List[Range]) -> vs.VideoNode:
expr = f"y {scale_thresh(0.47, clip)} >= y {scale_thresh(0.53, clip)} <= and " # U bounds check
expr += f"z {scale_thresh(0.47, clip)} >= z {scale_thresh(0.53, clip)} <= and and " # V bounds check
expr += f"x {scale_thresh(0.7, clip)} >= x {scale_thresh(0.82, clip)} <= and and " # Y bounds check
expr += f"{scale_thresh(1.0, clip)} 0 ?" # brz
wmask = core.std.Expr(split(clip.resize.Bicubic(format=vs.YUV444P16)), expr)
wmask = wmask.std.Inflate().std.Binarize()
wmask_edge = wmask.std.Prewitt().std.Binarize()
wmask = core.std.Expr([wmask, wmask_edge], "x y -") # preserve edges for sharpness
wmask = core.std.MaskedMerge(wmask.std.BlankClip(), wmask, BoundingBox((345, 52), (1228, 309)).get_mask(wmask))
merge = core.std.MaskedMerge(clip, clip.std.BoxBlur(), wmask)
return replace_ranges(clip, merge, ranges)
def filter_basic() -> vs.VideoNode:
wakas, ref = SOURCE.dhs_source()
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()
den = denoise(src)
rescale = fsrcnnx_rescale(den, NOSCALE)
edgefix = letterbox_edgefix(rescale, crops=LETTERBOX, fades=LETTERBOX_FADES)
deb = deband(edgefix)
aa = antialias(deb, stronger=AA_STRONGER, noaa=AA_NONE)
refix = letterbox_refix(aa, deb, LETTERBOX)
fuck = stupid_bullshit(refix, WMASK_BLUR)
rfixh = letterbox_shift_hor(fuck, LETTERBOX_HOR_SHIFT)
rfixv = letterbox_shift_vert_gray(rfixh, LETTERBOX_BW_VER_SHIFT)
grain = regrain(rfixv)
final = finalize(grain)
final.set_output(0)
return final
if __name__ == "__main__":
SelfRunner(CONFIG, SOURCE, filter, filter_basic, chapters=CHAPTERS)
else:
filter()