Extraction de la retranscription textuelle d’une vidéo YouTube avec YouTubeTranscript

E

Introduction

L’extraction d’un fichier audio en texte via Google Speech-to-Text est au final relativement contraignante du fait que les vidéos dépassant 60 secondes doivent être déposées sur Google Cloud.
Il existe donc une autre technique visant à extraire la retranscription grâce à la librairie YouTube Transcript. Cette librairie va tout simplement scraper le texte retranscrit par Google directement dans la vidéo. Cette retranscription est accessible directement dans YouTube mais l’inconvénient du copier/coller, au-delà du fait qu’il est une étape manuelle chronophage, est que le texte récupéré n’est malheureusement pas concaténé. Bizarrement, Google propose cette retranscription sous forme de segments de texte qui sont en fait calés sur un horodatage de la vidéo.
Le script ci-dessous a pour objectif de récupérer le texte, le concaténer et l’exporter au format texte, avec en plus un fichier MP3 si vous souhaitez refaire la même manipulation dans Google Speech-to-Text (si vous pensez que la traduction est plus précise) ou bien de passer l’audio tout en relisant le fichier transcrit pour y apporter des corrections.
On peut dire que c’est en fait une méthode semi-automatique, mais qui a l’avantage d’être gratuite, simple et rapide ! »

Les librairies du script

YouTubeTranscriptApi est une bibliothèque Python qui permet de récupérer les éléments textuels des vidéos YouTube. Elle fournit une interface pour interagir avec l’API de YouTube. L’avantage est qu’il n’est pas nécessaire d’avoir un compte API Google. Aucune identification n’est demandée pour faire fonctionner cette librairie ; elle se contente de récupérer ce que Google met à disposition dans la vidéo.

Pytube est une bibliothèque qui permet de télécharger des vidéos depuis YouTube et d’extraire des informations telles que les titres, les informations descriptives et les textes. Dans notre cas, on récupère la transcription que Google met à disposition dans la vidéo.
Pytube utilise FFmpeg en arrière-plan pour convertir les flux vidéo ou audio téléchargés au format souhaité.
Vous pouvez tester le script avant de vous lancer dans l’installation de FFmpeg. Si le script bloque, alors vous n’aurez d’autre choix que de suivre les étapes suivantes d’installation de FFmpeg.

Installation de FFmpeg avec Homebrew

Homebrew est un gestionnaire de paquets pour macOS qui simplifie l’installation de logiciels sur macOS.
Cela permet d’automatiser le processus de téléchargement, installation, et configuration de FFmpeg, évitant la nécessité de manipulations manuelles plus complexes.
Il est tout à fait possible d’installer ffmpeg sans Homebrew, mais cela peut être plus complexe et implique des étapes manuelles. Cette méthode manuelle requièrent une connaissance technique plus approfondie et peut être sujette à des erreurs si les étapes ne sont pas suivies correctement. C’est pourquoi des gestionnaires de paquets comme Homebrew sont souvent préférés pour leur facilité d’utilisation.

Procédure d’installation (pour Mac)

Dans le terminal de votre Mac, vous devez lancer l’installation de brew avec la ligne de code suivante :

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Une fois installé, vous devrez ouvrir le fichier .zshrc pour insérer ou vérifier la présence du path de brew.

open -e ~/.zshrc

L’éditeur de texte s’ouvre et vous devrez vérifier ou ajoutez Homebrew à votre PATH.
Ajoutez la ligne suivante à la fin du fichier .zshrc :

export PATH="/opt/homebrew/bin:$PATH"

Enregistrez le fichier et rechargez votre configuration de shell.
Je vous conseille de fermer et ré-ouvrir votre terminal pour relancer le fichier .zshrc

source ~/.zshrc

Le script

Pour utiliser le script vous devez installer au préalable les librairies suivantes :

pip install tkinter
pip install pytube
pip install youtube_transcript_api

Le script fonctionne aussi bien pour les vidéos au format classique que pour les shorts.
À travers (la mini) l’interface graphique, vous devez spécifier l’URL de la vidéo ainsi que le format d’export de l’audio (WAV ou MP3). J’ai inclus les deux formats car de mémoire, Google Speech to Text privilégie les fichiers WAV.
L’extraction de la piste audio vous évitera également de passer par des sites web pour réaliser cette tâche.
La langue de la vidéo est détectée automatiquement.
Enfin, vous devez spécifier le répertoire de sortie des fichiers MP3/WAV et le fichier texte.
Le texte sera concaténé mais n’aura pas de ponctuation, car la retranscription de Google n’offre pas cette option. C’est l’un des principaux points qui différencie la librairie YouTube Transcript de Google Speech to Text.

