Commit graph

54 commits

Author SHA1 Message Date
d66f185fdd fix: abschliessen.py zeigt kleine Dateien in Byte statt „0 KB“
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:30:29 +02:00
775560a64c test: echte Reden liegen lokal in testdaten/<rede>/ mit ihrem Glossar
testdaten/ enthält je Rede einen Ordner mit .vtt, .txt und dem Glossar
der Rede, keine Ausgaben mehr; gemeinsame Glossare bleiben in glossare/.
Die lokalen Rede-Tests lesen von dort.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:27:11 +02:00
ebaec63963 feat: abschliessen.py – fertige Abschrift nach fertig/, Arbeitsordner löschen
Kopiert die korrigierte(n) Abschrift(en) eines Arbeitsordners mit
Quellenkopf (Titel, Kanal, Datum, URL, Abschlussdatum) nach fertig/,
listet Einträge des Video-Glossars, die in keinem gemeinsamen Glossar
stehen, und löscht den Ordner nach Rückfrage (--ja ohne).

Schutz: Abbruch bei offenen Prüfmarken (--trotzdem) und ungeklärten
*.neu.korrigiert.txt; fertig/ wird nie überschrieben; nicht gelöscht
werden Ordner mit fremden Dateien, das Aufrufverzeichnis und alles in
testdaten/, glossare/, tests/, fertig/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:26:14 +02:00
3aa04fff4b 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>
2026-10-11 23:24:32 +02:00
acf9e33382 chore: Glossare liegen lokal im Verzeichnis glossare/
Die Glossare echter Beiträge stehen nicht mehr lose im Programmordner,
sondern in glossare/ (in .gitignore). Tests und Beispiele in README und
Bedienungsanleitung verwenden die neuen Pfade.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:58:14 +02:00
33869e5f3e chore: Glossare echter Beiträge nur noch lokal
*.glossar.txt enthält Namen realer Personen und Hörfehler realer
Beiträge und steht jetzt in .gitignore; versioniert bleibt nur das
Glossar der erfundenen Beispielrede (tests/daten/beispiel.glossar.txt).
Die Tests der echten Glossare laufen nur, wenn Reden und Glossare lokal
vorhanden sind; die URL-Tests nutzen ein eigenes Mini-Glossar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:44:46 +02:00
3be1ff8058 docs: README und Bedienungsanleitung auf den Stand nach der Testdaten-Umstellung
- Beispiele schreiben nicht mehr nach testdaten/ (jetzt nur für lokale
  echte Reden), das glossar_vorschlag-Beispiel läuft auch im frischen Klon.
- Bedienungsanleitung: Ausprobieren mit der Beispielrede (gemessen: 2:32
  Minuten mit qwen3:32b), Beispielglossar, Namensregel des Prompts.
- README: Namensregel im Ablauf, Testbeschreibung mit Beispielrede,
  übersprungenen Rede-Tests, Handarbeitsschutz, Wortformen, Bereichshinweis.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:41:26 +02:00
93fb99eda2 test: eigene Beispielrede statt echter Reden, testdaten/ nur noch lokal
Die Abschriften echter Reden sind urheberrechtlich geschützt und gehören
nicht in ein öffentliches Repository. Die Tests nutzen jetzt eine frei
erfundene Festrede (tests/daten/beispiel.de.vtt/.txt, YouTube-Format mit
rollendem Fenster) mit eigenem Glossar. testdaten/ steht in .gitignore;
liegen die Reden dort lokal, laufen die Tests ihrer Glossare zusätzlich,
sonst werden sie übersprungen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:14:49 +02:00
0106c307e7 docs: Testanzahl in der README aktualisiert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:01:25 +02:00
cd62feab69 feat: „Zu prüfen“ zeigt bloße Wortformen getrennt am Ende
Ersetzt das Modell ein gültiges Wort nur durch eine andere Form
(„Punkten“ → „Punkte“, „das“ → „dass“, „sehe“ → „sähe“), heißt der Grund
jetzt „Wortform geändert“. Diese Fälle stehen im Bericht in einer eigenen
Tabelle nach den sinnverändernden, im Text gestrichelt umrahmt, und in
der Konsole am Ende. „-in“ zählt nicht als Endung: „Professor“ →
„Professorin“ bleibt oben.

