video-analyzer
«Глаза» для clip library: извлекает кадры из видео, описывает что там реально происходит через LLM Vision, проставляет scene_type/mood и складывает в проектную БД. Используется при импорте чужих/готовых видео — когда снимал не Veo.
Что делает простыми словами
Это «приёмщик клипов». Если у тебя есть готовые видосы — со съёмки, с телефона клиента, скачанные из инстаграма конкурента, сгенерённые в Veo — analyzer их разглядывает и заносит в библиотеку проекта с правильным описанием. После этого director может их использовать в монтаже наравне с любыми другими.
- Берёт видеофайл (один или пачку)
- Извлекает 3-5 кадров (начало / середина / конец / ключевые моменты)
- Прокидывает кадры через Vision — буквально смотрит что на них
- Определяет scene_type (hook / product / lifestyle / testimonial / cta / transition) и mood (energetic / calm / dramatic / funny / luxury)
- Пишет подробное описание — что в кадре, какое освещение, что за движение, какое настроение
- Регистрирует в
clipstable + linкуeт к проекту черезproject_clipsjunction
Что analyzer умеет увидеть из кадров
Real-time видео он смотреть не может, но из 3-5 хорошо выбранных кадров вытаскивает:
- Объекты и люди в сцене
- Какое действие происходит (можно понять по разнице между frame 1 и frame 5)
- Тип плана: крупный / средний / общий / overhead
- Тенденция движения камеры: статика / pan / zoom
- Освещение и цветовая палитра
- Общее настроение и уровень энергии
Два режима работы
| Режим | Когда | Кол-во кадров | Подробность описания |
|---|---|---|---|
| Single clip | Пришёл один файл — нужно тщательно | 5 кадров | Полное описание 3-5 предложений |
| Batch import | Свалили пачку из 20 видео — нужно быстро прогнать | 3 кадра на каждый | Лаконично — 2-3 предложения, но визуальный анализ не пропускать |
Scene types и moods
Scene type — выбирай один
| Тип | Что это |
|---|---|
hook | Визуально яркий, цепляющий, неожиданный — для первых 2-3 секунд ролика |
product | Показ продукта / услуги / демонстрация фич |
lifestyle | Люди пользуются / наслаждаются продуктом в реальном контексте |
testimonial | Человек говорит / отзыв / social proof / до-после |
cta | Энергия call-to-action, urgency, ощущение завершения |
transition | Абстрактное движение / текстура / для мостиков между сценами |
Mood — выбирай доминанту
| Mood | Характеристика |
|---|---|
energetic | Быстрое движение, яркость, динамика |
calm | Медленно, мягко, минимально |
dramatic | Высокий контраст, напряжение, импакт |
funny | Юмор, играющий, неожиданный |
luxury | Элегантно, премиум, золото/тёмный фон, богатая текстура |
Описание — хорошее vs плохое
«Close-up рук женщины, аккуратно ставящих белую керамическую вазу на деревянный стол. Мягкий natural свет из окна слева, тёплые золотистые тона. Shallow DOF размывает фон — современная кухня. Спокойное медленное движение. Действие занимает первые 3 секунды, дальше камера держится на вазе.»
По такому описанию director не может решить — это hook или calm-lifestyle, продукт ли это или просто атмосфера. Клип превращается в slot machine.
Команды
Извлечь кадры из одного клипа
python ~/.claude/skills/video-analyzer/scripts/extract_frames.py /path/to/video.mp4 \ --output-dir ~/video-projects/apparatus/thumbnails \ --frames 5 # → пути к 5 JPG-кадрам + метаданные (duration, resolution, fps)
Извлечь кадры пачкой
python ~/.claude/skills/video-analyzer/scripts/extract_frames.py \ --batch /path/to/videos/ \ --output-dir ~/video-projects/apparatus/thumbnails \ --frames 3
Зарегистрировать клип в БД
python ~/.claude/skills/video-analyzer/scripts/register_clip.py \ --project-dir ~/video-projects/apparatus \ --filepath /path/to/video.mp4 \ --description "Подробное описание после визуального анализа..." \ --scene-type lifestyle \ --mood calm \ --tags "woman,vase,kitchen,warm" \ --actions "places vase on table,camera holds" \ --source upload
Для Veo-клипов
python ~/.claude/skills/video-analyzer/scripts/register_clip.py \ --project-dir ~/video-projects/apparatus \ --filepath /path/to/veo_clip.mp4 \ --description "..." --scene-type hook --mood energetic \ --source veo \ --prompt "Original Veo prompt that generated this clip"
Перепроанализировать существующий клип
# 1. Берём текущую инфу python ~/.claude/skills/video-analyzer/scripts/db_helper.py get-clip \ ~/video-projects/apparatus 42 # 2. Извлекаем кадры заново python ~/.claude/skills/video-analyzer/scripts/extract_frames.py \ /path/to/existing_clip.mp4 \ --output-dir ~/video-projects/apparatus/thumbnails --frames 5 # 3. Смотрим кадры → пишем новое описание → обновляем python ~/.claude/skills/video-analyzer/scripts/db_helper.py update-clip \ ~/video-projects/apparatus 42 \ --description "Обновлённое описание..." \ --scene-type hook --mood energetic
Скрипты
| Файл | Что делает |
|---|---|
scripts/extract_frames.py | FFmpeg-извлечение N равноотстоящих кадров из видео + ffprobe для метаданных (duration / resolution / fps). Поддерживает single и batch режимы |
scripts/register_clip.py | Главная регистрация: копирует видео в clips/ проекта, генерит thumbnail, добавляет в clips + project_clips, сохраняет prompt если это Veo, метаданные источника |
scripts/db_helper.py | CRUD-хелперы по clips (project-scoped) — get-clip, update-clip, list-clips, статистика |
scripts/schema.py | Общий schema-source-of-truth (v8) — синхронизирован со всеми остальными скиллами |
Параметры register_clip.py
| Параметр | Значения |
|---|---|
--source | upload (пользователь дал), veo (clipgen сгенерил), remotion (motion graphics) |
--scene-type | hook / product / lifestyle / testimonial / cta / transition |
--mood | energetic / calm / dramatic / funny / luxury |
--description | Полное описание (string) |
--tags | Comma-separated теги для поиска |
--actions | Что происходит (comma-separated) |
--prompt | Оригинальный промпт (только для --source veo) |
Что попадает в БД
После register_clip в проектной director.db появляется запись в clips:
id | 42 filename | clip_042.mp4 filepath | ~/video-projects/apparatus/clips/clip_042.mp4 thumbnail_path | ~/video-projects/apparatus/thumbnails/clip_042_thumb.jpg duration | 6.0 width, height | 1080, 1920 fps | 30 description | "Close-up рук женщины..." scene_type | lifestyle mood | calm tags | "woman,vase,kitchen,warm" actions | "places vase on table,camera holds" source | upload (или veo / remotion) prompt | NULL (или оригинальный Veo prompt) created_at | 2026-05-16T12:34:56
Link к проекту — через junction project_clips(project_id, clip_id). Один клип теоретически может быть прилинкован к нескольким проектам, но обычно scoped к одному.
Batch report
После пачки import показывай пользователю сводку:
- Сколько клипов импортировано успешно
- Разбивка по scene_type и mood
- Проблемные клипы — слишком короткие / тёмные / непонятный контент
- Каких типов теперь много, а каких всё ещё мало в library
Gotchas и tips
--prompt. Сохранённый оригинальный промпт пригодится потом для дебага: «почему этот клип такой, что просили?». Director это поле не использует, но history полезен.
analyze_clip.py) → получает реальные кадры → обновляет описание через update-clip. Это нормальный workflow — описание из промпта неточное, нужен честный visual review.
🎬 Примеры работы
Место в пайплайне
Analyzer — это «ворота» в clip library. Любой клип, который не попал в БД через analyzer (или через clipgen с обновлённым описанием) — для Director невидим.
Сценарии вызова:
- Клиент дал свои съёмки — пачка через batch import
- Скачали референсные рилсы из инстаграма (через
instagram-analyzeскилл) — analyzer обрабатывает результат - Clipgen сгенерил Veo-клип — internal вызов через
analyze_clip.pyдля honest description - Перепроанализировать старый клип — если описание устарело или было плохим