YouTube Transcript API : les sous-titres, ou l’IA si besoin

La YouTube Transcript API de transcript1 transforme un lien vidéo en transcription JSON, TXT, SRT ou VTT. Nous récupérons les sous-titres utilisables. S’il n’y en a pas, l’IA transcrit la bande-son. Vous gardez le même endpoint dans les deux cas.

  • Sous-titres en priorité, transcription par IA sinon
  • 1 crédit par minute, quelle que soit la source
  • Liens watch, youtu.be, Shorts et embed

Choisissez d’où vient le texte

Les liens que vous avez déjà
Liens watch, youtu.be, Shorts, embed ou live : nous retrouvons la vidéo, avec ou sans www. Un lien live accepté ne signifie pas qu’une diffusion encore en cours peut être transcrite.
Les sous-titres du créateur d’abord
Avec source=auto, les sous-titres ajoutés par le créateur passent avant ceux générés automatiquement. Nous n’utilisons jamais les pistes traduites automatiquement.
Pas de sous-titres ? Passez par l’audio
Si aucune piste ne convient, l’IA transcrit la bande-son. Pour toujours repartir de l’audio, même quand des sous-titres existent, choisissez source=stt.
Une source indiquée dans le JSON
Le champ transcript_source vaut youtube_captions ou speech_to_text. Votre application peut ainsi distinguer les sous-titres récupérés d’une nouvelle transcription par IA.
Le même tarif dans les deux cas
Chaque minute commencée consomme 1 crédit, que le texte vienne des sous-titres ou de l’audio. Si la transcription échoue ou si vous l’annulez, vous ne payez rien.

Récupérer la transcription YouTube automatiquement

Envoyez le lien avec votre clé API depuis Python ou tout autre client HTTP. Avec wait=60, la requête reste ouverte jusqu’à 60 secondes. La référence de création détaille les champs et les codes de réponse.

Créez une clé dans le tableau de bord et utilisez-la côté serveur ou dans votre script. Dès que l’API répond, enregistrez l’ID de la transcription. Si elle n’est pas terminée, consultez GET /v1/transcriptions/:id : l’expiration du délai d’attente n’arrête pas le traitement.

Prévoyez les états queued, fetching et transcribing dans votre intégration. N’affichez le texte qu’à l’état completed ; à l’état failed, traitez l’erreur. Un délai réseau ou une vidéo inaccessible ne doit pas devenir une transcription vide présentée comme réussie.

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"}'

Gardez transcript_source avec le texte

La réponse indique la source du texte et, pour les sous-titres YouTube, le type de piste. billed_minutes correspond à la durée arrondie à la minute supérieure. Retrouvez tous les champs dans l’objet transcription.

Conservez transcript_source et caption_kind si la provenance compte dans votre application. Les sous-titres du créateur gardent le texte publié, sans horodatage par mot. Les sous-titres générés automatiquement donnent le début de chaque mot. La transcription par IA fournit le début, la fin et un indice de confiance.

Les segments contiennent aussi les temps de début et de fin en secondes. Utilisez-les pour relier une note au passage vidéo ou transmettre le bon extrait à un assistant. Ajoutez include=words au JSON seulement si vous avez besoin des détails par mot. L’exemple illustre la structure de la réponse, pas le contenu de la vidéo.

Extrait de réponse JSON
{
  "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." }
    ]
  }
}

Extraire les sous-titres YouTube par API ou transcrire l’audio

source=auto est le réglage par défaut. Avec captions (sous-titres uniquement), l’absence de piste utilisable donne no_captions, sans facturation. Avec stt, l’IA transcrit toujours l’audio. Le guide des sources explique les combinaisons possibles.

Choisissez captions si vous avez besoin du texte publié sur YouTube. Choisissez stt pour une nouvelle transcription de l’audio ou pour identifier les locuteurs. Avec source=auto, diarize=true fait passer directement par l’audio. Avec source=captions, cette combinaison est refusée : l’API n’ignore pas votre choix en silence.

La piste doit correspondre à la langue demandée, ou à la langue d’origine de la vidéo avec language=auto. Les pistes traduites automatiquement sont exclues. Pour la transcription par IA, une indication de langue aide la reconnaissance ; elle ne traduit pas l’enregistrement.

Corps de requête pour transcrire l’audio
{
  "platform": "youtube",
  "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "source": "stt"
}

Avant de renvoyer le même lien

Lisez d’abord le code d’erreur. Renvoyer une vidéo privée, soumise à une restriction d’âge ou encore en direct ne résout pas le problème. Avec no_captions, décidez si une transcription de l’audio convient à votre besoin. Si le traitement continue, consultez simplement son ID.

Pour retenter une création après un problème réseau, respectez le contrat Idempotency-Key. La réutilisation d’une transcription récente est une autre option : elle cherche la même vidéo avec les mêmes réglages. Un texte en cache peut encore être facturé comme une nouvelle transcription. Relire une transcription déjà terminée ne consomme aucune minute.

Le même endpoint accepte aussi les liens TikTok, Instagram et d’autres plateformes. YouTube, X, TikTok et Bluesky font notamment partie des sources avec sous-titres et repli sur l’audio. Vérifiez la liste des sources et options avant de proposer un réglage dans votre interface.

Essayez avec 60 minutes gratuites

Créez un compte et confirmez votre e-mail pour recevoir 60 minutes gratuites, offertes une seule fois. Sans carte bancaire.

Obtenir une clé API

Questions fréquentes

Une autre question ? Écrivez-nous

Et si la vidéo n’a pas de sous-titres ?

Avec source=auto, l’IA transcrit l’audio lorsqu’aucune piste utilisable n’est disponible. Si vous voulez uniquement les sous-titres publiés, choisissez source=captions : la transcription échouera plutôt que de passer par l’IA.

Quels liens YouTube puis-je envoyer ?

Les liens watch, youtu.be, Shorts, embed et live sont reconnus. Une page de chaîne ou un lien vers une playlist sans vidéo précise renvoie 422 invalid_url. Une diffusion encore en cours ne peut pas être transcrite.

Une vidéo privée peut-elle être transcrite ?

Non. Nous pouvons récupérer les vidéos publiques ou non répertoriées, mais pas les vidéos privées, soumises à une restriction d’âge ou encore en direct. Si vous possédez le fichier, importez-le à la place.

Combien coûte une transcription ?

1 crédit par minute commencée, avec les sous-titres comme avec l’IA. Les nouveaux comptes reçoivent une seule fois 60 minutes gratuites après confirmation de l’e-mail, sans carte bancaire.

Est-ce le package Python youtube-transcript-api ?

Non. transcript1 est une API REST hébergée. Depuis Python, vous envoyez une requête HTTP avec votre clé API ; vous n’avez pas à installer ce package.