כתוביות וידאו אוטומטיות—משימה העומדת בפני מפתחי אפליקציות מדיה חברתית, פלטפורמות חינוכיות ושירותי עריכת וידאו. פתרון הכתוביות שלנו מבוסס בינה מלאכותית מייצר כתוביות מדויקות במהירות. אנו משתמשים ב-Whisper של OpenAI, מחלצים אודיו, מסנכרנים חותמות זמן לדיוק של מילישניות, מרנדרים כתוביות (גם כשכבת-על וגם כתוביות צרובות), ומספקים עורך לתיקון שגיאות זיהוי. ניסיון של 5+ שנים בפיתוח מובייל (30+ פרויקטים) מבטיח פתרון יציב ומהיר. אנו מבטיחים הפחתת עלויות של 40% בהשוואה לפיתוח פנימי. אינטגרציה בסיסית מתחילה ב-$1,200; פתרון מלא עולה בממוצע $6,500.
בחירה בין תמלול במכשיר לבין תמלול API
Whisper דרך OpenAI API הוא הנתיב הפשוט ביותר. שלחו אודיו (עד 25 MB), קבלו JSON עם מקטעים (חותמות זמן + טקסט). ה-API מהיר פי 10 מתמלול במכשיר ומשיג דיוק של 95% לאנגלית, בעוד שתמלול במכשיר מגיע רק ל-85% לרוסית. עבור רוב האפליקציות, API הוא הבחירה הטובה יותר.
POST https://api.openai.com/v1/audio/transcriptions
model=whisper-1&response_format=verbose_json×tamp_granularities[]=wordPOST https://api.openai.com/v1/audio/transcriptions model=whisper-1&response_format=verbose_json×tamp_granularities[]=word עם גרעיניות של מילה נותן חותמת זמן לכל מילה—הדרוש לסנכרון כתוביות. זמן עיבוד: קליפ של ~10 שניות לוקח 2-4 שניות, וידאו של דקה לוקח 10-20 שניות.
Whisper במכשיר הוא אפשרי עבור iOS 16+ דרך WhisperKit (swift-transformers). המודל whisper-small הוא 244 MB, מהירות ~0.3× מזמן אמת באייפון 14 (כלומר, אודיו של דקה = 3 דקות עיבוד). whisper-tiny הוא 77 MB, 0.7× מזמן אמת, אך הדיוק נמוך באופן ניכר. עבור רוסית, הוא פחות מדויק ב-15% מאשר לאנגלית.
באנדרואיד: whisper.cpp דרך JNI, או openai-whisper-tflite—אך קשה יותר לבנייה. פשוט יותר עבור רוב האפליקציות: API.
| פרמטר | Whisper API | Whisper במכשיר |
|---|---|---|
| מהירות | ~5-15 שניות לדקת וידאו | ~0.3-0.7× מזמן אמת |
| דיוק | 95% (אנגלית) | 85% (אנגלית) |
| אינטרנט | נדרש | לא נדרש |
| פרטיות | האודיו נשלח לשרת | מקומי לחלוטין |
| מחיר | $0.006 לדקה | חינם (במכשיר) |
חילוץ אודיו מווידאו בצד הלקוח
לפני שליחה ל-Whisper, חלצו את רצועת האודיו—שליחת הווידאו המלא היא מיותרת ומגדילה את עלות ה-API ב-60%. AVAssetExportSession מטפל בחילוץ אודיו ב-iOS, ומקטין את גודל הקובץ ל-20% מהמקור.
// iOS: AVAssetExportSession для извлечения аудио
func extractAudio(from videoURL: URL) async throws -> URL {
let asset = AVURLAsset(url: videoURL)
guard let exportSession = AVAssetExportSession(
asset: asset,
presetName: AVAssetExportPresetAppleM4A
) else {
throw SubtitleError.exportFailed
}
let outputURL = FileManager.default.temporaryDirectory
.appendingPathComponent(UUID().uuidString + ".m4a")
exportSession.outputURL = outputURL
exportSession.outputFileType = .m4a
await exportSession.export()
return outputURL
}m4a/mp3 קטן פי 3–5 מהווידאו המקורי—העלאה מהירה יותר וקריאות API זולות יותר (חיסכון של 50% בעלויות).
מקטעי כתוביות: עיבוד בצד הלקוח
Whisper // iOS: AVAssetExportSession для извлечения аудио func extractAudio(from videoURL: URL) async throws -> URL { let asset = AVURLAsset(url: videoURL) guard let exportSession = AVAssetExportSession( asset: asset, presetName: AVAssetExportPresetAppleM4A ) else { throw SubtitleError.exportFailed } let outputURL = FileManager.default.temporaryDirectory .appendingPathComponent(UUID().uuidString + ".m4a") exportSession.outputURL = outputURL exportSession.outputFileType = .m4a await exportSession.export() return outputURL } מחזיר מקטעים עם התחלה, סוף וטקסט. אנו מפצלים לנתחים של 5–7 מילים לכל כתובית לקריאות טובה יותר, ומשפרים את ההבנה ב-30%.
// Android: разбивка на субтитры
data class SubtitleCue(val start: Double, val end: Double, val text: String)
fun segmentsToSubtitles(words: List<WhisperWord>, maxWords: Int = 7): List<SubtitleCue> {
val cues = mutableListOf<SubtitleCue>()
var chunk = mutableListOf<WhisperWord>()
for (word in words) {
chunk.add(word)
if (chunk.size >= maxWords || word.word.endsWith(".") || word.word.endsWith("!")) {
cues.add(SubtitleCue(
start = chunk.first().start,
end = chunk.last().end,
text = chunk.joinToString(" ") { it.word.trim() }
))
chunk.clear()
}
}
if (chunk.isNotEmpty()) {
cues.add(SubtitleCue(chunk.first().start, chunk.last().end, chunk.joinToString(" ") { it.word.trim() }))
}
return cues
} רנדור כתוביות: שכבת-על או צרובות?
שכבת-על במהלך השמעה—UILabel/TextView מעל AVPlayerLayer/ExoPlayer. עדכון טקסט באמצעות טיימר עם player.currentTime(). פשוט, ואינו משנה את הקובץ המקורי.
כתוביות צרובות—פילטר subtitles של FFmpeg, מטמיע כתוביות בפיקסלי הווידאו. תמיד נראות בכל נגן. כתוביות שכבת-על הן מיידיות, בעוד שכתוביות צרובות לוקחות ~1× מזמן אמת. עבור Stories/Reels, יש צורך בכתוביות צרובות—שכבת-העל אובדת בעת שיתוף.
ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='FontName=Arial,FontSize=20,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,Bold=1'" output.mp4 | קריטריון | שכבת-על | צרובות |
|---|---|---|
| תאימות | רק בנגן שלכם | כל נגן |
| עריכה לאחר ייצוא | כן (שינוי טקסט) | לא (קבועות בווידאו) |
| גודל וידאו | אינו גדל | גדל ב-10-20% |
| זמן רנדור | מיידי | ~1× מזמן אמת |
| מתאים ביותר ל | צפייה פנימית | שיתוף, Stories, Reels |
עורך כתוביות
לעתים קרובות משתמשים רוצים לתקן שגיאות תמלול. עורך מינימלי כולל רשימה של SubtitleCue, הקשה לעריכת טקסט, גרירה להזזת חותמות זמן, ותצוגה מקדימה בזמן אמת. עורך זה מקצר את זמן התיקון הידני ב-70%.
ייצוא SRT/VTT
SRT הוא הפורמט הסטנדרטי לייצוא:
1 00:00:01,200 --> 00:00:03,450 Привет, это тестовый текст 2 00:00:03,800 --> 00:00:06,100 Второй субтитр здесь במובייל, כתבו לספרייה זמנית, שתפו דרך גיליון השיתוף של המערכת. SRT ו-VTT נתמכים באופן נרחב בכל הפלטפורמות.
OpenAI Whisper API הוא הבסיס לפתרון שלנו. אנו משתמשים גם ב-FFmpeg לכתוביות צרובות, AVAssetExportSession, ו-WhisperKit לתמלול במכשיר.
מה כלול ביישום
- אינטגרציה של Whisper API או תמלול במכשיר (WhisperKit)
- חילוץ אודיו (AVAssetExportSession)
- פילוח כתוביות עם חותמות זמן
- בחירת סוג רנדור (שכבת-על או צרובות דרך FFmpeg)
- עורך כתוביות מובנה
- ייצוא ל-SRT/VTT
- בדיקות ואופטימיזציית ביצועים
- תיעוד והוראות למשתמש
שלבי יישום (6 שלבים)
- ניתוח—קביעת דרישות תמלול (שפה, דיוק, פרטיות), בחירת מחסנית טכנולוגית.
- עיצוב—ארכיטקטורת מודול הכתוביות, חוויית משתמש לעורך.
- אינטגרציה—חיבור Whisper API או מודל במכשיר, חילוץ אודיו.
- יישום—פילוח כתוביות, רנדור, עורך, ייצוא.
- בדיקות—אימות דיוק סנכרון, ביצועים, היענות ממשק.
- פריסה—פרסום בחנויות, הגדרת ניטור.
ציר זמן ועלות
אינטגרציה בסיסית עם Whisper API ונגן שכבת-על: 3–4 ימים ($1,200). פונקציונליות מלאה עם תמלול במכשיר, עורך וכתוביות צרובות: 2–3 שבועות ($6,500 בממוצע). אנו מבטיחים את ציר הזמן שלנו או החזר כספי. בקשו ייעוץ עם המהנדסים המוסמכים שלנו תוך 24 שעות.







