Дата публикации
ai_products

Doza Assist: ИИ-конвейер, который монтирует ваши видео за 20 минут вместо 6 часов

Что нового

Doza Assist — это скриптовый конвейер для автоматического монтажа длинных видео (30–60+ минут) в готовые таймлайны для DaVinci Resolve и соцсетей.

Ключевые факты и цифры:

  • Время экономии: из 60 минут сырого видео получается 15‑минутный ролик примерно за 20 минут обработки вместо 4–6 часов ручного монтажа.
  • Автоматическая нарезка и ускорение: сцены размечаются как интересные / умеренные / низкие / скучные и получают скорость от 1x до 6x.
  • Три режима работы:
    • build — немые сборки/мастерские, ускорение до 6x + фоновая музыка.
    • unboxing — обзоры и туториалы с голосом, исходная озвучка сохраняется, скучные фрагменты вырезаются по тишине и статике.
    • reels — вертикальные 9:16 клипы для Shorts/Reels/клипов на базе уже готового анализа.
  • Полный автоматический цикл одной командой:
    • анализ видео → нарезка → таймлайн Resolve → рендер 4K H.265 → загрузка на YouTube;
    • отдельный путь для вертикальных клипов + публикация в Instagram и Facebook.
  • Поддерживаемые платформы и форматы:
    • YouTube (основное видео 4K H.265, Shorts);
    • Instagram Reels и фото‑карусели (с авто‑перекодированием HEVC → H.264);
    • Facebook Reels и фотопосты.
  • Под капотом — связка из:
    • Qwen2.5‑VL‑7B (vision‑language‑модель, ~4,7 ГБ Q4_K_M GGUF);
    • CLIP ViT‑B/32 для текст‑картинка сопоставления;
    • ResNet‑50 для извлечения визуальных фич и детекции похожих сцен;
    • FFmpeg с NVENC для ускоренного рендеринга и анализа аудио/статичных кадров.

По сути, это не отдельное приложение, а хорошо собранный Python‑конвейер, который превращает папку с сырыми роликами в монтажный проект + готовые файлы и загружает их в соцсети.

Как это работает

Общая архитектура

Пайплайн разбит на пять основных стадий плюс отдельный маршрут для вертикальных клипов:

  1. AI‑анализ (Stage 1)

    • Скрипт analyze_advanced5.py каждые 2 секунды вынимает кадр из видео.
    • Qwen2.5‑VL‑7B подписывает кадры, оценивает "интересность" (рейтинг 1–10), классифицирует сцены.
    • ResNet‑50 извлекает 2048‑мерные визуальные признаки.
    • CLIP ViT‑B/32 создаёт семантические эмбеддинги для сравнения сцен.
    • Считаются перцептуальные хэши для поиска дубликатов.
    • Кадры группируются в сцены, каждая сцена получает класс (boring/low/moderate/interesting) и скорость воспроизведения (1x–6x).
    • Результаты сохраняются в scene_analysis_*.json.
  2. Извлечение клипов (Stage 2)

    • Скрипт extract_scenes.py читает JSON‑анализ и режет исходные видео на клипы.
    • FFmpeg с NVENC рендерит каждый фрагмент с заданной скоростью.
    • Для ускорений >1x используется цепочка atempo, чтобы корректно обработать звук (в build‑режиме звук всё равно глушится).
    • Ключевые моменты помечаются как *_showcase_*.mov для тизеров.
    • Все клипы попадают в ai_clips/{video_stem}/.
  3. Сборка таймлайна (Stage 3)

    • Скрипт export_resolve.py собирает основной таймлайн в формате FCPXML: timeline_davinci_resolve.fcpxml.
    • Структура: тизер → интро → основная часть → аутро.
    • Добавляются переходы (cross‑dissolve), водяной знак, музыка и уровни громкости в зависимости от режима.
  4. DaVinci Resolve (Stage 4)

    • FCPXML импортируется в DaVinci Resolve.
    • Скрипт apply_lut_resolve.py опционально применяет LUT к медиа в Media Pool (например, Filmic Pro deLOG).
    • render_youtube.py рендерит финальный MP4 в H.265 4K с битрейтом ~30 Мбит/с.
  5. Загрузка на YouTube (Stage 5)

    • upload_youtube.py загружает ролик в YouTube через YouTube Data API v3 и OAuth 2.0.
    • Поддерживается загрузка в плейлист, добавление обложки и метаданных.
  6. Параллельный маршрут для Reels / Shorts

    • export_reels.py собирает отдельный FCPXML‑таймлайн timeline_reels.fcpxml в вертикальном формате 9:16 (1080×1920).
    • render_reels.py рендерит вертикальный ролик в H.265 (NVIDIA NVENC, ~15 Мбит/с).
    • upload_youtube.py --shorts загружает его как YouTube Shorts.
    • upload_instagram.py --video и upload_facebook.py --video отправляют ролик в Instagram Reels и Facebook Reels через Meta Graph API.
  7. Фото‑контент

    • Скрипты upload_instagram.py --photo и upload_facebook.py --all публикуют фото‑карусели и многокадровые посты.
    • Для Instagram конвейер при необходимости перекодирует HEVC в H.264 для совместимости.

