Faster Whisper : transcrire de l'audio en local, sur CPU ou GPU
Guide pratique de faster-whisper pour une transcription Whisper en local : taille du modèle, CPU ou GPU, quantification int8, filtre de silence et transcription en direct.
La plupart des services de transcription fonctionnent de la même façon : vous envoyez votre audio, vous attendez, vous récupérez le texte. Pour un podcast, ça va. Pour un appel client, une consultation médicale, une réunion interne ou tout ce que vous préférez ne pas confier à un tiers, beaucoup moins.
Faire tourner Whisper en local règle le problème. L'audio ne quitte jamais votre machine, il n'y a pas de facture à la minute, et ça marche hors ligne. Le moyen le plus simple que je connaisse pour bien le faire, c'est faster-whisper. Je l'ai utilisé pour LiveTranscribe, un petit outil open source qui transcrit en direct l'audio de n'importe quelle application sur mon propre ordinateur.
Voici ce qu'est faster-whisper, comment choisir sa configuration, et les points d'attention.
Ce qu'est faster-whisper
Whisper est le modèle open source de reconnaissance vocale d'OpenAI. faster-whisper en est une réimplémentation basée sur CTranslate2, un moteur d'inférence pour modèles Transformer. Mêmes poids de modèle, autre moteur.
Le README du projet annonce une version « jusqu'à 4 fois plus rapide qu'openai/whisper pour la même précision, avec moins de mémoire ».
Trois fonctionnalités le rendent pratique :
- La quantification. Le modèle peut tourner en 8 bits (
int8) sur CPU comme sur GPU, ou enfloat16sur GPU. Moins de mémoire, plus de vitesse, en général avec peu de perte de précision. - La détection d'activité vocale. Avec
vad_filter=True, il utilise le modèle Silero VAD pour sauter les passages sans parole. On gagne du temps, et on limite les phrases que Whisper invente parfois pendant les silences. - Les horodatages. Vous obtenez des segments avec début et fin, et des horodatages par mot si vous les demandez.
Un exemple minimal de Whisper en local
Installez-le avec pip install faster-whisper, puis :
from faster_whisper import WhisperModel
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe("reunion.wav", vad_filter=True)
print("Langue détectée :", info.language)
for segment in segments:
print(f"[{segment.start:.1f}s -> {segment.end:.1f}s] {segment.text}")
Un détail qui surprend souvent : segments est un générateur. La transcription ne s'exécute vraiment qu'au moment où vous le parcourez. Pour tout avoir en mémoire, entourez-le de list().
Pour utiliser un GPU NVIDIA, passez à device="cuda" et compute_type="float16" (ou int8_float16 pour économiser la mémoire). La version actuelle de CTranslate2 attend CUDA 12 et cuDNN 9. Avec des pilotes plus anciens, le README indique les versions à épingler.
Choisir la taille du modèle
Whisper existe en plusieurs tailles, de tiny à large. Le compromis est simple : plus le modèle est gros, plus il est précis, surtout sur les accents, l'audio bruité et les langues moins courantes, mais plus il est lent et gourmand en mémoire.
Un repère :
tinyetbase: tests rapides, ou audio très propre sur une machine modeste.small: un bon choix par défaut sur CPU. Suffisant pour du français ou de l'anglais clair, et assez rapide pour suivre de l'audio en direct sur un portable récent.mediumetlarge: quand la précision compte plus que la vitesse, pour des enregistrements bruités, des accents marqués ou de l'arabe. Sur un GPU correct, ils tournent sans problème.
Il existe aussi des variantes anglais uniquement (small.en, etc.), un peu meilleures si vous n'avez besoin que de l'anglais.
La vraie réponse, c'est de tester. Prenez dix minutes de votre audio réel, essayez deux ou trois tailles, et lisez le résultat. Les benchmarks sur des jeux de données propres ne vous diront pas comment ça se passe dans votre salle de réunion.
CPU ou GPU ?
Pas besoin de GPU pour transcrire en local. En int8 avec un petit modèle, un CPU récent fait déjà beaucoup. Un GPU devient intéressant quand :
- vous voulez les gros modèles à une vitesse raisonnable,
- vous traitez des heures d'enregistrements en lot,
- vous transcrivez en direct avec un modèle plus gros et une faible latence.
Une seule carte graphique grand public suffit pour faire tourner confortablement les gros modèles. C'est le même principe que pour le reste de l'IA locale : un modèle bien choisi sur du matériel à vous bat souvent un paiement à la requête.
Transcription en direct : découpage et latence
Whisper n'est pas un modèle de streaming : il transcrit une fenêtre d'audio à la fois. Pour donner une impression de direct, on lui envoie de courts morceaux et on affiche le texte au fur et à mesure.
Cela implique quelques compromis :
- La longueur des morceaux. Courts, la latence est faible mais le contexte manque, et les mots en bordure sont coupés ou mal compris. Longs, c'est plus précis mais ça traîne. Quelques secondes, c'est un bon compromis.
- Les silences. Le VAD sur chaque morceau évite de perdre du temps et réduit le texte inventé.
- La fréquence d'échantillonnage. Whisper travaille sur de l'audio mono à 16 kHz : rééchantillonnez avant.
- Tenir le rythme. Si un morceau met plus de temps à être transcrit qu'il ne dure, vous prenez du retard. C'est le moment de prendre un modèle plus petit ou de passer au GPU.
Comment LiveTranscribe l'utilise
LiveTranscribe est un outil en ligne de commande que j'ai écrit. Il capture l'audio d'une application précise, comme un onglet de navigateur, un appel vidéo ou un lecteur multimédia, et le transcrit en direct dans le terminal.
Le fonctionnement :
- Une sortie audio virtuelle PipeWire sépare le son de l'application. Une branche revient vers vos haut-parleurs, donc vous continuez à entendre normalement. L'autre alimente la transcription.
- faster-whisper transcrit des morceaux de 3 secondes à 16 kHz, avec filtre d'activité vocale et horodatage par mot. La taille du modèle se choisit au lancement.
- Les mots s'affichent dans le terminal au fur et à mesure, regroupés en paragraphes selon les silences, et la transcription est enregistrée avec ses horodatages.
- À la fermeture, le routage audio d'origine est rétabli.
Rien ne quitte la machine, à aucun moment.
Langues, arabe et dialectes
Whisper est multilingue et détecte la langue automatiquement, ou vous pouvez la fixer avec language="fr" ou language="ar". La fixer vous-même est plus fiable quand les premières secondes sont du silence ou de la musique.
Le français et l'anglais fonctionnent bien. L'arabe standard fonctionne correctement. Les dialectes comme la darija, et les conversations qui passent de l'arabe au français en pleine phrase, sont plus difficiles : attendez-vous à plus d'erreurs et prenez un modèle plus gros. Si les dialectes comptent pour vous, testez sur de vrais enregistrements avant de vous engager. J'en parle dans chatbot IA en arabe qui comprend la darija et les dialectes.
Pourquoi transcrire en local
L'audio fait partie des données les plus sensibles d'une entreprise : des voix, des noms, des informations de santé, des négociations. Le transcrire en local vous évite de vous demander si les conditions d'un fournisseur cloud sont acceptables, ou si l'envoi à l'étranger est permis par votre loi sur les données. J'aborde ces questions dans IA privée et LLM on-premise.
La transcription est aussi souvent la première étape d'une chaîne plus longue : résumer une réunion, extraire les actions, traiter un vocal dans un assistant WhatsApp. Si cette première étape tourne en local, le reste peut suivre.
Travailler ensemble
Je suis Driss Briksine, ingénieur logiciel et ML basé au Maroc. Je construis des systèmes d'IA locale et multimodale de bout en bout, des modèles de voix et de vision jusqu'au logiciel qui les entoure. Voyez LiveTranscribe et mes autres réalisations.
Si vous avez besoin d'une transcription, ou d'une chaîne de traitement vocal, qui garde l'audio sur votre propre matériel, envoyez-moi un court descriptif.