Außerdem: Die Tabellen scrollen auf schmalen Bildschirmen waagrecht, und
aenderungen.py meldet Zeit-Überschriften nicht als Einfügung, wenn der
Rohtext (z. B. eine .vtt) keine hat.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:01:18 +02:00
011d201215 fix: Namensregel in die Hauptanweisung, damit sie wirkt
Der Hinweis im Glossar-Teil allein half nicht: Im Lahnstein-Abschnitt
schrieb qwen3:32b weiter „Jamal Khashoggi“ und „Alexander Dobrindt“, wo
nur der Nachname gesagt wurde. Als Regel in der Hauptliste (de/en)
ergänzt das Modell keine Namensteile mehr (nachgeprüft mit Ollama).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 22:00:45 +02:00
d9512bcedc feat: Hinweis, wenn ein Zeitbereich über das Ende der Untertitel reicht
„-z 0-05:00“ bedeutet fünf Stunden und bearbeitete bisher stillschweigend
das ganze Video. vtt2txt.py (und damit extract_text.py und
abschrift_korrigieren.py) nennt jetzt das Ende der Untertitel, bei
Bereichen ab einer Stunde mit dem Tipp „Minute 5 ist 00:05“.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:58:12 +02:00
37e4a2bca0 feat: von Hand nachbearbeitete Ausgabe wird nicht mehr überschrieben
abschrift_korrigieren.py merkt sich die Prüfsumme der geschriebenen
Ausgabe in <Ausgabe>.parts/ausgabe.sha256. Weicht die vorhandene Datei
davon und vom neuen Ergebnis ab, bleibt sie erhalten; das Ergebnis kommt
nach <Name>.neu.korrigiert.txt (mit eigenem Bericht) und es gibt eine
Warnung. --ueberschreiben ersetzt die Datei trotzdem.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:57:12 +02:00
ed721b1773 feat: Modell ergänzt keine Vornamen oder Titel aus dem Glossar
Steht „Alexander Dobrindt“ im Glossar, machte das Modell aus „Dobrind“
den vollen Namen. Der Glossar-Teil des Prompts (de/en) verlangt jetzt,
nur die Schreibweise des Gesagten zu korrigieren. Läufe mit Glossar
werden dadurch einmal neu berechnet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:55:17 +02:00
45bf2da07b fix: „Zu prüfen“ übersah Streichungen von „er“/„um“ und Glossar-Allerweltswörter
- Füllwörter je Sprache: „er“ und „um“ sind nur im Englischen Füllwörter;
  im Deutschen wurde ihre Streichung bisher nie gemeldet.
- Eine Änderung gilt nur noch als vom Glossar erklärt, wenn die neuen
  Wörter zusammenhängend in einem Eintrag stehen und dem alten Text
  ähneln. Bisher machte jedes Wort eines Eintrags („Sie“ aus „finden Sie“)
  Änderungen unsichtbar, auch eingefügte Vornamen.
- aenderungen.py -l en-US findet die englische Wortliste.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:53:17 +02:00
1e3c813137 docs: ausführliche BEDIENUNGSANLEITUNG.md, README auf aktuellem Stand
Die Bedienungsanleitung führt von der Einrichtung über Rohtext, Glossar,
Korrektur und Prüfung des Berichts („Zu prüfen“) bis zum Nachbessern;
dazu Zeitauswahl, englische Beiträge, Dateien, Fortsetzen, Fehlermeldungen
mit Lösungen und eine Kurzreferenz aller Programme.

