Zum Hauptinhalt springen

Grok STT und TTS API: transkribieren, vertonen und herunterladen

Grok STT und TTS erst im Playground testen, dann Transkription und Vertonung per Code steuern: Stereo-Korrektur, Sprech-Tags und Preise in USD.

Autor
Lydia
Erschienen
Lesedauer
8 Min. Lesezeit
Aktualisiert
Zwei Erwachsene auf einer alten Fußgängerbrücke aus Stein und Eisen bei goldenem Licht, einer hält ein kleines Aufnahmegerät

Mit Grok STT transkribierst du eine vorhandene Aufnahme, mit Grok TTS lässt du ein Manuskript von einer voreingestellten Stimme lesen. Probiere beides zuerst im SpicyAPI-Playground aus und rufe es dann aus Code oder über einen Agenten auf. Das ist ein Workflow für gespeicherte Dateien; für Live-Sprachdialoge brauchst du einen Echtzeit-Transport. STT kostet etwa 0,002 $ pro Audiominute, TTS 0,018 $ pro 1.000 Zeichen. Nach unseren Tests im September 2026 verarbeiten beide Routen Aufnahmen und Skripte für Erwachsene wie geschrieben, ohne Ablehnungen, Schwärzungen oder abgeschnittene Clips.

Preise, Grenzen und was jede Route liefert

Grok STTGrok TTS
Modell-IDxai/grok-stt/speech-to-textxai/grok-tts/text-to-speech
EingabeAudio-URL oder hochgeladene MP3/WAV bis 90 MB und 10 Minuten; 1 Sekunde bis 2 StundenText, 1–15.000 Zeichen
Sprachen25 oder automatische Erkennung20 plus automatische Erkennung
Preis0,0000333334 $ pro Sekunde0,018 $ pro 1.000 Zeichen
ErgebnisText plus Transkript mit WortzeitenEine Audiodatei
AufbewahrungHochgeladenes Audio 1 TagErzeugtes Audio 14 Tage
Nicht verfügbarSprecherlabelsStimmklonen oder Referenzstimme als Eingabe

Eine längere oder größere Aufnahme braucht eine öffentliche URL. Eine URL kann auch auf M4A, FLAC, OGG, Opus, AAC, MP4 oder MKV zeigen, muss aber die Audiodatei selbst liefern, keinen Player und keine Freigabeseite. STT akzeptiert kein PCM, μ-law oder A-law ohne Header.

Eine Stunde Audio kostet etwa 0,12 $, eine Aufnahme von 90 Sekunden etwa 0,003 $. Der Task reserviert zunächst das Maximum von zwei Stunden, etwa 0,24 $, und gibt die Differenz frei, sobald die tatsächliche Länge feststeht. Ein Skript mit 1.800 Zeichen kostet 0,0324 $; zwei vollständige Takes plus eine Nachaufnahme mit 240 Zeichen kosten 0,06912 $. Leerzeichen, Satzzeichen und Sprech-Tags zählen als Zeichen, und der Preis, der vor einem TTS-Lauf angezeigt wird, ist der endgültige.

Zuerst im Playground ausprobieren

Transkribieren. Öffne die Grok-STT-Seite und bleibe auf dem Tab Playground.

  1. Lade unter Input audio deine MP3 oder WAV hoch (bis 90 MB) oder wechsle zu Asset URL und klicke auf Add URL für eine extern gehostete Aufnahme.
  2. Öffne Advanced parameters nur, wenn du Language, Normalize text, Key terms, Keep filler words oder Transcribe channels separately brauchst.
  3. Prüfe die Preisschätzung, melde dich an und starte. Das Transkript erscheint im Bereich Output, mit einer JSON-Ansicht für die Wortzeiten.

Vertonen. Öffne die Grok-TTS-Seite.

  1. Füge das Skript in Text ein oder bearbeite es (die Schaltfläche Sample script füllt ein Beispiel), gegebenenfalls mit Sprech-Tags.
  2. Wähle eine Voice; das Menü zeigt zu jeder Stimme Name, Geschlecht und Sprache. Unter Advanced parameters findest du Speed, Output format, Bitrate und Language.
  3. Starte den Lauf, höre den Take im Bereich Output an und sichere ihn mit Download.

Teste deinen schwierigsten Namen oder Satz hier, bevor du eine ganze Erzählung skriptest; was im Playground falsch klingt, klingt über die API genauso falsch.

Transkriptions-Optionen, die das Ergebnis verändern

Language (language) kannst du weglassen, dann wird die Sprache erkannt. Normalize text (text_normalization) schreibt Zahlen, Preise und Daten als Ziffern („March 14“, „$1,250“) und setzt language voraus; lass es aus, wenn du den genauen gesprochenen Wortlaut brauchst.

