Aller au contenu principal

Formats supportés et langues

Formats supportés et langues

Whisper accepte une large variété de formats audio et prend en charge des dizaines de langues. Choisir le bon format d’entrée et configurer correctement la langue impacte directement la qualité de transcription et les coûts. Cette leçon détaille les options disponibles et les meilleures pratiques.

Formats audio acceptés

L’API Whisper accepte les formats suivants :

Format Extension Compression Usage recommandé
MP3 .mp3 Lossy, bon ratio Podcasts, enregistrements vocaux
MP4 / M4A .mp4, .m4a AAC lossy Vidéos, enregistrements mobiles
WAV .wav Non compressé Enregistrements studio
WebM .webm Opus lossy Enregistrements navigateur
FLAC .flac Lossless Qualité maximale sans perte
OGG .ogg Vorbis/Opus Applications open source

La taille maximale par fichier est de 25 Mo. Pour un MP3 à 128 kbps, cela représente environ 25 minutes d’audio. Pour du WAV non compressé, c’est beaucoup moins.

Optimiser la taille des fichiers

from pydub import AudioSegment

def optimize_for_whisper(input_path: str, output_path: str):
    """Convertit un fichier audio en MP3 optimisé pour Whisper."""
    audio = AudioSegment.from_file(input_path)

    # Convertir en mono 16kHz (suffisant pour la parole)
    audio = audio.set_channels(1)
    audio = audio.set_frame_rate(16000)

    # Exporter en MP3 64kbps (bon compromis qualité/taille pour la voix)
    audio.export(output_path, format="mp3", bitrate="64k")

    return output_path

Langues supportées

Whisper reconnaît plus de 50 langues. La détection est automatique, mais spécifier la langue améliore la précision :

# Détection automatique (par défaut)
result = client.audio.transcriptions.create(
    model="whisper-1",
    file=audio_file
)

# Langue explicite (recommandé)
result = client.audio.transcriptions.create(
    model="whisper-1",
    file=audio_file,
    language="fr"  # Code ISO 639-1
)

Langues européennes courantes

Les codes ISO 639-1 les plus utilisés en Europe :

EUROPEAN_LANGUAGES = {
    "fr": "Français",
    "en": "Anglais",
    "de": "Allemand",
    "es": "Espagnol",
    "it": "Italien",
    "pt": "Portugais",
    "nl": "Néerlandais",
    "pl": "Polonais",
    "ro": "Roumain",
    "sv": "Suédois",
    "da": "Danois",
    "fi": "Finnois",
    "el": "Grec",
    "cs": "Tchèque",
    "hu": "Hongrois",
    "bg": "Bulgare",
    "hr": "Croate",
    "sk": "Slovaque",
    "sl": "Slovène",
    "et": "Estonien",
    "lv": "Letton",
    "lt": "Lituanien",
}

Gestion du multilingue

Pour les fichiers contenant plusieurs langues (réunions internationales), Whisper gère la transition automatiquement. Cependant, la qualité est meilleure en traitant chaque segment séparément :

from pydub import AudioSegment
from pydub.silence import split_on_silence

def transcribe_multilingual(file_path: str):
    """Transcription adaptée aux fichiers multilingues."""
    # Première passe : détecter la langue dominante
    with open(file_path, "rb") as f:
        result = client.audio.transcriptions.create(
            model="whisper-1",
            file=f,
            response_format="verbose_json"
        )

    detected_language = result.language
    print(f"Langue détectée : {detected_language}")

    # Deuxième passe avec la langue détectée
    with open(file_path, "rb") as f:
        result = client.audio.transcriptions.create(
            model="whisper-1",
            file=f,
            language=detected_language,
            response_format="verbose_json"
        )

    return result

Facturation

Whisper est facturé à la minute d’audio traité, arrondi à la seconde la plus proche. Le format du fichier n’influence pas le coût — seule la durée de l’audio compte.

Pour réduire les coûts sur de grands volumes :

def preprocess_for_cost(file_path: str) -> str:
    """Supprime les silences pour réduire la durée facturée."""
    audio = AudioSegment.from_file(file_path)

    # Supprimer les silences supérieurs à 1 seconde
    chunks = split_on_silence(
        audio,
        min_silence_len=1000,
        silence_thresh=-40,
        keep_silence=200  # Garder 200ms de silence pour la lisibilité
    )

    if not chunks:
        return file_path

    combined = chunks[0]
    for chunk in chunks[1:]:
        combined += chunk

    output_path = "/tmp/optimized_audio.mp3"
    combined.export(output_path, format="mp3", bitrate="64k")
    return output_path

Points clés à retenir

  • Whisper accepte MP3, MP4, WAV, WebM, FLAC et OGG, avec une limite de 25 Mo par fichier
  • Spécifier la langue avec le code ISO 639-1 améliore la précision par rapport à la détection automatique
  • Le MP3 mono 16 kHz à 64 kbps offre le meilleur compromis qualité/taille pour la voix
  • La facturation est à la minute d’audio : supprimer les silences réduit les coûts
  • Pour le multilingue, une première passe de détection suivie d’une seconde passe ciblée donne les meilleurs résultats