עורך וידאו למובייל: חיתוך, מיזוג וייצוא חלקים
אנו נתקלים במשימת שילוב עורך וידאו כמעט בכל פרויקט מובייל שני. לקוחות רוצים שמשתמשים יוכלו לחתוך שניות מיותרות, למזג מספר קליפים, או להוסיף טקסט מעל — הכל ללא הקפאות של 30 שניות. נראה שממשקי API לווידאו זמינים בכל פלטפורמה, אבל יש הרבה מלכודות: חיתוך ברמת פריים, ציר זמן חלק, ייצוא מהיר ללא חסימת ממשק המשתמש. בואו נצלול לאיך אנחנו פותרים בעיות אלה ב-iOS וב-Android. מדריך זה מכסה חיתוך וידאו במובייל, יישום עורך וידאו ב-iOS עם Swift, וטכניקות עריכת וידאו ב-Android עם Kotlin.
למה חיתוך וידאו אינו משימה טריוויאלית
חיתוך לפי טווח זמן. ב-iOS אנו משתמשים ב-AVAssetExportSession עם timeRange:
exportSession.timeRange = CMTimeRange(
start: CMTime(seconds: startTime, preferredTimescale: 600),
duration: CMTime(seconds: duration, preferredTimescale: 600)
)התיעוד הרשמי של Apple ממליץ על exportSession.timeRange = CMTimeRange( start: CMTime(seconds: startTime, preferredTimescale: 600), duration: CMTime(seconds: duration, preferredTimescale: 600) ) לדיוק ברמת פריים בווידאו. preferredTimescale: 600 הוא התקן לווידאו, כפולות של 24/25/30/60 fps. שימוש ב-timescale: 1 גורם לשגיאות עיגול פריימים. ב-Android — MediaMuxer + MediaExtractor לחיתוך ברמת פריים ללא קידוד מחדש (רק אם מקשי הפריים מיושרים). אם לא — Transformer מ-media3 עם קידוד מחדש מפורש. גישה זו מבטיחה דיוק ברמת פריים, קריטי לעריכה מקצועית.
איך למזג קליפים ללא אובדן איכות
מיזוג קליפים. iOS: AVMutableComposition — הוסף AVMutableCompositionTrack לווידאו ואודיו, הכנס דרך insertTimeRange(_:of:at:). חשוב: רצועות אודיו ממוזגות בנפרד מרצועות וידאו, אחרת יש חוסר סנכרון. Android: media3 Transformer עם ממשק Composition (1.2.x+). רצף קליפים — EditedMediaItemSequence. אנו מגדירים מיקס אודיו כך שהמעברים חלקים — ללא קליקים או עיכובים.
שכבת טקסט. iOS: AVVideoComposition + AVVideoCompositionCoreAnimationTool. צור CATextLayer, הוסף אנימציית הופעה דרך CABasicAnimation, העבר ל-animationTool. ב-Android — OverlayEffect ב-media3 Transformer או צייר דרך Canvas על כל פריים (איטי, מתאים רק לתוכן קצר). לווידאו ארוך אנו מעדיפים שכבות טקסט מקוריות דרך AVAssetImageGenerator — עד פי 3 ביצועים לעומת Canvas.
שלב אחר שלב: בניית תצוגה מקדימה של ציר זמן
- צור תמונות ממוזערות של פריימים באמצעות
generator.generateCGImagesAsynchronously(forTimes: times) { _, image, _, _, _ in // обновляем UI на главном потоке }ב-iOS אוrequestedTimeToleranceBefore/After = .zeroב-Android. בקש פריימים כל 0.1 שניות עבור גרירת ציר זמן. - שמור תמונות שנוצרו במטמון LRU כדי למנוע פיגור במהלך גלילה.
- הצג תמונות ממוזערות בתצוגת גלילה אופקית. ב-iOS, השתמש ב-
CMTime(seconds: 0.1, preferredTimescale: 600)עם פריסה מותאמת אישית; ב-Android,MediaMetadataRetriever.getFrameAtTime()עםIO Dispatcher. - טפל בגרירת משתמש: עדכן סמן זמן נוכחי וחפש וידאו בהתאם.
קטע קוד: יצירת פריימים ב-iOS
generator.generateCGImagesAsynchronously(forTimes: times) { _, image, _, _, _ in // обновляем UI на главном потоке } ייצוא
תמיד אסינכרוני, עם התקדמות. iOS: exportSession.progress דרך Timer כל 0.1 שניות. Android: Transformer.addListener עם onProgress(progress: Float). פורמט פלט: H.264 ב-MP4 — תאימות מקסימלית. H.265 (HEVC) — גודל קטן יותר, אבל לא כל השרתים מקבלים אותו ללא טרנסקודינג.
| הגדרת iOS | רזולוציה | קצב סיביות (בערך) |
|---|---|---|
AVAssetExportPreset640x480 |
640×480 | ~1.5 Mbps |
AVAssetExportPreset1280x720 |
1280×720 | ~5 Mbps |
AVAssetExportPreset1920x1080 |
1920×1080 | ~10 Mbps |
| הגדרות AVVideo מותאמות אישית | כל | נשלט |
השוואת ביצועים: iOS מקורי דרך AVAssetExportSession מהיר פי 2–3 מפתרון FFmpeg מקביל (הודות לפענוח חומרה). ב-Android, MediaCodec עם H.264 נותן עד 50% האצה לעומת קידוד תוכנה.
שיקולים חוצי פלטפורמות: video_editor של Flutter
video_editor (זמין ב-pub.dev) מספק רכיבי ממשק משתמש (ציר זמן, חיתוך) אך מסתמך על ffmpeg_kit_flutter לפעולות בפועל. הפשרה היא קוד ממשק משתמש חוצה פלטפורמות מול ביצועים: FFmpeg מעבד וידאו על המעבד, שהוא איטי משמעותית מ-AVFoundation או MediaCodec מקוריים. לדוגמה, ייצוא קליפ של 2 דקות לוקח כ-45 שניות עם FFmpeg לעומת כ-12 שניות עם קוד מקורי — הפרש של פי 3.75. לכן, אנו ממליצים על יישום מקורי לאפליקציות ברמת ייצור, בעוד שפתרון Flutter מספיק ל-MVP או לשימוש מזדמן. הצוות שלנו העביר בהצלחה שני לקוחות מ-Flutter לפתרון מקורי, והפחית את זמן הייצוא בממוצע ב-70%.
רקורד שלנו
עם ניסיון של למעלה מ-5 שנים ו-20+ אפליקציות מדיה שסופקו (כולל עורכי וידאו לסטרימינג ואפליקציות UGC), הצוות שלנו של 10+ מהנדסים מתמחה בעיבוד וידאו נייד בעל ביצועים גבוהים. סיפקנו עורכים ללקוחות החל מסטארטאפים ועד חברות Fortune 500, והשגנו דירוג ממוצע של 4.5+ ב-App Store. הפתרונות שלנו מקצרים את זמן הפיתוח והעלות בעד 30% לעומת בנייה פנימית, וחוסכים ללקוחות בממוצע $1,500 על תכונות בסיסיות בלבד.
מה אנחנו מספקים
- ניתוח דרישות (חיתוך, מיזוג, שכבות, אפקטים)
- עיצוב ארכיטקטורה: בחירת מסגרת, הגדרת צינור עיבוד
- יישום מודול ליבה: חיתוך, קומפוזיציה, ייצוא עם בדיקות יחידה
- שילוב ציר זמן עם תצוגה מקדימה וטיפול במחוות
- אופטימיזציית ביצועים: שמירת פריימים במטמון, עיבוד אסינכרוני, האצת חומרה
- בדיקות על מכשירים שונים (iPhone SE — iPhone 15 Pro, Xiaomi Redmi — Samsung Galaxy S24)
- בנייה ופריסה ל-App Store / Google Play עם חתימת קוד ופרופילי provisioning
- תיעוד שילוב (סכמות API, דוגמאות קוד, מדריך הגדרת חנות)
- הדרכה והעברת ידע לצוות שלך
- תמיכה לאחר פריסה למשך 30 יום
- גישה לקוד מקור וסקריפטי בנייה
אנו מבטיחים שהפונקציונליות המיושמת תעבור את הבדיקות של App Store (סעיף 4.2 — מינימליזם, 5.1 — פרטיות) ו-Google Play (מדיניות שימוש במדיה).
ציר זמן והשקעה
חיתוך בסיסי לפי טווח זמן + ייצוא: $2,000–$3,000 (2–3 ימי עבודה). עורך מלא עם ציר זמן, מיזוג קליפים ושכבות טקסט: $5,000–$8,000 (5–8 ימי עבודה). צירי זמן מתעדכנים לאחר בריף: המורכבות תלויה במספר האפקטים, תמיכת HDR, טיפול בכתוביות. צור קשר להערכת פרויקט.