Keep filler words (filler_words: true) behält „äh“ und „ähm“, die sonst entfernt werden. Key terms (keyterms) lenken die Schreibweise zu erfundenen Namen und Marken, bis zu 100 Begriffe mit je 50 Zeichen. Übergib sie als Objekte, [{"term":"Mara"},{"term":"Jon"}], nicht als einfache Strings.

Transcribe channels separately (multichannel: true) transkribiert jeden Kanal einer Datei getrennt, bis zu acht. Ist die Option aus, kann bei einer Stereoaufnahme mit je einem Sprecher pro Seite ein Sprecher fehlen. Lies output.transcript.channels für Wörter und Zeiten jeder Seite; der kombinierte Text hat eine Zeile pro Kanal und ist kein fertiger Dialog. Zwei Personen auf einem Mono-Kanal werden nicht getrennt, und die Route liefert keine Sprecherlabels. Nutze für Mono-Interviews getrennt aufgenommene Kanäle oder ein Diarisierungs-Tool.

Dann per Code aufrufen

Installiere das Python-SDK (pip install spicyapi, Python 3.11+), setze SPICY_API_KEY und führe diesen Workflow von der Transkription zur Vertonung aus. Ersetze den Dateipfad durch eine Aufnahme, die du verwenden darfst.

python
import uuid

from spicyapi import SpicyClient, output_assets

client = SpicyClient()  # reads SPICY_API_KEY from the environment

# 1. Transcribe a local recording (uploads are free and kept for one day)
source = client.upload_file("./interview.mp3")
stt = client.create_task(
    model="xai/grok-stt/speech-to-text",
    input_data={"audio_url": source["uri"], "multichannel": True},
    idempotency_key=str(uuid.uuid4()),  # new key per new request; reuse only to retry the same one
)
done = client.wait_for_terminal(stt["taskId"])
if done["state"] != "succeeded":
    raise RuntimeError(f"STT task {stt['taskId']} ended as {done['state']}")
print(done["output"]["text"])  # edit this into your script

# 2. Narrate the edited script
script = "Chapter Three. The storm kept them in the cabin. [breath] <slow>Neither of them pretended to be reading.</slow>"
tts = client.create_task(
    model="xai/grok-tts/text-to-speech",
    input_data={"text": script, "voice_id": "rex", "language": "en", "speed": 0.9},
    idempotency_key=str(uuid.uuid4()),  # new key per new request; reuse only to retry the same one
)
final = client.wait_for_terminal(tts["taskId"])
if final["state"] != "succeeded":
    raise RuntimeError(f"TTS task {tts['taskId']} ended as {final['state']}")

# 3. Copy the MP3 link to your own storage now; generated audio is kept for 14 days
print(output_assets(final)[0]["url"])

Verwende einen Idempotency-Key nur dann erneut, wenn du dieselbe Anfrage nach einer verlorenen Antwort wiederholst. Uploads, Warten, Fehler, Wiederholungen und das Erneuern eines abgelaufenen Download-Links stehen in der Python-SDK-Referenz und im Task-Leitfaden.

Oder von einem Agenten ausführen lassen

Wenn ein Assistent das Transkribieren und Vertonen für dich übernehmen soll, gib ihm die CLI oder den MCP-Server. Beide zeigen den Preis und fragen vor einem kostenpflichtigen Aufruf nach deiner Bestätigung. Das Skill ergänzt beides um Anweisungen.

  • CLI. spicyapi führt einen Task aus dem Terminal aus (npx @spicyapi/cli funktioniert ohne Installation):

``bash spicyapi files upload ./interview.mp3 # prints a spicy:// URI spicyapi tasks create --model xai/grok-stt/speech-to-text \ --input-json '{"audio_url": "spicy://YOUR-UPLOAD-URI", "multichannel": true}' --wait ``

  • MCP-Server. Füge den MCP-Server deinem Assistenten hinzu und frage dann: „Transcribe ./interview.mp3 with Grok STT, with each channel separate.“ Er ruft spicyapi_upload_file auf, dann spicyapi_task_create (das für deine Preisbestätigung anhält) und danach spicyapi_task_wait.

``json { "mcpServers": { "spicyapi": { "command": "npx", "args": ["--yes", "--package=@spicyapi/mcp", "spicyapi-mcp"], "env": { "SPICY_API_KEY": "YOUR_SPICY_API_KEY" } } } } ``

  • Skill. npx skills add spicyapi-ai/spicy-skill installiert das Agent Skill, das einem Coding-Assistenten beibringt, das aktuelle Schema zu lesen und Idempotency-Keys wiederzuverwenden. Es kann selbst keine Tasks ausführen; nutze es zusammen mit CLI oder MCP.

