AI-поділ автоматичного монтажу відео для мобільних додатків
Автоматичний монтаж відео — це коли користувач завантажує 20 випадкових кліпів з відпустки, а додаток автоматично вибирає найкращі моменти, нарізає їх під ритм музики та створює готове відео. Технічно це поєднує декілька AI-компонентів: аналіз контенту, виявлення ритму, вибір сцен та остаточне склеювання.
Аналіз контенту відеокліпів
Перш ніж монтувати, потрібно зрозуміти, що в кліпах. Для кожного сегменту ми запускаємо:
Виявлення якості кадру: вимірювання розмитості через дисперсію Лапласа (cv2.Laplacian), експозиція (середня яскравість), наявність осіб. Розмиті та погано освітлені кадри виключаються.
Виявлення висвітлювальних моментів: раптові зміни динаміки (рух камери, дія), обличчя з емоціями, високий контраст — все це підвищує "оцінку" моменту.
# Backend: оцінка кадру
def score_frame(frame_bgr):
gray = cv2.cvtColor(frame_bgr, cv2.COLOR_BGR2GRAY)
# Чіткість
sharpness = cv2.Laplacian(gray, cv2.CV_64F).var()
# Яскравість
brightness = gray.mean()
brightness_score = 1.0 - abs(brightness - 128) / 128 # 128 = оптимально
# Рух (різниця від попереднього кадру)
# motion_score = ...
total = (sharpness / 1000) * 0.4 + brightness_score * 0.3 + motion_score * 0.3
return min(total, 1.0)
Для глибшого аналізу використовуйте CLIP (OpenAI) через API: вбудовування кадру дозволяє фільтрувати за семантичним змістом ("кадри з людьми", "заходи сонця", "їжа").
Виявлення ритму та синхронізація з музикою
Монтаж під ритм — це те, що відрізняє хороше авто-відео від поганого. Використовуйте librosa на backend:
import librosa
import numpy as np
def detect_beats(audio_path):
y, sr = librosa.load(audio_path, sr=22050)
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
beat_times = librosa.frames_to_time(beat_frames, sr=sr)
return beat_times.tolist() # секунди кожного удару
Ритмічні точки — це точки склеювання. Алгоритм монтажу: для кожного інтервалу між ударами вибирайте фрагмент з найвищою оцінкою; довжина фрагменту дорівнює інтервалу між ударами.
Середній BPM поп-треку — 120–140. Інтервал між ударами — 0,43–0,5 секунди. Це короткі нарізи — динамічні, підходять для TikTok/Reels. Для ліричних відео беріть кожний 2-й або 4-й удар — 1–2 секунди за кадр.
Архітектура мобільного клієнта
Мобільний додаток відповідає за:
- Вибір кліпів з галереї (кілька одночасно —
PHPickerViewControllerна iOS 14+,PhotoPickerна Android API 33+) - Завантаження на backend (багаточастинне завантаження з прогресом)
- Вибір музики (з бібліотеки чи генерація через AI)
- Відображення прогресу монтажу
- Відтворення та збереження результату
// iOS: багатофайлове завантаження з прогресом
class VideoUploadService {
func uploadClips(_ urls: [URL]) -> AsyncStream<UploadProgress> {
AsyncStream { continuation in
Task {
for (index, url) in urls.enumerated() {
let data = try! Data(contentsOf: url)
try await uploadSingle(data: data, name: "clip_\(index).mp4")
continuation.yield(UploadProgress(completed: index + 1, total: urls.count))
}
continuation.finish()
}
}
}
}
Завантажуйте великі файли через URLSession фонове завантаження (URLSessionConfiguration.background). Не втрачає завантаження при згортанні додатка.
Backend: монтаж через FFmpeg
Після аналізу та вибору фрагментів backend будує FFmpeg команду:
# Конкатенація через concat demuxer
ffmpeg -f concat -safe 0 -i playlist.txt \
-i background_music.mp3 \
-shortest \
-c:v libx264 -crf 20 -preset fast \
-c:a aac -b:a 192k \
-vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
output.mp4
playlist.txt містить часові мітки для кожного кліпу:
file '/tmp/clip_3.mp4'
inpoint 12.4
outpoint 13.1
file '/tmp/clip_7.mp4'
inpoint 5.2
outpoint 5.7
Час обробки на сервері: 30–120 секунд залежно від обсягу джерел та довжини результату.
Налаштування стилю монтажу
Хороший UX надає користувачам декілька предустановок:
| Стиль | BPM | Довжина нарізу | Переходи |
|---|---|---|---|
| Динамічний | 130–140 | 0,4–0,8 сек | Жорсткий нарізу |
| Кінематографічний | 80–100 | 2–4 сек | Fade, dissolve |
| Лірична | 90–110 | 1,5–3 сек | Повільна fade |
| Історія | 100–120 | 1–2 сек | Нарізу + незначне збільшення |
Налаштування передаються на backend разом з запитом на монтаж.
Часові рамки
Базовий авто-монтаж (завантаження кліпів, синхронізація биття, монтаж) — 2–3 тижні. Повна реалізація з аналізом контенту CLIP, стилями монтажу, AI-музикою та попереднім переглядом на пристрої — 6–8 тижнів. Вартість розраховується індивідуально.







