Dans cet article, je vais vous guider à travers la configuration et l’utilisation du modèle de transcription Whisper d’OpenAI sur un système Windows 11. Vous découvrirez comment j’ai automatisé la transcription de fichiers audio et de vidéos YouTube via un serveur domestique Nextcloud, avec une gestion simple et fluide des fichiers à partir d’un smartphone. Ce guide couvre toutes les étapes, de l’installation des dépendances à l’automatisation complète de la transcription.
Dans la vrai vie qu’est ce qui ce passe ?
J’enregistre les partie de cours de fac importantes et prend des notes écrites pour le reste. Sur le trajet je relis mes notes et en fais un fichier audio. Toujours sur mon smartphone, je déplace les fichiers audio dont je veux une retranscription dans un répertoire qui est sur mon cloud privée « nextcloud ». Je prend soins de nommer les fichiers explicitement. Nextcloud, l’application sur mon smartphone synchronise le dossier et fait une copie des fichier audio sur mon serveur. Je fais un peu différemment si je veux une retranscription d’un documentaire ou d’une conférence sur youtube. Je copie l’adresse de la vidéo dans un fichier .txt que je déplace dans un autre répertoire de mon cloud prévu aussi uniquement pour ça. je nomme aussi bien le fichier. Mon serveur lui vas scanner les deux répertoires , si le script détecte des fichiers il les transcrits, et dépose la transcription sous forme de fichier .txt et .docx dans un troisième répertoire aussi dans le cloud, me permettant ainsi de récupérer les textes de retranscription.
Suite à cela je peu retravailler mes cours de façon automatiser avec une autre IA tel que ChatGPT
Configuration matérielle utilisée :
- Système d’exploitation : Windows 11
- GPU : Nvidia 4060 Ti 16 Go VRAM
- CPU : AMD Ryzen 7
- RAM : 64 Go DDR4 3600 MHz
- Stockage : SSD NVMe
1. Préparation de l’environnement
1.1. Installation de Python
Si vous ne l’avez pas déjà fait, installez Python sur votre machine. Lors de l’installation, veillez à cocher l’option « Add Python to PATH ».
1.2. Création d’un environnement virtuel
Créez un environnement virtuel Python pour isoler les dépendances de votre projet. Voici la commande pour créer un environnement :
python -m venv whisper_envBashActivez l’environnement virtuel :
whisper_env\Scripts\activateBash1.3. Installation des dépendances
Pour que le script fonctionne, installez les bibliothèques suivantes dans votre environnement virtuel :
- Whisper : Le modèle de transcription d’OpenAI.
pip install git+https://github.com/openai/whisper.gitBash- PyTorch (avec CUDA pour l’accélération GPU)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118Bash- python-docx : Pour convertir les fichiers
.txten.docx.
pip install python-docxBash- yt-dlp : Pour télécharger des vidéos YouTube et en extraire l’audio.
pip install yt-dlpBash- ffmpeg-python : Une interface Python pour manipuler les fichiers audio et vidéo via FFmpeg.
pip install ffmpeg-pythonBash1.4. Installation de FFmpeg
FFmpeg est requis pour la manipulation des fichiers audio et vidéo. Il doit être installé en dehors de Python. Voici comment procéder :
- Téléchargez FFmpeg depuis le site officiel.
- Décompressez l’archive.
- Ajoutez FFmpeg au PATH de votre système pour qu’il soit accessible partout.
2. Démarrage automatique de Whisper au lancement de Windows
Pour rendre le processus encore plus simple et transparent, j’ai configuré le démarrage automatique de Whisper au lancement de mon PC. Cela me permet de lancer Whisper et mon script de transcription sans intervention manuelle dès que mon ordinateur démarre.
2.1. Création d’un script de démarrage Windows
Le script de démarrage suivant est configuré pour activer l’environnement virtuel Python, se rendre dans le répertoire où se trouve le script de transcription, et lancer ce dernier en arrière-plan.
Voici le contenu du fichier .bat que j’utilise pour démarrer Whisper et lancer le script de transcription lors du démarrage de mon PC :
@echo off
timeout /t 30
REM Activer l'environnement virtuel et journaliser
echo Activating virtual environment >> F:\IA\whisper\start_log.txt
call F:\IA\whisper\venv\Scripts\activate.bat >> F:\IA\whisper\start_log.txt 2>&1
REM Se déplacer dans le répertoire du script
echo Changing directory to F:\IA\whisper >> F:\IA\whisper\start_log.txt
cd /d F:\IA\whisper >> F:\IA\whisper\start_log.txt 2>&1
REM Démarrer le script de transcription en arrière-plan et journaliser
echo Starting transcription script >> F:\IA\whisper\start_log.txt
start /B python transcription_script.py >> F:\IA\whisper\script_log.txt 2>&1
REM Désactiver l'environnement virtuel une fois que le script s'est terminé
echo Deactivating virtual environment >> F:\IA\whisper\start_log.txt
deactivateBash2.2. Fonctionnement du script de démarrage
- Activation de l’environnement virtuel : Le script commence par attendre 30 secondes pour laisser au système le temps de démarrer, puis il active l’environnement virtuel où toutes les dépendances Python sont installées.
- Changement de répertoire : Ensuite, il se déplace dans le répertoire où se trouve le script de transcription.
- Lancement du script de transcription : Le script
transcription_script.pyest lancé en arrière-plan et enregistre les logs dans un fichier (script_log.txt). - Désactivation de l’environnement virtuel : Enfin, une fois le script terminé, l’environnement virtuel est désactivé.
3. Automatisation de la transcription avec Nextcloud
3.1. Gestion des fichiers via Nextcloud
J’ai mis en place un serveur Nextcloud à domicile avec un nom de domaine et un reverse proxy. Cette configuration me permet de gérer mes fichiers à distance via l’application Nextcloud sur mon smartphone. Voici comment le processus fonctionne :
- Pour les fichiers audio : J’enregistre des fichiers audio sur mon smartphone et je les copie dans un répertoire Nextcloud dédié à la transcription. Une fois le fichier synchronisé avec mon serveur, un script Python prend le relais pour effectuer la transcription.
- Pour les vidéos YouTube : J’ai un autre répertoire dédié où je crée un fichier texte contenant l’URL de la vidéo YouTube que je souhaite transcrire. Ce fichier
.txtest nommé en fonction du contenu de la vidéo. Une fois ce fichier synchronisé avec le serveur, le script télécharge la vidéo, en extrait l’audio, et génère la transcription.
3.2. Comment fonctionne le script d’automatisation ?
Voici les étapes détaillées du fonctionnement du script :
- Surveillance des répertoires Nextcloud : Le script surveille en continu les répertoires spécifiés dans Nextcloud, à la recherche de nouveaux fichiers audio ou de fichiers texte contenant des URL YouTube.
- Transcription automatique des fichiers audio : Dès qu’un fichier audio est détecté, il est transcrit en texte grâce à Whisper. Les résultats sont générés sous deux formats : .txt et .docx.
- Téléchargement et transcription des vidéos YouTube : Si un fichier
.txtcontenant une URL YouTube est détecté, le script télécharge la vidéo, en extrait l’audio avecyt-dlp, puis génère une transcription. - Stockage des transcriptions : Une fois les transcriptions effectuées, elles sont sauvegardées dans un autre répertoire Nextcloud. Ces fichiers sont immédiatement accessibles via l’application Nextcloud sur mon smartphone.
4. Fonctionnement du script de transcription
Le script de transcription est au cœur de ce processus d’automatisation. Il gère la détection des fichiers audio ou des liens YouTube dans les répertoires surveillés, effectue la transcription via Whisper, et enregistre les résultats.
import os
import time
import whisper
import torch
from docx import Document
import yt_dlp
# Dossiers source et destination
audio_folder = r"\\OMV\whisper\trans_audio"
text_folder = r"\\OMV\whisper\trans_texte"
video_folder = r"\\OMV\whisper\trans_video"
lock_file = os.path.join(audio_folder, "transcription.lock")
# Extensions audio supportées
audio_extensions = [".m4a", ".mp3", ".wav", ".flac"]
# Modèle Whisper à utiliser
model_name = "large-v3"
device = "cuda" if torch.cuda.is_available() else "cpu"
model = whisper.load_model(model_name, device=device)
# Fonction pour transcrire un fichier audio dans la langue d'origine
def transcribe_audio(file_path):
print(f"Transcribing {file_path} in the original language...")
result = model.transcribe(file_path)
return result["text"]
# Fonction pour convertir .txt en .docx
def txt_to_docx(txt_path, docx_path):
print(f"Converting {txt_path} to {docx_path}...")
doc = Document()
with open(txt_path, "r", encoding="utf-8") as f:
text = f.read()
doc.add_paragraph(text)
doc.save(docx_path)
# Fonction pour télécharger la vidéo YouTube et renommer le fichier audio
def download_youtube_video(video_url, output_dir, output_file_base):
ydl_opts = {
'format': 'bestaudio/best', # Télécharger la meilleure qualité audio disponible
'outtmpl': os.path.join(output_dir, output_file_base + '.webm'), # Utiliser le nom du fichier texte pour .webm
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3', # Convertir en MP3
'preferredquality': '192',
}],
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info_dict = ydl.extract_info(video_url, download=True)
video_title = info_dict.get("title", "Untitled") # Obtenir le titre de la vidéo
audio_file = os.path.join(output_dir, output_file_base + '.mp3') # Utiliser le même nom de base pour .mp3
print(f"Downloaded and converted: {audio_file}")
return audio_file, video_title
# Fonction principale pour scanner le dossier et traiter les fichiers
def scan_and_process():
while True:
# Si une transcription est en cours, attendre
if os.path.exists(lock_file):
print("Transcription en cours. Attente de 5 minutes avant de scanner à nouveau...")
time.sleep(300) # 5 minutes
continue
# Vérifier si le fichier d'arrêt existe
stop_file = os.path.join(audio_folder, "stop.txt")
if os.path.exists(stop_file):
print("Stop file detected. Exiting the script...")
# Renommer le fichier stop.txt en no_stop.txt
no_stop_file = os.path.join(audio_folder, "no_stop.txt")
os.rename(stop_file, no_stop_file)
# Sortir du script après l'arrêt
break
# Créer un fichier de verrouillage
with open(lock_file, "w") as lock:
lock.write("locked")
try:
# Scanner le dossier des fichiers audio
for file_name in os.listdir(audio_folder):
if any(file_name.endswith(ext) for ext in audio_extensions):
audio_path = os.path.join(audio_folder, file_name)
txt_file_name = os.path.splitext(file_name)[0] + ".txt"
txt_path = os.path.join(text_folder, txt_file_name)
# Vérifie si le fichier .txt existe déjà
if not os.path.exists(txt_path):
# Transcrire le fichier audio en texte
text = transcribe_audio(audio_path)
# Enregistrer le texte dans un fichier .txt
with open(txt_path, "w", encoding="utf-8") as txt_file:
txt_file.write(text)
# Convertir le fichier .txt en .docx
docx_file_name = txt_file_name.replace(".txt", ".docx")
docx_path = os.path.join(text_folder, docx_file_name)
txt_to_docx(txt_path, docx_path)
else:
print(f"Transcript for {file_name} already exists.")
# Scanner le dossier des fichiers vidéos (liens YouTube)
for file_name in os.listdir(video_folder):
if file_name.endswith(".txt"):
link_path = os.path.join(video_folder, file_name)
with open(link_path, "r") as link_file:
video_url = link_file.readline().strip()
# Nom du fichier de transcription basé sur le nom du fichier .txt déposé
base_name = os.path.splitext(file_name)[0]
txt_file_name = base_name + ".txt"
txt_path = os.path.join(text_folder, txt_file_name)
docx_file_name = base_name + ".docx"
docx_path = os.path.join(text_folder, docx_file_name)
mp3_file_name = base_name + ".mp3"
mp3_path = os.path.join(audio_folder, mp3_file_name)
# Vérifie si un fichier .mp3, .txt ou .docx existe déjà
if os.path.exists(mp3_path) or os.path.exists(txt_path) or os.path.exists(docx_path):
print(f"Transcript or audio file for {base_name} already exists. Skipping.")
else:
# Télécharge la vidéo YouTube et récupère le chemin de l'audio et le titre de la vidéo
audio_path, video_title = download_youtube_video(video_url, audio_folder, base_name)
# Transcrire l'audio en texte
text = transcribe_audio(audio_path)
# Créer la transcription avec le titre, l'URL et le texte transcrit
transcription_with_metadata = f"{video_title}\n{video_url}\n\n{text}"
# Enregistrer le texte avec le titre et l'URL dans un fichier .txt
with open(txt_path, "w", encoding="utf-8") as txt_file:
txt_file.write(transcription_with_metadata)
# Convertir le fichier .txt en .docx
txt_to_docx(txt_path, docx_path)
# Supprimer la vidéo téléchargée après traitement
webm_file = os.path.join(audio_folder, base_name + '.webm')
if os.path.exists(webm_file):
os.remove(webm_file)
print(f"Deleted temporary file: {webm_file}")
except Exception as e:
print(f"Error occurred: {e}. Retrying in 2 minutes...")
time.sleep(60) # Attendre 1 minute avant de réessayer
# Supprimer le fichier de verrouillage une fois terminé
os.remove(lock_file)
# Attendre 5 minutes avant de refaire une vérification
print("Waiting for 5 minutes...")
time.sleep(300)
# Lancer le processus
if __name__ == "__main__":
scan_and_process()PythonÉtapes clés du script :
- Surveillance des répertoires Nextcloud
- Le script surveille le répertoire des fichiers audio et des vidéos.
- Dès qu’un fichier audio ou un fichier
.txtcontenant une URL YouTube est détecté, le script commence le traitement.
- Transcription des fichiers audio
- Si un fichier audio est trouvé, le script utilise Whisper pour générer une transcription en texte.
- Les fichiers
.txtet.docxsont ensuite sauvegardés dans le répertoire cloud.
- Téléchargement et transcription des vidéos YouTube
- Pour les vidéos, le script télécharge la vidéo via
yt-dlp, extrait l’audio, puis génère une transcription similaire à celle des fichiers audio.
- Pour les vidéos, le script télécharge la vidéo via
- Gestion des logs et des fichiers de sortie
- Le script journalise les événements dans des fichiers log (
start_log.txt,script_log.txt) pour un suivi des actions. - Les transcriptions sont enregistrées dans les formats
.txtet.docxdans un répertoire dédié.
- Le script journalise les événements dans des fichiers log (
5. Conclusion
Grâce à l’intégration de Whisper, Nextcloud et un script Python d’automatisation, j’ai réussi à créer un système efficace pour gérer mes transcriptions de fichiers audio et de vidéos YouTube. Ce flux de travail me permet de gérer mes fichiers en toute simplicité depuis mon smartphone, avec une synchronisation fluide via Nextcloud. Que vous ayez besoin de transcrire des podcasts, des notes vocales

