|
|
|
@@ -1,22 +1,65 @@
|
|
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
# -*- coding: utf-8; tab-width: 4; -*-
|
|
|
|
|
# vim: set fileencoding=utf-8 tabstop=4 shiftwidth=4 expandtab:
|
|
|
|
|
# Copyright (c) 2025-2026 Renato Xavier da Silveira Rosa
|
|
|
|
|
# See [LICENSE](./LICENSE) or [BSD-3-Clause-Clear](https://spdx.org/licenses/BSD-3-Clause-Clear.html)
|
|
|
|
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
import os
|
|
|
|
|
import sys
|
|
|
|
|
import logging
|
|
|
|
|
logger = logging.get_logger()
|
|
|
|
|
from datetime import datetime as dt
|
|
|
|
|
|
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
|
from .logger import logger
|
|
|
|
|
|
|
|
|
|
from spantrack import cli, run_config
|
|
|
|
|
|
|
|
|
|
load_dotenv()
|
|
|
|
|
os.environ["NLTK_DATA"] = 'C:\\Users\\renat\\AppData\\Roaming\\nltk_data'
|
|
|
|
|
os.environ["HF_TOKEN"] = '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'
|
|
|
|
|
from spantrack import cli
|
|
|
|
|
root = 'D:\\DATA\\EBOOKS\\_SEM_DRM\\'
|
|
|
|
|
timefmt = os.environ.get("TIMEFMT", r"%Y-%m-%dT%H:%M:%S.%f")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
|
root = Path('D:\\DATA\\EBOOKS\\_SEM_DRM\\')
|
|
|
|
|
globs = [
|
|
|
|
|
"Night School*.epub",
|
|
|
|
|
"The Midnight*.epub",
|
|
|
|
|
"Past Tense*.epub",
|
|
|
|
|
"Blue Moon*.epub",
|
|
|
|
|
"The Sentinel",
|
|
|
|
|
"Better Off Dead",
|
|
|
|
|
"No Plan B",
|
|
|
|
|
"The Sentinel*.epub",
|
|
|
|
|
"Better Off Dead*.epub",
|
|
|
|
|
"No Plan B*.epub",
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
cmd = []
|
|
|
|
|
if "--dry-run" in sys.argv:
|
|
|
|
|
cmd.extend("--dry-run")
|
|
|
|
|
cmd.extend(["--progress",
|
|
|
|
|
"--device", run_config.Device["CUDA"], # spantrack.run_config.Device, default=Device.AUTO,
|
|
|
|
|
#"--lexicon", # Path
|
|
|
|
|
#"--audio-format", # AudioFormat, default=AudioFormat.MP3, spantrack.run_config._AUDIO_MEDIA_TYPES
|
|
|
|
|
#"--lang", # Language, default=Language.EN_US,
|
|
|
|
|
"--voice","am_liam",
|
|
|
|
|
])
|
|
|
|
|
result_output = []
|
|
|
|
|
for glob in globs:
|
|
|
|
|
f = root.glob(glob)
|
|
|
|
|
if len(f) > 1:
|
|
|
|
|
file_list = [f for f in root.glob(glob)]
|
|
|
|
|
if len(file_list) > 1:
|
|
|
|
|
logger.error("Glob pattern found more than 1 file: %s", f)
|
|
|
|
|
continue
|
|
|
|
|
cli.main([f.resolve(), "--voice", "am_liam"])
|
|
|
|
|
file = str(file_list[0])
|
|
|
|
|
start = dt.now()
|
|
|
|
|
logger.info(f"[{start.strftime(timefmt)}] Narrating '{file}'")
|
|
|
|
|
cli.main([file] + cmd)
|
|
|
|
|
finish = dt.now()
|
|
|
|
|
logger.info(f"[{finish .strftime(timefmt)}] Success! '{file}'")
|
|
|
|
|
|
|
|
|
|
elapsed_time = finish-start
|
|
|
|
|
elapsed_hours= elapsed_time.total_seconds // 3600
|
|
|
|
|
elapsed_minutes = (elapsed_time.total_seconds % 3600) // 60
|
|
|
|
|
elapsed_seconds = elapsed_time.total_seconds % 60
|
|
|
|
|
f"Total elapsed time: {elapsed_hours}h {elapsed_minutes}min {elapsed_seconds}s"
|
|
|
|
|
result_output.append()
|