YouTubeTranscript vs Whisper
Lorsqu’il s’agit d’extraire la retranscription textuelle d’une vidéo YouTube, trois solutions principales se démarquent : YouTubeTranscript , Google speech to texte et Whisper.
YouTubeTranscript ne fait que récupérer le texte généré par YouTube. Ce texte est souvent structuré comme des sous-titres, découpé en segments avec des horodatages, mais au final, c’est bien une transcription des paroles. L’extraction est rapide et c’est du Google !
En revanche, Whisper, développé par OpenAI, fonctionne différemment : il analyse directement l’audio de la vidéo pour en extraire le texte, sans dépendre de sous-titres préexistants de Youtube. Cette approche nécessite de télécharger et convertir l’audio, ce qui demande plus de ressources et de temps d’exécution. Le script va donc extraire le fichier mp4 (vidéo) et le convertir en mp3 (audio), vous aurez donc deux fichiers dans votre dossier en plus du fichier texte.
Personnalisation du script
Dans le script, vous pouvez choisir parmi plusieurs modèles : tiny, base, small, medium et large. Plus le modèle est grand, plus la transcription (devrait) être précise, mais aussi plus lente et gourmande en ressources.
def transcribe_audio(file_path, model_size="base", language="fr"):
Les modèles disponibles sont : tiny (39 Mo), base (74 Mo), small (244 Mo), medium (769 Mo), large (1.5 Go).
De plus, la langue de transcription peut être précisée avec l’argument language="fr".
def transcribe_audio(file_path, model_size="base", language="fr"):
Format de la transcription compatible avec IRaMuTeQ
Une particularité de ce script est qu’il prépare la transcription pour un traitement automatique dans IRaMuTeQ. Pour cela, chaque fichier de transcription commence par la ligne **** *vidéo_1
, suivie du texte extrait (à la ligne). Grâce à cette normalisation, vous pouvez directement importer le fichier généré par le script dans IRaMuTeQ sans manipulation supplémentaire, ou en ajoutant vos propres variables étoilées.
Vous pouvez également utiliser ce script pour extraire le texte de plusieurs vidéos et les compiler dans un seul fichier texte par simple copier-coller. Un prochain script permettra de scraper une playlist YouTube en une seule passe.
Le code source
# Installer les dépendances avant utilisation : pip install openai-whisper yt-dlp # Utilisation : Remplacer `youtube_url` par le lien YouTube de la vidéo à transcrire import os from yt_dlp import YoutubeDL import whisper def download_youtube_audio(url, output_path="downloads"): # Télécharge l'audio d'une vidéo YouTube try: if not os.path.exists(output_path): os.makedirs(output_path) ydl_opts = { 'format': 'bestaudio/best', 'outtmpl': os.path.join(output_path, '%(title)s.%(ext)s'), 'postprocessors': [{ 'key': 'FFmpegExtractAudio', 'preferredcodec': 'mp3', 'preferredquality': '192', }], } with YoutubeDL(ydl_opts) as ydl: info_dict = ydl.extract_info(url, download=True) file_path = ydl.prepare_filename(info_dict).replace(".webm", ".mp3").replace(".m4a", ".mp3") return file_path except Exception as e: print(f"Erreur lors du téléchargement : {e}") return None def transcribe_audio(file_path, model_size="base", language="fr"): # Modifier ici la langue et le modèle : base, # Transcrit un fichier audio en texte try: model = whisper.load_model(model_size) result = model.transcribe(file_path, language=language) return result["text"] except Exception as e: print(f"Erreur lors de la transcription : {e}") return None # Modifier ici avec l'URL YouTube à transcrire youtube_url = "https://www.youtube.com/watch?v=WDQqDOXAUIM" download_folder = "Téléchargement" # Téléchargement et transcription audio_path = download_youtube_audio(youtube_url, output_path=download_folder) if audio_path: transcription = transcribe_audio(audio_path, model_size="base", language="fr") if transcription: output_text_file = os.path.splitext(audio_path)[0] + ".txt" with open(output_text_file, "w", encoding="utf-8") as f: f.write("**** *vidéo_1\n" + transcription) print(f"Transcription enregistrée dans : {output_text_file}")