Режимы пайплайна

Режим выбирается через project_config.json (ключ "mode") или флаг командной строки --mode (CLI имеет приоритет).

Build

Для немых сборок, DIY, мастерских, где важна картинка и ритм, а не голос.

  • Аудио в исходниках глушится, поверх кладётся фоновая музыка.
  • Скорость каждого фрагмента меняется от 1x до 6x в зависимости от оценки сцены.
  • "Скучные" фрагменты могут быть сильно ускорены или вырезаны.
  • Используется только визуальный анализ (LLM + компьютерное зрение), голос не учитывается.
  • Генерируется тизер в начале ролика.

Unboxing

Для обзоров, распаковок, туториалов с голосом, где важна речь и детали.

Дополнительная логика:

  1. Анализ аудио и движения

    • analyze_audio.py запускает ffmpeg silencedetect:
      • тишина — ниже -35 dB дольше 3.0 секунд (значения настраиваются);
    • параллельно ffmpeg freezedetect ищет статичные кадры при пороге движения 0.02.
    • LLM‑подсказка настраивается на поиск качественной озвучки, моментов "распаковки", крупняков и т.п.
    • Скорость всех сцен принудительно фиксируется в 1.0x.
  2. Маркировка скучных фрагментов

    • Если тишина и статичное видео перекрываются минимум на 60% длительности сцены, она помечается как boring и вырезается.
    • Остальные сцены остаются в реальном времени с исходным звуком.
  3. Рендер и таймлайн

    • FFmpeg рендерит без ускорения.
    • В таймлайне сохраняется оригинальная дорожка с голосом, фоновая музыка не добавляется.
    • Тизер, интро, аутро и водяной знак всё равно присутствуют.

Пример конфигурации в project_config.json:

{ "mode" : " unboxing " ,
  "unboxing" : {
    "keep_audio" : true ,
    "keep_speed" : true ,
    "silence_threshold_db" : -35 ,
    "silence_min_duration" : 3.0 ,
    "motion_threshold" : 0.02 ,
    "boring_requires_both" : true
  }
}

Ключи:

  • keep_audio — сохранять оригинальный голос в клипах (по умолчанию true).
  • keep_speed — фиксировать все сцены на 1.0x (без ускорения, по умолчанию true).
  • silence_threshold_db — порог тишины в децибелах.
  • silence_min_duration — минимальная длительность тишины для флага.
  • motion_threshold — порог для freezedetect (0 — полностью идентичные кадры).
  • boring_requires_both — требовать одновременно тишину и статику (true), иначе достаточно одного признака.

Reels

Режим для генерации вертикальных клипов на основе уже проведённого анализа.

  • Анализ (Stage 1–2) пропускается, используются готовые scene_analysis_*.json и клипы из ai_clips/.
  • export_reels.py собирает timeline_reels.fcpxml с вертикальным 9:16 кадром.
  • Для музыки берутся треки из assets/music-teaser/.

Пример конфигурации:

{ "mode" : " reels " }

