
Как показать нейросети то, что происходит на экране видео
Содержание8 глав
- 010. Пойми, что модель вообще получает на вход
- 021. Забрать исходник и расшифровку
- 032. Резать не по таймеру, а по сменам сцен
- 043. Подобрать порог под конкретное видео
- 054. Уложиться в лимиты по картинкам
- 065. Посчитать, во что обойдутся кадры
- 076. Подать кадры вместе с расшифровкой
- 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.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 картинок.
- Прогнать на трёх разных роликах: динамичный вертикальный, лекция со слайдами, запись созвона. Пороги будут разными — это нормально.


