So erhalten Sie Zeitstempel für jedes einzelne Wort einer Aufnahme

Rufen Sie POST /transcribe mit output_format auf json und word_timestamps auf true auf (beides sind die Standardwerte). Im Ergebnis enthält dann jeder Abschnitt ein words-Array mit Einträgen der Form {start, end, word}, wobei die Zeiten in Sekunden angegeben sind. Hier sehen Sie, wie die Antwort aufgebaut ist, welche Modelle Wortzeiten liefern und was Sie damit umsetzen können.

API-Schlüssel holen Schnellstart Unterstützte Sprachen

Zuletzt aktualisiert: · Markdown

Die Anfrage

{
  "audio_url": "https://example.com/interview.mp3",
  "model": "oracle",
  "language": "auto",
  "word_timestamps": true,
  "output_format": "json"
}

Starten Sie den Auftrag über POST /transcribe und fragen Sie anschließend GET /transcribe/{jobId} ab, bis der Status COMPLETED lautet. Geben Sie den Parameter model immer ausdrücklich an. Wenn er fehlt, greift die API auf das veraltete Modell core zurück.

Die Antwort

{
  "jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
  "status": "COMPLETED",
  "result": {
    "language": "en",
    "segments": [
      {
        "start": 1.0,
        "end": 3.75,
        "text": "Hello everyone and welcome to the show.",
        "speaker": "Speaker 1",
        "words": [
          { "start": 1.0, "end": 1.35, "word": "Hello" },
          { "start": 1.4, "end": 1.75, "word": "everyone" }
        ]
      }
    ]
  }
}
  • segments[]: enthält start und end in Sekunden, text, bei aktiver Diarisierung das Feld speaker sowie das Array words[].
  • words[]: enthält start, end und word. Die Zeiten sind in Sekunden auf drei Nachkommastellen gerundet.
  • Manchmal hat ein Wort für start und end denselben Wert, und ein kurzes Wort kann nur ein paar Hundertstelsekunden dauern. Teilen Sie deshalb nicht durch die Wortdauer.
  • Setzen Sie word_timestamps auf false oder liefert das gewählte Modell nur Zeiten für ganze Abschnitte, fehlt das Array words. Sie erhalten dann nur start und end für den jeweiligen Abschnitt.

Welche Modelle Wortzeiten liefern

ModellWortzeiten
base, oracle, oracle_pro, oracle_maxJa
oracle_miniLiefert bei reiner Transkription nur Abschnittszeiten. Wortzeiten gibt es hier nur, wenn ein Sprechermodus (Diarisierung oder Kanaltrennung) aktiv ist.
core, edge (Legacy)Ja

Reiner Text (txt) enthält keine Zeitangaben. Wenn Sie das SRT direkt von der API erzeugen lassen, greift derselbe Schalter. Mehr dazu steht in der SRT-Anleitung.

Bestimmte Textstellen in der Aufnahme finden

Fassen Sie alle Wörter in einer flachen Liste zusammen, um darin zu suchen und den passenden Zeitbereich zurückzugeben. So kann ein Agent die Frage „Wo erwähnt sie die Preise?“ mit der genauen Zeit beantworten oder den Satz direkt als Clip ausschneiden.

find.py

# find.py — where is a phrase said? Returns (start, end) in seconds.
import re


def find_phrase(result, phrase):
    words = [w for segment in result["segments"] for w in segment.get("words", [])]
    clean = lambda text: re.sub(r"[^\w]", "", text.lower())
    target = [clean(p) for p in phrase.split()]
    tokens = [clean(w["word"]) for w in words]
    for i in range(len(tokens) - len(target) + 1):
        if tokens[i:i + len(target)] == target:
            return words[i]["start"], words[i + len(target) - 1]["end"]
    return None


# start, end = find_phrase(result, "welcome to the show")
# ffmpeg -ss <start> -to <end> -i talk.mp4 -c:v libx264 -c:a aac clip.mp4

