podcast2md — Podcast-Episode-Link → Kapitel-Abschrift
Zielsetzung
- Eingabe: Ein von yt-dlp unterstützter Link zu einer Podcast-Episode oder eine direkte Audio-URL.
- Ausgabe:
<out-dir>\<slug>\chapters.md – Vollständige, nach den vorhandenen Kapiteln der Episode gegliederte Abschrift; keine Zusammenfassung, keine Inhaltserweiterung.
- Engine: Lokale CapsWriter-Offline-Instanz (fun_asr_nano), das Skript startet den Server und Client automatisch.
Ausführung (mit dem bereitgestellten Exemplar – muss sich im gleichen Verzeichnis wie start_server.exe befinden)
python "D:\iStall\CapsWriter-Offline\podcast2md.py" "<Episoden-URL>"
python "D:\iStall\CapsWriter-Offline\podcast2md.py" "<Episoden-URL>" --transcribe-timeout 10800
- Quell-Repository:
D:\iStall\podcast2md\ (enthält podcast2md.py + README.md + PODCAST2MD.md). Änderungen am Skript nur im Repository vornehmen, dann nach D:\iStall\CapsWriter-Offline\ kopieren, um sie auszurollen.
- Vollständige Parameterliste, Pipeline-Details und Exit-Codes: Je nach Bedarf
D:\iStall\podcast2md\PODCAST2MD.md lesen (nicht standardmäßig die gesamte Datei lesen).
Wichtige Parameter
| Parameter | Standard | Beschreibung |
|---|
--out-dir | <Skript-Verzeichnis>\work | Das fertige Ergebnis liegt unter work\<slug>\chapters.md |
--force | Aus | Löscht das vorhandene Episodenverzeichnis und führt die Verarbeitung neu durch; manuelle Änderungen gehen dabei verloren |
--polish | off | basic führt nur regelbasierte Entfernung von Füllwörtern durch, keine KI-Aufbereitung; für originalgetreue Abschrift off verwenden |
--server-timeout | 600 s | Wartezeit für das Starten des Servers |
--transcribe-timeout | 7200 s | Wartezeit für die Transkription; bei langen Folgen erhöhen (z. B. 10800) |
Fallstricke (vor der Ausführung lesen)
- Lange Audiodateien (>1 h) benötigen mehrere zehn Minuten für die Transkription: Als Hintergrundprozess laufen lassen + Logdateien abfragen, nicht im Vordergrund warten, bis ein Tool-Zeitüberschreitung auftritt.
- Der Server bleibt nach der Transkription im Arbeitsspeicher (Wiederverwendung beschleunigt den nächsten Durchlauf); zum Beenden über das Tray-Icon beenden.
- Exit-Codes: 3 = Download fehlgeschlagen, 4 = Server-Fehler, 5 = Transkriptionsfehler, 6 = Ergebnis bereits vorhanden / belegt, 7 = Fehler bei der Segmentierung oder Validierung.
- Logdateien:
<out-dir>\_podcast2md_server.log und <slug>\logs\.
- ffmpeg muss im PATH vorhanden sein, sonst schlägt die Client-Transkription fehl.
- Eine Sprecherdiarisierung wird nicht durchgeführt; mehrsprachige Abschriften müssen nachbearbeitet werden.
Lokal verifizierte Fakten (Stand 2026-10-19 – direkt zitieren, nicht neu ermitteln)
- ffmpeg 8.1.2 befindet sich im PATH – die Voraussetzung für die Transkription von Client-Dateien ist damit erfüllt; bei Unklarheit zuerst
ffmpeg -version tatsächlich ausführen, nicht spekulieren.
- Es ist keine dedizierte NVIDIA-GPU vorhanden; die Transkription läuft auf der CPU: Eine 30–60-minütige Folge benötigt ca. 10–30 Minuten Abschrift, über 1 h ca. 40–90 Minuten; FunASR-Nano benötigte bei einem 95-minütigen Testaufnahme ca. 46 Minuten für die reine Transkription (ca. 0,5× Echtzeit, inklusive Modell-Laden; siehe
work\full.out.log 2026-10-17).
- FunASR-Nano: Ermittelte Eigenschaften des Referenzskripts: Segmentierung in 15-Sekunden-Abschnitte (ein 60-Sekunden-Block führt zu wiederholten „Ähs“), JSONL-Abschrift pro Abschnitt mit fortgesetzter Ausführung, stille Abschnitte werden anhand eines Energieschwellenwerts übersprungen.
- Bilibili-Untertitelabdeckung: Offizielle/UP-eigene CC-Untertitel sind nicht vollständig; KI-generierte Untertitel sind häufiger – zuerst
yt-dlp --list-subs ausführen, um die Route zu bestimmen; nicht spekulieren.
Zuständigkeit für lokale Audiodateien / angrenzende Szenarien
- Lokale Audiodateien (Aufnahmen, bereits heruntergeladene mp3/wav – ohne URL): Dieses CLI nicht verwenden. Stattdessen FunASR-Nano nutzen: venv
D:\iStall\FunASR-Nano\.venv, Gewichte D:\iStall\model-cache\huggingface\local\Fun-ASR-Nano-2512-hf; lange Audiodateien müssen segmentweise erkannt werden (ein 60-Sekunden-Block führt zu wiederholten „Ähs“); siehe D:\iStall\FunASR-Nano\work\full_transcribe.py.
- Videos mit Untertiteln (z. B. Bilibili): Zuerst Untertitel erkennen (
yt-dlp --list-subs); falls CC- oder KI-Untertitel vorhanden, diese direkt extrahieren und nicht die Spracherkennung ausführen.
- Untertitel in Text umwandeln (Zeitstempel entfernen, in Fließtext überführen): Das ist Aufgabe von srt-translator, nicht von diesem CLI.