Vom Transkript über das Skript zur Stimme

Bearbeite das Transkript vor der Synthese: Korrigiere Namen, Zeichensetzung und alles, was anders gelesen werden soll. Eine kurze Key-Term-Liste lohnt sich für erfundene Namen, doch das Transkript gibt wieder, was die Aufnahme sagt; prüfe Namen deshalb am Audio.

TTS hat 71 voreingestellte Stimmen. eve ist der Standard; eve, ara, leo, rex und sal sprechen alle unterstützten Sprachen, die übrigen 66 sind auf eine Sprache abgestimmt und erscheinen in der API als undurchsichtige IDs. Wähle sie im Stimmenmenü auf der Grok-TTS-Modellseite, das jede mit Name, Geschlecht und Sprache beschriftet. Probiere vor der Synthese einer ganzen Erzählung eine kurze Passage mit deinem schwierigsten Namen.

Die Sprechweise steht im Skript. Inline-Tags erzeugen dort ein Geräusch, wo du sie setzt: [pause], [long-pause], [breath], [inhale], [exhale], [sigh], [laugh], [chuckle], [giggle], [cry]. Umschließende Tags ändern, wie die eingeschlossenen Wörter gelesen werden: <whisper>, <soft>, <slow>, <loud>, <build-intensity> und weitere. Tags werden ausgeführt, nicht vorgelesen, zählen aber zum Preis. Zum Beispiel:

json
{"text": "Chapter Three. The storm kept them in the cabin for two more days. [breath] By the second night, <slow>neither of them pretended to be reading anymore.</slow>", "voice_id": "rex", "speed": 0.9, "language": "en"}

speed reicht von 0,7 bis 1,5. bitrate gilt nur für MP3. Nimm MP3 zum Abspielen und WAV zum Bearbeiten; rohes pcm, mulaw und alaw mit 8 kHz ist für Telefonsysteme gedacht und lässt sich im Browser nicht abspielen. SSML wird nicht unterstützt; nutze die obigen Tags.

Für eine Szene mit zwei Figuren synthetisierst du die Zeilen jedes Sprechers getrennt mit verschiedenen Stimmen und schneidest sie zusammen; eine Anfrage liest eine Stimme. Lass an den Schnittstellen natürliche Pausen stehen, statt sie auf null zu kürzen.

Um einen Take zu prüfen, schicke das erzeugte Audio zurück durch STT und vergleiche es mit dem Skript: Fehlende oder veränderte Wörter, ein abgeschnittenes Ende oder ein vorgelesener Tag fallen meist auf, und ein kurzer Clip kostet den Bruchteil eines Cents. Höre dann den Anfang, das Ende und jede markierte Zeile an. Reichen dir die Grok-Presets nicht, findest du im Modellkatalog weitere Sprachausgabe-Modelle; der Vergleich „Uncensored text-to-speech APIs compared“ ist bisher nur auf Englisch erschienen.

Häufige Probleme und Lösungen

SymptomLösung
Nur eine Seite eines Stereo-Anrufs erscheintmultichannel aktivieren und output.transcript.channels lesen
Zwei Mono-Sprecher lassen sich nicht trennenAuf getrennten Kanälen aufnehmen oder ein Diarisierungs-Tool nutzen
keyterms abgelehntObjekte mit dem Schlüssel term senden, höchstens 100
Normalisierung abgelehntEinen unterstützten language-Code ergänzen
MP3-Bitrate bei WAV abgelehntbitrate weglassen
Rohaudio lässt sich nicht abspielenMP3 oder WAV nutzen oder Rohformat und Abtastrate im Player einstellen
STT lehnt eine URL abSie muss die Audiodatei selbst liefern, keine HTML-Seite
Download-Link abgelaufenDenselben Task erneut abfragen, um eine frische Asset-URL zu erhalten
Download liefert 403Einen User-Agent-Header senden; der Python-Standard wird blockiert
Task zeigt weiter „running“Weiter auf dieselbe Task-ID warten; keinen Ersatzjob anlegen

Die Wortzeitstempel von STT gehören zur Originalaufnahme. TTS liefert Audio ohne Wortzeiten; Änderungen an Text oder Tempo machen die alten Zeitstempel daher ungültig. Richte Untertitel am fertigen synthetisierten Take aus.

Auch in English · 日本語 · 한국어 · Français · Español · Português (Brasil) · Русский · Italiano · Polski

Selbst ausprobieren

Sie zahlen nur für das, was Sie ausführen – ohne Tarif, ohne Abo.

Erstellt mit MiniMax H3 · ByteDance Seedance 2.0 Fast