Accéder au contenu principal

Récupérer la transcription d'une vidéo YouTube avec Python et Google Colab

Vous tombez sur une vidéo YouTube passionnante — un cours, une conférence, un tutoriel — et vous aimeriez en avoir le texte sous les yeux ? Pour le relire tranquillement, le copier dans vos notes, ou le confier à une intelligence artificielle ?

C'est exactement ce que nous allons faire ici. Sans rien installer sur votre ordinateur, sans connaissances avancées en programmation : un petit script qui tourne directement dans votre navigateur via Google Colab, et qui range proprement le résultat dans votre Google Drive.

À la fin, on verra même comment faire nettoyer et restructurer automatiquement cette transcription par une IA, car le texte brut récupéré sur YouTube est rarement agréable à lire.


Ce que le script va faire concrètement

En partant d'un simple lien YouTube, le script va :

  • Récupérer le texte de la vidéo — la transcription, qu'elle ait été écrite à la main par l'auteur ou générée automatiquement par YouTube.
  • Récupérer les informations de la vidéo — titre, chaîne, année, durée.
  • Enregistrer le tout dans un fichier texte bien nommé, directement dans votre Google Drive.

Le fichier obtenu portera un nom clair, du genre :

Canne à sucre de Polynésie française - NomDeLaChaine - 2023 (15:37).txt

Plus besoin de fouiller dans des fichiers nommés transcription_finale_v3.txt : tout est identifiable d'un coup d'œil.


Étape 1 — Préparer Google Colab

Google Colab est un service gratuit de Google qui permet d'exécuter du code Python dans le navigateur, sans rien installer. Si vous avez un compte Google, vous y avez déjà accès.

1. Ouvrez un nouveau notebook. Rendez-vous sur Google Colab et créez un nouveau notebook (Fichier → Nouveau notebook). Un notebook, c'est une page où l'on écrit du code dans des « cellules » que l'on exécute une par une.

2. C'est tout pour la préparation. Contrairement à beaucoup de tutoriels, ce script gère lui-même l'installation des outils et la connexion à votre Drive. Il suffit donc de copier le code de l'étape suivante dans une cellule.


Étape 2 — Le script complet

Collez l'intégralité du bloc suivant dans une cellule de votre notebook, puis exécutez-la (bouton ▶️ ou Maj + Entrée). Les explications détaillées viennent juste après.

Bon à savoir : ce script est à jour pour les versions récentes (1.2.x) de la bibliothèque youtube-transcript-api. Cette bibliothèque a profondément changé sa façon de fonctionner : si vous aviez un ancien script qui ne marche plus, c'est très probablement la cause. Le code ci-dessous tient compte de cette nouveauté et a été optimisé pour limiter les requêtes réseau (utile pour éviter les blocages sur Google Colab).

# Installer les bibliothèques nécessaires
!pip install youtube-transcript-api

# Installer yt-dlp (dernière version officielle)
!curl -L https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp
!chmod a+rx /usr/local/bin/yt-dlp  # Rendre exécutable

import os
import re
import json
import subprocess

from youtube_transcript_api import YouTubeTranscriptApi
from youtube_transcript_api.formatters import TextFormatter
from youtube_transcript_api._errors import (
    NoTranscriptFound,
    TranscriptsDisabled,
)
from google.colab import drive

# Monter Google Drive
drive.mount('/content/drive')


# --- 1. Récupérer les métadonnées de la vidéo (titre, chaîne, durée…) ---
def get_video_metadata(video_url):
    result = subprocess.run(
        ["yt-dlp", "--no-check-certificate", "--dump-json", video_url],
        stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
    )
    if result.returncode != 0 or not result.stdout.strip():
        # On affiche le vrai message d'erreur de yt-dlp, plus parlant
        print(f"yt-dlp n'a pas pu extraire les métadonnées :\n{result.stderr.strip()}")
        raise ValueError("Impossible de récupérer les métadonnées.")
    return json.loads(result.stdout)


# --- 2. Construire un nom de fichier propre et lisible ---
def format_filename(metadata):
    title = metadata.get('title', 'Sans-titre')
    uploader = metadata.get('uploader', 'Inconnu')
    upload_date = metadata.get('upload_date', '0000')[:4]   # Année uniquement
    duration = metadata.get('duration_string', '??')

    base_name = f"{title} - {uploader} - {upload_date} ({duration})"
    # Retirer tous les caractères interdits dans un nom de fichier
    base_name = re.sub(r'[\\/:*?"<>|]', '-', base_name)
    return f"{base_name}.txt"


