L'API Whisper : transcription audio
L’API Whisper : transcription audio
Whisper est le modèle de reconnaissance vocale d’OpenAI. Contrairement à la Realtime API qui traite l’audio en streaming, l’API Whisper fonctionne en mode fichier : vous envoyez un fichier audio complet et recevez la transcription. C’est l’outil idéal pour transcrire des enregistrements, des podcasts, des réunions ou tout audio préenregistré.
Whisper dans l’écosystème OpenAI
| Service | Usage | Mode |
|---|---|---|
| Whisper (API Audio) | Transcription de fichiers audio | Fichier complet → texte |
| Realtime API | Conversation vocale temps réel | Streaming bidirectionnel |
| TTS API | Synthèse vocale | Texte → audio |
Première transcription
L’API Whisper est accessible via l’endpoint /v1/audio/transcriptions. Voici un appel simple avec le SDK Python :
from openai import OpenAI
client = OpenAI()
with open("enregistrement.mp3", "rb") as audio_file:
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file
)
print(transcription.text)
C’est aussi simple que cela. Whisper détecte automatiquement la langue et produit une transcription de haute qualité.
Avec des options avancées
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
language="fr", # Forcer la langue (code ISO 639-1)
response_format="verbose_json", # Format détaillé
temperature=0.0, # Déterministe
prompt="Réunion de direction concernant le projet Corsen AI"
)
Le paramètre prompt est particulièrement utile : il guide Whisper sur le contexte (noms propres, termes techniques, style). Ce n’est pas un prompt système, mais un indice contextuel.
Formats de réponse
Whisper propose plusieurs formats de sortie :
# Texte brut (par défaut)
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="text"
)
# → "Bonjour, bienvenue dans notre réunion hebdomadaire."
# JSON simple
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="json"
)
# → {"text": "Bonjour, bienvenue dans notre réunion hebdomadaire."}
# JSON verbeux avec timestamps
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="verbose_json"
)
# → {"text": "...", "segments": [...], "language": "fr", "duration": 45.2}
Le format verbose_json
Le format verbeux est le plus riche. Il inclut des segments avec timestamps, ce qui permet le sous-titrage :
for segment in transcription.segments:
start = segment["start"]
end = segment["end"]
text = segment["text"]
print(f"[{start:.1f}s - {end:.1f}s] {text}")
# [0.0s - 3.2s] Bonjour, bienvenue dans notre réunion hebdomadaire.
# [3.2s - 7.1s] Aujourd'hui nous allons discuter des résultats du trimestre.
Formats SRT et VTT
Pour le sous-titrage, Whisper peut générer directement des fichiers de sous-titres :
# Format SRT (SubRip)
srt_output = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="srt"
)
# Format VTT (WebVTT)
vtt_output = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="vtt"
)
Transcription par segments
Pour les fichiers longs, il est recommandé de découper l’audio en segments. L’API a une limite de 25 Mo par fichier :
from pydub import AudioSegment
def split_audio(file_path, segment_length_ms=300000):
"""Découpe un fichier audio en segments de 5 minutes."""
audio = AudioSegment.from_file(file_path)
segments = []
for i in range(0, len(audio), segment_length_ms):
segment = audio[i:i + segment_length_ms]
segment_path = f"/tmp/segment_{i // segment_length_ms}.mp3"
segment.export(segment_path, format="mp3")
segments.append(segment_path)
return segments
def transcribe_long_audio(file_path):
"""Transcrit un fichier audio long en le découpant."""
segments = split_audio(file_path)
full_text = []
for segment_path in segments:
with open(segment_path, "rb") as f:
result = client.audio.transcriptions.create(
model="whisper-1",
file=f,
language="fr"
)
full_text.append(result.text)
return " ".join(full_text)
Points clés à retenir
- Whisper transcrit des fichiers audio complets (pas du streaming) avec détection automatique de la langue
- Le paramètre
promptguide la transcription sur le vocabulaire et le contexte attendus - Le format
verbose_jsonfournit des timestamps par segment pour le sous-titrage - Les formats
srtetvttgénèrent directement des fichiers de sous-titres - Pour les fichiers longs, découpez l’audio en segments de 5 minutes (limite 25 Mo par requête)