Сравнение режимов по функциям

  • Build

    • AI‑классификация сцен (Qwen2.5‑VL) — да.
    • Ускорение 1x–6x — да.
    • Детекция тишины и статики — нет.
    • Оригинальный голос — нет.
    • Фоновая музыка — да.
    • Тизер — да.
    • Вертикальный 9:16 — нет.
    • Поиск дубликатов — да.
    • Водяной знак — да.
  • Unboxing

    • AI‑классификация сцен — да.
    • Ускорение 1x–6x — нет, всё 1x.
    • Детекция тишины и статики (ffmpeg) — да.
    • Оригинальный голос — да.
    • Фоновая музыка — нет.
    • Тизер — да.
    • Вертикальный 9:16 — нет.
    • Поиск дубликатов — да.
    • Водяной знак — да.
  • Reels

    • Переиспользует существующий анализ.
    • Скорость 1.0x.
    • Вертикальный 9:16 кроп — да.
    • Фоновая музыка — да (teaser‑треки).
    • Водяной знак — да.

Система классификации сцен

Каждой сцене присваивается класс и скорость:

  • Interesting — 1.0x, ключевые моменты, экшен, демонстрация результата.
  • Moderate — 2.0x, основное содержание, где важен контекст.
  • Low — 4.0x, фоновая деятельность, подготовка, переходы.
  • Boring — 6.0x, повторяющиеся и малополезные фрагменты, могут быть ускорены или вырезаны.
  • Skip — не экспортируется.

Пример компрессии:

  • Исходное видео: 45,3 минуты
    • Interesting: 1 сцена @1x → 0,6 мин
    • Moderate: 35 сцен @2x → 5,2 мин
    • Low: 31 сцена @4x → 2,4 мин
    • Boring: 12 сцен @6x → 0,5 мин (исключены)
  • Итоговый таймлайн: 14,7 минуты (сжатие на 64%).

Что это значит для вас

Кому это реально поможет

  1. YouTube‑авторы, снимающие сборки, DIY и мастерские

    • У вас лежат часы сырья с камеры или телефона.
    • Руки не доходят пересмотреть всё и собрать динамичную версию.
    • В build‑режиме Doza Assist сам просматривает материал, ускоряет рутину до 6x, добавляет музыку и собирает монтажный проект.
    • Вы тратите время не на нарезку, а на правки и креатив.
  2. Обзорщики и авторы туториалов с голосом

    • В unboxing‑режиме конвейер ищет куски, где вы молчите и камера почти не двигается, и режет их.
    • При этом голос, интонация и объяснения остаются в реальном времени, без "чипмунк‑эффекта".
    • Хороший вариант, если вы не хотите отдавать монтаж на аутсорс, но устали от рутины.
  3. Те, кто ведёт несколько платформ сразу

    • Основной горизонтальный ролик рендерится в 4K и уходит в YouTube.
    • Параллельно формируются вертикальные клипы для Shorts, Instagram Reels и Facebook.
    • Публикация идёт через один скрипт run_pipeline.py с флагом --yes без ручного подтверждения.
  4. Авторы с бэклогом сырых видео

    • Конвейер можно запустить на ночь и прогнать десяток роликов подряд.
    • По заявлению авторов пайплайна, 10 видео обрабатываются так же легко, как одно — всё упирается в мощность GPU и диск.

Где инструмент не подойдёт

  • Если ваш контент — сложно построенный сторителлинг, кино или клипы, где важен кадр‑в‑кадр контроль, Doza Assist пригодится только как черновой черновик.
  • Если вы вообще не знакомы с Python и терминалом и не готовы разбираться, установка может показаться сложной: придётся ставить FFmpeg, Python‑зависимости, настраивать токены API.
  • Если у вас нет NVIDIA‑видеокарты с NVENC, конвейер всё равно запустится, но рендер и анализ будут заметно дольше.

Ограничения по доступности

  • Пайплайн живёт на GitHub и работает локально — это не облачный сервис.
  • Для загрузки на YouTube, Instagram и Facebook нужны рабочие ключи YouTube Data API и Meta Graph API. В России доступ к этим сервисам может требовать VPN и обход ограничений.
  • Никаких встроенных обходов блокировок в проекте нет — всё на стороне пользователя.

