Il problema che risolve
Le grandi librerie video sono di fatto impossibili da consultare. I fan scorrono ore di filmati per ritrovare un momento che ricordano a metà, gli studenti dei corsi riguardano lezioni intere per trovare una sola spiegazione e le aziende perdono conoscenza sepolta in talk registrati. Indicizzare le trascrizioni con i timestamp rende ogni libreria consultabile come un documento, con risultati che portano dritti al momento giusto.
Cosa includere nella prima versione
- Ricerca per frase e parola chiave su tutti i video di un canale o di una playlist
- Risultati che mostrano la frase corrispondente con un link al timestamp esatto
- Ricerca semantica, così "come stabilisco il prezzo del mio prodotto" trova anche "definire le tue tariffe"
- Filtri per data, video e speaker
- Indicizzazione automatica dei nuovi caricamenti
Come realizzarla, passo dopo passo
- 01
Raccogli l'elenco dei video
Chiama /channels/resolve o /playlists/resolve con l'handle del canale o l'URL della playlist per ottenere ID e titolo di ogni video.
- 02
Recupera le trascrizioni in blocco
Invia gli ID a /batch con format.timestamp e format.paragraphs attivi. I batch di grandi dimensioni vengono eseguiti in modo asincrono: interroga /batch/{batch_id} oppure usa un webhook.
- 03
Indicizza i segmenti
Salva ogni paragrafo con il relativo ID video e l'orario di inizio. La ricerca full-text di Postgres basta per la ricerca per parole chiave; aggiungi gli embedding in pgvector o in un database vettoriale per una ricerca basata sul significato.
- 04
Crea l'interfaccia di ricerca
Restituisci i risultati migliori con il testo circostante e un link nel formato youtube.com/watch?v=ID&t=SECONDI, così gli utenti arrivano al momento esatto.
- 05
Mantienilo aggiornato
Esegui un job pianificato che risolve di nuovo il canale, individua i nuovi ID video e trascrive solo quelli.
Codice di partenza
Questa idea si basa sullo schema "Ricetta 3: carica in blocco una playlist in una knowledge base". Sostituisci canali, prompt e storage con i tuoi.
import requests
API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}
playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
"limit": 100}).json()
ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
"video_ids": ids,
"format": {"timestamp": True, "paragraphs": True},
}).json()
# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
if r["status"] == "completed":
for p in r["data"]["transcript"].get("paragraphs") or []:
store(video_id=r["video_id"], start=p["start"], text=p["text"]) # your vector DBPerché vale la pena realizzarla
Vendilo al proprietario della libreria, non allo spettatore: network di podcast, piattaforme di corsi e aziende con archivi video interni pagheranno un canone mensile per una ricerca che mantiene coinvolto il loro pubblico. Per le community di fan funziona anche una ricerca pubblica gratuita con un piano a pagamento per avvisi o accesso API.
Errori da evitare
- Indicizzare intere trascrizioni come un unico documento: senza timestamp a livello di paragrafo i risultati diventano inutili.
- Ritrascrivere l'intero canale a ogni aggiornamento invece di tenere traccia degli ID video già elaborati.
- Affidarsi solo alla corrispondenza esatta delle parole chiave: il parlato è disordinato, quindi aggiungi presto la ricerca semantica.
Domande su questa idea
Serve un database vettoriale per cercare nelle trascrizioni di YouTube?
No. La ricerca full-text di Postgres gestisce bene la ricerca per parole chiave nella maggior parte delle librerie. Aggiungi gli embedding quando vuoi risultati che corrispondano al significato e non alle parole esatte.
Come collego un risultato di ricerca al momento esatto del video?
Ogni segmento della trascrizione include un orario di inizio in secondi. Aggiungi &t= seguito da quel numero all'URL di YouTube.
Posso indicizzare video senza sottotitoli?
Sì. Attiva allow_asr con un URL di webhook e, quando mancano i sottotitoli, l'API trascrive l'audio con il riconoscimento vocale AI.