Comment obtenir la transcription d'une vidéo YouTube par programmation (guide 2026)
Les transcriptions sont parmi les données les plus utiles de YouTube, mais aussi les plus pénibles à obtenir. Vous en avez besoin pour les sous-titres, pour alimenter un LLM, pour le SEO, pour l'accessibilité, ou pour construire une fonction de recherche sur le contenu vidéo. Quelle que soit votre raison, il vous faut un moyen fiable de transformer une URL de vidéo en texte brut.
Ce guide montre trois façons de le faire, d'une commande one-liner à un appel digne de la production, toutes contre une seule API HTTP.
Pourquoi il n'existe pas de moyen « officiel »
YouTube ne propose pas d'API de transcription publique et documentée pour les développeurs. C'est pourquoi tous les outils de cet espace doivent contourner les internes en perpétuelle évolution de YouTube.
Ça fonctionne… jusqu'au jour où ça ne fonctionne plus : YouTube bloque agressivement les IP, change ses endpoints et ajoute des contrôles anti-bot. Si vous construisez quelque chose de sérieux, vous ne voulez pas être celui qui mène ce combat chaque semaine.
Les trois options
1. La bibliothèque youtube_transcript_api (Python). Idéale pour des scripts ponctuels. Mais elle casse dès que YouTube change quoi que ce soit, elle est réservée à Python, et vous êtes seul face aux blocages d'IP.
2. yt-dlp. Un couteau suisse pour télécharger. L'extraction de transcription est une fonctionnalité secondaire, et il embarque beaucoup de mécanique (et de dépendances) pour ce qui est, au fond, un simple appel API.
3. Une API de transcription hébergée. Vous envoyez une URL de vidéo, vous recevez du JSON. Facile. Pas cher. La maintenance devient le problème de votre fournisseur.
L'endpoint
Le reste de ce guide utilise TranscribeMaxx, une API hébergée. Un seul endpoint, GET /api/v1/transcript, renvoie la transcription complète en JSON, avec ou sans horodatages, ainsi que les métadonnées comme le titre et la durée de la vidéo.
C'est gratuit pour commencer : récupérez une clé en un clic sur la page d'accueil (sans inscription), ou lisez la documentation de l'API.
curl : le moyen le plus rapide de tester
# transcription simple, en JSON (par défaut)
curl "https://transcribemaxx.com/api/v1/transcript?video_url=jNQXAC9IVRw" \
-H "Authorization: Bearer tmx_VOTRE_CLE"
# texte brut au lieu de JSON
curl "https://transcribemaxx.com/api/v1/transcript?video_url=jNQXAC9IVRw&format=text" \
-H "Authorization: Bearer tmx_VOTRE_CLE"
# avec horodatages + métadonnées
curl "https://transcribemaxx.com/api/v1/transcript?video_url=jNQXAC9IVRw&include_timestamp=true&send_metadata=true" \
-H "Authorization: Bearer tmx_VOTRE_CLE"
La réponse JSON ressemble à ceci :
{
"video_id": "jNQXAC9IVRw",
"language": "en",
"transcript": [
{ "text": "All right, so...", "start": 0, "duration": 3.2 },
{ "text": "...", "start": 3.2, "duration": 4.1 }
],
"length_seconds": 19,
"lengthText": "0:19"
}
Node.js (sans dépendances)
Node 18+ inclut fetch, donc un appel de transcription complet tient en une quinzaine de lignes :
const res = await fetch(
"https://transcribemaxx.com/api/v1/transcript?video_url=jNQXAC9IVRw",
{ headers: { Authorization: "Bearer tmx_VOTRE_CLE" } }
);
const data = await res.json();
const fullText = data.transcript.map((s) => s.text).join(" ");
console.log(fullText);
Python
import requests
res = requests.get(
"https://transcribemaxx.com/api/v1/transcript",
params={"video_url": "jNQXAC9IVRw"},
headers={"Authorization": "Bearer tmx_VOTRE_CLE"},
)
data = res.json()
full_text = " ".join(seg["text"] for seg in data["transcript"])
print(full_text)
Horodatages et langues
Passez include_timestamp=true et chaque segment arrive avec son temps de début start et sa duration, pratique pour construire un lecteur avec légendes ou pour sauter à des sections.
La sélection de la langue est une liste de priorités : language=fr,en essaie le français d'abord, puis retombe sur l'anglais. Les légendes automatiques fonctionnent aussi : l'API accepte les codes asr-* (par exemple asr-es pour les sous-titres automatiques espagnols), pour transcrire même les vidéos sans sous-titres manuels.
Tarifs
Les formules commencent à 1 $/mois pour 300 transcriptions (facturation annuelle, 12 $/an), jusqu'à 2 000/mois avec la formule pro. Une offre gratuite existe aussi, pour tester sans inquiétude. Comparez les formules sur la page des tarifs.
Résumé
- YouTube n'a pas d'API de transcription officielle, donc chaque solution contourne le problème
- Les bibliothèques conviennent aux scripts ; une API hébergée, c'est ce qu'il faut en production
- Un seul endpoint,
GET /api/v1/transcript, couvre texte, JSON, horodatages et métadonnées
Vous voulez comparer les rares options de cet espace ? Lisez notre comparatif des API de transcription YouTube.
Essayez par vous-même : c'est gratuit pour commencer
Obtenez votre clé API en un clic et transcrivez votre première vidéo en quelques secondes. Aucune inscription requise pour la clé gratuite.