למה FFmpeg במכשיר נייד?
אתה מפתח אפליקציית עריכת וידאו, והמסגרות המובנות (AVFoundation, MediaCodec) לא מספיקות. אתה צריך חיתוך מדויק לפריים, חיבור של מספר קליפים, האצת חומרה, והגדרות קידוד גמישות. שליחת וידאו לשרת היא איטית ויקרה, ומשתמשים דורשים פרטיות. FFmpeg פותר את המשימות האלה ישירות במכשיר. אנחנו משלבים אותו ב-iOS, Android ו-Flutter, מגדירים את בניית ffmpeg-kit האופטימלית, ומחברים מקודדי חומרה VideoToolbox או MediaCodec. זה מפחית את עומס המעבד ומאיץ את העיבוד פי 5–10. עם יותר מ-50 אינטגרציות מוצלחות של עיבוד מדיה, אנחנו מבטיחים תאימות לדרישות App Store ו-Google Play — כולל אופטימיזציה של גודל האפליקציה ועמידה ברישיונות.
אילו בעיות FFmpeg פותר בנייד?
FFmpeg מאפשר כל פעולה על קבצי מדיה: טרנסקודינג, חיתוך, חיבור, הוספת סימן מים, התאמת עוצמת קול ועוד. הנה פקודות אופייניות:
| פעולה | פקודה לדוגמה | מקרה שימוש |
|---|---|---|
| טרנסקודינג | -c:v libx264 -preset ultrafast -crf 23 |
דחיסת וידאו לפני העלאה |
| חיתוך (מדויק לפריים) | -ss 00:00:10 -to 00:00:30 |
יצירת קליפים |
| חיבור | -f concat -safe 0 -i filelist.txt -c copy |
מיזוג מספר קליפים |
| חילוץ אודיו | -vn -acodec copy |
קבלת רצועה לפודקאסט |
| הוספת סימן מים | -filter_complex "overlay=W-w-10:H-h-10" |
מיתוג תוכן |
| שינוי עוצמת קול | -af volume=0.5 |
נרמול אודיו |
| הכנסת תמונה | -i image.png -filter_complex overlay |
הוספת לוגו על וידאו |
לחיתוך מהיר, השתמש ב--c copy — ללא קידוד מחדש, דיוק לפי מפתחות פריים. לחיתוך מדויק לפריים, השמט את -c copy אבל זה לוקח יותר זמן. בממשק המשתמש, הצע בחירה: "חיתוך מהיר" ו"חיתוך מדויק".
איך לבחור את בניית ffmpeg-kit האופטימלית?
בחירת הבנייה משפיעה ישירות על גודל האפליקציה והפונקציונליות הזמינה. הבנייה המינימלית (min) שוקלת 8–12 MB וכוללת קודקים בסיסיים (H.264, AAC) — מספיק לחיתוך והמרה. אם אתה צריך תמיכת HTTPS (למשל, הורדת קבצים דרך הרשת) — בחר בבניית https. עבור H.265, VP9, או קודקי אודיו FLAC/opus, נדרשת full (~50 MB). לפרויקטים תואמי GPL, השתמש ב-full-gpl. אנחנו ממליצים על בניית https כאיזון אופטימלי בין פונקציונליות לגודל. פרטים נוספים על גרסאות ניתן למצוא בתיעוד ffmpeg-kit.
| בנייה | גודל | קודקים | תכונות |
|---|---|---|---|
| min | 8–12 MB | H.264, AAC | בסיסי, ללא רשת |
| https | 12–15 MB | + HTTPS | להעלאה/הורדה |
| full | עד 50 MB | הכל | כל הקודקים, כבד |
| full-gpl | עד 50 MB | הכל | רישיון GPL |
איך לשלב FFmpeg בפרויקט?
iOS. ffmpeg-kit עם CocoaPods — הגדרה מינימלית תוך 15 דקות:
// Podfile
pod 'ffmpeg-kit-ios-https', '~> 6.0'
// Использование FFmpegKit
FFmpegKit.executeAsync("-i input.mp4 -vn -acodec copy output.aac") { session in
guard let returnCode = session?.getReturnCode() else { return }
if ReturnCode.isSuccess(returnCode) {
print("Готово: \(session?.getOutput() ?? "")")
} else {
print("Ошибка: \(session?.getLogsAsString() ?? "")")
}
}Android. דרך Maven:
implementation("com.arthenica:ffmpeg-kit-android-https:6.0.LTS")
FFmpegKit.executeAsync(
"-i input.mp4 -vf scale=1280:720 -c:v libx264 -preset ultrafast -crf 23 output.mp4"
) { session ->
if (ReturnCode.isSuccess(session.returnCode)) {
// обрабатываем результат на main thread
}
}Flutter. התקן את החבילה // Podfile pod 'ffmpeg-kit-ios-https', '~> 6.0' // Использование FFmpegKit.executeAsync("-i input.mp4 -vn -acodec copy output.aac") { session in guard let returnCode = session?.getReturnCode() else { return } if ReturnCode.isSuccess(returnCode) { print("Готово: \(session?.getOutput() ?? "")") } else { print("Ошибка: \(session?.getLogsAsString() ?? "")") } } מ-pub.dev — מעטפת Dart זהה ל-API המקורי.
ניטור התקדמות העיבוד
FFmpeg כותב התקדמות ל-stderr. ffmpeg-kit מספק implementation("com.arthenica:ffmpeg-kit-android-https:6.0.LTS") FFmpegKit.executeAsync( "-i input.mp4 -vf scale=1280:720 -c:v libx264 -preset ultrafast -crf 23 output.mp4" ) { session -> if (ReturnCode.isSuccess(session.returnCode)) { // обрабатываем результат на main thread } } , שבו ffmpeg_kit_flutter מחזיר את המיקום הנוכחי במילישניות. קבל את משך הזמן הכולל דרך StatisticsCallback.
FFmpegKit.executeAsync(command, withCompleteCallback: { session in
/* завершено */
}, withLogCallback: nil, withStatisticsCallback: { stats in
guard let duration = totalDurationMs else { return }
let progress = Double(stats?.getTime() ?? 0) / duration
DispatchQueue.main.async {
self.progressBar.progress = Float(progress)
}
}) מדריך אינטגרציה שלב אחר שלב
- בחר בנייה. קבע אילו קודקים ופרוטוקולים נדרשים. לאפליקציה טיפוסית — https.
- הוסף תלות. כלול את התלות (CocoaPods, Maven, או pub.dev). בדוק פקודה בסיסית, למשל קבלת מידע על קובץ.
- בצע אופטימיזציה לביצועים. הפעל האצת חומרה דרך
getTime()(iOS) אוFFprobeKit.getMediaInformationAsync(Android) עם גיבוי תוכנה.
באייפון 14 Pro, טרנסקודינג של וידאו 1080p באורך דקה דרך FFmpegKit.executeAsync(command, withCompleteCallback: { session in /* завершено */ }, withLogCallback: nil, withStatisticsCallback: { stats in guard let duration = totalDurationMs else { return } let progress = Double(stats?.getTime() ?? 0) / duration DispatchQueue.main.async { self.progressBar.progress = Float(progress) } } ) לוקח 45–60 שניות. זה ארוך מדי לחוויית משתמש. אנחנו משתמשים במקודדי חומרה: iOS — h264_videotoolbox (דרך VideoToolbox) — מהיר פי 5–10, אבל עם פחות שליטה בקצב סיביות. Android — h264_mediacodec (דרך MediaCodec) — דומה. הוסף גיבוי תוכנה:
val command = if (isHardwareEncoderAvailable()) {
"-i input.mp4 -c:v h264_mediacodec output.mp4"
} else {
"-i input.mp4 -c:v libx264 -preset ultrafast output.mp4"
}גודל בינארי: הבנייה המלאה מוסיפה 30–50 MB לאפליקציה, min — 8–12 MB. בחר במינימלית למשימות ספציפיות.
מה כלול באינטגרציה?
- בחירה והגדרה של בניית ffmpeg-kit האופטימלית (בהתחשב ברישיונות וגודל).
- פיתוח API לפקודות (טרנסקודינג, חיתוך, חיבור וכו').
- שילוב ניטור התקדמות והצגה בממשק המשתמש.
- תמיכה בהאצת חומרה עם גיבוי.
- הגדרת ProGuard/R8 (Android) למיניפיקציה.
- תיעוד שימוש.
- בדיקות על 5+ מכשירים אמיתיים.
- תמיכה לאחר פריסה למשך 30 יום.
אינטגרציית FFmpeg מפחיתה עלויות עיבוד בשרת בעד 40%, וחוסכת בתקציב התשתית. היא מחזירה את עצמה תוך 2–3 חודשים. צור קשר להערכת פרויקט — נכין הצעה תוך יום עסקים אחד. בקש ייעוץ לדיון בפרטים וקבלת תוכנית עבודה מותאמת.







