Automatisation de la génération audio avec Python et l'API ElevenLabs : Guide complet

Image de couverture de l'article Automatisation de la génération audio avec Python et l'API ElevenLabs : Guide complet

Colas Mérand

11/07/2025

Python

ElevenLabs

API

5 minutes

Automatisation de la génération audio avec Python et l'API ElevenLabs : Guide complet

Dans un monde où le contenu audio prend une place de plus en plus importante, la capacité à générer rapidement des voix off de qualité devient un atout majeur pour de nombreux projets. Que ce soit pour des jeux vidéo, des applications éducatives, des podcasts ou des vidéos explicatives, l'automatisation de la génération audio peut faire gagner un temps précieux tout en maintenant une qualité professionnelle.

Chez Platane, nous avons récemment accompagné plusieurs clients dans l'automatisation de leurs processus de génération audio. Dans cet article, nous partageons notre expertise sur la création d'un script Python permettant d'automatiser la génération de voix off à partir d'un fichier CSV via l'API ElevenLabs.

Pourquoi automatiser la génération audio ?

Avant de plonger dans les aspects techniques, prenons un moment pour comprendre les avantages d'une telle automatisation :

  • Gain de temps considérable : générer des centaines de répliques manuellement peut prendre des jours, contre quelques minutes avec un script automatisé
  • Cohérence des résultats : l'automatisation garantit une qualité uniforme pour toutes les répliques
  • Flexibilité et itérations rapides : modifier et régénérer du contenu devient simple et rapide
  • Réduction des coûts : moins d'heures facturées par des ingénieurs du son ou des comédiens pour des modifications mineures

L'API ElevenLabs : une solution de pointe pour la synthèse vocale

ElevenLabs s'est imposé comme l'un des leaders dans le domaine de la synthèse vocale de haute qualité. Leur API offre :

  • Des voix ultra-réalistes dans de nombreuses langues
  • La possibilité de créer des voix personnalisées
  • Un contrôle fin sur les émotions et l'intonation
  • Une intégration simple via API REST

Notre solution : un script Python pour automatiser le processus

Voici comment nous avons conçu notre solution d'automatisation, que nous adaptons régulièrement aux besoins spécifiques de nos clients :

1. Structure du fichier CSV source

Un fichier CSV bien structuré est essentiel pour l'automatisation. Voici un exemple de structure que nous recommandons :

numero,personnage,texte,langue,voice_id
001,Mathis,"Bonjour, comment allez-vous ? <happy>",fr_FR,TQ74FKYO3GjFRh5W7zBE
002,Sophie,"Je vais très bien, merci ! <excited>",fr_FR,29vD33N1CtxCmqQRPOHJ
003,Mathis,"C'est une excellente nouvelle. <calm>",fr_FR,TQ74FKYO3GjFRh5W7zBE

Les balises d'émotion (comme <happy>, <excited>, <calm>) permettent d'indiquer au script comment moduler la voix pour chaque réplique.

2. Fonctionnalités clés du script Python

Notre script Python réalise les opérations suivantes :

import csv
import requests
import os
import json
from pydub import AudioSegment

# Configuration
API_KEY = "votre_clé_api_elevenlabs"
OUTPUT_DIR = "audio_output"
CSV_FILE = "repliques.csv"

# Création du dossier de sortie s'il n'existe pas
os.makedirs(OUTPUT_DIR, exist_ok=True)

# Lecture du fichier CSV
with open(CSV_FILE, 'r', encoding='utf-8') as file:
    csv_reader = csv.DictReader(file)
    all_audio_segments = []
    
    for row in csv_reader:
        numero = row['numero']
        personnage = row['personnage']
        texte = row['texte']
        langue = row['langue']
        voice_id = row['voice_id']
        
        # Extraction des balises d'émotion si présentes
        emotion = "neutral"
        if "<" in texte and ">" in texte:
            start = texte.find("<") + 1
            end = texte.find(">")
            emotion = texte[start:end]
            texte = texte.replace(f"<{emotion}>", "")
        
        # Préparation de la requête à l'API ElevenLabs
        url = f"https://api.elevenlabs.io/v1/text-to-speech/{voice_id}"
        
        headers = {
            "Accept": "audio/mpeg",
            "Content-Type": "application/json",
            "xi-api-key": API_KEY
        }
        
        data = {
            "text": texte,
            "model_id": "eleven_multilingual_v2",
            "voice_settings": {
                "stability": 0.5,
                "similarity_boost": 0.75
            }
        }
        
        # Ajustement des paramètres selon l'émotion
        if emotion == "happy":
            data["voice_settings"]["stability"] = 0.3
            data["voice_settings"]["similarity_boost"] = 0.8
        elif emotion == "excited":
            data["voice_settings"]["stability"] = 0.2
            data["voice_settings"]["similarity_boost"] = 0.9
        elif emotion == "calm":
            data["voice_settings"]["stability"] = 0.7
            data["voice_settings"]["similarity_boost"] = 0.6
        
        # Appel à l'API ElevenLabs
        response = requests.post(url, json=data, headers=headers)
        
        if response.status_code == 200:
            # Nom du fichier de sortie
            output_file = f"{OUTPUT_DIR}/{numero}_{personnage}.mp3"
            
            # Sauvegarde du fichier audio
            with open(output_file, 'wb') as audio_file:
                audio_file.write(response.content)
            
            print(f"Fichier audio généré : {output_file}")
            
            # Ajout à la liste pour la concaténation finale (optionnel)
            audio_segment = AudioSegment.from_mp3(output_file)
            all_audio_segments.append(audio_segment)
        else:
            print(f"Erreur lors de la génération audio pour {numero}_{personnage}: {response.status_code}")
            print(response.text)
    
    # Concaténation de tous les fichiers audio (optionnel)
    if all_audio_segments:
        combined = AudioSegment.empty()
        for segment in all_audio_segments:
            combined += segment + AudioSegment.silent(duration=500)  # 500ms de silence entre chaque réplique
        
        combined.export(f"{OUTPUT_DIR}/combined_audio.mp3", format="mp3")
        print(f"Fichier audio combiné généré : {OUTPUT_DIR}/combined_audio.mp3")

