5
0

xv: bd: add vol 4 and 5; update common module

This commit is contained in:
louis f 2020-05-15 22:13:37 -04:00
parent 03998c6009
commit 007b91c6b5
Signed by: louis
GPG Key ID: 44D7E1DE4E23D6F2
14 changed files with 320 additions and 24 deletions

@ -7,6 +7,6 @@ import vapoursynth as vs
core = vs.core core = vs.core
ac = acsuite.AC() ac = acsuite.AC()
path = r"bdmv/KIXA_90889/BDMV/STREAM/00004.m2ts" path = r"../bdmv/KIXA_90889/BDMV/STREAM/00004.m2ts"
src = core.lsmas.LWLibavSource(path) src = core.lsmas.LWLibavSource(path)
ac.eztrim(src, [(0, -24)], os.path.splitext(path)[0] + ".wav", "ep5pv.wav") ac.eztrim(src, [(0, -24)], os.path.splitext(path)[0] + ".wav", "ep5pv.wav")

@ -23,8 +23,8 @@ FADE_RANGES: List[FadeRange] = [
W2X_DENOISE: List[Range] = [ W2X_DENOISE: List[Range] = [
(OP[0]+1859, OP[0]+1896) # flashy OP scene (OP[0]+1859, OP[0]+1896) # flashy OP scene
] ]
DEBAND_HARD: List[Range] = [] DEBAND_HARD: List[Range] = [(25301, 25403)] # chris henshin
DEBAND_HARDER: List[Range] = [] DEBAND_HARDER: List[Range] = [(25347, 25361)] # chris henshin
src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90890/BDMV/STREAM/00005.m2ts") src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90890/BDMV/STREAM/00005.m2ts")
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90890/BDMV/STREAM/00006.m2ts")[:-24] src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90890/BDMV/STREAM/00006.m2ts")[:-24]

@ -7,6 +7,6 @@ import vapoursynth as vs
core = vs.core core = vs.core
ac = acsuite.AC() ac = acsuite.AC()
path = r"bdmv/KIXA_90889/BDMV/STREAM/00006.m2ts" path = r"../bdmv/KIXA_90889/BDMV/STREAM/00006.m2ts"
src = core.lsmas.LWLibavSource(path) src = core.lsmas.LWLibavSource(path)
ac.eztrim(src, [(0, -24)], os.path.splitext(path)[0] + ".wav", "ep6pv.wav") ac.eztrim(src, [(0, -24)], os.path.splitext(path)[0] + ".wav", "ep6pv.wav")

@ -0,0 +1,62 @@
import vapoursynth as vs
from toolz.functoolz import compose
from typing import List, Optional, Tuple
import sys
sys.path.append("..")
from xv_common import (FadeRange, Range, denoise, descale, w2x, deband,
mask_oped, mask_logo, finalize) # noqa: E402
core = vs.core
core.max_cache_size = 1024
OP: Optional[Tuple[int, int]] = (2566, 4962)
ED: Optional[Tuple[int, int]] = None
LOGO: Range = (17059, 17236)
NO_SCALE: List[Range] = [
(31876, 34045), # credits
(34516, 34587), # next episode title
]
FORCE_SCALE: List[Range] = [
(7692, 8889), # kiri henshin
(30734, 31260), # carol henshin
]
FADE_RANGES: List[FadeRange] = [
FadeRange(ref=5041, range_=(4976, 5057)), # title
]
W2X_DENOISE: List[Range] = []
if OP is not None:
W2X_DENOISE.append(
(OP[0]+1859, OP[0]+1896), # flashy OP scene
)
DEBAND_HARD: List[Range] = [
(7797, 7887), # kiri henshin
9062, # ???
]
DEBAND_HARDER: List[Range] = [
(7815, 7851), # kiri henshin
]
src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90891/BDMV/STREAM/00003.m2ts")
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90891/BDMV/STREAM/00004.m2ts")[:-24]
src_op = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00007.m2ts")[24:-24]
src_ed = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00008.m2ts")[24:-24]
src_logo = core.lsmas.LWLibavSource("../bdmv/KIXA_90890/BDMV/STREAM/00005.m2ts")[18416]
src = src_ep + src_pv
src = src.fmtc.bitdepth(bits=16)
den = denoise(src)
final = compose(
finalize,
mask_logo(src=den, src_logo=src_logo, range=LOGO),
mask_oped(src=den, op=OP, ed=ED, src_op=src_op, src_ed=src_ed),
deband(hard=DEBAND_HARD, harder=DEBAND_HARDER),
w2x(w2x_range=W2X_DENOISE),
descale(force_scale=FORCE_SCALE, no_scale=NO_SCALE, fade_ranges=FADE_RANGES)
)(den)
final.set_output()