README: Verweis auf die Anleitung, zerrissene Optionstabelle von
abschrift_korrigieren.py repariert, Ablauf mit Vorprüfung und Blöcken,
Hinweis „05:00 = 5 Stunden“, Tests und Einstellungen ergänzt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:44:40 +02:00
3da372a941 fix: Untertitel ohne rollendes Fenster verlieren keine wiederholten Blöcke
vtt2txt.py entfernt Überlappungen nur noch, wenn die Datei ein rollendes
Fenster zeigt: mindestens die Hälfte der Blöcke wiederholt das Ende des
vorigen (YouTube-Auto-Untertitel: 97–99 %). Manuell erstellte Untertitel
werden vollständig übernommen, zwei gleiche Blöcke hintereinander bleiben
zwei.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:36:32 +02:00
41bcd1eb7b feat: kurze Absätze nach Inhalt mit dem passenden Nachbarn verbinden
Passt ein Absatz unter MIN_PARAGRAPH_SENTENCES an beide Nachbarn,
entscheidet das Modell, ob er den vorherigen Gedanken abschließt oder den
folgenden einleitet (JSON {"anschluss": "vorher"|"nachher"}); passt nur
einer, wird ohne Modell verbunden. Antworten werden in .parts/
zwischengespeichert. Der Cache und der JSON-Aufruf sind dafür als
cached_json() und chat_json() herausgezogen, vorhandene Caches gelten weiter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:32:34 +02:00
f1d2e201df feat: Abkürzungen und Ordnungszahlen beenden keinen Satz
„z. B.“, „d. h.“, „Dr.“, „bzw.“, „ca.“, „e.g.“ und Ordnungszahlen wie
„2. Weltkrieg“ oder „am 24.“ gelten bei Satz-, Abschnitts- und
Absatzgrenzen nicht mehr als Satzende; „usw.“, „etc.“ und Jahreszahlen
weiterhin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:32:23 +02:00
82ce30ca72 feat: Änderungsbericht listet eigenmächtige Modelländerungen „Zu prüfen“
Verglichen wird der Text nach den Glossar-Ersetzungen mit dem Ergebnis des
Modells. Gemeldet werden ersetzte gültige Wörter (Systemwortliste
/usr/share/dict/ngerman bzw. american-english), stark veränderte, eingefügte
und gestrichene Wörter; Hörfehler-Korrekturen, reine Zusammen-/Getrennt-
schreibung, Füllwörter und Glossarwörter nicht. Eigener Abschnitt im
HTML-Bericht, Rahmen im Text, Liste in der Konsole. aenderungen.py versteht
dafür -g und -l.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 21:32:06 +02:00
5a59baef88 refactor: rede_korrigieren.py → abschrift_korrigieren.py, Texte neutral
Das Programm verarbeitet beliebige gesprochene Beiträge (Reden, Vorträge,
Interviews, Videos). Prompts und Texte sprechen von „Beitrag“ statt „Rede“;
README-Titel passend zum Projektverzeichnis youtube_abschrift_korrigieren.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:52:02 +02:00
955bdc2659 feat: -z -00:20 als Kurzform für 0-00:20 (vom Anfang bis)
Wörter hinter -z, die mit - und einer Ziffer beginnen, werden vor argparse
zu 0-… umgeschrieben; parse_ranges nimmt -B auch in Anführungszeichen an.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:29:34 +02:00
8edef11c78 refactor: Zeitauswahl nur noch über -z, -s/-e entfallen
-z 00:05:10 (ab), -z 0-00:20 (vom Anfang bis), -z 00:05-00:06 und mehrere
Bereiche, mit oder ohne Anführungszeichen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:20:54 +02:00
5e9a11d0f4 fix: glossar_vorschlag.py schickt keine Zeit-Überschriften ans Modell
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:16:21 +02:00
0bf42dee74 feat: mehrere Zeitbereiche (-z) mit Zeit-Überschriften in einer Datei
- Zeitformat: 00:05:10 (hⓂ️s), 00:20 (h:m = Minute 20), 25 (Minute 25)
- -z "00:05-00:06 00:10-00:12 00:25": A-B, A (bis Ende), -B (ab Anfang)
- jeder Bereich unter einer Überschrift [HH:MM:SS - HH:MM:SS] mit den
  tatsächlichen Zeiten; nach der Satz-Erweiterung überlappende Blöcke
  werden verschmolzen
- rede_korrigieren.py korrigiert und gliedert jeden Block einzeln; das
  Modell sieht die Überschriften nicht

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 20:12:49 +02:00
faea4bf465 feat: Ausschnitte an Satzgrenzen erweitern (--exakt schneidet genau)
Bei -s/-e werden angeschnittene Sätze an beiden Enden vollständig
aufgenommen (höchstens 30 s über den Zeitraum hinaus). rede_korrigieren.py
weist das Modell bei Ausschnitten zusätzlich an, nichts zu ergänzen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:34:36 +02:00
9bbf325bd3 feat: Kanal-Glossar iamfabian.glossar.txt für KI-Coding-Videos
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:22:04 +02:00
6aa4887f22 feat: Ollama und Modell vor dem Start prüfen, kurze Meldung statt Traceback
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:20:46 +02:00
82489ee83c feat: Zeitraum-Auswahl (-s/-e) auch in rede_korrigieren.py und extract_text.py
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:07:56 +02:00
1668a8dcad feat: Zeitraum-Auswahl (-s/-e) in vtt2txt.py
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:06:36 +02:00
3d9a5037c2 feat: Standard-Dateiname aus Kanal, Titel und Datum des Videos
- yt_untertitel.default_name(): <Kanal>_<Titel>_<Datum>, z. B.
  John_Mearsheimer_Offensive_Realism_Episode_1_Origins_of_the_War_In_Ukraine_2026-07-30
- Bindestriche/Punkte im Wort bleiben, Kanal max. 40, Titel max. 60 Zeichen
  an Wortgrenze; ohne Kanal und Titel die Video-ID
