איך מקבלים חותמת זמן לכל מילה בהקלטה
שולחים בקשה ל־POST /transcribe עם output_format מוגדר ל־json ו־word_timestamps מוגדר ל־true (שניהם ברירת מחדל). כל מקטע בתשובה יכלול מערך words עם אובייקטים של {start, end, word} בשניות. במדריך הזה נראה איך בנויה התשובה, אילו מודלים מחזירים זמני מילים ומה אפשר לבנות איתם.
הבקשה
{
"audio_url": "https://example.com/interview.mp3",
"model": "oracle",
"language": "auto",
"word_timestamps": true,
"output_format": "json"
}
יוצרים משימה עם POST /transcribe ודוגמים את GET /transcribe/{jobId} עד שהסטטוס הוא COMPLETED. הקפידו לשלוח את הפרמטר model במפורש, כי בלעדיו ה־API משתמש במודל הישן core.
התשובה
{
"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[]: כוללstartו־endבשניות,text, שדהspeakerכשזיהוי דוברים פועל, ו־words[].words[]: כוללstart,endו־wordבשניות, מעוגלים לשלוש ספרות אחרי הנקודה.- למילה יכולים להיות ערכי
startו־endזהים, ומילה קצרה יכולה להימשך מאיות שנייה בודדות. אל תחלקו במשך הזמן של מילה. - אם הגדרתם
word_timestampsל־false, או שהמודל החזיר רק זמני מקטעים, השדהwordsלא יופיע ויישארו לכם רקstartו־endברמת המקטע.
אילו מודלים מחזירים זמני מילים
| מודל | זמני מילים |
|---|---|
base, oracle, oracle_pro, oracle_max | כן |
oracle_mini | זמני מקטעים בתמלול רגיל, וזמני מילים כשמצב דוברים (זיהוי דוברים או הפרדת ערוצים) פועל |
core, edge (ישנים) | כן |
בפלט טקסט (txt) אין זמנים. קובץ ה־SRT שה־API מייצר מושפע מאותו פרמטר, פרטים במדריך ה־SRT.
איתור הזמן המדויק של ביטוי
משטחים את רשימת המילים, מחפשים בה את הביטוי ומחזירים את טווח הזמן שלו. ככה סוכן יכול לענות על שאלה כמו "איפה היא מזכירה מחירים?" עם זמן מדויק, או לחתוך את המשפט הזה לקליפ.
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
חיתוך קליפ לפי טווח זמן:
ffmpeg -ss 41.2 -to 47.8 -i talk.mp4 -c:v libx264 -c:a aac clip.mp4
קיצור שתיקות וחיתוכי קפיצה
לפי זמני המילים אפשר לחשב את המרווחים ביניהן. משאירים רצפים של דיבור וחותכים החוצה עצירות שארוכות מסף מסוים:
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.
את הטווחים שנשארו מחברים בעזרת cut() ממדריך עריכת הווידאו.
שימושים נוספים בזמני מילים
- הדגשת מילים בזמן ניגון בווב: מדגישים את המילה שטווח הזמן שלה מכיל את
currentTime. - תמליל לחיץ: כל מילה מקשרת ל־
?t=<start>בנגן. - חלוקה לפרקים ורגעים מרכזיים: ה־LLM בוחר מספרי מקטעים, והקוד מתרגם אותם לזמנים.
- חיפוש בארכיון הקלטות: שומרים באינדקס את המילים יחד עם זמן ההתחלה שלהן, כדי שלחיצה על תוצאה תפתח את ההקלטה בשנייה הנכונה.
- יישור טקסט ועבודה על קורפוסים: ממירים את זמני המילים מה־JSON לפורמטי התיוג שהכלים שלכם עובדים איתם.
כמה זה עולה
חותמות זמן למילים לא מוסיפות למחיר. החיוב הוא לפי שניית אודיו בהתאם למודל, החל מ־0.48 דולר לשעה ב־base. שעה במודל oracle עולה 1.44 דולר. מחירון מלא: /llms/pricing.md.
שאלות ותשובות
איך מקבלים חותמות זמן ברמת המילה מ־API לתמלול?
שולחים בקשה עם output_format: "json" ו־word_timestamps: true. בכל מקטע בתשובה יחזור מערך words[] עם start, end ו־word בשניות.
אילו מודלים תומכים בחותמות זמן למילים?
המודלים base, oracle, oracle_pro ו־oracle_max מחזירים אותן. המודל oracle_mini מחזיר זמני מקטעים, אלא אם מפעילים מצב דוברים. בפלט טקסט אין חותמות זמן.
עד כמה זמני המילים מדויקים?
KolWrite לא מפרסמת מדד דיוק לפי שפה עבור ה־API הזה. הזמנים מתאימים לחיתוך בין מילים ולהדגשת טקסט, אבל מומלץ לבדוק מדגם מההקלטות שלכם ולהשאיר מרווח ביטחון קטן בנקודות החיתוך.
אפשר לקבל חותמות זמן לקובץ וידאו?
כן. ה־API קורא את ערוץ האודיו מתוך קובץ הווידאו. אם הקובץ שוקל מעל 100 MiB, חלצו ממנו קודם את האודיו עם ffmpeg.
חותמות הזמן הן בשניות או באלפיות שנייה?
בשניות, כמספר עשרוני עם עד שלוש ספרות אחרי הנקודה (למשל 41.236).