YouTube transcript API che trascrive anche i video senza sottotitoli

Con la YouTube transcript API passi il link di un video e ricevi la trascrizione in JSON, TXT, SRT o VTT. Se YouTube ha una traccia di sottotitoli utilizzabile, prendiamo quella. Altrimenti trascriviamo l’audio con IA.

  • Prima i sottotitoli, poi l’audio se serve
  • 1 credito al minuto, con sottotitoli o IA
  • Link watch, youtu.be, Shorts ed embed

Decidi da dove prendere il testo

Usa il link che hai
Accettiamo link watch, youtu.be, Shorts, embed e live, con o senza www. Riconosciamo il video anche se cambia la forma del link. Le dirette ancora in corso non si possono trascrivere.
Recupera i sottotitoli pubblicati
Con source=auto diamo la precedenza ai sottotitoli caricati dal creator, poi a quelli generati automaticamente. Non usiamo le tracce tradotte automaticamente.
Trascrivi l’audio quando serve
Se non troviamo sottotitoli utilizzabili, passiamo allo speech-to-text. Imposta source=stt se vuoi partire sempre dall’audio, anche quando i sottotitoli ci sono.
Sai da dove arriva la trascrizione
Leggi transcript_source nella risposta: youtube_captions indica i sottotitoli di YouTube, speech_to_text la trascrizione dell’audio.
Stesso costo per entrambe le opzioni
Ogni minuto iniziato del video costa 1 credito. Il prezzo non cambia tra sottotitoli e IA. Se la trascrizione non riesce o la annulli, non paghi.

Chiama l’API dal tuo codice

Invia il link a POST /v1/transcriptions con la tua chiave API. Puoi usare Python o qualsiasi client HTTP. Con wait=60 la connessione resta aperta fino a 60 secondi. I campi e i codici di risposta sono nella documentazione della request.

Crea la chiave nella dashboard e usala dal server o da uno script. Salva subito l’ID che ricevi. Se l’attesa finisce prima della trascrizione, il lavoro continua: controllalo con GET /v1/transcriptions/:id, senza inviare di nuovo il video.

Gestisci gli stati queued, fetching e transcribing separatamente da completed e failed. Una trascrizione ancora in corso, un errore e un testo pronto da leggere devono restare casi distinti anche nella tua app.

cURL
curl -X POST "https://api.transcript1.com/v1/transcriptions?wait=60" \
  -H "Authorization: Bearer $TRANSCRIPT1_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"youtube","url":"https://youtu.be/dQw4w9WgXcQ"}'

Controlla transcript_source e i timestamp

La risposta indica se il testo arriva dai sottotitoli e distingue le tracce del creator da quelle automatiche. billed_minutes contiene la durata arrotondata per eccesso. Trovi gli altri campi nello schema della trascrizione.

Conserva transcript_source e caption_kind se devi documentare la provenienza del testo. I sottotitoli del creator mantengono le parole pubblicate, senza timestamp delle parole. Quelli automatici di YouTube hanno i tempi di inizio; lo speech-to-text aggiunge anche fine e confidence.

Ogni segmento ha inizio e fine in secondi: puoi collegare una citazione al video o sincronizzare testo e riproduzione. Aggiungi include=words al JSON solo se ti servono i dati delle singole parole. Il JSON qui sotto mostra la struttura della risposta, non le parole del video di esempio.

Risposta JSON abbreviata
{
  "id": "tr_8fK2Lm0PqRsTuVwXyZaBcD",
  "status": "completed",
  "transcript_source": "youtube_captions",
  "caption_kind": "auto_generated",
  "language": "en",
  "billed_minutes": 4,
  "transcript": {
    "text": "Welcome back to the channel. Today we are looking at how transcripts are made.",
    "segments": [
      { "start": 0, "end": 4.2, "speaker": null, "language": "en", "text": "Welcome back to the channel." }
    ]
  }
}

Scegli tra sottotitoli e speech-to-text

source=auto è il valore predefinito. Con source=captions chiedi solo i sottotitoli: se non sono utilizzabili, ricevi no_captions e non paghi. Con source=stt trascriviamo sempre l’audio. La guida alle sorgenti spiega anche come incidono lingua e riconoscimento dei parlanti.

Scegli captions (solo sottotitoli) quando ti serve proprio la traccia pubblicata. Scegli stt quando vuoi una nuova trascrizione dell’audio o le etichette dei parlanti. Con source=auto, diarize=true passa direttamente allo speech-to-text. La combinazione di captions e diarize=true viene rifiutata: non ignoriamo una delle due opzioni.

La traccia deve corrispondere alla lingua richiesta, oppure alla lingua originale del video quando la lingua è auto. Escludiamo le traduzioni automatiche. Nello speech-to-text, language aiuta il riconoscimento: non traduce la registrazione.

Corpo della request per trascrivere l’audio
{
  "platform": "youtube",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "source": "stt"
}

Gestisci gli errori senza duplicare le trascrizioni

Prima di riprovare, leggi l’errore. Un video privato, un limite di età o una diretta in corso richiedono un’altra sorgente. Con no_captions puoi decidere se accettare una trascrizione dell’audio. Se il lavoro è ancora in corso, rileggilo tramite ID. I casi da gestire sono nella guida agli errori.

Per ripetere una request di creazione dopo un problema di rete, usa Idempotency-Key. Il riuso di una trascrizione recente è un’opzione distinta e richiede lo stesso video e le stesse opzioni. Una trascrizione in cache può comunque costituire un nuovo lavoro a pagamento; rileggere un lavoro già completato non consuma minuti.

Lo stesso endpoint accetta anche TikTok, Instagram e gli altri link supportati. YouTube, X, TikTok e Bluesky sono tra le piattaforme con sottotitoli utilizzabili prima dello speech-to-text. Controlla la tabella delle sorgenti prima di proporre opzioni nella tua app.

Prova con 60 minuti gratis

Conferma l’email e ricevi 60 minuti gratis per iniziare. Non serve una carta di credito.

Crea una chiave API

Domande frequenti

Non trovi la risposta? Contatta l’assistenza

Funziona anche se il video non ha sottotitoli?

Sì. Con source=auto trascriviamo l’audio se non troviamo una traccia utilizzabile. Se vuoi evitare questo passaggio e usare solo i sottotitoli, scegli source=captions.

Quali link YouTube posso inviare?

Link watch, youtu.be, Shorts, embed e live. La diretta deve essere terminata. Una pagina canale o un link alla sola playlist non identifica un video e restituisce 422 invalid_url.

Posso trascrivere un video privato?

No. Possiamo recuperare video pubblici e non in elenco. I video privati, con limiti di età o ancora in diretta non funzionano. Se hai il file originale, caricalo direttamente.

Quanto costa una trascrizione da YouTube?

1 credito per ogni minuto iniziato, sia con i sottotitoli sia con IA. Dopo aver confermato l’email ricevi 60 minuti gratis, una sola volta e senza carta.

È il pacchetto Python youtube-transcript-api?

No. transcript1 è un’API REST ospitata. Da Python la chiami via HTTP con la tua chiave API: non devi installare quel pacchetto.