# Как показать нейросети то, что происходит на экране видео

Когда ты просишь «разбери это видео», модель почти всегда читает расшифровку звука. Всё, что жило в пикселях — интерфейс, цифры, врезки, графики — до неё не доезжает. Здесь по шагам: как достать из ролика те кадры, которые действительно несут смысл, уложиться в лимиты и не переплатить за картинки.

## 0. Пойми, что модель вообще получает на вход

Зачем: половина разочарований от «разбора видео» — это непонимание того, что видео на вход не идёт. Claude принимает только изображения: JPEG, PNG, GIF и WebP, причём у анимации читается лишь первый кадр. Любой «просмотр ролика» — это чья-то нарезка кадров, сделанная за тебя.

- [ ] Прочитать, что принимается на вход и с какими ограничениями: platform.claude.com/docs/en/build-with-claude/vision
- [ ] Проверить статус видео-входа в Claude Code — это открытый запрос функции, а не готовая возможность: github.com/anthropics/claude-code/issues/12676
- [ ] Если сторонний сервис обещает «посмотреть видео» — выяснить, что он реально отправляет в модель: расшифровку, кадры или и то и другое.

## 1. Забрать исходник и расшифровку

Зачем: дальше всё делается локально, поэтому нужен файл, а не ссылка. Расшифровку берём отдельно: она бесплатна и даёт таймкоды, к которым потом привяжутся кадры.

- Поставить загрузчик: github.com/yt-dlp/yt-dlp (brew install yt-dlp или pipx install yt-dlp).
- Скачать видео в разумном качестве, 4K для разбора не нужен:

```
yt-dlp -f "bv*[height<=1080]+ba/b" -o "video.%(ext)s" ССЫЛКА
```

Отдельно забрать субтитры, если они есть:

```
yt-dlp --write-auto-subs --sub-langs ru,en --skip-download -o "video" ССЫЛКА
```

- Если субтитров нет — снять звуковую дорожку и распознать её локально: ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 audio.wav
- Работать только с публично доступными источниками: без обхода авторизации, платных стен и чужих приватных записей.

## 2. Резать не по таймеру, а по сменам сцен

Зачем: кадр в секунду — это способ получить тысячи почти одинаковых картинок. Смысл меняется там, где меняется картинка: склейка, новый экран, всплывшая графика. FFmpeg умеет отбирать именно такие кадры — в фильтре select есть переменная scene со значением от 0 до 1.

- Поставить FFmpeg: ffmpeg.org/download.html. Описание фильтра — ffmpeg.org/ffmpeg-filters.html, раздел select.
- Сначала посчитать кадры, потом отправлять. Команда ничего не пишет на диск и выводит итог в строке frame=:

```
ffmpeg -i video.mp4 -vf "select='gt(scene,0.02)'" -an -f null -
```

Когда число устраивает — сохранить кадры (format=yuvj420p лечит ошибку JPEG-кодировщика на видео с неполным цветовым диапазоном):

```
mkdir -p frames
ffmpeg -i video.mp4 \
  -vf "select='gt(scene,0.02)',scale=1280:-2,format=yuvj420p,showinfo" \
  -fps_mode vfr -q:v 3 frames/frame_%03d.jpg
```

Забрать таймкоды из лога: showinfo печатает pts_time для каждого сохранённого кадра — это и есть подписи к картинкам.

## 3. Подобрать порог под конкретное видео

Зачем: порог 0.4, который кочует по инструкциям как «стандартный», работает только на жёстких склейках. На вертикальном ролике с плавными переходами он не отдаёт вообще ничего. Ниже — реальный замер на ролике 22,9 секунды, в котором 684 кадра.

0.4 «0 кадров отобралось» — Жёсткий монтаж: интервью с перебивками, нарезки, презентации со сменой слайдов.; 0.05 «3 кадра отобралось» — Только ключевые переломы, когда нужен самый общий скелет.; 0.02 «26 кадров отобралось» — Рабочий вариант для говорящей головы с врезками и графикой.; 0.01 «53 кадра отобралось» — Плотный ролик, где важна каждая подпись на экране.; 0.005 «90 кадров отобралось» — Разбор интерфейса по шагам, когда нельзя терять микродействия.