3. Intégration avec Google Sheets (fonctionnalité bonus)

Pour les équipes qui préfèrent travailler directement avec Google Sheets, nous avons développé une extension permettant de lire les données directement depuis un tableur en ligne :

import gspread
from oauth2client.service_account import ServiceAccountCredentials

# Configuration pour Google Sheets
SHEET_ID = "votre_id_de_feuille_google"
WORKSHEET_NAME = "Répliques"

# Authentification Google Sheets
scope = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('credentials.json', scope)
gc = gspread.authorize(credentials)

# Ouverture de la feuille
workbook = gc.open_by_key(SHEET_ID)
worksheet = workbook.worksheet(WORKSHEET_NAME)

# Récupération des données
data = worksheet.get_all_records()

# Traitement des données comme avec le CSV
for row in data:
    # Même logique que précédemment
    # ...

Cas d'utilisation concrets

Chez Platane, nous avons mis en œuvre cette solution pour plusieurs clients avec des besoins variés :

  1. Projet de jeu vidéo indépendant : Nous avons généré plus de 500 répliques pour différents personnages, en adaptant les émotions selon les situations de jeu. Cette approche a permis à notre client de réduire ses coûts de production audio de 70%.

  2. Application éducative multilingue : Pour un projet similaire à celui que nous avons réalisé pour le Centre Pompidou, nous avons automatisé la génération de contenus pédagogiques en 4 langues différentes, permettant une mise à jour rapide du contenu sans nécessiter de nouvelles sessions d'enregistrement.

  3. Plateforme de contenu audio : Dans le cadre d'un projet comparable à notre travail pour Epictory, nous avons développé un système permettant de générer des descriptions audio personnalisées à partir de données utilisateurs, créant ainsi une expérience unique pour chaque utilisateur.

Bonnes pratiques et optimisations

Au fil de nos projets, nous avons identifié plusieurs bonnes pratiques pour optimiser ce type d'automatisation :

  1. Gestion des erreurs robuste : Implémentez des mécanismes de retry et de logging détaillé pour gérer les problèmes d'API
  2. Traitement par lots : Pour les grands volumes, traitez les fichiers par lots pour éviter de surcharger l'API
  3. Cache intelligent : Évitez de régénérer des fichiers identiques en mettant en place un système de cache
  4. Paramètres d'émotion personnalisables : Créez une table de correspondance entre les balises d'émotion et les paramètres de l'API
  5. Tests automatisés : Vérifiez la qualité des fichiers générés via des métriques objectives

Conclusion

L'automatisation de la génération audio via Python et l'API ElevenLabs représente une avancée significative pour de nombreux projets créatifs et éducatifs. Cette approche permet non seulement de gagner un temps précieux, mais aussi d'obtenir des résultats de haute qualité avec une flexibilité inégalée.

Chez Platane, nous sommes passionnés par l'innovation technologique et la création de solutions sur mesure qui répondent précisément aux besoins de nos clients. Notre expertise en développement Python, en intégration d'API et en automatisation nous permet de transformer des processus manuels fastidieux en workflows fluides et efficaces.

Vous avez un projet nécessitant l'automatisation de la génération audio ou d'autres processus créatifs ? N'hésitez pas à prendre rendez-vous via notre formulaire de contact. Notre équipe sera ravie d'échanger avec vous sur votre projet et de vous montrer comment notre approche alliant technologie de pointe et créativité peut vous aider à atteindre vos objectifs plus rapidement et plus efficacement.


Platane est une agence spécialisée dans le développement de solutions sur mesure innovantes qui allient technologies de pointe comme l'intelligence artificielle générative à une créativité sans limites, le tout au service des objectifs de ses clients.

Le BlogDes infos, des actus, du fun !
Image de couverture de l'article de blog

Optimiser vos conversions : L'art d'intégrer Facebook Ads et SystemeIO pour un tunnel marketing performant

Découvrez comment créer un écosystème marketing cohérent en connectant vos campagnes Facebook Ads à SystemeIO pour maximiser vos conversions et automatiser votre nurturing client.
lire l’article
Image de couverture de l'article de blog

Développement d'applications mobiles : de l'idée au prototype fonctionnel en un mois

Guide complet sur le développement rapide de prototypes d'applications mobiles, les technologies à privilégier et les fonctionnalités essentielles pour valider votre concept avant un lancement à grande échelle.
lire l’article
Image de couverture de l'article de blog

Applications de Matching pour le Recrutement : Révolutionner la Recherche d'Emploi à l'Ère du Digital

Analyse des applications de matching pour le recrutement inspirées du modèle Tinder et comment elles transforment le marché de l'emploi avec des solutions mobiles innovantes.
lire l’article
Nous contacterOui allo ?
Nous appeler
Une question, un besoin de renseignements ?
N'hésitez pas à nous contacter.
Nous envoyer un message
facultatif
Prendre rendez-vous
Vous préférez discuter de vive voix ?
Nous aussi et c'est évidemment sans engagement !
logo de Platane.io
5 Rue Robert Rême - 35000, Rennes
69 rue des Tourterelles - 86000, Saint-Benoit
06 81 50 37 23
Retrouvez-nous sur