import tkinter as tk
from tkinter import filedialog, messagebox
from youtube_transcript_api import YouTubeTranscriptApi
import os
from pytube import YouTube

# Définir la langue par défaut
DEFAULT_LANG = "fr"  # Par exemple, "fr" pour le français

# Fonction pour télécharger et transcrire l'audio
def download_and_transcribe():
    # Obtention de l'ID de la vidéo YouTube depuis l'entrée de l'utilisateur
    video_id = url_entry.get()
    if not video_id:
        messagebox.showerror("Erreur", "Veuillez entrer l'ID de la vidéo YouTube")
        return

    # Sélection du répertoire de destination pour les fichiers
    directory = filedialog.askdirectory()
    if not directory:
        return  # Quitter si aucun répertoire n'est sélectionné

    # Sélection du format audio (MP3 ou WAV)
    format = format_var.get()
    if format not in ["mp3", "wav"]:
        messagebox.showerror("Erreur", "Veuillez sélectionner un format audio valide")
        return

    # Téléchargement des textes de la vidéo YouTube avec la langue par défaut
    try:
        transcripts = YouTubeTranscriptApi.get_transcript(video_id, languages=[DEFAULT_LANG])
        if transcripts:
            transcript_text = " ".join([part['text'] for part in transcripts])
            transcript_file_path = os.path.join(directory, "transcript.txt")
            with open(transcript_file_path, 'w', encoding='utf-8') as file:
                file.write(transcript_text)
            messagebox.showinfo("Succès", "Les sous-titres ont été téléchargés avec succès.")

            # Téléchargement de l'audio au format spécifié
            audio_path = os.path.join(directory, "audio")

            # Téléchargement de l'audio depuis YouTube
            yt = YouTube(f"https://www.youtube.com/watch?v={video_id}")
            stream = yt.streams.filter(only_audio=True).first()
            audio_file_path = stream.download(output_path=directory, filename="audio")

            # Renommer le fichier avec l'extension appropriée
            os.rename(audio_file_path, f"{audio_path}.{format}")

            messagebox.showinfo("Succès", "L'audio a été téléchargé avec succès.")
        else:
            messagebox.showwarning("Attention", "Aucun sous-titre disponible pour cette vidéo.")
    except Exception as e:
        messagebox.showerror("Erreur", f"Une erreur s'est produite : {e}")

# Interface graphique
app = tk.Tk()
app.title("Téléchargeur et Transcripteur d'audio YouTube")

# Champ pour saisir l'ID de la vidéo YouTube
tk.Label(app, text="Entrez l'ID de la vidéo YouTube :").pack()
url_entry = tk.Entry(app, width=50)
url_entry.pack()

# Choix du format audio (MP3 ou WAV)
format_var = tk.StringVar(value="mp3")
tk.Label(app, text="Choisissez le format audio :").pack()
tk.Radiobutton(app, text="MP3", variable=format_var, value="mp3").pack()
tk.Radiobutton(app, text="WAV", variable=format_var, value="wav").pack()

# Bouton pour démarrer le téléchargement et la transcription
download_button = tk.Button(app, text="Télécharger et Transcrire", command=download_and_transcribe)
download_button.pack()

# Lancement de l'application
app.mainloop()

 

Conclusion

En conclusion, après avoir exploré les deux possibilités offertes par les librairies YouTubeTranscript et Google Speech-to-Text, il apparaît clairement que chacune présente ses avantages et ses limites.
La librairie YouTubeTranscript se distingue par sa simplicité d’utilisation (aucune clé API sera nécessaire).
En revanche, Google Speech-to-Text offre l’avantage majeur de gérer la ponctuation, ce qui peut être crucial pour certains cas d’utilisation, je pense notamment au passage du corpus dans IRAMUTEQ.

Ces deux approches sont parmi les solutions les plus couramment utilisées, mais il convient de noter l’existence de nombreuses plateformes payantes offrant ce service.

 

 

A propos de l'auteur

Stéphane Meurisse

Ajouter un commentaire

Stéphane Meurisse