Чек-лист
кодовое словоКадры

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

Содержание8 глав
  1. 010. Пойми, что модель вообще получает на вход
  2. 021. Забрать исходник и расшифровку
  3. 032. Резать не по таймеру, а по сменам сцен
  4. 043. Подобрать порог под конкретное видео
  5. 054. Уложиться в лимиты по картинкам
  6. 065. Посчитать, во что обойдутся кадры
  7. 076. Подать кадры вместе с расшифровкой
  8. 087. Свернуть всё это в одну свою команду

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

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.ai20 изображений на сообщение
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 картинок.
  • Прогнать на трёх разных роликах: динамичный вертикальный, лекция со слайдами, запись созвона. Пороги будут разными — это нормально.
Чего не делать
Не обещать себе «покажу модели каждый кадр» — это физически невозможно. Не брать чужой порог как константу. Не отправлять кадры в оригинальном разрешении по привычке. И не путать «нарезка бесплатна» с «разбор бесплатен»: платишь ровно за те картинки, которые реально ушли в модель.