5
0

vivy: tv: 07

This commit is contained in:
louis f 2021-05-11 09:38:36 -04:00
parent 26725817cb
commit f506bb3e8c
Signed by: louis
GPG Key ID: 44D7E1DE4E23D6F2
4 changed files with 138 additions and 9 deletions

121
Vivy/07/07.vpy Normal file
View File

@ -0,0 +1,121 @@
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.denoise import bm3d
from yt_common.source import waka_replace
from lvsfunc.types import Range
from lvsfunc.dehardsub import HardsubLine, HardsubLineFade, HardsubSign, HardsubSignFade, HardsubMask, bounded_dehardsub
from lvsfunc.misc import replace_ranges
from vardefunc import dumb3kdb
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]] = [
[(31528, 32857)],
[],
]
SIGNS_RU: List[HardsubMask] = [
HardsubSignFade([
(2834, 2941),
(16031, 16035),
]),
HardsubSignFade([
(33949, 34045),
], refframe=1, expand=9),
HardsubSignFade([
(21060, 21113),
], refframe=0),
HardsubSignFade([
(21107, 21132),
], refframe=1),
HardsubSign([
(7079, 7111),
]),
HardsubLineFade([
(21508, 21572),
]),
HardsubLine([
(961, 1106),
(1111, 1252),
(1265, 1408),
(1414, 1502),
(1509, 1578),
(1583, 1657),
(1663, 1815),
(1862, 2006),
(2011, 2079),
(2084, 2171),
(2179, 2309),
(2313, 2382),
(2387, 2486),
(2491, 2556),
(2570, 2686),
(12150, 12261),
(12279, 12403),
(12413, 12525),
(12530, 12633),
(12637, 12783),
(12789, 12891),
(12896, 13049),
(13054, 13116),
(13121, 13255),
(14930, 14990),
], ((283, 844), (1349, 204))),
]
NOSCALE: List[Range] = []
AA_NONE: List[Range] = [
(14413, 14422),
(15428, 15431),
]
AA_STRONGER: List[Range] = [
(11972, 12080),
]
DB_WEAK: List[Range] = [
(0, 579),
]
LETTERBOX: List[Range] = []
def filter_basic() -> vs.VideoNode:
wakas, ref = SOURCE.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()
rescale = fsrcnnx_rescale(src, NOSCALE)
den = denoise(rescale)
deb = deband(den)
den2 = bm3d(rescale, sigma=4, radius=1)
deb2 = dumb3kdb(den2, radius=16, threshold=24)
deb = replace_ranges(deb, deb2, DB_WEAK)
aa = antialias(deb, stronger=AA_STRONGER, noaa=AA_NONE)
grain = regrain(aa)
edgefix = letterbox_edgefix(grain, LETTERBOX)
final = finalize(edgefix)
final.set_output()
return final
if __name__ == "__main__":
SelfRunner(CONFIG, filter, filter_basic)
else:
filter()

View File

