HomeBlogTranscribePlansAPI Keys

yt-dlp Undertexter vs ett transkriptions-API: Vilket ska du använda

Delad vy av ett yt-dlp undertextkommando bredvid ett rent JSON transkriptions-API-svar

yt-dlp kan ladda ner bildtexter för basically någon YouTube-video, och om du har använt det för mediahämtningar har du förmodligen redan upptäckt flaggorna. Det är ett verkligt bra verktyg — jag behåller det installerat överallt. Men "kan ladda ner bildtexter" och "är rätt väg att få transkriptioner i en tjänst" är olika anspråk, och jag har brunnit av att blanda dem. Här är vad varje tillvägagångssätt faktiskt ser ut som, inklusive rengöringsteget ingen varnar dig om.

yt-dlp-vägen, ända igenom

Att fånga automatiskt genererad engelska undertexter utan att ladda ner videon:

yt-dlp --write-auto-sub --sub-lang en --skip-download \
  -o "%(id)s" "https://www.youtube.com/watch?v=VIDEO_ID"

(Använd --write-sub i stället för människouppladdade spår, eller båda flaggor tillsammans.) Detta släpper en VIDEO_ID.en.vtt fil. Öppna det och du kommer att se varför du inte är klar:

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-subs är "rullande" bildtexter — varje cue upprepar den tidigare raden, så naiv borttagning ger dig varje mening två gånger. Alla som går denna väg slutar upp med att skriva någon version av denna rengöring:

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)

Kommando, undeerprocesshantering, fil-I/O, dedupe — kalla det 40 rader lim innan du har vanlig text.

Där yt-dlp är rätt svar

Där det gör ont på en server

Tre separata underhållsbördor dyker upp det ögonblick yt-dlp flyttar till en backend:

API-vägen

Den hosted-endpoint-versionen av hela pipelinen ovan:

curl -s "https://youtube2text.org/api/transcribe?url=VIDEO_ID" \
  -H "x-api-key: yt_YOUR_KEY"

Returnerar JSON — {"result": {"videoId", "title", "pubDate", "content", ...}} — redan deduplicerad vanlig text, med strukturerade fel (TRANSCRIPT_UNAVAILABLE när inga bildtexter existerar, i stället för stderr-arkeologi). En delad demo-nyckel är ett anrop bort (curl -s https://youtube2text.org/api/demo-key, 5 videor/månad per IP); den fullständiga snabbstarten ligger i extrahera transkriptioner med curl.

Den ärliga fotnotsionen

Båda tillvägagångssätten hämtar samma bildtexter från samma plats, och båda måste hantera YouTube som inte vill ha automatiserad trafik. yt-dlp gör det ditt problem — bra på en bärbara dator, ett proxy-projekt på en server. Ett hosted API gör det leverantörens problem: youtube2text.org dirigerar hämtningar genom roterande residentiell proxies på serversidan, vilket är precis den bit du inte lätt kan replikera från en datacenter-IP. Du betalar inte för transkriptionen; du betalar för att inte driva det.

Min delning: yt-dlp för arkiv och one-offs på min egen maskin, API:t för allt som kör obevakad. Om det matchar din situation, nycklar ligger på youtube2text.org/app/keys — Google-inloggning, gratis 5/månad-nivå, betald från $5,99.