# --- 3. Récupérer la transcription et l'enregistrer ---
def get_transcription(video_url):
    video_id_match = re.search(r"(?:v=|\/)([a-zA-Z0-9_-]{11})", video_url)
    if not video_id_match:
        raise ValueError("URL invalide. Veuillez fournir une URL correcte.")
    video_id = video_id_match.group(1)

    try:
        metadata = get_video_metadata(video_url)

        # On liste les transcriptions disponibles pour la vidéo
        api = YouTubeTranscriptApi()
        transcript_list = api.list(video_id)

        # On privilégie une transcription écrite à la main (plus fiable)…
        try:
            transcript_obj = transcript_list.find_manually_created_transcript(['fr', 'en'])
            print("Transcription manuelle trouvée.")
        except NoTranscriptFound:
            # … sinon on prend celle générée automatiquement par YouTube
            transcript_obj = transcript_list.find_generated_transcript(['fr', 'en'])
            print("Transcription générée automatiquement trouvée.")

        # On récupère directement les données depuis l'objet transcript
        # (un seul appel réseau, contrairement à un second api.fetch())
        fetched_transcript = transcript_obj.fetch()

        # Mise en forme du texte
        formatter = TextFormatter()
        text_transcript = formatter.format_transcript(fetched_transcript)

        # Préparer le fichier
        file_name = format_filename(metadata)
        save_path = f"/content/drive/MyDrive/{file_name}"

        intro = f"Transcription de la vidéo : {file_name.replace('.txt', '')}\n\n"
        full_text = intro + text_transcript

        # Enregistrer dans Google Drive
        with open(save_path, "w", encoding="utf-8") as file:
            file.write(full_text)

        print(f"✅ Transcription enregistrée ici : {save_path}")

    except TranscriptsDisabled:
        print("❌ Les sous-titres sont désactivés pour cette vidéo.")
    except NoTranscriptFound:
        print("❌ Aucune transcription disponible en français ou en anglais.")
    except Exception as e:
        print(f"Une erreur s'est produite : {e}")
        import traceback
        traceback.print_exc()


# --- Lancement ---
video_url = input("Collez l'URL de la vidéo YouTube : ")
get_transcription(video_url)

Au premier lancement, une fenêtre s'ouvrira pour vous demander d'autoriser Colab à accéder à votre Google Drive : choisissez votre compte et acceptez. C'est une étape normale et sans risque — vous redonnez simplement à votre propre script l'accès à votre propre Drive.


Étape 3 — Comment ça marche, en clair

Pas besoin d'être programmeur pour comprendre la logique. Le script enchaîne quatre actions simples.

Il installe ses propres outils. Les premières lignes téléchargent youtube-transcript-api (qui récupère le texte) et yt-dlp (qui récupère les informations de la vidéo). Ici, yt-dlp est installé directement depuis sa dernière version officielle, ce qui le rend plus robuste face aux changements fréquents de YouTube.

Il lit le lien que vous donnez. Dans une adresse YouTube, l'identifiant unique de la vidéo est cette suite de 11 caractères située après v= (par exemple dQw4w9WgXcQ). Le script l'extrait automatiquement.

Il cherche la transcription. Il tente d'abord d'obtenir une transcription écrite manuellement par l'auteur de la vidéo — la plus fiable. S'il n'en trouve pas, il bascule sur la transcription générée automatiquement par YouTube. Il privilégie le français, puis l'anglais. Concrètement, on commence par lister les transcriptions disponibles (api.list()) pour repérer la bonne, puis on récupère son contenu directement (transcript_obj.fetch()). Cette manière de procéder n'effectue qu'un seul appel à YouTube : c'est plus rapide, et surtout cela réduit le risque de blocage temporaire d'adresse IP, un désagrément fréquent quand on multiplie les requêtes depuis Google Colab.

Il enregistre le tout dans Google Drive, dans un fichier texte précédé d'une petite introduction rappelant de quelle vidéo il s'agit. Le nom du fichier est construit à partir du titre, de la chaîne, de l'année et de la durée — en prenant soin de retirer les caractères interdits (comme : ou ?) qui empêcheraient l'enregistrement.


Étape 4 — Tester

  1. Exécutez la cellule.
  2. Quand on vous le demande, collez l'URL d'une vidéo YouTube publique (les vidéos privées ou avec sous-titres désactivés ne fonctionneront pas).
  3. Suivez les messages affichés à l'écran.
  4. Ouvrez votre Google Drive : le fichier texte vous y attend, bien nommé.

Si ça ne marche pas : la cause la plus fréquente est tout simplement une vidéo dont les sous-titres ont été désactivés par son auteur — le script vous le dira clairement par un message explicite. Essayez alors avec une autre vidéo (une conférence ou un cours fonctionne presque toujours). Si une erreur plus technique survient, le script en affiche le détail complet pour aider au diagnostic. Notez enfin que YouTube modifie régulièrement son fonctionnement : si le script tombe en panne du jour au lendemain, relancez d'abord la cellule pour réinstaller les outils à jour.


Étape 5 — Aller plus loin : nettoyer la transcription avec une IA