@ -1,8 +1,9 @@
import vapoursynth as vs import vapoursynth as vs
from yt_common import source from yt_common import source
from yt_common.logging import log
from yt_common.config import Config from yt_common.config import Config
from yt_common.logging import log
from yt_common.source import AMAZON_FILENAME_VBR
import os import os
@ -38,11 +39,11 @@ class VivySource(source.FunimationSource):
# ep1-3 have good funi video, let's just use that # ep1-3 have good funi video, let's just use that
if self.config.epnum < 4: if self.config.epnum < 4:
raise FileNotFoundError() raise FileNotFoundError()
if not os.path.isfile(self.config.format_filename(AMAZON_FILENAME)): if not os.path.isfile(self.config.format_filename(AMAZON_FILENAME_VBR)):
log.warn("Amazon not found, falling back to Funimation") log.warn("Amazon not found, falling back to Funimation")
raise FileNotFoundError() raise FileNotFoundError()
log.success("Found Amazon video") log.success("Found Amazon video")
return core.ffms2.Source(self.config.format_filename(AMAZON_FILENAME)) return core.ffms2.Source(self.config.format_filename(AMAZON_FILENAME_VBR))
def get_waka_filenames(self) -> List[str]: def get_waka_filenames(self) -> List[str]:
return [self.config.format_filename(f) for f in [ return [self.config.format_filename(f) for f in [

View File

@ -12,7 +12,7 @@ from typing import Any, BinaryIO, Callable, List, Optional, Sequence, Union, cas
from .config import Config from .config import Config
from .logging import log from .logging import log
from .source import AMAZON_FILENAME, ER_FILENAME, SUBSPLS_FILENAME, FUNI_INTRO, glob_filename from .source import AMAZON_FILENAME_CBR, AMAZON_FILENAME_VBR, ER_FILENAME, SUBSPLS_FILENAME, FUNI_INTRO, glob_filename
core = vs.core core = vs.core
@ -135,8 +135,14 @@ class AudioGetter():
return return
# look for amazon first # look for amazon first
if os.path.isfile(self.config.format_filename(AMAZON_FILENAME)): if os.path.isfile(self.config.format_filename(AMAZON_FILENAME_CBR)):
self.audio_file = self.config.format_filename(AMAZON_FILENAME) self.audio_file = self.config.format_filename(AMAZON_FILENAME_CBR)
self.video_src = core.ffms2.Source(self.audio_file)
log.success("Found Amazon audio")
return
if os.path.isfile(self.config.format_filename(AMAZON_FILENAME_VBR)):
self.audio_file = self.config.format_filename(AMAZON_FILENAME_VBR)
self.video_src = core.ffms2.Source(self.audio_file) self.video_src = core.ffms2.Source(self.audio_file)
log.success("Found Amazon audio") log.success("Found Amazon audio")
return return

View File

@ -19,7 +19,8 @@ core = vs.core
SUBSPLS_FILENAME: str = "[SubsPlease] {title_long} - {epnum:02d} ({resolution}p) [$GLOB].mkv" SUBSPLS_FILENAME: str = "[SubsPlease] {title_long} - {epnum:02d} ({resolution}p) [$GLOB].mkv"
ER_FILENAME: str = "[Erai-raws] {title_long} - {epnum:02d} [v0][{resolution}p]$GLOB.mkv" ER_FILENAME: str = "[Erai-raws] {title_long} - {epnum:02d} [v0][{resolution}p]$GLOB.mkv"
FUNI_INTRO: int = 289 FUNI_INTRO: int = 289
AMAZON_FILENAME: str = "{title_long} - {epnum:02d} (Amazon Prime CBR {resolution}p).mkv" AMAZON_FILENAME_CBR: str = "{title_long} - {epnum:02d} (Amazon Prime CBR {resolution}p).mkv"
AMAZON_FILENAME_VBR: str = "{title_long} - {epnum:02d} (Amazon Prime VBR {resolution}p).mkv"
def waka_replace(src: vs.VideoNode, wakas: List[vs.VideoNode], ranges: List[List[Range]] def waka_replace(src: vs.VideoNode, wakas: List[vs.VideoNode], ranges: List[List[Range]]
@ -75,11 +76,11 @@ class FunimationSource(DehardsubFileFinder):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
def get_amazon(self) -> vs.VideoNode: def get_amazon(self) -> vs.VideoNode:
if not os.path.isfile(self.config.format_filename(AMAZON_FILENAME)): if not os.path.isfile(self.config.format_filename(AMAZON_FILENAME_CBR)):
log.warn("Amazon not found, falling back to Funimation") log.warn("Amazon not found, falling back to Funimation")
raise FileNotFoundError() raise FileNotFoundError()
log.success("Found Amazon video") log.success("Found Amazon video")
return core.ffms2.Source(self.config.format_filename(AMAZON_FILENAME)) return core.ffms2.Source(self.config.format_filename(AMAZON_FILENAME_CBR))
def get_funi_filename(self) -> str: def get_funi_filename(self) -> str:
try: try: