yt-dlp-Untertitel vs. eine Transkript-API: Welche zum Nutzen

yt-dlp kann Untertitel für grundsätzlich jedes YouTube-Video herunterladen, und wenn du es für Media-Downloads verwendet hast, hast du die Flags wahrscheinlich bereits entdeckt. Das ist ein rechtmäßig großartiges Tool — ich behalte es überall installiert. Aber "kann Untertitel herunterladen" und "ist die richtige Weg, Transkripte in einen Service zu bekommen" sind unterschiedliche Ansprüche, und ich bin davon verbrannt, sie zu vermischen. Hier ist, wie jeder Ansatz tatsächlich aussieht, einschließlich der Aufräum-Schritt, den niemand dir warnt.
Der yt-dlp-Weg, end-to-end
Auto-generierte englische Untertitel abrufen, ohne das Video herunterzuladen:
yt-dlp --write-auto-sub --sub-lang en --skip-download \
-o "%(id)s" "https://www.youtube.com/watch?v=VIDEO_ID"
(Nutze --write-sub statt dessen für menschlich-hochgeladene Tracks oder beide Flags zusammen.) Dies droppt eine VIDEO_ID.en.vtt Datei. Öffne sie und du wirst sehen, warum du nicht fertig bist:
WEBVTT
Kind: captions
Language: en
00:00:00.320 --> 00:00:02.879
so today we're going to look at
00:00:01.760 --> 00:00:04.560
so today we're going to look at
how youtube handles
Auto-Untertitel sind "rolling" Captions — jede Hinweis wiederholt die vorherige Zeile, daher naive Stripping gibt dir jeden Satz zweimal. Jeder, der diesen Weg hinunter geht, endet damit, schreiben irgendeine Version dieser Aufräum:
import re, pathlib
lines = []
for line in pathlib.Path("VIDEO_ID.en.vtt").read_text().splitlines():
if "-->" in line or line.startswith(("WEBVTT", "Kind:", "Language:")) or not line.strip():
continue
line = re.sub(r"<[^>]+>", "", line).strip() # strip inline timing tags
if not lines or line != lines[-1]: # collapse rolling duplicates
lines.append(line)
text = " ".join(lines)
Befehl, Subprocess-Handhabung, Datei-I/O, Dedupe — call it 40 Zeilen Klebstoff, bevor du reinen Text hast.
Wo yt-dlp die richtige Antwort ist
- Massen-Offline-Archivierung. Zeige es auf einer Kanal-URL und es wird jeden Video laufen, Untertitel inbegriffen, wiederaufnehmbar und kostenlos. Zum Bauen eines persönlichen Archivs auf deiner Heimverbindung schlägt nichts es.
- Du wünschst die Untertitel-Dateien selbst. Wenn srt/vtt mit Timing das Lieferbar ist — eine Video-Editor füttern, exakte Hinweis-Timing konservieren — yt-dlp gibt dir das Rohwerk.
- Du lädst die Medien ohnehin herunter. Schon ziehend Audio für Whisper-Transkription? Hinzufügen von
--write-auto-subist ein Flag. - Null-Budget, persönliche Skala. Auf einer Wohn-IP bei menschlichen Geschwindigkeiten, es funktioniert einfach.
Wo es auf einem Server schmerzt
Drei separate Wartungs-Lasten zeigen sich der Moment, yt-dlp in einen Backend bewegt:
- Der Binary Treadmill. YouTube ändert seine Interne ständig, und yt-dlp versendet Fixes ständig — das ist eine Funktion, aber das bedeutet, deine Produktions-Abhängigkeit braucht häufige Updates oder Extraktion startet zu scheitern.
- IP-Blockierung. Von AWS/GCP/Heroku-Adressen erwarte "Sign in to confirm you're not a bot" Fehler. Das ist die gleiche Wand, das blockiert youtube-transcript-api in der Cloud — das Wechseln von Tools wechselt deine IP-Reputation nicht.
- Der Klebstoff-Code. Subprocess-Handhabung, Temp-Dateien, die vtt-Aufräum oben, nicht-englische Tracks, fehlend-Caption-Erkennung via Exit-Codes und stderr Analysieren.
Der API-Weg
Die gehostete-Endpunkt-Version der ganzen obigen Pipeline:
curl -s "https://youtube2text.org/api/transcribe?url=VIDEO_ID" \
-H "x-api-key: yt_YOUR_KEY"
Gibt JSON zurück — {"result": {"videoId", "title", "pubDate", "content", ...}} — schon dedupliziert reinen Text, mit strukturierten Fehlern (TRANSCRIPT_UNAVAILABLE, wenn Captions nicht vorhanden, statt stderr Archäologie). Ein gemeinsamer Demo-Schlüssel ist ein Aufruf weg (curl -s https://youtube2text.org/api/demo-key, 5 Videos/Monat pro IP); der vollständige Quickstart ist in Transkripte mit curl extrahieren.
Die ehrliche Fußnote
Beide Ansätze holen die gleichen Captions vom gleichen Ort und beide müssen sich mit YouTube befassen, nicht wollen automatisierten Traffic. yt-dlp macht das dein Problem — fine auf einem Laptop, ein Proxy-Projekt auf einem Server. Eine gehostete API macht es das Problem des Anbieters: youtube2text.org leitet fetches durch rotierende Wohn-Proxys Server-Seite, das ist genau der Teil, den du nicht leicht von einer Rechenzentrum-IP replizieren kannst. Du zahlst nicht für das Transkript; du zahlst, um das nicht zu operieren.
Mein Split: yt-dlp für Archive und One-Offs auf meiner eigenen Maschine, die API für alles, das unbeaufsichtigt läuft. Wenn das deine Situation passt, Schlüssel sind bei youtube2text.org/app/keys — Google-Anmeldung, kostenlos 5/Monat-Stufe, bezahlt von $5,99.