- Gilt ohne -o/-n in extract_text.py (statt output.txt), yt_untertitel.py
  und rede_korrigieren.py -u (statt Video-ID)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 21:03:14 +02:00
fb9201b721 feat: englische Reden korrigieren (-l en)
- Prompts je Sprache (PROMPTS): Korrektur, Absatzgliederung, Teilen,
  Glossar-Hinweis; Englisch mit Prüfmarke [check: …] und Entfernen der
  Sprecherwechsel-Marken „>>“
- -l gilt jetzt auch mit -i (Sprache der Rede, Standard de); mit -u wird die
  Sprache des Original-Audios erkannt; nicht unterstützte Sprachen werden
  abgelehnt
- Live geprüft mit 0LmCveTM788 (Mearsheimer): 12 Änderungen, u. a. richtig
  „Vermont“ → „Wehrmacht“, aber falsch „February 25th“ → „24th“ – der
  Änderungsbericht zeigt es

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:40:40 +02:00
95bdc660ca fix: Änderungsbericht erkennt Apostrophe im Wort; output/ ignorieren
- „Bahrs“ → „Bahr’s“ ist jetzt eine Änderung; ’ ' ` gelten als gleich,
  Anführungszeichen am Wortrand zählen weiterhin nicht
- Prüfmarken auch englisch: [check: …]
- output/ (eigene Ergebnisse und Testläufe) in .gitignore

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:33:04 +02:00
547dcb358d fix: Originalsprache bei Videos mit KI-synchronisierten Tonspuren
Gefunden mit einem englischen Video (0LmCveTM788): ohne -l wurde Arabisch
gewählt, denn jede der 20 Synchron-Tonspuren hat eine eigene „-orig“-Spur.
- original_language(): aus „language“, sonst Tonspur mit „original“, sonst
  die einzige „-orig“-Spur
- Automatische Untertitel nur in der Originalsprache (keine Synchronisation)
- Sprachen auch mit Region: „en“ findet manuelle Untertitel „en-US“

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:28:05 +02:00
7e6ffa5899 fix: yt-dlp im temporären Verzeichnis ausführen (Streudatei „3“)
yt-dlp ruft zur Prüfung „ffmpeg -bsfs“ auf; das System-ffmpeg 6.1.1
(Ubuntu) legt dabei eine leere Datei „3“ im Arbeitsverzeichnis an.
yt-dlp läuft jetzt in einem temporären Verzeichnis mit absolutem
Zielpfad, die Datei verschwindet mit dem Verzeichnis.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:12:08 +02:00
60c7c10abb feat: Glossar für die Lahnstein-Rede
- lahnstein.glossar.txt: 62 feste Ersetzungen und 11 Hinweise, erstellt aus
  dem Rohtext und dem Entwurf von glossar_vorschlag.py
- krone-schmalz.glossar.txt: weitere Teltschik-Varianten, „von vorne herein“
- Glossar-Tests decken Lahnstein mit ab

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:07:13 +02:00
ec5f806a88 fix: Glossar-Entwurf – alles auskommentiert, Korrekturlauf gegen Rohtext
Erkenntnisse aus dem ersten echten Lauf (Lahnstein):
- Auch „sichere“ Funde des Modells sind oft falsch (Deckmäntelchen →
  Deckmäntel, Lemmaß → Lebens); daher alle Einträge auskommentiert,
  sichere zuerst
- -k verglich den Text nach dem Glossar mit einer Korrektur ohne Glossar und
  zeigte verdrehte Paare (Brandt → Brand). Jetzt Vergleich mit dem Rohtext;
  was ein Glossar-Eintrag ganz oder teilweise erledigt, entfällt
- Satzzeichen am Rand werden entfernt, keine Doppelungen mehr

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:06:17 +02:00
5a072deca3 feat: rede_korrigieren.py -u URL – von YouTube direkt zum korrigierten Text
- extract_text.fetch_text() aus main() herausgelöst und wiederverwendet
- -u/--url statt -i, -l/--lang für die Sprache (Standard: Original-Audio)
- Ohne -o: <Video-ID>.korrigiert.txt; der Rohtext wird daneben gespeichert,
  eine vorhandene, abweichende Rohtext-Datei aber nie überschrieben

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:02:53 +02:00
bc09ddf3bf feat: Glossar-Entwurf aus Rohtext und Korrekturlauf (glossar_vorschlag.py)
- Das Modell sucht abschnittsweise vermutete Hörfehler (Namen, Orte,
  Fremdwörter, Komposita); nur Funde, die wörtlich im Rohtext stehen
