Open-source ассистент для чернового монтажа видео
Недавно я писал про навигацию для мотоцикла. Побочный эффект DIY: накопилось много не особо связаных между собой видосов. Медийку развивать мне хотелось, а времени на монтаж и разбор видео особо не было (на самом деле идея и базовая реализация появились давно, но сейчас это рпигодилось на практике).
Так появился NeuroCut — локальный AI-ассистент для rough cut. Кидаешь видео (или несколько), пишешь brief текстом, получаешь план монтажа и экспорт:
FCP7 XML для Premiere Pro / DaVinci Resolve;
ZIP с готовыми MP4-клипами (удобно для мобильных редакторов);
склеенный render «под ключ»;
субтитры на готовом клипе;
CEP-плагин для Premiere, который кладёт клипы на таймлайн без повторной загрузки медиа.
Главный экран NeuroCut: выбор задачи, upload и editing brief
UI на старте: пять типов задач — от транскрипта и субтитров до NLE XML и turnkey MP4.
Репозиторий: https://github.com/jdmarshall95/neurocut
Разбор пайплайна, граблей и решений, на которых я споткнулся
Я не пытался полностью заменить монтажера. Цель снять с человека первый проход.
Типичный сценарий:
Есть запись интервью / вебинара / обзора / мультикамерный набор клипов.
Есть текстовое задание: «оставь только ответы про продукт, убери воду, добавь маркеры на ключевые мысли».
Нужен rough cut, который можно открыть в Premiere и уже руками довести.
Обьективно автоматический монтаж пока еще слабоват, примерно на уровне готовых шаблонов из кэпкат. Но задачи по типу “вырежи молчаливые паузы” он решает вполне сносно.
Как устроен пайплайн
Схема простая по шагам и довольно жёсткая по контрактам данных.
В UI живой progress с теми же стадиями:
Старт: FFmpeg вытаскивает audio.wav.
Дальше STT (Whisper / Silero / GigaAM) с таймкодами.
После scene detection LLM собирает edit plan. На скрине видно модель: gemini-3.1-flash-lite.
Финал для turnkey-режима: склейка MP4 по плану.
Стек:
Backend: Python 3.11, FastAPI;
Frontend: React + Vite;
Медиа: FFmpeg / ffprobe;
STT: Whisper (faster-whisper), Silero, GigaAM;
LLM: Google Gemini (по умолчанию), DeepSeek как fallback;
Экспорт в NLE: Jinja2-шаблон Final Cut Pro 7 XML.
С деплоем я пока не заморачивался, пдготовил просто докер компоузы.
Что получается на выходе
На этом прогоне: 4 клипа, 2 маркера, ~52 с, mode speech
Почему не «просто залить видео в мультимодальную модель»
Первый соблазн был очевидный: скормить proxy в Gemini и попросить «нарежь красиво». На практике это быстро упёрлось в три вещи:
Квоты и деньги. Загрузка видео в модель на каждом джобе сразу уничтожит лимит
Text-out модели. Многие актуальные Flash-модели удобнее и дешевле именно как text-in / text-out.
Поэтому дефолт такой (ADR в репо):
USE_VIDEO_FOR_LLM=false;
на каждом джобе всё равно гоняется дешёвый scene proxy (низкий FPS, низкое разрешение);
в LLM уходит: brief + транскрипт с таймкодами + границы планов (+ manifest источников);
Итог: быстрее, дешевле по квотам и заметно честнее по стыкам. «Умный» отбор по резкости/стабильности — отдельный будущий слой эвристик.
Работа с озвучкой
Монтаж от транскрипта ломается на неожиданном месте: когда речи почти нет.
Если исходник без аудиодорожки или с неразборчивой речью, пайплайн не должен падать:
проверяется наличие аудио через ffprobe;
пустой/редкий транскрипт — валидный кейс;
включается visual mode на основе scene timeline.
Для русской речи есть first-class offline-путь через GigaAM (sherpa-onnx + модели в gigaam-ru/). В режиме STT_ENGINE=auto для ru система предпочтёт GigaAM, если модели скачаны. Whisper остаётся универсальным fallback.
Отдельно полезный функционал content-addressable cache транскриптов: ключ от хэша аудио + длительности. Повторная заливка того же файла не гоняет STT заново.
Нюанс: у GigaAM/Silero нет нормальных word-level timestamps. Для karaoke-субтитров интервал сегмента приходится делить пропорционально между словами. Работает, но это компромисс.
Почему FCP7 XML
Я сознательно выбрал Final Cut Pro 7 XML:
его стабильно едят Premiere и Resolve;
его реально шаблонизировать через Jinja2;
Не обошлось без нюансов: абсолютные pathurl ломаются, когда XML уезжает на другую машину. Решение — portable paths вида file://./filename и упаковка медиа рядом с XML.
Для тех, кому XML вообще не нужен, есть ветка экспорта клипов: FFmpeg режет куски по edit_plan.json, кладёт manifest.json и собирает ZIP. В UI это отдельные карточки задач — NLE edit и Mobile clips на первом скрине.
Premiere-плагин без повторного upload
Web-UI удобен для демо и self-host, но монтажёр часто уже сидит в Premiere с медиа на диске. Поэтому начал реализовывать именно плагин, но он сейчас в зачаточной стадии.
Как поднять у себя
Минимум:
git clone https://github.com/jdmarshall95/neurocut.git
cd neurocut
cp .env.example .env
# прописать GEMINI_API_KEY=...
docker compose up --build
Объяснить с
Для CUDA Whisper:
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up --build
Объяснить с
Дальше в UI выбираешь задачу (транскрипт / XML / клипы / render / субтитры), загружаешь видео, пишешь brief, забираешь артефакт — как на скринах выше.
Что уже есть и чего ещё нет
Уже работает как MVP/OSS-ассистент:
полный pipeline rough cut;
multi-file источники на одной шкале времени;
несколько STT-движков;
экспорт XML / clips / render / subtitles;
health, Prometheus metrics, CI, Docker resource limits.
В roadmap осознанно лежат вещи, которых пока нет:
более широкие экспорты (EDL / FCPXML / Resolve markers);
Premiere CEP plugin;
эвристики «стабильный / резкий» кадр;
публичный demo dataset и regression fixtures;
CapCut export
Это early open-source (API около 0.1.0), не SaaS.
Если сделаете issue/PR — буду рад. Особенно полезны:
реальные brief’ы и фейлы таймкодов;
предложения по export-форматам;
опыт с GigaAM vs Whisper;
Вместо заключения
Про «навигационную» ветку — скоро отдельный текст: в первой части я писал, что официального публичного API у 2ГИС нет, но оказалось ручка у приложения все таки есть - нашёлся Dashboard API и HUD перестал жить на парсинге шторки.
Репо ещё раз: https://github.com/jdmarshall95/neurocut
Спасибо, что дочитали. Пишите в комментарии, какие на ваш взгляд функции было бы еще интересно увидеть.







Google gemini... NeuroCut — локальный AI-ассистент. Точно локальный?