@ -0,0 +1,12 @@
#!/usr/bin/env python3
import acsuite
import os
import vapoursynth as vs
core = vs.core
ac = acsuite.AC()
path = r"../bdmv/KIXA_90890/BDMV/STREAM/00004.m2ts"
src = core.lsmas.LWLibavSource(path)
ac.eztrim(src, [(0, -24)], os.path.splitext(path)[0] + ".wav", "ep7pv.wav")

@ -0,0 +1,55 @@
import vapoursynth as vs
from toolz.functoolz import compose
from typing import List, Optional, Tuple
import sys
sys.path.append("..")
from xv_common import (FadeRange, Range, denoise, descale, w2x, deband,
mask_oped, mask_logo, finalize) # noqa: E402
core = vs.core
core.max_cache_size = 1024
OP: Optional[Tuple[int, int]] = (2230, 4626)
ED: Optional[Tuple[int, int]] = None
LOGO: Range = (14350, 14515)
NO_SCALE: List[Range] = [
(31822, 34045), # credits
(34493, 34573), # next episode title
]
FORCE_SCALE: List[Range] = [
(1797, 1955), # carol henshin
(30972, 31573), # miku henshin
]
FADE_RANGES: List[FadeRange] = []
W2X_DENOISE: List[Range] = []
if OP is not None:
W2X_DENOISE.append(
(OP[0]+1859, OP[0]+1896), # flashy OP scene
)
DEBAND_HARD: List[Range] = []
DEBAND_HARDER: List[Range] = []
src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90891/BDMV/STREAM/00005.m2ts")
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90891/BDMV/STREAM/00006.m2ts")[:-24]
src_op = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00007.m2ts")[24:-24]
src_ed = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00008.m2ts")[24:-24]
src_logo = core.lsmas.LWLibavSource("../bdmv/KIXA_90890/BDMV/STREAM/00005.m2ts")[18416]
src = src_ep + src_pv
src = src.fmtc.bitdepth(bits=16)
den = denoise(src)
final = compose(
finalize,
mask_logo(src=den, src_logo=src_logo, range=LOGO),
mask_oped(src=den, op=OP, ed=ED, src_op=src_op, src_ed=src_ed),
deband(hard=DEBAND_HARD, harder=DEBAND_HARDER),
w2x(w2x_range=W2X_DENOISE),
descale(force_scale=FORCE_SCALE, no_scale=NO_SCALE, fade_ranges=FADE_RANGES)
)(den)
final.set_output()

@ -0,0 +1,12 @@
#!/usr/bin/env python3
import acsuite
import os
import vapoursynth as vs
core = vs.core
ac = acsuite.AC()
path = r"../bdmv/KIXA_90890/BDMV/STREAM/00006.m2ts"
src = core.lsmas.LWLibavSource(path)
ac.eztrim(src, [(0, -24)], os.path.splitext(path)[0] + ".wav", "ep8pv.wav")

