HomeBlogTranscribePlansAPI Keys

yt-dlp undertekster vs en transkripsjon API: Hvilken skal brukes

Splittet visning av en yt-dlp undertekst-last-kommando ved siden av en ren JSON transkripsjon API-respons

yt-dlp kan laste ned undertekster for nesten alle YouTube-videoer, og hvis du har brukt det til media-nedlastinger du har sannsynlig allerede oppdaget flaggene. Det er et genuint flott verktøy — jeg holder det installert overalt. Men "kan laste ned undertekster" og "er den rette måten å få transkripsjoner i en tjeneste" er ulike påstander, og jeg har blitt brent av å blande dem. Her er hva hver tilnærming faktisk ser ut som, inkludert rens-trinnet ingen advarer deg om.

yt-dlp måten, end til end

Grabbing auto-generert engelsk undertekster uten å laste ned videoen:

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

(Bruk --write-sub i stedet for menneske-lastet spor, eller begge flagg sammen.) Dette dropper en VIDEO_ID.en.vtt fil. Åpne det og du vil se hvorfor du ikke er ferdig:

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-undertekster er "rullende" undertekster — hvert signal gjentar forrige linje, så naiv stripping gir deg hver setning dobbelt. Alle som går ned denne veien ender opp med å skrive noen versjon av denne rens:

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, subprocess-håndtering, fil I/O, dedupe — kall det 40 linjer med lim før du har vanlig tekst.

Der yt-dlp er det rette svaret

Der det gjør vondt på en server

Tre separate vedlikeholds-byr viser opp fra øyeblikket yt-dlp beveger seg inn i en backend:

API-måten

Den vertskap-endepunkt versjon av hele rørledningen ovenfor:

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

Returnerer JSON — {"result": {"videoId", "title", "pubDate", "content", ...}} — allerede deduplisert vanlig tekst, med strukturert feil (TRANSCRIPT_UNAVAILABLE når ingen undertekster finnes, i stedet for stderr arkeologi). En delt demo-nøkkel er ett kall unna (curl -s https://youtube2text.org/api/demo-key, 5 videoer/måned per IP); den fulle quickstart er i utdraging transkripsjoner med curl.

Den ærlige fotnote

Begge tilnærminger henter samme undertekster fra samme sted, og begge må håndtere YouTube ikke ønsker automatisert trafikk. yt-dlp gjør det problemet ditt — OK på bærbar, proxy-prosjekt på server. En vertskap API gjør det leverandør sin problem: youtube2text.org ruter hentinger gjennom roterende bolig-proxyer server-side, som er nøyaktig stykket du ikke lett kan kopiere fra en datasenter-IP. Du betaler ikke for transkripsjonen; du betaler å ikke operere det.

Min split: yt-dlp for arkiver og en-av på min egen maskin, APIen for noe som kjører uovervåket. Hvis det samsvarer situasjonen: nøkkler er på youtube2text.org/app/keys — Google-innlogging, gratis 5/måned nivå, betalt fra $5.99.