Практический совет: если вы монтируете 1–2 коротких видео в месяц и любите делать всё вручную, выгода будет минимальной. Если у вас канал с регулярным контентом (еженедельно и чаще) или архив необработанных съёмок, экономия времени станет заметной уже на первом месяце.

Место на рынке

Doza Assist — это не SaaS‑редактор, а "скриптовый монтажёр" для тех, кто уже живёт в экосистеме DaVinci Resolve и не боится терминала.

По сути, он конкурирует не с CapCut или мобильными приложениями, а с:

  • встроенной системой автонарезки в монтажных программах;
  • ручным монтажом фрилансером или самим автором;
  • самодельными Python‑скриптами для FFmpeg.

Конкретные отличия:

  • Глубина анализа

    • Вместо простого поиска по уровню звука или резким изменениям кадра здесь связка Qwen2.5‑VL‑7B + CLIP + ResNet‑50.
    • Это позволяет оценивать "интересность" сцен по содержанию: крупные планы, демонстрация результата, динамика.
  • Интеграция с DaVinci Resolve

    • Мало кто из публичных инструментов отдаёт результат сразу в FCPXML под Resolve с учётом LUT, музыки, переходов и водяных знаков.
    • Здесь монтажёр получает не просто набор клипов, а почти готовый проект.
  • Полный цикл до публикации

    • Большинство решений останавливаются на рендере.
    • В Doza Assist есть автоматическая загрузка в YouTube (включая Shorts), Instagram и Facebook с учётом разных кодеков и форматов.

Сравнить по скорости с GPT‑4o, Claude 3 Opus и другими LLM‑сервисами нельзя: здесь нет облачного API, всё крутится локально на вашей машине. Время обработки упирается в мощность GPU, диска и длину ролика.

Если вы уже пользуетесь облачными сервисами автонарезки, Doza Assist может быть интересен как более контролируемый и расширяемый вариант: код открыт, можно менять промпты, модели и логику нарезки.

Установка

Требования

  • Python: 3.9+
  • GPU: NVIDIA с поддержкой NVENC (рекомендовано для анализа и кодирования).
  • RAM: 32 ГБ+ рекомендуется, минимум 16 ГБ.
  • Хранение: SSD с минимум 20 ГБ свободного места под кэш и выходные файлы.
  • Монтажка: DaVinci Resolve 20.x (автоматизация проверена на 20.0.1).
  • FFmpeg с поддержкой NVENC.
  • ОС, на которой тестировали авторы: Fedora 43 Workstation.

Дополнительные загрузки:

  • DaVinci Resolve: https://www.blackmagicdesign.com/support/family/davinci-resolve-and-fusion
  • Filmic LUT Pack (iPhone): https://www.filmicpro.com/products/luts/
  • Прямой загрузчик LUT: https://www.filmicpro.com/downloads/Filmic_Pro_deLOG_LUT_Pack_May_2022.zip

Базовая установка

# Клонируем репозиторий и переходим в каталог проекта
cd ~ /video

# Создаём виртуальное окружение
python3 -m venv .venv
source .venv/bin/activate

# Ставим зависимости
pip install -r requirements.txt

# AI‑модели скачаются автоматически при первом запуске
# Кэш моделей: ~/.cache/huggingface/ и ~/.cache/clip/

Все Python‑зависимости зафиксированы в requirements.txt.

Структура проекта

