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 ! »
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.