feat: Arbeitsordner je Video, Quellenangabe und automatisches Video-Glossar

- Ohne -o/-d schreiben yt_untertitel.py, extract_text.py und
  abschrift_korrigieren.py -u in abschriften/<Name>/ (ein Ordner je
  Video, auch für alle Ausschnitte).
- Beim Download entsteht neben dem Rohtext <Rohtext>.quelle.json mit
  Titel, Kanal, Datum und URL, für den Quellenkopf des fertigen Textes.
- Ein Glossar, das wie sein Ordner heißt (abschriften/<Name>/<Name>.glossar.txt),
  nutzen abschrift_korrigieren.py, glossar_vorschlag.py und aenderungen.py
  automatisch, nach den mit -g angegebenen gemeinsamen Glossaren.
- .gitignore: abschriften/, fertig/, *.quelle.json.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-10-11 23:24:32 +02:00
commit 3aa04fff4b

View file

@ -14,7 +14,7 @@ from vtt2txt import (
)
from yt_untertitel import (
YT_DLP, choose_track, default_name, download, fetch_info, no_track_message,
original_language,
original_language, work_folder, write_source,
)
FLOW_WIDTH = 80 # Zeilenbreite für --fliesstext
@ -31,8 +31,8 @@ def parse_args():
)
parser.add_argument(
"-o", "--output", type=Path,
help="Ausgabedatei (Standard: <Kanal>_<Titel>_<Datum>.txt, "
"mit -z zusätzlich die Bereiche)",
help="Ausgabedatei (Standard: abschriften/<Name>/<Name>.txt mit "
"<Name> = <Kanal>_<Titel>_<Datum>, mit -z zusätzlich die Bereiche)",
)
parser.add_argument(
"-f", "--fliesstext", action="store_true",
@ -87,7 +87,8 @@ def main():
args = parse_args()
info, text = fetch_text(args.url, args.lang, args.bereiche, args.exakt)
suffix = time_suffix(args.bereiche)
output = args.output or Path(f"{default_name(info)}{suffix}.txt")
name = default_name(info)
output = args.output or work_folder(name) / f"{name}{suffix}.txt"
segments = split_segments(text)
if args.fliesstext:
@ -104,6 +105,7 @@ def main():
output.parent.mkdir(parents=True, exist_ok=True)
output.write_text(text + "\n", encoding="utf-8")
write_source(info, output.with_suffix(".quelle.json"))
print(
f"Gespeichert: {output} "
f"({len(text.splitlines())} Zeilen, "