HomeBlogTranscribePlansAPI Keys

Sottotitoli yt-dlp vs un'API di Trascrizione: Quale Usare

Vista divisa di un comando di download di sottotitoli yt-dlp accanto a una risposta API di trascrizione JSON pulita

yt-dlp può scaricare sottotitoli per praticamente qualsiasi video YouTube, e se l'hai usato per download di media hai probabilmente già scoperto i flag. È uno strumento genuinamente fantastico — lo mantengo installato ovunque. Ma "può scaricare sottotitoli" e "è il modo giusto per ottenere trascrizioni in un servizio" sono affermazioni diverse, e sono stato bruciato da conflazione loro. Ecco cosa appare effettivamente ogni approccio, incluso lo step di cleanup che nessuno ti avvisa.

Il modo yt-dlp, end to end

Afferrare i sottotitoli inglesi auto-generati senza scaricare il video:

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

(Usa --write-sub invece per tracce caricate da umani, o entrambi i flag insieme.) Questo rilascia un file VIDEO_ID.en.vtt. Aprilo e vedrai perché non hai finito:

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

I sotto-auto sono didascalie "rolling" — ogni cue ripete la linea precedente, quindi lo stripping ingenuo ti dà ogni frase due volte. Chiunque scenda per questa strada finisce per scrivere una versione di questo cleanup:

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)

Comando, gestione dei sottoproessi, file I/O, dedupe — chiamalo 40 righe di colla prima di avere testo semplice.

Dove yt-dlp è la risposta giusta

Dove fa male su un server

Tre oneri di manutenzione separati appaiono nel momento in cui yt-dlp si sposta in un backend:

Il modo API

La versione dell'endpoint ospitato dell'intera pipeline sopra:

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

Restituisce JSON — {"result": {"videoId", "title", "pubDate", "content", ...}} — già il testo semplice deduplicato, con errori strutturati (TRANSCRIPT_UNAVAILABLE quando le didascalie non esistono, invece dell'archeologia stderr). Una chiave demo condivisa è una sola chiamata via (curl -s https://youtube2text.org/api/demo-key, 5 video/mese per IP); la guida di avvio completa è in estrazione di trascrizioni con curl.

La nota di piè di pagina onesta

Entrambi gli approcci recuperano le stesse didascalie dallo stesso posto, e entrambi devono affrontare il fatto che YouTube non vuole traffico automatizzato. yt-dlp lo rende tuo problema — ok su un laptop, un progetto di proxy su un server. Un'API ospitata lo rende il problema del provider: youtube2text.org instrada i recuperi attraverso proxy residenziali rotanti lato server, che è precisamente il pezzo che non puoi facilmente replicare da un IP di datacenter. Non stai pagando per la trascrizione; stai pagando per non gestirlo.

La mia divisione: yt-dlp per archivi e one-off sulla mia macchina, l'API per qualsiasi cosa che funziona incustodita. Se corrisponde alla tua situazione, le chiavi sono su youtube2text.org/app/keys — accesso Google, livello gratuito 5/mese, a pagamento da $ 5,99.