Узнайте, как использовать Gemini 3.7 Flash для анализа видео и автоматического монтажа. Практический пример с Python CLI и ffmpeg. Начните прямо сейчас!
Все началось с недопонимания. Я увидел в документации Gemini API новую модель Omni Flash, которая обещала обрабатывать видео, и подумал: а что если скормить ей кучу видео и фото, а она сама смонтирует из них ролик? Оказалось, что это не так, но после обхода ограничений получился рабочий инструмент. В этой статье я расскажу, как использовать Gemini для анализа видео и автоматического монтажа, и какие грабли ждут на этом пути.
Gemini Omni Flash — это модель для генерации и редактирования одного видео с помощью естественного языка. Она не умеет анализировать несколько видео сразу. В документации прямо сказано: «Ссылки или рассуждения о нескольких видео не поддерживаются». Также видео длиннее 3 секунд обрабатываются некорректно. Поэтому путь «закинуть все и получить монтаж» был закрыт. Для анализа нескольких видео нужно использовать стандартные модели Gemini, например, 2.5 или 3.7 Flash, которые поддерживают до 10 видео в одном запросе и имеют контекст в 1M токенов.
Мой конвейер состоит из пяти этапов: сканирование файлов, анализ каждого файла, составление плана, ручная проверка и рендер. Ключевое решение — на этапе анализа вызывать Gemini для каждого видео отдельно, получая таймкоды и описания, а затем передавать эти текстовые результаты (не сами видео) в модель для агрегации. Так мы избегаем проблемы «много видео» и не упираемся в лимит 10 видео. К тому же, таймкоды при отдельной обработке получаются точнее.
def analyze_file(file_path: str) -> dict:
"""Анализирует видео или фото и возвращает JSON с описанием"""
# Загружаем файл и отправляем в Gemini
media = upload_file(file_path)
prompt = """Опиши содержимое этого видео. Укажи ключевые моменты с таймкодами в формате JSON:
{"description": "...", "highlights": [{"timestamp": "00:01.500", "event": "..."}]}"""
response = model.generate_content([media, prompt])
return json.loads(response.text)
Я решил не делать полную автоматизацию. Между входными файлами и финальным роликом есть этап, где я могу вмешаться вручную. Для этого используется YAML-файл, в котором указаны клипы, их порядок, таймкоды и переходы. Меняя числа в этом файле, можно корректировать монтаж без перезапуска всего конвейера.
target_duration_sec: 23
a spect_ratio: '9:16'
clips:
- source: /path/to/video1.mp4
note: Открывающий кадр
in: '00:00.000'
out: '00:02.500'
- source: /path/to/photo.jpg
note: Забавный момент
duration_sec: 4.0
transitions: crossfade 0.3s
mood_tags: [Professional, Joyful, Community Cohesion]
Изначально я использовал gemini-2.5-flash, но затем перешел на gemini-3.7-flash. Разница в описаниях была заметна: 2.5 описывала слайд как «информация о работе», а 3.7 прочитала текст и назвала должность. В агрегации 3.7 распознала название мероприятия и детали, которых не было в промпте. Это улучшило качество монтажа.
Для фоновой музыки я использовал Lyria 3. В отличие от обычного generate_content, здесь нужно вызывать client.interactions.create(). У модели нет структурированных параметров — все (длительность, темп, настроение) пишется в промпте. Также музыка не редактируется, а если она короче видео, приходится зацикливать ее с помощью ffmpeg.
При использовании фильтра xfade для переходов нужно правильно рассчитывать offset. Если ошибиться, ffmpeg может выдать ошибку или просто пропустить кадры, но не сообщит об этом. Поэтому важно проверять результат, проигрывая видео.
Субтитры генерировались из поля note, но после смены модели формат заметок изменился, и субтитры стали некорректными. Пришлось адаптировать парсер. Также нужно учитывать длину текста и его позицию на экране, иначе субтитры перекрывают важные элементы.
Я столкнулся с тем, что при повторном запуске analyze приходится платить за повторный анализ, поэтому я добавил кэширование. Также важно, чтобы вторичные функции (например, генерация музыки) не ломали основной процесс — они должны корректно обрабатывать ошибки.
Если вы хотите автоматизировать монтаж видео с помощью ИИ, начните с малого: используйте Gemini для анализа отдельных файлов, а затем собирайте ролик через ffmpeg. Не пытайтесь заставить одну модель делать все — разделите задачи. И всегда проверяйте результат визуально, потому что ошибки не всегда очевидны.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →