Pipeline de Transcription Audio
Construisez des pipelines de reconnaissance vocale prêts pour la production avec Whisper, Deepgram et AssemblyAI pour la transcription par lots et en temps réel avec diarisation des locuteurs.
Points de Décision
Arbre de Décision pour la Sélection du Moteur
Si les exigences incluent :
├─ Streaming en temps réel requis ?
│ ├─ Oui : Utiliser Deepgram Nova-3 WebSocket (le plus rapide)
│ └─ Non : Passer aux exigences de précision
├─ Précision maximale nécessaire + GPU disponible ?
│ ├─ Oui : Utiliser Whisper large-v3 avec faster-whisper
│ └─ Non : Passer à l'analyse des coûts
├─ Budget < 0,0059 $/min ET capacité de calcul disponible ?
│ ├─ Oui : Utiliser Whisper local
│ └─ Non : Utiliser AssemblyAI Universal-2 (meilleure diarisation API)
Traitement par Lots vs Flux
Si les caractéristiques audio :
├─ Durée > 30 minutes ?
│ ├─ Oui : Utiliser le traitement par lots avec découpage (couper aux silences)
│ └─ Non : Passer à la vérification de la latence
├─ Besoin de résultats en moins de 10 secondes ?
│ ├─ Oui : Utiliser le streaming (Deepgram/Whisper.cpp)
│ └─ Non : Utiliser le traitement par lots pour une meilleure précision
Utilisation de la VAD (Détection d'Activité Vocale)
Si le type de contenu :
├─ Conversation/réunion en direct ?
│ ├─ Oui : Activer la VAD (économise 40 à 60 % de calcul sur le silence)
│ └─ Non : Passer à la vérification du contenu
├─ Cours magistral/présentation avec des pauses ?
│ ├─ Oui : Utiliser une VAD conservative (min_silence_duration_ms : 1000)
│ └─ Non : Ignorer la VAD pour les discours denses (livres audio, etc.)
Sélection du Modèle par Domaine
Si la langue/l'accent :
├─ Non anglais ou accent prononcé ?
│ ├─ Oui : Utiliser Whisper large-v3 (meilleur multilingue)
│ └─ Non : Passer à la vérification de la vitesse
├─ Besoin d'une latence < 1 seconde ?
│ ├─ Oui : Utiliser le streaming Deepgram Nova-3
│ └─ Non : Utiliser AssemblyAI pour la terminologie commerciale/médicale
Modes de Défaillance
Hallucination sur le Silence
Détection : Les transcriptions montrent des phrases répétées pendant les sections silencieuses ou des descriptions musicales fantômes
Diagnostic : VAD désactivée ou seuil trop bas, le modèle génère du texte à partir du bruit de fond
Correction : Activer la VAD avec min_silence_duration_ms : 500, utiliser --no_speech_threshold 0.6 dans Whisper
Effondrement de la Diarisation à Plus de 10 Locuteurs
Détection : Tous les locuteurs étiquetés comme « Locuteur 1 » après 10 à 15 minutes, ou changement aléatoire de locuteur en milieu de phrase
Diagnostic : Le modèle d'embedding des locuteurs est saturé, confusion de chevauchement dans un audio bondé
Correction : Pré-segmenter par silence, utiliser dual_channel d'AssemblyAI si stéréo, limiter à 8 locuteurs actifs maximum
Dérive de Synchronisation des Horodatages avec la Vidéo
Détection : Les sous-titres apparaissent 2 à 5 secondes avant/après les images vidéo correspondantes
Diagnostic : Le prétraitement audio a modifié la durée, ou la VAD a supprimé des segments sans ajustement des horodatages
Correction : Utiliser --preserve_timing dans le prétraitement, synchroniser avec le timecode audio original, valider par rapport à des événements vocaux connus
Échec de la Détection Automatique de la Langue
Détection : Les mots anglais sont transcrits de manière incompréhensible lorsque le locuteur a un accent, ou l'alternance codique est ignorée
Diagnostic : Le modèle est verrouillé sur une langue erronée dans les 30 premières secondes, ou le contenu multilingue a confondu le classifieur
Correction : Forcer la langue avec language="en" pour l'anglais accentué, utiliser task="translate" pour le non-anglais vers l'anglais
Dépassement de Mémoire sur les Fichiers Longs
Détection : Plantages OOM sur des fichiers de plus de 45 minutes, ou baisses soudaines de qualité après 30 minutes
Diagnostic : Le modèle conserve la fenêtre de contexte complète, la VRAM GPU est épuisée
Correction : Découper en segments de 25 minutes avec un chevauchement de 30 secondes, utiliser --without_timestamps pour l'efficacité RAM
Exemples Pratiques
Procédure Complète de Transcription d'une Réunion
Scénario : Réunion du conseil d'administration de 90 minutes, 6 locuteurs, besoin d'une identification précise des locuteurs et d'horodatages pour le procès-verbal
Analyse d'Entrée :
- 90 minutes → nécessite un découpage
- 6 locuteurs → dans les limites de la diarisation
- Contexte professionnel → utiliser AssemblyAI pour la terminologie
Chemin de Décision :
- Durée > 30 min → traitement par lots requis
- Nombre de locuteurs = 6 → diarisation possible
- Domaine professionnel → AssemblyAI Universal-2 choisi
- Haute précision nécessaire → activer les étiquettes de locuteur + le formatage intelligent
Implémentation :
# Étape 1 : Prétraitement (l'expert attrape : normaliser les niveaux audio)
ffmpeg -i meeting.mp4 -ar 16000 -ac 1 -filter:a "volume=0.8" meeting_clean.wav
# Étape 2 : Découpage avec chevauchement (le novice traiterait le fichier entier)
from pydub import AudioSegment
audio = AudioSegment.from_wav("meeting_clean.wav")
chunks = []
for i in range(0, len(audio), 25*60*1000): # Segments de 25min
chunk = audio[i:i+27*60*1000] # 27min avec 2min de chevauchement
chunks.append(chunk)
# Étape 3 : Transcrire avec diarisation
results = []
for chunk in chunks:
response = assemblyai_client.transcribe(
chunk, speaker_labels=True, auto_punctuation=True,
dual_channel=False, speaker_labels_max=8
)
results.append(response.get_paragraphs())
# Étape 4 : Fusionner les segments qui se chevauchent (étape d'expert que le novice manque)
merged = merge_overlapping_transcripts(results, overlap_seconds=120)
Expert vs Novice :
- Novice : Traite le fichier de 90 min directement → plantage OOM ou faible précision
- Expert : Découpe avec chevauchement, valide la cohérence des locuteurs entre les segments, normalise l'audio d'abord
Contrôles Qualité
- WER (Taux d'Erreur de Mots) < 5 % sur un échantillon de test avec vérité terrain connue
- Précision des locuteurs > 90 % (ID correct du locuteur pour chaque énoncé lorsque la vérité terrain est disponible)
- Latence en temps réel < 2 secondes de bout en bout pour les implémentations en streaming
- Les fichiers SRT/VTT passent la validation (horodatages corrects, pas de segments qui se chevauchent)
- Prétraitement audio terminé : format WAV/FLAC mono 16 kHz confirmé
- Paramètres VAD ajustés : < 10 % de faux positifs de détection de silence sur l'échantillon
- Utilisation mémoire < 8 Go pour des fichiers jusqu'à 2 heures (découpage fonctionnant correctement)
- Gestion des erreurs API testée : gère les timeouts, les tentatives et le dépassement de quota
- Le nombre de locuteurs en diarisation correspond à l'attendu (tolérance ±1 locuteur)
- Les horodatages de sortie s'alignent sur l'audio original avec une précision de 100 ms
Limites NE PAS FAIRE
Ce skill NE doit PAS être utilisé pour :
- Synthèse vocale → Utiliser
voice-audio-engineerà la place - Transcription musicale ou extraction de paroles → Utiliser
ai-engineerpour les modèles IA musicaux - Classification audio sans transcription → Utiliser
ai-engineerpour la classification audio - Traduction en temps réel (transcrire + traduire) → Combiner avec le skill
language-translator - Biométrie vocale ou identification du locuteur → Utiliser
ai-engineerpour les modèles de reconnaissance de locuteur - Amélioration de la qualité audio ou réduction de bruit → Utiliser
voice-audio-engineerpour le traitement audio
Déléguer quand :
- Besoin de détection de mot de réveil personnalisé →
voice-audio-engineer - Nécessité d'empreintes audio (audio fingerprinting) →
data-pipeline-engineer - Construction d'assistants vocaux →
voice-audio-engineer+conversation-designer - Traitement de plus de 10 000 heures →
data-pipeline-engineerpour l'orchestration