@ -0,0 +1,59 @@
import vapoursynth as vs
from toolz.functoolz import compose
from typing import List, Optional, Tuple
import sys
sys.path.append("..")
from xv_common import (FadeRange, Range, denoise, descale, descale720,
w2x, deband, mask_oped, mask_logo, finalize) # noqa: E402
core = vs.core
core.max_cache_size = 1024
S1 = [(0, 69), (132, 383)]
G = [(384, 439)]
GX = [(70, 131), (440, 489)]
AXZ = [(490, 682)]
OP: Optional[Tuple[int, int]] = (1296, 3692)
ED: Optional[Tuple[int, int]] = (31623, 33780)
LOGO: Range = (12265, 12430)
NO_SCALE: List[Range] = [
(34513, 34605), # next episode title
]
FORCE_SCALE: List[Range] = []
FORCE_SCALE = FORCE_SCALE + AXZ
FADE_RANGES: List[FadeRange] = [
FadeRange(ref=3763, range_=(3694, 3775)),
]
W2X_DENOISE: List[Range] = []
if OP is not None:
W2X_DENOISE.append(
(OP[0]+1859, OP[0]+1896), # flashy OP scene
)
DEBAND_HARD: List[Range] = []
DEBAND_HARDER: List[Range] = []
src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90892/BDMV/STREAM/00003.m2ts")
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90892/BDMV/STREAM/00004.m2ts")[:-24]
src_op = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00007.m2ts")[24:-24]
src_ed = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00008.m2ts")[24:-24]
src_logo = core.lsmas.LWLibavSource("../bdmv/KIXA_90890/BDMV/STREAM/00005.m2ts")[18416]
src = src_ep + src_pv
src = src.fmtc.bitdepth(bits=16)
den = denoise(src)
final = compose(
finalize,
mask_logo(src=den, src_logo=src_logo, range=LOGO),
mask_oped(src=den, op=OP, ed=ED, src_op=src_op, src_ed=src_ed),
deband(hard=DEBAND_HARD, harder=DEBAND_HARDER),
w2x(w2x_range=W2X_DENOISE),
descale720(src=den, ranges=S1+G+GX),
descale(force_scale=FORCE_SCALE, no_scale=NO_SCALE, fade_ranges=FADE_RANGES)
)(den)
final.set_output()

@ -0,0 +1,12 @@
#!/usr/bin/env python3
import acsuite
import os
import vapoursynth as vs
core = vs.core
ac = acsuite.AC()
path = r"../bdmv/KIXA_90891/BDMV/STREAM/00004.m2ts"
src = core.lsmas.LWLibavSource(path)
ac.eztrim(src, [(0, -24)], os.path.splitext(path)[0] + ".wav", "ep9pv.wav")

@ -0,0 +1,55 @@
import vapoursynth as vs
from toolz.functoolz import compose
from typing import List, Optional, Tuple
import sys
sys.path.append("..")
from xv_common import (FadeRange, Range, denoise, descale, w2x, deband,
mask_oped, mask_logo, finalize) # noqa: E402
core = vs.core
core.max_cache_size = 1024
OP: Optional[Tuple[int, int]] = (5563, 7959)
ED: Optional[Tuple[int, int]] = (31338, 33494)
LOGO: Range = (17924, 18089)
NO_SCALE: List[Range] = [
(34515, 34607), # next episode title
]
FORCE_SCALE: List[Range] = [
(19155, 20461), # shriabe henshin
]
FADE_RANGES: List[FadeRange] = [
FadeRange(ref=8026, range_=(7961, 8042)),
]
W2X_DENOISE: List[Range] = []
if OP is not None:
W2X_DENOISE.append(
(OP[0]+1859, OP[0]+1896), # flashy OP scene
)
DEBAND_HARD: List[Range] = []
DEBAND_HARDER: List[Range] = []
src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90892/BDMV/STREAM/00005.m2ts")
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90892/BDMV/STREAM/00006.m2ts")[:-24]
src_op = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00007.m2ts")[24:-24]
src_ed = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00008.m2ts")[24:-24]
src_logo = core.lsmas.LWLibavSource("../bdmv/KIXA_90890/BDMV/STREAM/00005.m2ts")[18416]
src = src_ep + src_pv
src = src.fmtc.bitdepth(bits=16)
den = denoise(src)
final = compose(
finalize,
mask_logo(src=den, src_logo=src_logo, range=LOGO),
mask_oped(src=den, op=OP, ed=ED, src_op=src_op, src_ed=src_ed),
deband(hard=DEBAND_HARD, harder=DEBAND_HARDER),
w2x(w2x_range=W2X_DENOISE),
descale(force_scale=FORCE_SCALE, no_scale=NO_SCALE, fade_ranges=FADE_RANGES)
)(den)
final.set_output()

@ -0,0 +1,12 @@
#!/usr/bin/env python3
import acsuite
import os
import vapoursynth as vs
core = vs.core
ac = acsuite.AC()
path = r"../bdmv/KIXA_90891/BDMV/STREAM/00006.m2ts"
src = core.lsmas.LWLibavSource(path)
ac.eztrim(src, [(0, -24)], os.path.splitext(path)[0] + ".wav", "ep10pv.wav")

@ -1,2 +1,2 @@
from .scale import FadeRange, descale from .scale import FadeRange, descale, descale720
from .filter import Range, denoise, w2x, deband, mask_oped, mask_logo, finalize from .filter import Range, denoise, w2x, deband, mask_oped, mask_logo, finalize

@ -5,7 +5,7 @@ from kagefunc import adaptive_grain, retinex_edgemask
from lvsfunc.misc import replace_ranges from lvsfunc.misc import replace_ranges
from mvsfunc import BM3D from mvsfunc import BM3D
from toolz.functoolz import curry from toolz.functoolz import curry
from typing import List, Tuple, Union from typing import List, Optional, Tuple, Union
from vardefunc import dcm from vardefunc import dcm
core = vs.core core = vs.core
@ -54,14 +54,18 @@ def deband(clip: vs.VideoNode, hard: List[Range],
@curry @curry
def mask_oped(clip: vs.VideoNode, src: vs.VideoNode, def mask_oped(clip: vs.VideoNode, src: vs.VideoNode,
op: Tuple[int, int], ed: Tuple[int, int], src_op: vs.VideoNode, op: Optional[Tuple[int, int]], ed: Optional[Tuple[int, int]],
src_ed: vs.VideoNode) -> vs.VideoNode: src_op: vs.VideoNode, src_ed: vs.VideoNode) -> vs.VideoNode:
credit_op_m = dcm(clip, src[op[0]:op[1]+1], merge = clip
src_op[:op[1]-op[0]+1], op[0], op[1], 2, 2) if op is not None:
credit_ed_m = dcm(clip, src[ed[0]:ed[1]+1], credit_op_m = dcm(clip, src[op[0]:op[1]+1],
src_ed[:ed[1]-ed[0]+1], ed[0], ed[1], 2, 2) src_op[:op[1]-op[0]+1], op[0], op[1], 2, 2)
credit_m = core.std.Expr([credit_op_m, credit_ed_m], 'x y +') merge = core.std.MaskedMerge(merge, src, credit_op_m)
return core.std.MaskedMerge(clip, src, credit_m) if ed is not None:
credit_ed_m = dcm(clip, src[ed[0]:ed[1]+1],
src_ed[:ed[1]-ed[0]+1], ed[0], ed[1], 2, 2)
merge = core.std.MaskedMerge(merge, src, credit_ed_m)
return merge
@curry @curry

@ -1,7 +1,6 @@
import vapoursynth as vs import vapoursynth as vs
import vsutil import vsutil
from functools import partial
from kagefunc import retinex_edgemask from kagefunc import retinex_edgemask
from lvsfunc.aa import upscaled_sraa from lvsfunc.aa import upscaled_sraa
from lvsfunc.kernels import Bicubic from lvsfunc.kernels import Bicubic
@ -20,6 +19,7 @@ class FadeRange(NamedTuple):
range_: Tuple[int, int] range_: Tuple[int, int]
@curry
def _sraa_frameeval(n: int, clip: vs.VideoNode, w: int, h: int def _sraa_frameeval(n: int, clip: vs.VideoNode, w: int, h: int
) -> vs.VideoNode: ) -> vs.VideoNode:
frame = clip.get_frame(n) frame = clip.get_frame(n)
@ -33,8 +33,8 @@ def _sraa_frameeval(n: int, clip: vs.VideoNode, w: int, h: int
def _sraa_reupscale(clip: vs.VideoNode, width: int, height: int def _sraa_reupscale(clip: vs.VideoNode, width: int, height: int
) -> vs.VideoNode: ) -> vs.VideoNode:
sraa = clip.std.FrameEval(partial(_sraa_frameeval, clip=clip, w=width, sraa = clip.std.FrameEval(_sraa_frameeval(clip=clip, w=width,
h=height)) h=height))
scale = sraa.resize.Spline36(width, height, format=vs.GRAY16) scale = sraa.resize.Spline36(width, height, format=vs.GRAY16)
return scale return scale
@ -44,16 +44,18 @@ def _fade_ranges_with_refs(clip: vs.VideoNode, reupscaled: vs.VideoNode,
mask = core.std.BlankClip(clip) mask = core.std.BlankClip(clip)
for r in ranges: for r in ranges:
rmask = core.std.Expr([clip[r.ref], reupscaled[r.ref]], "x y - abs") rmask = core.std.Expr([clip[r.ref], reupscaled[r.ref]], "x y - abs")
rmask = rmask.std.Binarize(1500)
rmask = vsutil.iterate(rmask, core.std.Maximum, 4) rmask = vsutil.iterate(rmask, core.std.Maximum, 4)
rmask = rmask.std.Binarize(4000) rmask = vsutil.iterate(rmask, core.std.Inflate, 2)
rmask = core.std.Expr([mask, rmask], "x y +") rmask = core.std.Expr([mask, rmask], "x y +")
mask = replace_ranges(mask, rmask, [r.range_]) mask = replace_ranges(mask, rmask, [r.range_])
return mask return mask
def _really_dumb_inverse_mask(clip: vs.VideoNode, reupscaled: vs.VideoNode, @curry
ranges: List[FadeRange]) -> vs.VideoNode: def _inverse_mask(clip: vs.VideoNode, reupscaled: vs.VideoNode,
ranges: List[FadeRange] = []) -> vs.VideoNode:
reupscaled = reupscaled.resize.Bicubic(format=clip.format.id) reupscaled = reupscaled.resize.Bicubic(format=clip.format.id)
line_mask = retinex_edgemask(clip, 0.0001).std.Binarize(10000) line_mask = retinex_edgemask(clip, 0.0001).std.Binarize(10000)
fade_mask = _fade_ranges_with_refs(clip, reupscaled, ranges) fade_mask = _fade_ranges_with_refs(clip, reupscaled, ranges)
@ -65,20 +67,31 @@ def _really_dumb_inverse_mask(clip: vs.VideoNode, reupscaled: vs.VideoNode,
def descale(clip: vs.VideoNode, force_scale: List[Range], def descale(clip: vs.VideoNode, force_scale: List[Range],
no_scale: List[Range], fade_ranges: List[FadeRange], no_scale: List[Range], fade_ranges: List[FadeRange],
show_mask: bool = False) -> vs.VideoNode: show_mask: bool = False) -> vs.VideoNode:
dmask = partial(_really_dumb_inverse_mask, ranges=fade_ranges)
kernel = Bicubic(b=1/3, c=1/3) kernel = Bicubic(b=1/3, c=1/3)
heights = [871, 872, 873] heights = [871, 872, 873]
y = vsutil.get_y(clip) y = vsutil.get_y(clip)
ys = ldescale(y, upscaler=_sraa_reupscale, height=heights, ys = ldescale(y, upscaler=_sraa_reupscale, height=heights,
kernel=kernel, threshold=0.003, mask=dmask, kernel=kernel, threshold=0.003,
show_mask=show_mask) mask=_inverse_mask(ranges=fade_ranges), show_mask=show_mask)
if show_mask: if show_mask:
return ys return ys
yf = ldescale(y, upscaler=_sraa_reupscale, height=heights, yf = ldescale(y, upscaler=_sraa_reupscale, height=heights,
kernel=kernel, threshold=0, mask=dmask) kernel=kernel, threshold=0,
mask=_inverse_mask(ranges=fade_ranges))
yd = replace_ranges(ys, yf, force_scale) yd = replace_ranges(ys, yf, force_scale)
scaled = core.std.ShufflePlanes([yd, clip], planes=[0, 1, 2], scaled = core.std.ShufflePlanes([yd, clip], planes=[0, 1, 2],
colorfamily=vs.YUV) colorfamily=vs.YUV)
scaled = replace_ranges(scaled, clip, no_scale) scaled = replace_ranges(scaled, clip, no_scale)
return scaled return scaled
@curry
def descale720(clip: vs.VideoNode, src: vs.VideoNode, ranges: List[Range]
) -> vs.VideoNode:
y = ldescale(vsutil.get_y(src), upscaler=_sraa_reupscale, height=720,
kernel=Bicubic(b=1/3, c=1/3), threshold=0, mask=_inverse_mask)
scaled = core.std.ShufflePlanes([y, src], planes=[0, 1, 2],
colorfamily=vs.YUV)
scaled = replace_ranges(clip, scaled, ranges)
return scaled