- Sichere Funde als Einträge, unsichere auskommentiert („# ?“)
- -k: Änderungen eines Korrekturlaufs, immer auskommentiert, da oft
  zusammenhangsabhängig
- -g: vorhandene Glossare werden vorher angewendet und nicht erneut vorgeschlagen
- Modellantworten im Zwischenspeicher <Entwurf>.parts/

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 20:02:39 +02:00
c1d270bc0e feat: Änderungsbericht Rohtext → Korrektur (aenderungen.py)
- Wortvergleich ohne Groß-/Kleinschreibung, Satzzeichen und „z. B.“-Varianten,
  damit nur echte Wortänderungen auffallen
- HTML-Bericht: Änderungen nach Häufigkeit, korrigierter Text mit markierten
  Ersetzungen (Original dahinter), Einfügungen, Streichungen, Prüfmarken
- rede_korrigieren.py schreibt den Bericht bei jedem Lauf (--kein-bericht)
  und zeigt die häufigsten Änderungen; Vergleich mit dem Rohtext vor Glossar
- aenderungen.py als eigenes Skript für vorhandene Dateien

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:59:37 +02:00
6610679d80 feat: mehrere Glossare kombinieren, gemeinsames Krone-Schmalz-Glossar
- rede_korrigieren.py: -g mehrfach, Ersetzungen in Reihenfolge der Angabe
- Ersetzungen ohne Treffer werden gesammelt in einer Zeile gemeldet
- krone-schmalz.glossar.txt: wiederkehrende Namen und Hörfehler; die
  Rede-Glossare enthalten nur noch Spezielles
- Magdeburg ergibt exakt denselben Text wie vorher, Ramstein profitiert von
  den gemeinsamen Einträgen (Russland-Versteher, Status quo, vornherein …)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:56:18 +02:00
7bc5e93613 feat: rede_korrigieren.py -m/--model zur Modellwahl
Das Modell steckt in den Cache-Schlüsseln; ein anderes Modell rechnet neu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:54:32 +02:00
19b6bbf5a2 feat: extract_text.py --fliesstext für lesbaren Fließtext
Umbruch auf 80 Zeichen ohne Worttrennung, auch nicht am Bindestrich.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:53:42 +02:00
0413455ea5 refactor: Spur-Fehlermeldung und yt-dlp-Fake gemeinsam nutzen
- yt_untertitel.no_track_message() für yt_untertitel.py und extract_text.py
- tests/conftest.py: Fixtures fake_yt_dlp und yt_dlp_installed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:52:20 +02:00
ba61434798 feat: extract_text.py – YouTube-URL → Textdatei in einem Schritt
- Kombiniert yt_untertitel.py und vtt2txt.py; die VTT bleibt temporär
- Standardsprache ist die des Original-Audios (original_language())
- -o Ausgabedatei, Standard output.txt
- Tests ohne Netz, README

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:51:32 +02:00
b0b79515ca docs: README um Werkzeugübersicht, Kurzweg und bekannte Grenzen ergänzen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:23:28 +02:00
b2aa88085e chore: persönliche Claude-Code-Einstellungen ignorieren
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 19:18:26 +02:00
903aa92b09 feat: YouTube-Untertitel herunterladen (yt_untertitel.py)
- yt_untertitel.py lädt über yt-dlp die Untertitel eines Videos als VTT:
  manuelle Untertitel in der Sprache, sonst automatische in Originalsprache
  (<lang>-orig); Maschinenübersetzungen werden nie genommen
- Tests ohne Netz (yt-dlp durch Fakes ersetzt)
- Testdaten: Lahnstein-Rede (VTT und daraus erzeugter Rohtext)
- README: Ablauf URL → VTT → TXT → Korrektur

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:19:14 +02:00
8fe7c394f1 feat: Glossar für die Magdeburg-Rede
- magdeburg.glossar.txt: 64 feste Ersetzungen (Namen, Orte, Hörfehler)
  und 10 Hinweis-Begriffe; jede Ersetzung trifft den Rohtext
- Test prüft jetzt beide Beispiel-Glossare gegen ihre Testdaten
- README: Glossare zu beiden Testdaten erwähnt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:11:58 +02:00
8e1945e406 test: Testdaten (Magdeburg-Rede) ins Repo aufnehmen
- testdaten/magdeburg.de-orig.vtt (YouTube-Auto-Untertitel) und der daraus
  mit vtt2txt.py erzeugte Rohtext magdeburg.de-orig.txt
- Test: jede Beispiel-VTT ergibt genau ihre .txt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 17:52:56 +02:00