Offline vs Realtime : Guide de Choix
Mis à jour le 29 juillet 2026
Deux modes, deux philosophies
Voxtral propose deux approches de la transcription qui ne se distinguent pas par leur qualité mais par leur nature. Le choix entre les deux n’est pas un détail d’implémentation que l’on ajuste en fin de projet : il détermine les fonctionnalités dont vous disposerez, la manière dont vous écrirez votre code, les coûts que vous supporterez et l’expérience que vivra l’utilisateur. Cette leçon vous donne les éléments pour trancher, puis pour assumer ce choix jusqu’au bout — y compris en combinant les deux modes lorsque c’est pertinent.
Le comparatif complet
| Critère | Offline (Batch) | Realtime (Streaming) |
|---|---|---|
| Modèle | Voxtral Mini Transcribe V2 | Voxtral Realtime |
| Latence | Secondes à minutes (selon durée) | Configurable, sous 200 ms |
| Durée max audio | 3 heures par requête | Illimitée (streaming continu) |
| Diarisation | Oui | Non |
| Context biasing | Oui (100 termes) | Non |
| Timestamps | Segment et mot | Non structurés |
| Format audio | MP3, WAV, FLAC, OGG, M4A, WEBM | PCM 16-bit 16 kHz uniquement |
| Open weights | Non | Oui (Apache 2.0) |
| Déploiement edge | API cloud uniquement | Possible (4B paramètres) |
| Programmation | Synchrone (simple) | Asynchrone (async/await) |
| Cas principal | Fichiers enregistrés | Audio en direct |
Une lecture attentive de ce tableau révèle une asymétrie instructive. Le mode offline est le plus riche en fonctionnalités d’analyse, parce qu’il voit l’intégralité de l’audio avant de répondre. Le mode realtime est le plus libre en déploiement, parce que ses poids sont ouverts et son empreinte réduite. Vous ne choisissez donc pas entre une version complète et une version allégée, mais entre deux jeux d’avantages qui ne se recouvrent pas.
Comment trancher
Le mode offline s’impose dès que vous traitez des fichiers audio déjà enregistrés — réunions archivées, podcasts, interviews — puisque l’audio est là, complet, et qu’il n’y a rien à gagner à le découper artificiellement. Il est le seul recours si vous devez identifier qui parle, la diarisation restant hors de portée du streaming. Il l’est également si votre domaine impose un vocabulaire spécialisé que le context biasing doit guider, ou si vous avez besoin de timestamps précis pour du sous-titrage de vidéo en post-production. Il vous évite enfin toute conversion préalable quand vos sources arrivent dans des formats variés, et il devient l’évidence dès lors que la latence n’est pas critique : traitement différé, batch nocturne, chaîne d’archivage.
Le mode realtime devient nécessaire quand l’audio arrive en continu, depuis un microphone ou un flux réseau, et qu’il n’existe donc aucun fichier à envoyer. Il s’impose lorsque le résultat doit être disponible en moins d’une seconde, ce qui est le cas d’un assistant vocal, d’un outil de dictée ou d’un sous-titrage de conférence ou de webinaire. Deux autres raisons, plus stratégiques, peuvent orienter le choix indépendamment de la latence : le déploiement on-premise ou en edge, rendu possible par les poids ouverts, et l’exigence de souveraineté quand aucune donnée ne doit sortir de votre infrastructure.
Reste une troisième voie, souvent la meilleure : combiner les deux. Vous sous-titrez une conférence en temps réel, puis vous rejouez l’enregistrement en offline pour produire des sous-titres horodatés propres. Vous affichez la transcription en direct pendant une réunion, puis vous relancez une passe offline avec diarisation pour savoir qui a dit quoi. Vous dictez en temps réel, puis vous repassez le fichier en offline pour la relecture et les corrections. Le temps réel sert l’instant, l’offline sert le document.
Ce que chaque mode coûte
Les deux modes n’ont pas la même structure de prix. En avril 2026, la tarification de Mistral AI s’appuie sur la durée audio traitée. Le mode offline revient généralement moins cher à la minute, parce que le traitement est optimisé en batch, tandis que le mode realtime supporte un surcoût lié à la connexion WebSocket persistante et au traitement en continu.
Trois réflexes réduisent la facture sans rien sacrifier. En offline, regroupez vos fichiers pour limiter le nombre de requêtes API. En realtime, fermez la connexion dès que la parole s’arrête plutôt que de la laisser ouverte « au cas où » : une session oubliée consomme sans rien produire. Et surtout, posez-vous systématiquement la question de la nécessité du direct — si le temps réel n’apporte rien à l’utilisateur, le mode offline est à la fois moins cher et plus riche.
Un pipeline hybride, du direct au compte rendu
Le code qui suit montre le pattern hybride dans sa forme la plus courante, celle d’une réunion. Pendant la séance, le flux temps réel alimente l’affichage : les participants voient le texte défiler, personne n’attend. Une fois la réunion terminée, le même audio, cette fois disponible sous forme de fichier complet, repasse en offline avec diarize=True et des timestamps par segment, ce qui produit un compte rendu attribuant chaque prise de parole à son auteur. Les deux appels ne se concurrencent pas, ils se complètent : le premier sert l’immédiateté, le second la traçabilité.
import asyncio
import os
from mistralai import Mistral
from mistralai.models import (
AudioFormat,
TranscriptionStreamTextDelta,
TranscriptionStreamDone
)
async def pipeline_hybride(source_audio_realtime, chemin_fichier_complet):
"""
1. Transcription realtime pour affichage immédiat
2. Transcription offline pour le compte-rendu final avec diarisation
"""
client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])
# Phase 1 : Temps réel (pendant la réunion)
print("=== TRANSCRIPTION EN DIRECT ===\n")
audio_format = AudioFormat(encoding="pcm_s16le", sample_rate=16000)
async for event in client.audio.realtime.transcribe_stream(
audio_stream=source_audio_realtime,
model="voxtral-mini-transcribe-realtime-2602",
audio_format=audio_format,
target_streaming_delay_ms=800,
):
if isinstance(event, TranscriptionStreamTextDelta):
print(event.text, end="", flush=True)
elif isinstance(event, TranscriptionStreamDone):
break
# Phase 2 : Offline (après la réunion)
print("\n\n=== ANALYSE DÉTAILLÉE ===\n")
with open(chemin_fichier_complet, "rb") as f:
response = client.audio.transcriptions.complete(
model="voxtral-mini-latest",
file={"content": f, "file_name": chemin_fichier_complet},
diarize=True,
timestamp_granularities=["segment"]
)
for seg in response.segments:
print(f"[{seg.speaker}] ({seg.start:.1f}s) {seg.text}")
return response
Notez la contrainte pratique que ce pattern impose : il vous faut enregistrer l’audio en parallèle du streaming, puisque les chunks consommés par le flux temps réel ne sont pas conservés. Prévoyez cette écriture sur disque dès la conception, sinon la phase offline n’aura rien à traiter.
Points clés à retenir
- Le mode offline excelle pour les fichiers enregistrés avec diarisation et timestamps
- Le mode realtime excelle pour l’audio en direct avec latence ultra-faible
- Les deux modes peuvent être combinés dans un pipeline hybride
- Le mode offline est plus riche en fonctionnalités (diarisation, context biasing, timestamps)
- Le mode realtime est plus flexible en déploiement (open weights, edge)
- Choisissez en fonction de la source audio (fichier vs direct) et des fonctionnalités requises