From 62c8355fb10d37d8d5688f719a9933b4dd9708a6 Mon Sep 17 00:00:00 2001 From: louis <louis@poweris.moe> Date: Sat, 5 Jun 2021 18:57:50 -0400 Subject: [PATCH] yt_common: better audio handling --- .../S2 [BD]/01/01.vpy | 9 +-- .../S2 [BD]/02/02.vpy | 9 +-- .../S2 [BD]/03/03.vpy | 9 +-- .../S2 [BD]/04/04.vpy | 9 +-- .../S2 [BD]/05/05.vpy | 9 +-- .../S2 [BD]/06/06.vpy | 9 +-- .../S2 [BD]/07/07.vpy | 9 +-- .../S2 [BD]/08/08.vpy | 9 +-- .../S2 [BD]/09/09.vpy | 9 +-- .../S2 [BD]/10/10.vpy | 9 +-- .../S2 [BD]/11/11.vpy | 9 +-- .../S2 [BD]/12/12.vpy | 10 +-- .../S2 [BD]/nced/nced.vpy | 9 +-- .../S2 [BD]/ncop/ncop.vpy | 9 +-- .../S2 [BD]/recap/recap.vpy | 8 +-- .../tensura_common/__init__.py | 3 +- .../tensura_common/config.py | 23 +++++-- yt_common/yt_common/__init__.py | 2 +- yt_common/yt_common/audio.py | 65 +++++++++++++++++++ yt_common/yt_common/automation.py | 29 ++++++--- yt_common/yt_common/config.py | 46 +------------ yt_common/yt_common/source.py | 4 ++ yt_common/yt_common/util.py | 5 ++ 23 files changed, 190 insertions(+), 122 deletions(-) create mode 100644 yt_common/yt_common/audio.py create mode 100644 yt_common/yt_common/util.py diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/01/01.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/01/01.vpy index f73df56..3865466 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/01/01.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/01/01.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner, Zone from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210326][Tensei Shitara Slime Datta Ken 2nd Season][Vol.1]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00006.m2ts"), (24, -50)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/02/02.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/02/02.vpy index 4d5bfa0..dcd2ecf 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/02/02.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/02/02.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.misc import replace_ranges from lvsfunc.types import Range @@ -14,9 +15,9 @@ from typing import List import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210326][Tensei Shitara Slime Datta Ken 2nd Season][Vol.1]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00007.m2ts"), (None, -49)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/03/03.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/03/03.vpy index d8b8f15..0f4e565 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/03/03.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/03/03.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner, Zone from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.misc import replace_ranges from lvsfunc.types import Range @@ -14,9 +15,9 @@ from typing import List import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210326][Tensei Shitara Slime Datta Ken 2nd Season][Vol.1]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00008.m2ts"), (None, -50)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/04/04.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/04/04.vpy index cba33a7..43fcbb9 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/04/04.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/04/04.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210326][Tensei Shitara Slime Datta Ken 2nd Season][Vol.1]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00009.m2ts"), (None, -51)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/05/05.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/05/05.vpy index b2442ed..8d4ee79 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/05/05.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/05/05.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210326][Tensei Shitara Slime Datta Ken 2nd Season][Vol.1]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00010.m2ts"), (None, -24)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/06/06.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/06/06.vpy index ebbbbb3..dc4941f 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/06/06.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/06/06.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner, Zone from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210326][Tensei Shitara Slime Datta Ken 2nd Season][Vol.1]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00011.m2ts"), (24, -25)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/07/07.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/07/07.vpy index e6108db..9400b26 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/07/07.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/07/07.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner, Zone from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210526][Tensei Shitara Slime Datta Ken 2nd Season][Vol.2]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00006.m2ts"), (24, -50)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/08/08.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/08/08.vpy index ff0a310..f14f49c 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/08/08.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/08/08.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner, Zone from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210526][Tensei Shitara Slime Datta Ken 2nd Season][Vol.2]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00007.m2ts"), (None, -51)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/09/09.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/09/09.vpy index 70b666a..acdcc10 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/09/09.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/09/09.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210526][Tensei Shitara Slime Datta Ken 2nd Season][Vol.2]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00008.m2ts"), (None, -50)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/10/10.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/10/10.vpy index 37583d1..84e9c4f 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/10/10.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/10/10.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner from yt_common.chapters import Chapter, Edition -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210526][Tensei Shitara Slime Datta Ken 2nd Season][Vol.2]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource([ +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource([ FileTrim(os.path.join(BDMV, "00009.m2ts"), (None, None)), FileTrim(os.path.join(BDMV, "00010.m2ts"), (None, -49)), FileTrim(os.path.join(BDMV, "00016.m2ts"), (13348, 15699)), diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/11/11.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/11/11.vpy index 0369cb2..8726b1c 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/11/11.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/11/11.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner, Zone from yt_common.chapters import Chapter, Edition -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -15,9 +16,9 @@ from typing import List, Tuple import os EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210526][Tensei Shitara Slime Datta Ken 2nd Season][Vol.2]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource([ +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource([ FileTrim(os.path.join(BDMV, "00011.m2ts"), (None, -49)), FileTrim(os.path.join(BDMV, "00017.m2ts"), (None, 3158)), FileTrim(os.path.join(BDMV, "00017.m2ts"), (33342, 33927)), diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/12/12.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/12/12.vpy index 90798b3..56a6105 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/12/12.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/12/12.vpy @@ -1,10 +1,11 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner, Zone from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -14,10 +15,11 @@ from typing import List, Tuple import os + EPNUM: int = int(os.path.basename(os.path.splitext(__file__)[0])) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(EPNUM) +CONFIG: TenSuraS2Config = TenSuraS2Config(EPNUM) BDMV: str = "../bdmv/[BDMV][210526][Tensei Shitara Slime Datta Ken 2nd Season][Vol.2]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00012.m2ts"), (None, -26)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/nced/nced.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/nced/nced.vpy index 974129d..0d7da1c 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/nced/nced.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/nced/nced.vpy @@ -1,9 +1,10 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -14,9 +15,9 @@ from typing import List, Tuple import os DESC: str = os.path.basename(os.path.splitext(__file__)[0]) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(DESC) +CONFIG: TenSuraS2Config = TenSuraS2Config(DESC) BDMV: str = "../bdmv/[BDMV][210526][Tensei Shitara Slime Datta Ken 2nd Season][Vol.2]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00015.m2ts"), (24, -24)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/ncop/ncop.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/ncop/ncop.vpy index 61cc30c..b94e4cb 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/ncop/ncop.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/ncop/ncop.vpy @@ -1,9 +1,10 @@ import vapoursynth as vs -from tensura_common import TenSuraS2BDConfig, antialias, deband, denoise, descale, edgefix, finalize, regrain +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, + denoise, descale, edgefix, finalize, regrain) from yt_common.automation import SelfRunner -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -14,9 +15,9 @@ from typing import List, Tuple import os DESC: str = os.path.basename(os.path.splitext(__file__)[0]) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(DESC) +CONFIG: TenSuraS2Config = TenSuraS2Config(DESC) BDMV: str = "../bdmv/[BDMV][210526][Tensei Shitara Slime Datta Ken 2nd Season][Vol.2]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00014.m2ts"), (24, -24)) ) diff --git a/Tensei Shitara Slime Datta Ken/S2 [BD]/recap/recap.vpy b/Tensei Shitara Slime Datta Ken/S2 [BD]/recap/recap.vpy index 06a9d33..6ec5847 100644 --- a/Tensei Shitara Slime Datta Ken/S2 [BD]/recap/recap.vpy +++ b/Tensei Shitara Slime Datta Ken/S2 [BD]/recap/recap.vpy @@ -1,11 +1,11 @@ import vapoursynth as vs -from tensura_common import (TenSuraS2BDConfig, antialias, deband, denoise, descale, +from tensura_common import (TenSuraS2Config, TenSuraS2BDSource, antialias, deband, denoise, descale, edgefix, finalize, megurumono_scenefilter, regrain) from yt_common.automation import SelfRunner, Zone from yt_common.chapters import Chapter -from yt_common.source import FileTrim, SimpleSource +from yt_common.source import FileTrim from lvsfunc.mask import BoundingBox from lvsfunc.misc import replace_ranges @@ -16,9 +16,9 @@ from typing import List, Tuple import os DESC: str = os.path.basename(os.path.splitext(__file__)[0]) -CONFIG: TenSuraS2BDConfig = TenSuraS2BDConfig(DESC) +CONFIG: TenSuraS2Config = TenSuraS2Config(DESC) BDMV: str = "../bdmv/[BDMV][210326][Tensei Shitara Slime Datta Ken 2nd Season][Vol.1]/BDMV/STREAM" -SOURCE: SimpleSource = SimpleSource( +SOURCE: TenSuraS2BDSource = TenSuraS2BDSource( FileTrim(os.path.join(BDMV, "00013.m2ts"), (24, -24)) ) diff --git a/Tensei Shitara Slime Datta Ken/tensura_common/__init__.py b/Tensei Shitara Slime Datta Ken/tensura_common/__init__.py index ea6d99c..169ee88 100644 --- a/Tensei Shitara Slime Datta Ken/tensura_common/__init__.py +++ b/Tensei Shitara Slime Datta Ken/tensura_common/__init__.py @@ -1,3 +1,4 @@ -from .config import TenSuraS2Config, TenSuraS2BDConfig, TenSuraS1BDConfig # noqa: F401 +from .config import (TenSuraS2Config, TenSuraS2Source, TenSuraS2BDSource, # noqa: F401 + TenSuraS1BDConfig, TenSuraS1BDSource) from .filter import (antialias, deband, denoise, descale, edgefix, finalize, # noqa: F401 megurumono_scenefilter, regrain) diff --git a/Tensei Shitara Slime Datta Ken/tensura_common/config.py b/Tensei Shitara Slime Datta Ken/tensura_common/config.py index afad1f5..9f98849 100644 --- a/Tensei Shitara Slime Datta Ken/tensura_common/config.py +++ b/Tensei Shitara Slime Datta Ken/tensura_common/config.py @@ -1,6 +1,8 @@ -from yt_common.config import Config, FlacMixin, OpusMixin +from yt_common.audio import AudioStream, CodecPassthrough, CodecOpus, CodecFlac +from yt_common.config import Config +from yt_common.source import SimpleSource -from typing import Union +from typing import List, Union import os @@ -8,7 +10,7 @@ RESOLUTION: int = 1080 DATAPATH: str = os.path.dirname(__file__) -class TenSuraS1BDConfig(OpusMixin, Config): +class TenSuraS1BDConfig(Config): def __init__(self, desc: Union[str, int]) -> None: super().__init__( desc, @@ -19,6 +21,11 @@ class TenSuraS1BDConfig(OpusMixin, Config): ) +class TenSuraS1BDSource(SimpleSource): + def audio_streams(self) -> List[AudioStream]: + return [AudioStream(0, CodecOpus())] + + class TenSuraS2Config(Config): def __init__(self, desc: Union[str, int]) -> None: super().__init__( @@ -30,5 +37,11 @@ class TenSuraS2Config(Config): ) -class TenSuraS2BDConfig(FlacMixin, TenSuraS2Config): - pass +class TenSuraS2Source(SimpleSource): + def audio_streams(self) -> List[AudioStream]: + return [AudioStream(0, CodecPassthrough())] + + +class TenSuraS2BDSource(SimpleSource): + def audio_streams(self) -> List[AudioStream]: + return [AudioStream(0, CodecFlac())] diff --git a/yt_common/yt_common/__init__.py b/yt_common/yt_common/__init__.py index 57a5874..5082dbb 100644 --- a/yt_common/yt_common/__init__.py +++ b/yt_common/yt_common/__init__.py @@ -1 +1 @@ -from . import antialiasing, automation, chapters, config, data, deband, logging, scale, source # noqa: F401 +from . import antialiasing, audio, automation, chapters, config, data, deband, logging, scale, source # noqa: F401 diff --git a/yt_common/yt_common/audio.py b/yt_common/yt_common/audio.py new file mode 100644 index 0000000..ee25b1b --- /dev/null +++ b/yt_common/yt_common/audio.py @@ -0,0 +1,65 @@ +from abc import ABC, abstractmethod +from subprocess import call +from typing import List, NamedTuple + +from .util import get_temp_filename + + +class AudioEncoder(ABC): + @abstractmethod + def encode_audio(self, afile: str) -> str: + pass + + +class FFAudio(AudioEncoder): + def encode_audio(self, afile: str) -> str: + out = get_temp_filename(prefix="_ffaudio_encode_", suffix=".mka") + ffmpeg_args = [ + "ffmpeg", + "-hide_banner", "-loglevel", "panic", + "-i", afile, + "-y", + "-map", "0:a", + ] + self.codec_args() + [out] + print("+ " + " ".join(ffmpeg_args)) + call(ffmpeg_args) + return out + + @abstractmethod + def codec_args(self) -> List[str]: + pass + + +class CodecPassthrough(AudioEncoder): + def encode_audio(self, afile: str) -> str: + return afile + + +class CodecOpus(FFAudio): + bitrate: int + + def __init__(self, bitrate: int = 192) -> None: + self.bitrate = bitrate + + def codec_args(self) -> List[str]: + return ["-c:a", "libopus", "-b:a", f"{self.bitrate}k", "-sample_fmt", "s16"] + + +class CodecFdkAac(FFAudio): + bitrate: int + + def __init__(self, bitrate: int = 256) -> None: + self.bitrate = bitrate + + def codec_args(self) -> List[str]: + return ["-c:a", "libfdk_aac", "-b:a", f"{self.bitrate}k", "-sample_fmt", "s16"] + + +class CodecFlac(FFAudio): + def codec_args(self) -> List[str]: + return ["-c:a", "flac"] + + +class AudioStream(NamedTuple): + stream_index: int # zero-indexed, ignores video streams + codec: AudioEncoder diff --git a/yt_common/yt_common/automation.py b/yt_common/yt_common/automation.py index 6af56e0..3e226da 100644 --- a/yt_common/yt_common/automation.py +++ b/yt_common/yt_common/automation.py @@ -7,7 +7,6 @@ import random import shutil import string import subprocess -import tempfile from lvsfunc.render import clip_async_render, find_scene_changes @@ -16,6 +15,7 @@ from typing import Any, BinaryIO, Callable, List, NamedTuple, Optional, Sequence from .chapters import Chapter, Edition, make_chapters, make_qpfile from .config import Config from .logging import log +from .util import get_temp_filename from .source import FileSource core = vs.core @@ -23,10 +23,6 @@ core = vs.core AUDIO_PFX: str = "_audiogetter_temp_" -def get_temp_filename(prefix: str = "", suffix: str = "") -> str: - return f"{prefix}{next(tempfile._get_candidate_names())}{suffix}" # type: ignore - - def bin_to_plat(binary: str) -> str: if os.name == "nt": return binary if binary.lower().endswith(".exe") else f"{binary}.exe" @@ -153,27 +149,40 @@ class AudioGetter(): self.cleanup = set() def trim_audio(self, ftrim: Optional[acsuite.types.Trim] = None) -> str: + streams = sorted(self.src.audio_streams(), key=lambda s: s.stream_index) + if len(streams) == 0: + return "" trims = self.src.audio_src() + ffmpeg = acsuite.ffmpeg.FFmpegAudio() tlist: List[str] = [] for t in trims: audio_cut = acsuite.eztrim(t.path, t.trim or (0, None), ref_clip=self.src.audio_ref(), - outfile=get_temp_filename(prefix=AUDIO_PFX, suffix=".mka"), - streams=0)[0] + outfile=get_temp_filename(prefix=AUDIO_PFX+"cut_", suffix=".mka"), + streams=[s.stream_index for s in streams])[0] self.cleanup.add(audio_cut) tlist.append(audio_cut) if len(tlist) > 1: - ffmpeg = acsuite.ffmpeg.FFmpegAudio() audio_cut = ffmpeg.concat(*tlist) self.cleanup.add(audio_cut) if ftrim: audio_cut = acsuite.eztrim(audio_cut, ftrim, ref_clip=self.src.source(), - outfile=get_temp_filename(prefix=AUDIO_PFX, suffix=".mka"))[0] + outfile=get_temp_filename(prefix=AUDIO_PFX+"fcut_", suffix=".mka"))[0] self.cleanup.add(audio_cut) - audio_cut = self.config.encode_audio(audio_cut) + if len(streams) > 1: + splits = [get_temp_filename(prefix=AUDIO_PFX+"split_", suffix=".mka") for _ in range(0, len(streams))] + ffmpeg.split(audio_cut, splits) + self.cleanup |= set(splits) + encode = [streams[i].codec.encode_audio(f) for i, f in enumerate(splits)] + self.cleanup |= set(encode) + audio_cut = get_temp_filename(prefix=AUDIO_PFX+"join_", suffix=".mka") + ffmpeg.join(audio_cut, *encode) + else: + audio_cut = streams[0].codec.encode_audio(audio_cut) + self.cleanup.add(audio_cut) return audio_cut diff --git a/yt_common/yt_common/config.py b/yt_common/yt_common/config.py index d741eec..ee4b169 100644 --- a/yt_common/yt_common/config.py +++ b/yt_common/yt_common/config.py @@ -1,8 +1,6 @@ import os -import subprocess -from abc import ABC, abstractmethod -from typing import List, Union +from typing import Union class Config(): @@ -23,45 +21,3 @@ class Config(): fname = filename.format(epnum=self.desc, title=self.title, title_long=self.title_long, resolution=self.resolution) return os.path.join(f"../{self.desc}/", fname) - - def encode_audio(self, afile: str) -> str: - return afile # default: passthrough - - -class AudioEncoder(ABC): - @abstractmethod - def encode_audio(self, afile: str) -> str: - pass - - -class FFAudio(AudioEncoder): - def encode_audio(self, afile: str) -> str: - ffmpeg_args = [ - "ffmpeg", - "-hide_banner", "-loglevel", "panic", - "-i", afile, - "-y", - "-map", "0:a", - ] + self.codec_args() + ["_ffaudio_encode.mka"] - print("+ " + " ".join(ffmpeg_args)) - subprocess.call(ffmpeg_args) - return "_ffaudio_encode.mka" - - @abstractmethod - def codec_args(self) -> List[str]: - pass - - -class OpusMixin(FFAudio): - def codec_args(self) -> List[str]: - return ["-c:a", "libopus", "-b:a", "192k", "-sample_fmt", "s16"] - - -class FdkAacMixin(FFAudio): - def codec_args(self) -> List[str]: - return ["-c:a", "libfdk_aac", "-b:a", "256k", "-sample_fmt", "s16"] - - -class FlacMixin(FFAudio): - def codec_args(self) -> List[str]: - return ["-c:a", "flac"] diff --git a/yt_common/yt_common/source.py b/yt_common/yt_common/source.py index aa2a419..3e506d5 100644 --- a/yt_common/yt_common/source.py +++ b/yt_common/yt_common/source.py @@ -12,6 +12,7 @@ import os from abc import ABC, abstractmethod from typing import Any, List, NamedTuple, Optional, Tuple, Union +from .audio import AudioStream, CodecPassthrough from .config import Config from .logging import log @@ -74,6 +75,9 @@ class FileSource(ABC): def audio_src(self) -> List[FileTrim]: pass + def audio_streams(self) -> List[AudioStream]: + return [AudioStream(0, CodecPassthrough())] # default: passthrough first stream + @abstractmethod def source(self) -> vs.VideoNode: pass diff --git a/yt_common/yt_common/util.py b/yt_common/yt_common/util.py new file mode 100644 index 0000000..d808066 --- /dev/null +++ b/yt_common/yt_common/util.py @@ -0,0 +1,5 @@ +import tempfile + + +def get_temp_filename(prefix: str = "", suffix: str = "") -> str: + return f"{prefix}{next(tempfile._get_candidate_names())}{suffix}" # type: ignore