xv: bd: port vol 1 and 2 to common module
this probably won't really matter because they won't be re-encoded but it makes it easier to check things
This commit is contained in:
parent
007b91c6b5
commit
cbbf8091c3
@ -1,64 +1,49 @@
|
||||
import vapoursynth as vs
|
||||
import lvsfunc as lvf
|
||||
import kagefunc as kgf
|
||||
import mvsfunc as mvf
|
||||
import vsutil
|
||||
|
||||
from ytttfunc.adaptivegrain import adaptive_grain
|
||||
from ytttfunc.replace_ranges import replace_ranges
|
||||
from functools import partial
|
||||
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_logo, finalize) # noqa: E402
|
||||
|
||||
core = vs.core
|
||||
core.max_cache_size = 1024
|
||||
|
||||
LOGO = [(20777, 20942)]
|
||||
NO_SCALE = [(30836, 33230), (34463, 34553)]
|
||||
FORCE_SCALE = [(4015, 5159)]
|
||||
OP: Optional[Tuple[int, int]] = None
|
||||
ED: Optional[Tuple[int, int]] = None
|
||||
LOGO: Range = (20777, 20942)
|
||||
NO_SCALE: List[Range] = [(30836, 33230), (34463, 34553)]
|
||||
FORCE_SCALE: List[Range] = [(4015, 5159)]
|
||||
DETAIL_MASK: List[Range] = [(256, 1546)]
|
||||
FADE_RANGES: List[FadeRange] = [
|
||||
FadeRange(ref=960, range_=(943, 1026)),
|
||||
]
|
||||
|
||||
src_ep = core.lsmas.LWLibavSource("bdmv/KIXA_90888/BDMV/STREAM/00003.m2ts")
|
||||
src_pv = core.lsmas.LWLibavSource("bdmv/KIXA_90888/BDMV/STREAM/00004.m2ts")[:-24]
|
||||
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] = [(4120, 4210)]
|
||||
DEBAND_HARDER: List[Range] = [(4138, 4174)]
|
||||
|
||||
src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90888/BDMV/STREAM/00003.m2ts")
|
||||
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90888/BDMV/STREAM/00004.m2ts")[:-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)
|
||||
|
||||
denoisechroma = core.knlm.KNLMeansCL(src, d=1, a=2, h=0.45, channels="UV", device_type='gpu', device_id=0)
|
||||
denoiseluma = core.knlm.KNLMeansCL(src, d=3, a=2, h=0.4, channels="Y", device_type='gpu', device_id=0)
|
||||
denoise = core.std.ShufflePlanes([denoiseluma, denoisechroma], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
final = compose(
|
||||
finalize,
|
||||
mask_logo(src=den, src_logo=src_logo, range=LOGO),
|
||||
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, detail_ranges=DETAIL_MASK)
|
||||
)(den)
|
||||
|
||||
logo_mask = core.imwri.Read("mask_2.png")
|
||||
logo_mask = logo_mask.resize.Bilinear(format=src.format.id, matrix_s="709")
|
||||
|
||||
Y = vsutil.get_y(denoise)
|
||||
|
||||
def sraa_frameeval(n, clip):
|
||||
frame = clip.get_frame(n)
|
||||
if frame.height < 1080:
|
||||
rfactor = 2.5
|
||||
else:
|
||||
rfactor = 1.5
|
||||
return lvf.upscaled_sraa(clip.resize.Bicubic(frame.width, frame.height), rfactor=rfactor, h=1080, ar=16/9)
|
||||
|
||||
edge = kgf.retinex_edgemask(Y, .0001).std.Binarize(10000)
|
||||
|
||||
Ys = lvf.smart_descale(Y, [871, 872, 873], kernel="bicubic", b=1/3, c=1/3, thr=0.003)
|
||||
Yf = lvf.smart_descale(Y, [871, 872, 873], kernel="bicubic", b=1/3, c=1/3, thr=0)
|
||||
Yd = replace_ranges(Ys, Yf, FORCE_SCALE)
|
||||
Yd = Yd.resize.Bicubic(format=vs.GRAY16)
|
||||
Ysraa = Yd.std.FrameEval(partial(sraa_frameeval, clip=Yd))
|
||||
Ysraa = Ysraa.resize.Spline36(1920, 1080, format=vs.GRAY16)
|
||||
Yline = core.std.MaskedMerge(Y, Ysraa, edge)
|
||||
|
||||
scaled = core.std.ShufflePlanes([Yline, denoise], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
|
||||
logo_merge = core.std.MaskedMerge(scaled, denoise, logo_mask)
|
||||
|
||||
scaled = replace_ranges(scaled, denoise, NO_SCALE)
|
||||
scaled = replace_ranges(scaled, logo_merge, LOGO)
|
||||
|
||||
line = kgf.retinex_edgemask(scaled).std.Binarize(9500).rgvs.RemoveGrain(3).std.Inflate()
|
||||
deband = scaled.neo_f3kdb.Deband(range=18, y=32, cb=24, cr=24, grainy=24, grainc=0, output_depth=16, sample_mode=4)
|
||||
deband = core.std.MaskedMerge(deband, scaled, line)
|
||||
|
||||
final = deband
|
||||
final = adaptive_grain(final, 0.3)
|
||||
final = core.fmtc.bitdepth(final, bits=10, dmode=3)
|
||||
final.set_output()
|
@ -1,98 +1,58 @@
|
||||
import vapoursynth as vs
|
||||
import lvsfunc as lvf
|
||||
import kagefunc as kgf
|
||||
import mvsfunc as mvf
|
||||
import vardefunc as vrdf
|
||||
import vsutil
|
||||
|
||||
from ytttfunc.adaptivegrain import adaptive_grain
|
||||
from ytttfunc.replace_ranges import replace_ranges
|
||||
from functools import partial
|
||||
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 = (1750, 4148)
|
||||
ED = (31339, 33495)
|
||||
LOGO = [(17724, 17874)]
|
||||
NO_SCALE = [(34477, 34563)]
|
||||
FORCE_SCALE = [(8369, 9325)]
|
||||
FADE_TEXT_REF = 4211
|
||||
DESCALE_MASK = [(4150, 4231)]
|
||||
W2X_DENOISE = [
|
||||
(21562, 21729), # noise from the pink shit
|
||||
(21882, 21951), # more pink shit
|
||||
(23087, 23252), # big zoom with lots of lights
|
||||
(OP[0]+1859, OP[0]+1896) # flashy OP scene
|
||||
OP: Optional[Tuple[int, int]] = (1750, 4148)
|
||||
ED: Optional[Tuple[int, int]] = (31339, 33495)
|
||||
LOGO: Range = (17724, 17874)
|
||||
NO_SCALE: List[Range] = [(34477, 34563)]
|
||||
FORCE_SCALE: List[Range] = [(8369, 9325)]
|
||||
FADE_RANGES: List[FadeRange] = [
|
||||
FadeRange(ref=4211, range_=(4150, 4231)),
|
||||
]
|
||||
|
||||
W2X_DENOISE: List[Range] = [
|
||||
(21562, 21729), # noise from the pink shit
|
||||
(21882, 21951), # more pink shit
|
||||
(23087, 23252), # big zoom with lots of lights
|
||||
]
|
||||
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] = []
|
||||
|
||||
# ep2 has the wrong OP, stolen from varde
|
||||
src_ep = core.lsmas.LWLibavSource("bdmv/KIXA_90888/BDMV/STREAM/00005.m2ts")
|
||||
src_pv = core.lsmas.LWLibavSource("bdmv/KIXA_90888/BDMV/STREAM/00006.m2ts")[:-24]
|
||||
src_oped = core.lsmas.LWLibavSource("../bd2/bdmv/KIXA_90889/BDMV/STREAM/00003.m2ts")
|
||||
src_ncop = core.lsmas.LWLibavSource("../bd2/bdmv/KIXA_90889/BDMV/STREAM/00007.m2ts")[24:-24]
|
||||
src_nced = core.lsmas.LWLibavSource("../bd2/bdmv/KIXA_90889/BDMV/STREAM/00008.m2ts")[24:-24]
|
||||
src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90888/BDMV/STREAM/00005.m2ts")
|
||||
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90888/BDMV/STREAM/00006.m2ts")[:-24]
|
||||
src_oped = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00003.m2ts")
|
||||
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]
|
||||
op = src_oped[744:3141]
|
||||
src = src_ep[:1750] + op + src_ep[4147:4150] + src_ep[4149+1:] + src_pv
|
||||
src = src.fmtc.bitdepth(bits=16)
|
||||
den = denoise(src)
|
||||
|
||||
denoisechroma = core.knlm.KNLMeansCL(src, d=1, a=2, h=0.45, channels="UV", device_type='gpu', device_id=0)
|
||||
denoiseluma = core.knlm.KNLMeansCL(src, d=3, a=2, h=0.4, channels="Y", device_type='gpu', device_id=0)
|
||||
denoise = core.std.ShufflePlanes([denoiseluma, denoisechroma], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
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)
|
||||
|
||||
logo_mask = core.imwri.Read("mask_2.png")
|
||||
logo_mask = logo_mask.resize.Bilinear(format=src.format.id, matrix_s="709")
|
||||
|
||||
Y = vsutil.get_y(denoise)
|
||||
|
||||
def sraa_frameeval(n, clip):
|
||||
frame = clip.get_frame(n)
|
||||
if frame.height < 1080:
|
||||
rfactor = 2.5
|
||||
else:
|
||||
rfactor = 1.5
|
||||
return lvf.upscaled_sraa(clip.resize.Bicubic(frame.width, frame.height), rfactor=rfactor, h=1080, ar=16/9)
|
||||
|
||||
edge = kgf.retinex_edgemask(Y, .0001).std.Binarize(10000)
|
||||
|
||||
Ys = lvf.smart_descale(Y, [871, 872, 873], kernel="bicubic", b=1/3, c=1/3, thr=0.003)
|
||||
Yf = lvf.smart_descale(Y, [871, 872, 873], kernel="bicubic", b=1/3, c=1/3, thr=0)
|
||||
Yd = replace_ranges(Ys, Yf, FORCE_SCALE)
|
||||
Yd = Yd.resize.Bicubic(format=vs.GRAY16)
|
||||
Ysraa = Yd.std.FrameEval(partial(sraa_frameeval, clip=Yd))
|
||||
Ysraa = Ysraa.resize.Spline36(1920, 1080, format=vs.GRAY16)
|
||||
Yline = core.std.MaskedMerge(Y, Ysraa, edge)
|
||||
text_mask = core.std.Expr([Y[FADE_TEXT_REF], Yd[FADE_TEXT_REF].resize.Bicubic(1920, 1080, filter_param_a=1/3, filter_param_b=1/3)], 'x y - abs')
|
||||
text_mask = vsutil.iterate(text_mask, core.std.Maximum, 4)
|
||||
text_mask = text_mask.std.Binarize(4000)
|
||||
Ydmask = core.std.MaskedMerge(Yline, Y, text_mask)
|
||||
Yfinal = replace_ranges(Yline, Ydmask, DESCALE_MASK)
|
||||
|
||||
scaled = core.std.ShufflePlanes([Yfinal, denoise], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
|
||||
logo_merge = core.std.MaskedMerge(scaled, denoise, logo_mask)
|
||||
|
||||
scaled = replace_ranges(scaled, denoise, NO_SCALE)
|
||||
scaled = replace_ranges(scaled, logo_merge, LOGO)
|
||||
|
||||
rgb = scaled.resize.Bicubic(1920, 1080, format=vs.RGBS, matrix_in_s="709")
|
||||
w2x = rgb.w2xnvk.Waifu2x(noise=1, scale=1, model=2).resize.Bicubic(format=scaled.format.id, matrix_s="709")
|
||||
|
||||
bm3d = mvf.BM3D(scaled, sigma=[0, 5], ref=w2x)
|
||||
bm3d = core.std.ShufflePlanes([w2x, bm3d], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
denoise_2 = replace_ranges(scaled, bm3d, W2X_DENOISE)
|
||||
|
||||
line = kgf.retinex_edgemask(denoise_2).std.Binarize(9500).rgvs.RemoveGrain(3).std.Inflate()
|
||||
deband = denoise_2.neo_f3kdb.Deband(range=18, y=32, cb=24, cr=24, grainy=24, grainc=0, output_depth=16, sample_mode=4)
|
||||
deband = core.std.MaskedMerge(deband, denoise_2, line)
|
||||
|
||||
# mask OP/ED credits, stolen from varde
|
||||
credit_op_m = vrdf.DCM(deband, src[OP[0]:OP[1]+1], src_ncop[:OP[1]-OP[0]+1], OP[0], OP[1], 2, 2)
|
||||
credit_ed_m = vrdf.DCM(deband, src[ED[0]:ED[1]+1], src_nced[:ED[1]-ED[0]+1], ED[0], ED[1], 2, 2)
|
||||
credit_m = core.std.Expr([credit_op_m, credit_ed_m], 'x y +')
|
||||
credit = core.std.MaskedMerge(deband, denoise, credit_m)
|
||||
|
||||
final = credit
|
||||
final = adaptive_grain(final, 0.3)
|
||||
final = core.fmtc.bitdepth(final, bits=10, dmode=3)
|
||||
final.set_output()
|
||||
|
@ -1,91 +1,51 @@
|
||||
import vapoursynth as vs
|
||||
import lvsfunc as lvf
|
||||
import kagefunc as kgf
|
||||
import mvsfunc as mvf
|
||||
import vardefunc as vrdf
|
||||
import vsutil
|
||||
|
||||
from ytttfunc.replace_ranges import replace_ranges
|
||||
from functools import partial
|
||||
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 = 32768
|
||||
core.max_cache_size = 1024
|
||||
|
||||
OP = (744, 3140)
|
||||
ED = (31888, 34045)
|
||||
LOGO = [(15813, 15978)]
|
||||
NO_SCALE = [(34478, 34573)]
|
||||
FORCE_SCALE = [(8732, 9815), (23429, 24735)]
|
||||
FADE_TEXT_REF = 3161
|
||||
DESCALE_MASK = [(3142, 3223)]
|
||||
W2X_DENOISE = [
|
||||
(OP[0]+1859, OP[0]+1896) # flashy OP scene
|
||||
OP: Optional[Tuple[int, int]] = (744, 3140)
|
||||
ED: Optional[Tuple[int, int]] = (31888, 34045)
|
||||
LOGO: Range = (15813, 15978)
|
||||
NO_SCALE: List[Range] = [(34478, 34573)]
|
||||
FORCE_SCALE: List[Range] = [(8732, 9815), (23429, 24735)]
|
||||
FADE_RANGES: List[FadeRange] = [
|
||||
FadeRange(ref=3161, range_=(3142, 3223)),
|
||||
]
|
||||
|
||||
src_ep = core.lsmas.LWLibavSource("../bd2/KIXA_90889/BDMV/STREAM/00003.m2ts")
|
||||
src_pv = core.lsmas.LWLibavSource("../bd2/KIXA_90889/BDMV/STREAM/00004.m2ts")[:-24]
|
||||
src_ncop = core.lsmas.LWLibavSource("../bd2/KIXA_90889/BDMV/STREAM/00007.m2ts")[24:-24]
|
||||
src_nced = core.lsmas.LWLibavSource("../bd2/KIXA_90889/BDMV/STREAM/00008.m2ts")[24:-24]
|
||||
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_90889/BDMV/STREAM/00003.m2ts")
|
||||
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/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)
|
||||
|
||||
denoisechroma = core.knlm.KNLMeansCL(src, d=1, a=2, h=0.45, channels="UV", device_type='gpu', device_id=0)
|
||||
denoiseluma = core.knlm.KNLMeansCL(src, d=3, a=2, h=0.4, channels="Y", device_type='gpu', device_id=0)
|
||||
denoise = core.std.ShufflePlanes([denoiseluma, denoisechroma], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
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)
|
||||
|
||||
logo_mask = core.imwri.Read("../common/mask_2.png")
|
||||
logo_mask = logo_mask.resize.Bilinear(format=src.format.id, matrix_s="709")
|
||||
|
||||
Y = vsutil.get_y(denoise)
|
||||
|
||||
def sraa_frameeval(n, clip):
|
||||
frame = clip.get_frame(n)
|
||||
if frame.height < 1080:
|
||||
rfactor = 2.5
|
||||
else:
|
||||
rfactor = 1.5
|
||||
return lvf.upscaled_sraa(clip.resize.Bicubic(frame.width, frame.height), rfactor=rfactor, h=1080, ar=16/9)
|
||||
|
||||
edge = kgf.retinex_edgemask(Y, .0001).std.Binarize(10000)
|
||||
|
||||
Ys = lvf.smart_descale(Y, [871, 872, 873], kernel="bicubic", b=1/3, c=1/3, thr=0.003)
|
||||
Yf = lvf.smart_descale(Y, [871, 872, 873], kernel="bicubic", b=1/3, c=1/3, thr=0)
|
||||
Yd = replace_ranges(Ys, Yf, FORCE_SCALE)
|
||||
Yd = Yd.resize.Bicubic(format=vs.GRAY16)
|
||||
Ysraa = Yd.std.FrameEval(partial(sraa_frameeval, clip=Yd))
|
||||
Ysraa = Ysraa.resize.Spline36(1920, 1080, format=vs.GRAY16)
|
||||
Yline = core.std.MaskedMerge(Y, Ysraa, edge)
|
||||
text_mask = core.std.Expr([Y[FADE_TEXT_REF], Yd[FADE_TEXT_REF].resize.Bicubic(1920, 1080, filter_param_a=1/3, filter_param_b=1/3)], 'x y - abs')
|
||||
text_mask = vsutil.iterate(text_mask, core.std.Maximum, 4)
|
||||
text_mask = text_mask.std.Binarize(4000)
|
||||
Ydmask = core.std.MaskedMerge(Yline, Y, text_mask)
|
||||
Yfinal = replace_ranges(Yline, Ydmask, DESCALE_MASK)
|
||||
|
||||
scaled = core.std.ShufflePlanes([Yfinal, denoise], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
|
||||
logo_merge = core.std.MaskedMerge(scaled, denoise, logo_mask)
|
||||
|
||||
scaled = replace_ranges(scaled, denoise, NO_SCALE)
|
||||
scaled = replace_ranges(scaled, logo_merge, LOGO)
|
||||
|
||||
rgb = scaled.resize.Bicubic(1920, 1080, format=vs.RGBS, matrix_in_s="709")
|
||||
w2x = rgb.w2xnvk.Waifu2x(noise=1, scale=1, model=2).resize.Bicubic(format=scaled.format.id, matrix_s="709")
|
||||
|
||||
bm3d = mvf.BM3D(scaled, sigma=[0, 5], ref=w2x)
|
||||
bm3d = core.std.ShufflePlanes([w2x, bm3d], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
denoise_2 = replace_ranges(scaled, bm3d, W2X_DENOISE)
|
||||
|
||||
line = kgf.retinex_edgemask(denoise_2).std.Binarize(9500).rgvs.RemoveGrain(3).std.Inflate()
|
||||
deband = denoise_2.neo_f3kdb.Deband(range=18, y=32, cb=24, cr=24, grainy=24, grainc=0, output_depth=16, sample_mode=4, keep_tv_range=True)
|
||||
deband = core.std.MaskedMerge(deband, denoise_2, line)
|
||||
|
||||
# mask OP/ED credits, stolen from varde
|
||||
credit_op_m = vrdf.dcm(deband, src[OP[0]:OP[1]+1], src_ncop[:OP[1]-OP[0]+1], OP[0], OP[1], 2, 2)
|
||||
credit_ed_m = vrdf.dcm(deband, src[ED[0]:ED[1]+1], src_nced[:ED[1]-ED[0]+1], ED[0], ED[1], 2, 2)
|
||||
credit_m = core.std.Expr([credit_op_m, credit_ed_m], 'x y +')
|
||||
credit = core.std.MaskedMerge(deband, denoise, credit_m)
|
||||
|
||||
final = credit
|
||||
final = kgf.adaptive_grain(final, 0.3)
|
||||
final = core.fmtc.bitdepth(final, bits=10, dmode=3)
|
||||
final.set_output()
|
||||
|
@ -1,98 +1,51 @@
|
||||
import vapoursynth as vs
|
||||
import lvsfunc as lvf
|
||||
import kagefunc as kgf
|
||||
import mvsfunc as mvf
|
||||
import vardefunc as vrdf
|
||||
import vsutil
|
||||
|
||||
from ytttfunc.adaptivegrain import adaptive_grain
|
||||
from ytttfunc.replace_ranges import replace_ranges
|
||||
from functools import partial
|
||||
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 = 32768
|
||||
core.max_cache_size = 1024
|
||||
|
||||
OP = (1248, 3644)
|
||||
ED = (31889, 34046)
|
||||
LOGO = [(14927, 15092)]
|
||||
NO_SCALE = [(34461, 34547)]
|
||||
FORCE_SCALE = [(10225, 11425), (19811, 20954)]
|
||||
FADE_TEXT_REF = 3676
|
||||
DESCALE_MASK = [(3646, 3726)]
|
||||
W2X_DENOISE = [
|
||||
(OP[0]+1859, OP[0]+1896) # flashy OP scene
|
||||
OP: Optional[Tuple[int, int]] = (1248, 3644)
|
||||
ED: Optional[Tuple[int, int]] = (31889, 34046)
|
||||
LOGO: Range = (14927, 15092)
|
||||
NO_SCALE: List[Range] = [(34461, 34547)]
|
||||
FORCE_SCALE: List[Range] = [(10225, 11425), (19811, 20954)]
|
||||
FADE_RANGES: List[FadeRange] = [
|
||||
FadeRange(ref=3676, range_=(3646, 3726)), # title
|
||||
]
|
||||
DEBAND_HARD = [(19916, 20006)] # bikki's henshin banding
|
||||
DEBAND_HARDER = [(19934, 19970)]
|
||||
|
||||
src_ep = core.lsmas.LWLibavSource("../bd2/KIXA_90889/BDMV/STREAM/00005.m2ts")
|
||||
src_pv = core.lsmas.LWLibavSource("../bd2/KIXA_90889/BDMV/STREAM/00006.m2ts")[:-24]
|
||||
src_ncop = core.lsmas.LWLibavSource("../bd2/KIXA_90889/BDMV/STREAM/00007.m2ts")[24:-24]
|
||||
src_nced = core.lsmas.LWLibavSource("../bd2/KIXA_90889/BDMV/STREAM/00008.m2ts")[24:-24]
|
||||
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] = [(19916, 20006)] # bikki's henshin banding
|
||||
DEBAND_HARDER: List[Range] = [(19934, 19970)]
|
||||
|
||||
src_ep = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/BDMV/STREAM/00005.m2ts")
|
||||
src_pv = core.lsmas.LWLibavSource("../bdmv/KIXA_90889/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)
|
||||
|
||||
denoisechroma = core.knlm.KNLMeansCL(src, d=1, a=2, h=0.45, channels="UV", device_type='gpu', device_id=0)
|
||||
denoiseluma = core.knlm.KNLMeansCL(src, d=3, a=2, h=0.4, channels="Y", device_type='gpu', device_id=0)
|
||||
denoise = core.std.ShufflePlanes([denoiseluma, denoisechroma], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
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)
|
||||
|
||||
logo_mask = core.imwri.Read("../common/mask_2.png")
|
||||
logo_mask = logo_mask.resize.Bilinear(format=src.format.id, matrix_s="709")
|
||||
|
||||
Y = vsutil.get_y(denoise)
|
||||
|
||||
def sraa_frameeval(n, clip):
|
||||
frame = clip.get_frame(n)
|
||||
if frame.height < 1080:
|
||||
rfactor = 2.5
|
||||
else:
|
||||
rfactor = 1.5
|
||||
return lvf.upscaled_sraa(clip.resize.Bicubic(frame.width, frame.height), rfactor=rfactor, h=1080, ar=16/9)
|
||||
|
||||
edge = kgf.retinex_edgemask(Y, .0001).std.Binarize(10000)
|
||||
|
||||
Ys = lvf.smart_descale(Y, [871, 872, 873], kernel="bicubic", b=1/3, c=1/3, thr=0.003)
|
||||
Yf = lvf.smart_descale(Y, [871, 872, 873], kernel="bicubic", b=1/3, c=1/3, thr=0)
|
||||
Yd = replace_ranges(Ys, Yf, FORCE_SCALE)
|
||||
Yd = Yd.resize.Bicubic(format=vs.GRAY16)
|
||||
Ysraa = Yd.std.FrameEval(partial(sraa_frameeval, clip=Yd))
|
||||
Ysraa = Ysraa.resize.Spline36(1920, 1080, format=vs.GRAY16)
|
||||
Yline = core.std.MaskedMerge(Y, Ysraa, edge)
|
||||
text_mask = core.std.Expr([Y[FADE_TEXT_REF], Yd[FADE_TEXT_REF].resize.Bicubic(1920, 1080, filter_param_a=1/3, filter_param_b=1/3)], 'x y - abs')
|
||||
text_mask = vsutil.iterate(text_mask, core.std.Maximum, 4)
|
||||
text_mask = text_mask.std.Binarize(4000)
|
||||
Ydmask = core.std.MaskedMerge(Yline, Y, text_mask)
|
||||
Yfinal = replace_ranges(Yline, Ydmask, DESCALE_MASK)
|
||||
|
||||
scaled = core.std.ShufflePlanes([Yfinal, denoise], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
|
||||
logo_merge = core.std.MaskedMerge(scaled, denoise, logo_mask)
|
||||
|
||||
scaled = replace_ranges(scaled, denoise, NO_SCALE)
|
||||
scaled = replace_ranges(scaled, logo_merge, LOGO)
|
||||
|
||||
rgb = scaled.resize.Bicubic(1920, 1080, format=vs.RGBS, matrix_in_s="709")
|
||||
w2x = rgb.w2xnvk.Waifu2x(noise=1, scale=1, model=2).resize.Bicubic(format=scaled.format.id, matrix_s="709")
|
||||
|
||||
bm3d = mvf.BM3D(scaled, sigma=[0, 5], ref=w2x)
|
||||
bm3d = core.std.ShufflePlanes([w2x, bm3d], planes=[0, 1, 2], colorfamily=vs.YUV)
|
||||
denoise_2 = replace_ranges(scaled, bm3d, W2X_DENOISE)
|
||||
|
||||
line = kgf.retinex_edgemask(denoise_2).std.Binarize(9500).rgvs.RemoveGrain(3).std.Inflate()
|
||||
nf3kdb = denoise_2.neo_f3kdb.Deband(range=18, y=32, cb=24, cr=24, grainy=24, grainc=0, output_depth=16, sample_mode=4, keep_tv_range=True)
|
||||
nf3kdb = core.std.MaskedMerge(nf3kdb, denoise_2, line)
|
||||
placebo = denoise_2.placebo.Deband(iterations=3, threshold=3, radius=24, grain=4)
|
||||
placebo2 = denoise_2.placebo.Deband(iterations=3, threshold=5, radius=32, grain=4)
|
||||
deband = replace_ranges(nf3kdb, placebo, DEBAND_HARD)
|
||||
deband = replace_ranges(deband, placebo2, DEBAND_HARDER)
|
||||
|
||||
# mask OP/ED credits, stolen from varde
|
||||
credit_op_m = vrdf.dcm(deband, src[OP[0]:OP[1]+1], src_ncop[:OP[1]-OP[0]+1], OP[0], OP[1], 2, 2)
|
||||
credit_ed_m = vrdf.dcm(deband, src[ED[0]:ED[1]+1], src_nced[:ED[1]-ED[0]+1], ED[0], ED[1], 2, 2)
|
||||
credit_m = core.std.Expr([credit_op_m, credit_ed_m], 'x y +')
|
||||
credit = core.std.MaskedMerge(deband, denoise, credit_m)
|
||||
|
||||
final = credit
|
||||
final = kgf.adaptive_grain(final, 0.3)
|
||||
final = core.fmtc.bitdepth(final, bits=10, dmode=3)
|
||||
final.set_output()
|
||||
|
@ -1,7 +1,7 @@
|
||||
import vapoursynth as vs
|
||||
|
||||
from toolz.functoolz import compose
|
||||
from typing import List
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
import sys
|
||||
sys.path.append("..")
|
||||
@ -12,17 +12,21 @@ from xv_common import (FadeRange, Range, denoise, descale, w2x, deband,
|
||||
core = vs.core
|
||||
core.max_cache_size = 1024
|
||||
|
||||
OP = (1272, 3668)
|
||||
ED = (31889, 34046)
|
||||
OP: Optional[Tuple[int, int]] = (1272, 3668)
|
||||
ED: Optional[Tuple[int, int]] = (31889, 34046)
|
||||
LOGO: Range = (17300, 17436)
|
||||
NO_SCALE: List[Range] = [(34514, 34600)]
|
||||
FORCE_SCALE: List[Range] = [(22384, 23376)]
|
||||
FADE_RANGES: List[FadeRange] = [
|
||||
FadeRange(ref=3700, range_=(3670, 3751)), # title
|
||||
]
|
||||
W2X_DENOISE: List[Range] = [
|
||||
(OP[0]+1859, OP[0]+1896) # flashy OP scene
|
||||
]
|
||||
|
||||
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] = []
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import vapoursynth as vs
|
||||
|
||||
from toolz.functoolz import compose
|
||||
from typing import List
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
import sys
|
||||
sys.path.append("..")
|
||||
@ -12,17 +12,21 @@ from xv_common import (FadeRange, Range, denoise, descale, w2x, deband,
|
||||
core = vs.core
|
||||
core.max_cache_size = 1024
|
||||
|
||||
OP = (1726, 4124)
|
||||
ED = (31890, 34047)
|
||||
OP: Optional[Tuple[int, int]] = (1726, 4124)
|
||||
ED: Optional[Tuple[int, int]] = (31890, 34047)
|
||||
LOGO: Range = (18333, 18498)
|
||||
NO_SCALE: List[Range] = [(34495, 34590)]
|
||||
FORCE_SCALE: List[Range] = [(25196, 26501)]
|
||||
FADE_RANGES: List[FadeRange] = [
|
||||
FadeRange(ref=4179, range_=(4126, 4207)), # title
|
||||
]
|
||||
W2X_DENOISE: List[Range] = [
|
||||
(OP[0]+1859, OP[0]+1896) # flashy OP scene
|
||||
]
|
||||
|
||||
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] = [(25301, 25403)] # chris henshin
|
||||
DEBAND_HARDER: List[Range] = [(25347, 25361)] # chris henshin
|
||||
|
||||
|
@ -6,6 +6,7 @@ from lvsfunc.aa import upscaled_sraa
|
||||
from lvsfunc.kernels import Bicubic
|
||||
from lvsfunc.misc import replace_ranges
|
||||
from lvsfunc.scale import descale as ldescale
|
||||
from lvsfunc.scale import descale_detail_mask
|
||||
from toolz.functoolz import curry
|
||||
from typing import List, NamedTuple, Tuple
|
||||
|
||||
@ -43,10 +44,8 @@ def _fade_ranges_with_refs(clip: vs.VideoNode, reupscaled: vs.VideoNode,
|
||||
ranges: List[FadeRange]) -> vs.VideoNode:
|
||||
mask = core.std.BlankClip(clip)
|
||||
for r in ranges:
|
||||
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.Inflate, 2)
|
||||
rmask = descale_detail_mask(clip[r.ref], reupscaled[r.ref],
|
||||
threshold=1500)
|
||||
rmask = core.std.Expr([mask, rmask], "x y +")
|
||||
mask = replace_ranges(mask, rmask, [r.range_])
|
||||
|
||||
@ -55,30 +54,39 @@ def _fade_ranges_with_refs(clip: vs.VideoNode, reupscaled: vs.VideoNode,
|
||||
|
||||
@curry
|
||||
def _inverse_mask(clip: vs.VideoNode, reupscaled: vs.VideoNode,
|
||||
ranges: List[FadeRange] = []) -> vs.VideoNode:
|
||||
franges: List[FadeRange] = [], dranges: List[Range] = []
|
||||
) -> vs.VideoNode:
|
||||
reupscaled = reupscaled.resize.Bicubic(format=clip.format.id)
|
||||
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, franges)
|
||||
mask = core.std.Expr([fade_mask, line_mask.std.Invert()], "x y +")
|
||||
if dranges:
|
||||
detail_mask = descale_detail_mask(clip, reupscaled, threshold=1500)
|
||||
mask_with_detail = core.std.Expr([mask, detail_mask], "x y +")
|
||||
mask = replace_ranges(mask, mask_with_detail, dranges)
|
||||
return mask.resize.Bicubic(format=clip.format.id)
|
||||
|
||||
|
||||
@curry
|
||||
def descale(clip: vs.VideoNode, force_scale: List[Range],
|
||||
no_scale: List[Range], fade_ranges: List[FadeRange],
|
||||
show_mask: bool = False) -> vs.VideoNode:
|
||||
def descale(clip: vs.VideoNode, force_scale: List[Range] = [],
|
||||
no_scale: List[Range] = [], fade_ranges: List[FadeRange] = [],
|
||||
detail_ranges: List[Range] = [], show_mask: bool = False
|
||||
) -> vs.VideoNode:
|
||||
kernel = Bicubic(b=1/3, c=1/3)
|
||||
heights = [871, 872, 873]
|
||||
y = vsutil.get_y(clip)
|
||||
ys = ldescale(y, upscaler=_sraa_reupscale, height=heights,
|
||||
kernel=kernel, threshold=0.003,
|
||||
mask=_inverse_mask(ranges=fade_ranges), show_mask=show_mask)
|
||||
mask=_inverse_mask(franges=fade_ranges,
|
||||
dranges=detail_ranges),
|
||||
show_mask=show_mask)
|
||||
if show_mask:
|
||||
return ys
|
||||
|
||||
yf = ldescale(y, upscaler=_sraa_reupscale, height=heights,
|
||||
kernel=kernel, threshold=0,
|
||||
mask=_inverse_mask(ranges=fade_ranges))
|
||||
mask=_inverse_mask(franges=fade_ranges,
|
||||
dranges=detail_ranges))
|
||||
yd = replace_ranges(ys, yf, force_scale)
|
||||
scaled = core.std.ShufflePlanes([yd, clip], planes=[0, 1, 2],
|
||||
colorfamily=vs.YUV)
|
||||
@ -87,7 +95,7 @@ def descale(clip: vs.VideoNode, force_scale: List[Range],
|
||||
|
||||
|
||||
@curry
|
||||
def descale720(clip: vs.VideoNode, src: vs.VideoNode, ranges: List[Range]
|
||||
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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user