Audio-Datei transkribieren: gpt-transcribe und Whisper
Auf dieser Seite
Lektion am 3. November 2026 überarbeitet. Diese Anleitung behandelte zuvor
whisper-1, das veraltet ist und am 26. Februar 2027 eingestellt wird. Die OpenAI-Richtlinie zur Dateitranskription empfiehlt nungpt-transcribe.gpt-transcribebietet jedoch keine Zeitstempel, SRT- oder VTT-Untertitel sowie keineverbose_json-Antwort. Für diese spezifischen Anforderungen bleibtwhisper-1bis zu seiner Einstellung die einzige Option. Der Code greift zuvor auf Segmente als Wörterbücher zu (segment["start"]), was mit dem Python-SDK eineTypeErrorauslöst; es handelt sich um Objekte (segment.start). Jeder Aufruf wurde mit demopenaiSDK 3.42.1 verifiziert. Quellen: Dateitranskription · Transkription erstellen · GPT-Transcribe · Verfall.
Transkription einer Aufnahme
Die Dateitranskription adressiert den häufigsten Anwendungsfall: Sie verfügen über eine fertige Aufnahme (ein Meeting, ein Podcast, eine Sprachnachricht) und benötigen den Text. Sie senden die Datei an den Endpunkt /v1/audio/transcriptions und erhalten die Transkription. Für Audio, das noch eingeht, beispielsweise von einem Mikrofon oder einem Anruf, ist der richtige Ansatz die Live-Transkription über die Realtime API, die später in diesem Kurs behandelt wird.
Die Datei muss 25 MB oder weniger groß sein und in einem der folgenden Formate vorliegen: mp3, mp4, mpeg, mpga, m4a, wav oder webm.
Welches Modell im November 2026
| Modell | Status | Wichtige Punkte |
|---|---|---|
gpt-transcribe | Empfohlen | Kontext (prompt), Schlüsselwörter (keywords), erwartete Sprachen (languages), Streaming-Transkription; 0,0045 USD pro Minute |
whisper-1 | Veraltet, Einstellung am 26. Februar 2027 | Einzige Option für Zeitstempel, verbose_json, SRT und VTT sowie Übersetzung ins Englische |
gpt-4o-transcribe, gpt-4o-mini-transcribe | Veraltet, Einstellung am 26. Februar 2027 | Ersetzt durch gpt-transcribe |
gpt-4o-transcribe-diarize | Veraltet, Einstellung am 26. Februar 2027 | Sprechererkennung (diarized_json) |
Erste Transkription
from openai import OpenAI
client = OpenAI()
with open("recording.mp3", "rb") as audio_file:
transcription = client.audio.transcriptions.create(
model="gpt-transcribe",
file=audio_file,
)
print(transcription.text)
Standardmäßig ist die Antwort ein JSON-Objekt: transcription.text enthält den Text, und transcription.languages listet die Sprachen auf, die das Modell mit ausreichender Sicherheit erkannt hat (eine leere Liste, wenn keine identifiziert werden konnte).
Kontext für das Modell bereitstellen
Eine Meeting-Aufnahme ist voller Eigennamen, Akronyme und interner Begriffe, die das Modell aus eigenem Antrieb nicht kennt. gpt-transcribe akzeptiert drei Hinweise, die Sie kombinieren können:
with open("meeting.mp3", "rb") as audio_file:
transcription = client.audio.transcriptions.create(
model="gpt-transcribe",
file=audio_file,
prompt="Management-Meeting über das Corsen AI-Projekt und den Vertrag AC-42.",
keywords=["Corsen AI", "AC-42", "GDPR"],
languages=["fr", "en"],
)
print(transcription.text)
promptbeschreibt den Kontext in einem einzigen Satz, in der Sprache der Aufnahme. Dies ist keine Systemanweisung; es ist ein Hinweis, der die Erkennung leitet.keywordslistet Begriffe zur Erkennung auf. Geben Sie pro Element ein Schlüsselwort ein, ohne<,>oder Zeilenumbrüche: Die API lehnt die gesamte Anfrage ab, wenn sie diese findet.languagesgibt erwartete Sprachen mit ISO 639-1-Codes an (fr,en,es…). Dies ersetzt denlanguage-Parameter älterer Modelle: Senden Sie niemals beides.
Transkription in Echtzeit verfolgen
Bei langen Dateien ist es nicht notwendig, bis zum Ende zu warten, um den Anfang anzuzeigen. Mit stream=True gibt die API Ereignisse zurück, während die Verarbeitung stattfindet, ohne dass eine Realtime-Sitzung erforderlich ist:
with open("meeting.mp3", "rb") as audio_file:
stream = client.audio.transcriptions.create(
model="gpt-transcribe",
file=audio_file,
stream=True,
)
for event in stream:
if event.type == "transcript.text.delta":
print(event.delta, end="", flush=True)
elif event.type == "transcript.text.done":
print() # vollständige Transkription in event.text
Zeitstempel und Untertitel: whisper-1, bis zum 26. Februar 2027
Die OpenAI-Richtlinie stellt explizit fest: Die Beispiele für Wortzeitstempel, Untertitel und Sprechererkennung basieren auf veralteten Modellen. Wenn Sie diese Funktionen benötigen, bleibt whisper-1 bis zum 26. Februar 2027 verfügbar und ist das einzige Modell, das verbose_json und timestamp_granularities akzeptiert:
with open("meeting.mp3", "rb") as audio_file:
transcription = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="verbose_json",
timestamp_granularities=["segment"],
)
for segment in transcription.segments or []:
print(f"[{segment.start:.1f}s - {segment.end:.1f}s] {segment.text.strip()}")
Segmente sind SDK-Objekte: Lesen Sie segment.start, nicht segment["start"]. Mit timestamp_granularities=["word"] erscheinen Wortzeitstempel in transcription.words, auf Kosten einer leicht höheren Latenz. Dasselbe Modell erzeugt auch sofort einsatzbereite Untertitel: Mit response_format="srt" oder "vtt" gibt das SDK den Text der Untertiteldatei direkt zurück.
Die Richtlinie benennt noch keinen Ersatz für diese Funktionen. Wenn Ihr Produkt von Zeitstempeln oder Untertiteln abhängt, planen Sie eine Lösung vor dem 26. Februar 2027.
Lange Dateien
Bei Dateien größer als 25 MB komprimieren Sie das Audio oder teilen Sie es auf. Die Dokumentation empfiehlt, Schnitte mitten in einem Satz zu vermeiden, da dies Kontext verliert, und schlägt die pydub-Bibliothek für das Aufteilen vor (OpenAI garantiert diese Drittanbieter-Software nicht). Das Übergeben des Endes des vorherigen Abschnitts in prompt hilft dem Modell, die Kontinuität aufrechtzuerhalten, eine Verwendung des Parameters, die in der Richtlinie zitiert wird:
from pydub import AudioSegment
def transcribe_long(path: str, duration_ms: int = 10 * 60 * 1000) -> str:
"""Transkribiert eine lange Aufnahme in 10-Minuten-Blöcken."""
audio = AudioSegment.from_file(path)
texts: list[str] = []
for i, start in enumerate(range(0, len(audio), duration_ms)):
chunk = f"chunk_{i}.mp3"
audio[start:start + duration_ms].export(chunk, format="mp3")
options = {"prompt": texts[-1][-500:]} if texts else {} # Kontinuität
with open(chunk, "rb") as f:
result = client.audio.transcriptions.create(model="gpt-transcribe", file=f, **options)
texts.append(result.text)
return " ".join(texts)
Ein Aufteilen nach fester Dauer schneidet manchmal einen Satz mitten durch: Für ein poliertes Ergebnis teilen Sie stattdessen auf Stille.
Kernaussagen
gpt-transcribeist das empfohlene Modell für die Dateitranskription;whisper-1undgpt-4o-*-transcribewerden am 26. Februar 2027 eingestelltprompt,keywordsundlanguages(nicht mehrlanguage) leiten die Begriff- und Spracherkennungstream=Truegibt die Transkription auf dem Laufenden zurück (transcript.text.delta), ohne eine Realtime-Sitzung- Zeitstempel,
verbose_json, SRT und VTT existieren nur mitwhisper-1bis zu dessen Einstellung; lesen Sie Segmente als Objekte (segment.start) - Maximum 25 MB pro Datei: Komprimieren oder aufteilen, vorzugsweise auf Stille