Einen Clip anhand eines Zeitbereichs ausschneiden:

ffmpeg -ss 41.2 -to 47.8 -i talk.mp4 -c:v libx264 -c:a aac clip.mp4

Pausen kürzen und Jump Cuts erzeugen

Anhand der Wortzeiten erkennen Sie genau, wo Sprechpausen liegen. So behalten Sie zusammenhängende Passagen und schneiden alle Pausen heraus, die länger als ein bestimmter Schwellenwert dauern:

silences.py

# silences.py — keep the speech, drop pauses longer than max_gap seconds
def speech_ranges(words, max_gap=0.7, pad=0.1):
    ranges = []
    for word in words:
        if ranges and word["start"] - ranges[-1][1] <= max_gap:
            ranges[-1][1] = word["end"]
        else:
            ranges.append([word["start"], word["end"]])
    return [[max(0.0, s - pad), e + pad] for s, e in ranges]

# Pass the ranges to cut() from cut.py to build the tightened video.

Die verbleibenden Abschnitte fügen Sie dann mit der Funktion cut() aus der Anleitung zum Videoschnitt wieder zusammen.

Weitere typische Anwendungen

  • Wort-für-Wort-Hervorhebung im Web-Player: Heben Sie beim Abspielen jeweils das Wort hervor, in dessen Zeitfenster currentTime gerade liegt.
  • Klickbare Transkripte: Hinterlegen Sie jedes Wort mit einem Link auf ?t=<start>, um im Player direkt an diese Stelle zu springen.
  • Kapitelmarken und Highlights: Lassen Sie ein LLM die relevanten Abschnittsnummern auswählen und lesen Sie per Code die zugehörigen Zeiten aus.
  • Mediathek-Suche: Speichern Sie die Wörter samt Startzeit im Suchindex, damit Nutzer bei einem Treffer direkt an der richtigen Sekunde landen.
  • Sprachkorpora und Annotation: Wandeln Sie die Wortzeiten aus dem JSON einfach in das Format Ihrer jeweiligen Analyse-Tools um.

Kosten

Wortzeitstempel kosten keinen Aufpreis. Abgerechnet wird immer sekundengenau nach dem Tarif des gewählten Modells. Bei base geht es ab 0,48 US$ pro Stunde los, eine Stunde mit oracle liegt bei 1,44 US$. Die vollständige Preisliste finden Sie unter /llms/pricing.md.

Fragen und Antworten

Wie bekomme ich Zeitstempel auf Wortebene aus einer Transkriptions-API?

Übergeben Sie beim Aufruf output_format: "json" und word_timestamps: true. Jeder Abschnitt im Ergebnis enthält dann ein Array words[], in dem für jedes Wort start, end und word (in Sekunden) stehen.

Welche Modelle unterstützen Wortzeitstempel?

Die Modelle base, oracle, oracle_pro und oracle_max stellen sie bereit. Mit oracle_mini erhalten Sie Abschnittszeiten, solange kein Sprechermodus eingeschaltet ist. Die reine Textausgabe enthält gar keine Zeitangaben.

Wie genau sind die Wortzeiten?

KolWrite gibt für die API keine pauschalen Genauigkeitswerte pro Sprache an. Für das Schneiden zwischen Wörtern und für Texthervorhebungen reichen die Zeiten gut aus. Testen Sie am besten ein paar eigene Aufnahmen und planen Sie an den Schnittpunkten einen kleinen Puffer ein.

Kann ich Zeitstempel für eine Videodatei bekommen?

Ja, die API liest einfach die Audiospur der hochgeladenen Videodatei aus. Ist das Video größer als 100 MiB, extrahieren Sie die Tonspur vorab mit ffmpeg.

Sind die Zeitstempel in Sekunden oder Millisekunden?

In Sekunden, angegeben als Dezimalzahl mit bis zu drei Nachkommastellen (zum Beispiel 41.236).