Vous l'aurez constaté : une transcription automatique brute, c'est… brut. Un seul gros bloc de texte, sans ponctuation cohérente, sans paragraphes, parfois avec des mots mal reconnus. Lisible pour une machine, pénible pour un humain.

C'est là qu'une intelligence artificielle entre en jeu. Une fois la transcription récupérée, je la fais systématiquement repasser par un assistant IA (Claude, ChatGPT ou Gemini) pour la transformer en un document propre et exploitable.

Concrètement, l'IA se charge de :

  • rétablir la ponctuation et les majuscules, absentes des sous-titres automatiques ;
  • découper le texte en paragraphes logiques, suivant les idées abordées ;
  • ajouter des titres et sous-titres pour structurer le propos et naviguer rapidement ;
  • corriger les fautes de reconnaissance évidentes (noms propres, termes techniques mal transcrits) ;
  • supprimer les tics de langage et répétitions propres à l'oral, sans trahir le contenu.

On passe ainsi d'une bouillie de texte à un véritable document de travail, structuré et agréable à lire — idéal pour réviser, citer, ou alimenter un outil de prise de notes comme NotebookLM.

Voici le type de consigne que je donne à l'IA après lui avoir collé la transcription :

« Voici la transcription automatique brute d'une vidéo. Restructure-la en un document clair et lisible : rétablis la ponctuation et les paragraphes, ajoute des titres et sous-titres pertinents, corrige les fautes manifestes de reconnaissance vocale, et supprime les répétitions propres à l'oral. Ne reformule pas les idées et n'ajoute aucun contenu : conserve fidèlement le propos d'origine. »

La précision « ne reformule pas, n'ajoute rien » est essentielle : le but est de mettre en forme, pas de réécrire ni d'inventer. On garde la parole de l'auteur, on lui rend juste sa lisibilité.

C'est cette dernière étape qui transforme un simple gain de temps technique en un véritable outil de travail intellectuel : à partir de n'importe quelle vidéo, on obtient en quelques minutes un document propre, prêt à être lu, annoté ou archivé.


Conclusion

Avec une trentaine de lignes de code et quelques clics dans Google Colab, vous disposez désormais d'une chaîne complète : de l'URL YouTube jusqu'à un document texte propre et structuré, en passant par un classement automatique dans votre Drive.

L'astuce qui change tout reste la dernière étape : laisser une IA faire le travail ingrat de mise en forme. C'est la différence entre « avoir le texte d'une vidéo » et « avoir un document réellement utilisable ».

N'hésitez pas à adapter le script à vos besoins — changer le dossier de destination, ajouter d'autres langues, ou enchaîner directement l'appel à l'IA. Bonne exploration !

Commentaires

Posts les plus consultés de ce blog

Synchroniser ses emails MELANIE sur son smartphone

Tu veux recevoir tes emails educagri.fr directement sur ton téléphone, sans avoir à passer par le navigateur ? On va utiliser le serveur zpush (protocole Exchange ActiveSync) pour synchroniser ta boîte MEL sur ton smartphone ou ta tablette, que tu sois sur Android ou iOS. Petit bonus que beaucoup ignorent : tu vas pouvoir synchroniser bien plus que les emails. Avec ActiveSync tu récupères aussi les contacts, l'agenda, les tâches et les notes de ton compte MEL. Prérequis : ton téléphone doit être sécurisé (empreinte, code PIN, mot de passe…) pour autoriser la synchronisation. C'est une obligation côté serveur, tu ne peux pas la contourner. Ce que tu pourras faire après ces 5 minutes de configuration : Recevoir tes emails educagri en temps réel Être notifié à chaque nouveau message Envoyer des emails depuis ton adresse educagri Synchroniser tes contacts et ton agenda professionnels Les paramètres à retenir Avant de commencer, garde ces in...

Rediriger ses emails educagri

Tu veux recevoir tes emails educagri.fr directement sur ta boîte personnelle (Gmail, iCloud, Outlook…) sans avoir à te connecter à l'interface MEL en permanence ? Bonne nouvelle : la nouvelle interface MÉLANIE permet toujours de configurer une redirection automatique de tes emails. Voici comment faire en moins de 3 minutes. ⚠️ Limitation importante à connaître avant de commencer Seuls les emails provenant des domaines @educagri.fr et @agriculture.gouv.fr sont effectivement redirigés. Les emails externes (Gmail, Yahoo, Outlook, etc.) ne sont pas transférés vers ta boîte personnelle. Cette limitation est en place côté serveur MEL. Une solution de contournement est proposée en bas de l'article. Si tu préfères une synchronisation complète (tous les emails, dans les deux sens, avec contacts et agenda), regarde plutôt mon article sur la synchronisation MEL via ActiveSync sur smartphone . C'est plus puissant, et ça contourne la limitation des domaines externes. ...