Zum Hauptinhalt springen
Lektion 6 von 18 · Realtime API und Voice Agents

Audio-Datei transkribieren: gpt-transcribe und Whisper

Lektion 6 von 18 Aktualisiert am 3. November 2026 Entwickler
Auf dieser Seite
  1. Transkription einer Aufnahme
  2. Welches Modell im November 2026
  3. Erste Transkription
  4. Kontext für das Modell bereitstellen
  5. Transkription in Echtzeit verfolgen
  6. Zeitstempel und Untertitel: whisper-1, bis zum 26. Februar 2027
  7. Lange Dateien
  8. Kernaussagen

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 nun gpt-transcribe. gpt-transcribe bietet jedoch keine Zeitstempel, SRT- oder VTT-Untertitel sowie keine verbose_json-Antwort. Für diese spezifischen Anforderungen bleibt whisper-1 bis zu seiner Einstellung die einzige Option. Der Code greift zuvor auf Segmente als Wörterbücher zu (segment["start"]), was mit dem Python-SDK eine TypeError auslöst; es handelt sich um Objekte (segment.start). Jeder Aufruf wurde mit dem openai SDK 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

ModellStatusWichtige Punkte
gpt-transcribeEmpfohlenKontext (prompt), Schlüsselwörter (keywords), erwartete Sprachen (languages), Streaming-Transkription; 0,0045 USD pro Minute
whisper-1Veraltet, Einstellung am 26. Februar 2027Einzige Option für Zeitstempel, verbose_json, SRT und VTT sowie Übersetzung ins Englische
gpt-4o-transcribe, gpt-4o-mini-transcribeVeraltet, Einstellung am 26. Februar 2027Ersetzt durch gpt-transcribe
gpt-4o-transcribe-diarizeVeraltet, Einstellung am 26. Februar 2027Sprechererkennung (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)
  • prompt beschreibt den Kontext in einem einzigen Satz, in der Sprache der Aufnahme. Dies ist keine Systemanweisung; es ist ein Hinweis, der die Erkennung leitet.
  • keywords listet 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.
  • languages gibt erwartete Sprachen mit ISO 639-1-Codes an (fr, en, es…). Dies ersetzt den language-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-transcribe ist das empfohlene Modell für die Dateitranskription; whisper-1 und gpt-4o-*-transcribe werden am 26. Februar 2027 eingestellt
  • prompt, keywords und languages (nicht mehr language) leiten die Begriff- und Spracherkennung
  • stream=True gibt die Transkription auf dem Laufenden zurück (transcript.text.delta), ohne eine Realtime-Sitzung
  • Zeitstempel, verbose_json, SRT und VTT existieren nur mit whisper-1 bis zu dessen Einstellung; lesen Sie Segmente als Objekte (segment.start)
  • Maximum 25 MB pro Datei: Komprimieren oder aufteilen, vorzugsweise auf Stille