- Начать с 0.02 и подвинуть в ту сторону, где кадров становится столько, сколько ты готов отправить.
- Для длинных лекций со статичным слайдом порог не спасёт — там лучше добавить один кадр раз в минуту принудительно.

## 4. Уложиться в лимиты по картинкам

Зачем: «отправлю все кадры» упирается не в терпение, а в жёсткий потолок. Получасовое видео даже по одному кадру в секунду — это 1800 картинок, и такой запрос не соберётся никогда.

строки «Показатель → Значение»: Чат claude.ai → 20 изображений на сообщение; API, модели с окном 200k токенов → 100 изображений на запрос; API, остальные модели → 600 изображений на запрос; Размер одного изображения → до 8000×8000 px; если картинок в запросе больше 20, сторону лучше держать в пределах 2000 px

- Свериться с актуальными лимитами: platform.claude.com/docs/en/build-with-claude/vision
- Если кадров больше потолка — резать не пополам, а по смыслу: одна глава ролика = один запрос со своей расшифровкой.

## 5. Посчитать, во что обойдутся кадры

Зачем: скачивание и нарезка ничего не стоят, а вот отправка стоит. Изображение считается по формуле ⌈ширина/28⌉ × ⌈высота/28⌉ визуальных токенов: кадр 1920×1080 — это 2691 токен на моделях 4.7 и новее и 1560 на более старых.

- Прикинуть заранее: 100 кадров в Full HD — это порядка 270 тысяч токенов только на картинки.
- Уменьшать кадры перед отправкой (scale=1280:-2) — цена падает примерно вдвое; оставлять оригинал стоит только если нужно читать мелкий текст на экране.
- Помнить про окно контекста: у текущих моделей максимум 1 млн токенов, у Haiku — 200k. Таблица моделей и цен: platform.claude.com/docs/en/about-claude/models/overview
- Сравнить масштаб: 1800 кадров в Full HD — это около 4,8 млн токенов, то есть почти впятеро больше самого большого окна.

## 6. Подать кадры вместе с расшифровкой

Зачем: кадры без текста дают картинку без слов, текст без кадров — слова без картинки. Ценность появляется, когда модель читает и смотрит одновременно и может сослаться на таймкод.

- Ставить изображения перед текстом запроса — по документации так модель работает точнее.
- Подписывать каждый кадр таймкодом из showinfo: «Кадр 1 (00:04)», «Кадр 2 (00:11)».
- Требовать ответ с привязкой: что сказано голосом, что показано на экране, где они расходятся.
- Отдельно спросить то, чего нет в расшифровке: подписи на графиках, значения в интерфейсе, текст врезок.

## 7. Свернуть всё это в одну свою команду

Зачем: пока цепочка живёт в истории терминала, ты повторяешь её руками. Оформленная один раз, она превращается в команду вида /watch ссылка.

- Формат и расположение: файл SKILL.md в каталоге .claude/skills/watch/ проекта или ~/.claude/skills/watch/. Документация — code.claude.com/docs/en/skills
- Положить внутрь: команды из шагов 1-2, порог по умолчанию, предел числа кадров и формат итогового отчёта.
- Прописать обязательный шаг «сначала посчитать кадры» — иначе однажды прилетит запрос на 900 картинок.
- Прогнать на трёх разных роликах: динамичный вертикальный, лекция со слайдами, запись созвона. Пороги будут разными — это нормально.

врезка `// Чего не делать`: текст «Не обещать себе «покажу модели каждый кадр» — это физически невозможно. Не брать чужой порог как константу. Не отправлять кадры в оригинальном разрешении по привычке. И не путать «нарезка бесплатна» с «разбор бесплатен»: платишь ровно за те картинки, которые реально ушли в модель.»

---

Источник: https://localhost:3000/m/smotrit-video
