README: neue Abschnitte „Dateiablage“ und „Abschluss: abschliessen.py“,
Standardpfade abschriften/<Name>/ in allen Beispielen und Optionstabellen,
gemeinsame und Video-Glossare, testdaten/<rede>/, Tests und Einstellungen.
Bedienungsanleitung: neuer Abschnitt 10 „Schritt 6: Abschließen und
aufräumen“ (folgende Abschnitte umnummeriert), Ablaufdiagramm und
Schnellstart mit Arbeitsordner und Abschluss, Glossar-Arten, Dateien je
Arbeitsordner, Hinweis „im Programmordner arbeiten“, Sicherung von
glossare/ und fertig/, Fehlermeldungen und Kurzreferenz von abschliessen.py.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
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>
- 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>
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>
*.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>
- 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>
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>
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>
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>
„-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>
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>
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>
- 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>
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>
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>
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>
„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>
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>
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>
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>
-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>
- 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>
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>
- 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>
- 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>
- „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>
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>
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>
- 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>
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>
- 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>
- 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>
- 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>
- 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>
- 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>
- 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>
- 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>
- 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>