Aller au contenu principal

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