~/video/
├── run_pipeline.py              # Главный оркестратор (все стадии)
├── analyze_advanced5.py         # Stage 1: AI-анализ видео
├── extract_scenes.py            # Stage 2: извлечение сцен
├── export_resolve.py            # Stage 3: экспорт таймлайна (16:9)
├── export_reels.py              # Экспорт таймлайна Reels (9:16)
├── apply_lut_resolve.py         # Применение LUT через Resolve API
├── render_youtube.py            # Рендер 4K MP4 через Resolve API
├── render_reels.py              # Рендер 1080x1920 Shorts MP4 через Resolve
├── upload_youtube.py            # Загрузка в YouTube (основное + shorts)
├── upload_instagram.py          # Загрузка фото/реилов в Instagram
├── upload_facebook.py           # Загрузка фото/реилов в Facebook Page
├── instagram_credentials.json   # Креды Meta API (не в git)
├── project_config.json          # Конфигурация проекта
├── assets/
│   ├── Start-Intro-V3.mov       # Интро (10-bit)
│   ├── Finish-Intro-V3.mov      # Аутро (10-bit)
│   ├── qr-code.jpg              # Водяной знак
│   ├── music-background/        # Фоновая музыка (WAV)
│   ├── music-teaser/            # Музыка для тизеров/реилов (WAV)
│   ├── photos/                  # Фото проекта
│   ├── photo-index/             # Фото для обложек
│   ├── videos-reels/            # Локальные исходники для реилов
│   ├── teaser-videos/           # Исходники для тизеров
│   └── watermark/               # Ассеты водяного знака
├── ai_clips/                    # Вырезанные сцены
│   └── {video_stem}/
│       ├── *_scene_*.mov
│       └── *_showcase_*.mov
├── tools/
│   ├── install_gcc12.sh         # Сборка GCC 12 для CUDA
│   ├── build_llama_cpp_with_gcc12.sh # Сборка llama-cpp-python с CUDA
│   ├── patch_cuda_math.sh       # Патч заголовков CUDA math
│   └── test_video_gpu.py        # Тест GPU-видеопроцессинга
├── timeline_davinci_resolve.fcpxml # Основной таймлайн (16:9)
└── timeline_reels.fcpxml        # Таймлайн Reels (9:16)

Как запустить

Полный автоматический конвейер

# Полный цикл: анализ → нарезка → таймлайн → рендер → YouTube
python run_pipeline.py

# Без интерактивных вопросов (подтверждает всё автоматически)
python run_pipeline.py --yes

# Unboxing-режим + генерация reels, полностью автоматом
python run_pipeline.py --mode unboxing --reels-only --yes

# Результат: timeline_davinci_resolve.fcpxml + папка ai_clips/

Этот скрипт запускает все стадии подряд:

  1. AI‑анализ всех видео в входной директории.
  2. Извлечение сцен с учётом скоростей.
  3. Генерация таймлайна с музыкой, переходами и эффектами.
  4. Импорт в DaVinci Resolve + применение LUT через API.
  5. Рендер 4K MP4 через Resolve.
  6. Загрузка основного видео на YouTube (OAuth 2.0).
  7. При включённом reels‑режиме — рендер и загрузка вертикальных клипов и фотоконтента.

Управление режимами из CLI

# Build (по умолчанию)
python run_pipeline.py

# Unboxing — сохранить озвучку, без ускорения
python run_pipeline.py --mode unboxing

# Только reels (без повторного анализа)
python run_pipeline.py --mode reels
# или
python run_pipeline.py --reels-only

# Не задавать вопросов в процессе
python run_pipeline.py --mode unboxing --yes

# Unboxing + reels, без вопросов
python run_pipeline.py --mode unboxing --reels-only --yes

Публикационный конвейер

После рендера run_pipeline.py распределяет контент по платформам.

Стадии публикации:

  • [7/7] upload_youtube.py — YouTube, основное 4K‑видео, YouTube Data API v3 (OAuth 2.0).
  • [R4/8] upload_youtube.py --shorts — YouTube Shorts, вертикальный ролик.
  • [R5/8] upload_instagram.py --video — Instagram Reel, Meta Graph API (Resumable Upload).
  • [R6/8] upload_facebook.py --video — Facebook Reel, Meta Graph API / {page_id} /videos.
  • [R7/8] upload_facebook.py --all — Facebook фотопост, Multi‑Photo.
  • [R8/8] upload_instagram.py --photo — Instagram‑карусель, Meta Graph API (CDN Relay).

Для всех загрузок нужны валидные JSON‑файлы с ключами и токенами. Флаг --yes отключает все подтверждения и превращает процесс в полностью автоматический.

Итог

Doza Assist — это про скорость и масштаб: один Python‑конвейер берёт на себя черновой просмотр, нарезку и базовый монтаж длинных видео, а заодно готовит вертикальные клипы и постит всё в соцсети. Если вы живёте в DaVinci Resolve, снимаете регулярно и устали от однотипной ручной работы, этот проект стоит попробовать хотя бы как стартовый слой для ваших монтажей.


Читайте также