Offline vs Realtime : Guide de Choix
Deux modes, deux philosophies
Voxtral propose deux approches fondamentalement différentes pour la transcription. Choisir le bon mode est une décision architecturale qui impacte la qualité, les coûts et l’expérience utilisateur. Cette leçon vous donne tous les éléments pour trancher.
Tableau 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 |
Arbre de décision
Voici un guide pas à pas pour choisir le bon mode :
Choisissez le mode offline si :
- Vous traitez des fichiers audio déjà enregistrés (réunions, podcasts, interviews)
- Vous avez besoin d’identifier qui parle (diarisation)
- Vous avez du vocabulaire spécialisé à reconnaître (context biasing)
- Vous avez besoin de timestamps précis (sous-titrage de vidéos post-production)
- Vous traitez des formats variés (MP3, WAV, FLAC, etc.)
- La latence n’est pas critique (traitement différé, batch nocturne)
Choisissez le mode realtime si :
- L’audio arrive en continu (microphone, flux réseau)
- Vous avez besoin de résultats immédiats (< 1 seconde)
- Vous construisez un assistant vocal ou un outil de dictée
- Vous faites du sous-titrage en direct (conférence, webinaire)
- Vous devez déployer on-premise ou en edge (open weights)
- La souveraineté des données est critique (pas de cloud externe)
Combinez les deux modes si :
- Vous faites du sous-titrage en direct (realtime) puis améliorez les sous-titres après coup (offline avec timestamps)
- Vous transcrivez en direct pour l’affichage (realtime) puis analysez avec diarisation (offline)
- Vous utilisez le mode realtime pour la dictée et le mode offline pour la relecture avec corrections
Comparaison des coûts
Les deux modes ont des structures de prix différentes. En avril 2026, le pricing Mistral AI est basé sur la durée audio traitée. Le mode offline est généralement plus économique par minute, car le traitement est optimisé en batch. Le mode realtime a un surcoût lié à la connexion WebSocket persistante et au traitement en continu.
Optimisation des coûts :
- Mode offline : regroupez vos fichiers en batch pour réduire le nombre de requêtes API
- Mode realtime : fermez la connexion dès que possible pour ne pas consommer inutilement
- Si le temps réel n’est pas nécessaire, utilisez toujours le mode offline
Exemple : pipeline hybride
Voici un pattern courant qui combine les deux modes :
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
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