diff --git a/.gitignore b/.gitignore index 8d6384f..774cd82 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ *.aac cudnn_data/ *.webm -ffmpeg2pass*.log \ No newline at end of file +ffmpeg2pass*.log +!07/mask_2.png \ No newline at end of file diff --git a/07/ac.py b/07/ac.py new file mode 100644 index 0000000..ab1418c --- /dev/null +++ b/07/ac.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + +import vapoursynth as vs +import audiocutter +from subprocess import call + +core = vs.core + +ts = "cap/Senki Zesshou Symphogear - 07 (MX).d2v" +src = core.d2v.Source(ts) +src = src.vivtc.VFM(1).vivtc.VDecimate() + +ac = audiocutter.AudioCutter() + +audio = ac.split(src, [(812, 5775), (7455, 19633), (21072, 37973)]) + +ac.ready_qp_and_chapters(audio) + +audio.set_output(0) + +if __name__ == "__main__": + ac.cut_audio("mx_audio.m4a", audio_source="cap/mx_adjusted.m4a") diff --git a/07/mask_2.png b/07/mask_2.png new file mode 100644 index 0000000..1d341aa Binary files /dev/null and b/07/mask_2.png differ diff --git a/07/x264.vpy b/07/x264.vpy new file mode 100644 index 0000000..fc588e5 --- /dev/null +++ b/07/x264.vpy @@ -0,0 +1,74 @@ +import vapoursynth as vs +import kagefunc as kgf +import fvsfunc as fvf +import vsTAAmbk as vstaa +import adjust +from nnedi3_rpow2 import nnedi3_rpow2 + +core = vs.core +core.max_cache_size = 32768 + +opstart = 2568 +op_112_mappings = f''' +[{opstart+1663} {opstart+1691}] +[{opstart+1935} {opstart+1962}] +''' +op_135_mappings = f''' +[{opstart+1614} {opstart+1657}] +''' + +kiri_hsff = 8110 +kiri_henshin120_mappings = f''' +[{kiri_hsff} {kiri_hsff+15}] +[{kiri_hsff+42} {kiri_hsff+45}] +[{kiri_hsff+159} {kiri_hsff+161}] +[{kiri_hsff+205} {kiri_hsff+215}] +[{kiri_hsff+289} {kiri_hsff+291}] +[{kiri_hsff+301} {kiri_hsff+318}] +[{kiri_hsff+389} {kiri_hsff+393}] +[{kiri_hsff+456} {kiri_hsff+461}] +[{kiri_hsff+489} {kiri_hsff+498}] +{kiri_hsff+535} +[{kiri_hsff+542} {kiri_hsff+563}] +[{kiri_hsff+639} {kiri_hsff+731}] +''' + + +src = core.ffms2.Source("[HorribleSubs] Symphogear XV - 07 [1080p].mkv") +src = core.fmtc.bitdepth(src, bits=16) +logo_mask = core.imwri.Read('mask_2.png') +logo_mask = core.resize.Bilinear(logo_mask, format=src.format.id, matrix_s="709") +deblock = core.deblock.Deblock(src, quant=16) +Y, U, V = kgf.split(deblock) +Y = kgf.inverse_scale(Y, height=872, kernel="bicubic", b=1/3, c=1/3, mask_detail=True, + descale_mask_zones=f"[{opstart} {opstart+3000}]") +Y = nnedi3_rpow2(Y).resize.Spline36(1920, 1080, format=vs.GRAY16) +scaled = core.std.ShufflePlanes([Y, U, V], planes=[0], colorfamily=vs.YUV) +scaled = fvf.rfs(scaled, src, mappings="[31877 34045]") # ED is just text on black so 1080p overlay + +logo_merge = core.std.MaskedMerge(scaled, src, logo_mask) +scaled = fvf.rfs(scaled, logo_merge, mappings="[17059 17236]") + +dim1 = adjust.Tweak(scaled, sat=1.35, cont=1.35) +dim2 = adjust.Tweak(scaled, sat=1.12, cont=1.12) +dim3 = adjust.Tweak(scaled, sat=1.20, cont=1.20) +dim4 = adjust.Tweak(scaled, sat=1.50, cont=1.50) + +undim = fvf.rfs(scaled, dim1, mappings=op_135_mappings) +undim = fvf.rfs(undim, dim2, mappings=op_112_mappings+" [30445 30461] [30462 30484]") +undim = fvf.rfs(undim, dim3, mappings=kiri_henshin120_mappings) +undim = fvf.rfs(undim, dim4, mappings="[7319 7338]") + +denoisechroma = core.knlm.KNLMeansCL(undim, d=1, a=2, h=0.4, channels="UV", device_type='gpu', device_id=0) +denoiseluma = core.knlm.KNLMeansCL(undim, d=3, a=2, h=0.35, channels="Y", device_type='gpu', device_id=0) +denoise = core.std.ShufflePlanes([denoiseluma, denoisechroma], planes=[0, 1, 2], colorfamily=vs.YUV) +taa = vstaa.TAAmbk(denoise,aatype='Nnedi3') +db = taa.f3kdb.Deband(range=16, y=40, cb=32, cr=32, grainy=24, grainc=0, output_depth=16) +mask = kgf.retinex_edgemask(denoise) +final = core.std.MaskedMerge(db, taa, mask) + +final = kgf.adaptive_grain(final) +final = core.fmtc.bitdepth(final, bits=10, dmode=3) +final.set_output() + +#vspipe -y "x264.vpy" - | ffmpeg -i pipe: -c:v libx264 -tune animation -crf 16 -preset slower -aq-mode 3 -pix_fmt yuv420p10le -x264-params no-dct-decimate:no-fast-pskip -y "x264.mp4" \ No newline at end of file diff --git a/07/x265_w2x.vpy b/07/x265_w2x.vpy new file mode 100644 index 0000000..326a0b5 --- /dev/null +++ b/07/x265_w2x.vpy @@ -0,0 +1,58 @@ +import vapoursynth as vs +import kagefunc as kgf +import fvsfunc as fvf +import vsTAAmbk as vstaa +import adjust +from nnedi3_rpow2 import nnedi3_rpow2 + +core = vs.core +core.max_cache_size = 49152 + +#source +src = core.ffms2.Source("[HorribleSubs] Symphogear XV - 07 [1080p].mkv") +src = src.std.Trim(first=30604, last=30704) +src = src.std.AssumeFPS(fpsnum=24000, fpsden=1001) + +#deblock +src = core.fmtc.bitdepth(src, bits=16) +deblock = core.deblock.Deblock(src, quant=16) + +#rescale +Y, U, V = kgf.split(deblock) +Y = kgf.inverse_scale(Y, height=872, kernel="bicubic", b=1/3, c=1/3, mask_detail=True) + +#There is basically no difference between running taa and deband before or after w2x. +#taa +Y = core.fmtc.bitdepth(Y, bits=16) +taa = vstaa.TAAmbk(Y,aatype='Nnedi3') + +#deband +db = taa.f3kdb.Deband(range=16, y=32, cb=32, cr=32, grainy=24, grainc=0, random_algo_ref=2, random_algo_grain=2, output_depth=16) +mask = kgf.retinex_edgemask(taa) +maskmerge = core.std.MaskedMerge(db, taa, mask) + +#w2x +#model 3 - block size: 218/270 batch: 50, benchmark: 0.3fps +#model 5 - block size: 38 (rec), batch: 1440, benchmark: 0.0195fps +#model 6 - block size: 8, batch: 5. takes minutes to execute per frame. +yupscalewx = core.fmtc.bitdepth(maskmerge, bits=32) +yupscalewx = core.caffe.Waifu2x(yupscalewx, noise=0, scale=4, block_w=218, block_h=218, model=3, cudnn=True, processor=0, tta=False, batch=50) +yupscalewx = core.fmtc.bitdepth(yupscalewx, bits=16, dmode=3) +yupscalewx = core.resize.Spline36(yupscalewx,width=3840,height=2160) + +uupscalewx = core.fmtc.bitdepth(U, bits=32) +uupscalewx = core.caffe.Waifu2x(uupscalewx, noise=0, scale=4, block_w=270, block_h=270, model=3, cudnn=True, processor=0, tta=False, batch=50) +uupscalewx = core.fmtc.bitdepth(uupscalewx, bits=16, dmode=3) + +vupscalewx = core.fmtc.bitdepth(V, bits=32) +vupscalewx = core.caffe.Waifu2x(vupscalewx, noise=0, scale=4, block_w=270, block_h=270, model=3, cudnn=True, processor=0, tta=False, batch=50) +vupscalewx = core.fmtc.bitdepth(vupscalewx, bits=16, dmode=3) + +scaled = core.std.ShufflePlanes([yupscalewx, uupscalewx, vupscalewx], planes=[0], colorfamily=vs.YUV) + +final = kgf.adaptive_grain(scaled) +final = core.fmtc.bitdepth(final, bits=12) + +final.set_output() +#vspipe -y "x265_w2x.vpy" - | ffmpeg -i pipe: -c:v libx265 -tune animation -crf 17 -preset slower -x265-params aq-mode=3 -pix_fmt yuv444p12le -y "x265_w2x.mp4" +#vspipe -y "x265_w2x.vpy" --y4m - | x265 --demuxer y4m -o Sympho5_07p.264 - --preset slower --tune animation --crf 17 --aq-mode 3 --output-depth 12 --output-csp i444 \ No newline at end of file