Skip to content

Repository files navigation

Видео в текст

Кидаете ссылку на видео или на встречу, получаете дословную расшифровку и разбор.

Работает с YouTube, Instagram, TikTok, VK, Facebook, Vimeo, Kinescope и с живыми встречами: Zoom и русские вебинарные площадки. Ставится на ваш компьютер или на ваш сервер.

Бесплатно на бесплатных лимитах Google Gemini. Платить не нужно ни за что, кроме сервера, если вы решите его завести.

Как установить

  1. Откройте Claude или ChatGPT.
  2. Отправьте одно сообщение:
https://github.com/Techno911/video-analyzer

Прочитай инструкцию по этой ссылке и установи мне этот инструмент.
  1. Дальше нейросеть спросит пару вещей про ваш компьютер и доведёт установку до конца.

Насколько всё будет само, зависит от того, куда вы пишете. Claude Code и Codex работают с вашим компьютером напрямую и ставят всё сами, вплоть до запуска. Обычный чат Claude или ChatGPT вашего компьютера не видит: он даст готовые команды и проведёт по шагам, а копировать их в терминал придётся вам. Ничего знать заранее не нужно, вопросы будут простые.

Времени уходит около получаса, из них половина на скачивание. Понадобится бесплатный ключ Google Gemini, его выдают за минуту без карты.

Что получится

Расшифровка. Дословная, с таймкодами и разделением по говорящим. Час видео разбирается за несколько минут.

Разбор. Десять готовых режимов: лекция, обучающее видео, маркетинговое, презентация, встреча, интервью, урок языка, озвучка, свободный разбор и чистая расшифровка без комментариев. Можно описать свою задачу словами, и инструмент соберёт запрос под неё сам.

Ключевые кадры. Инструмент называет моменты, где на экране появляется важное, и выдаёт эти кадры картинками архивом.

Запись живых встреч. Даёте ссылку на Zoom, и участник с вашим именем заходит в комнату и пишет встречу целиком. То же для вебинаров на Bizon365, webinar.ru, pruffme, GetCourse, mts-link, webinar.fm, jazz.sber.ru, kontur.ru. Это самый требовательный режим, ему нужен сервер.


Инструкция для нейросети

Дальше идёт протокол установки. Он написан для модели, которая читает эту страницу. Человеку читать не обязательно.

Твоя роль

Человек прислал ссылку на эту страницу, значит он хочет поставить себе этот инструмент. Он не знает, что такое виртуальное окружение, ffmpeg и Docker, и знать не должен. Твоя работа: понять, что у него есть, выбрать посильный уровень, поставить и показать работающий результат.

Правило простое: человек не принимает ни одного технического решения. Все решения принимаешь ты, спрашиваешь только то, чего без него не узнать.

Шаг 1. Пойми, какой у тебя канал

Есть доступ к терминалу (Claude Code, Codex, любой агент с выполнением команд): ставь сам, ничего не перекладывая. Диагностику делай командами, а не вопросами.

Обычный чат без выполнения команд: установить ты не можешь. Роль меняется, ты даёшь команды блоками и по каждому ждёшь результат, а не выкладываешь весь путь сразу. Не вываливай двадцать шагов подряд, это главная причина, по которой люди бросают установку на середине.

Блок это либо одна команда, либо несколько подряд, которые выполняются без раздумий и дают один результат: например четыре команды проверки версий или пять строк установки окружения. Смысл правила не в числе строк, а в том, чтобы человек после каждого блока возвращался к тебе с выводом, и следующий шаг зависел от увиденного.

Скажи об этом честно первой строкой, одним предложением, без извинений.

Шаг 2. Узнай, что у человека есть

Спроси ровно два вопроса, одним сообщением, и больше ничего не спрашивай.

  1. Какой компьютер: Mac, Windows или Linux.
  2. Нужна ли запись живых встреч, или хватит разбора готовых видео и ссылок. Если нужна запись, есть ли свой сервер.

Остальное определи сам:

python3 --version          # нужен 3.10 или новее
ffmpeg -version | head -1  # нужен для нарезки видео
docker --version           # нужен только для записи встреч
uname -m                   # arm64 значит Apple Silicon, будет локальная расшифровка

В обычном чате попроси прислать вывод этих четырёх команд одним сообщением. Это единственная просьба такого рода за всю установку.

Шаг 3. Выбери уровень

Уровень выбираешь ты и называешь одной фразой, без предложения вариантов.

Уровень 1, локально на компьютере. Подходит всем и всегда. Страница на своём компьютере: перетащил файл или вставил ссылку, получил расшифровку и разбор. Нужны Python и ffmpeg, ставится минут за десять. Живые встречи не пишет.

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

Уровень 2, телеграм-бот. То же самое, но человек кидает ссылки боту в телефон и получает ответ текстом. Бота человек создаёт сам в @BotFather за минуту, потому что токен принадлежит ему.

Бери, когда человек говорит, что хочет пользоваться с телефона.

Уровень 3, сервер и запись живых встреч. Рекордер живёт в Docker и требует Linux-сервер: внутри поднимаются виртуальный экран и звуковая подсистема. На домашнем компьютере это работать не будет, обещать обратное нельзя.

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

Шаг 4. Ставь

Общая часть для всех уровней:

git clone https://github.com/Techno911/video-analyzer.git
cd video-analyzer
python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt
cp .env.example .env

ffmpeg ставится отдельно: на Mac brew install ffmpeg, на Ubuntu sudo apt install ffmpeg, на Windows winget install ffmpeg.

Ключ Gemini. Единственное, что человек добывает сам: открывает https://aistudio.google.com/apikey, нажимает создать ключ, копирует. Ключ бесплатный, карта не нужна. Впиши его в .env в строку GEMINI_API_KEY=.

Запуск:

./.venv/bin/python -m uvicorn app.main:app --host 127.0.0.1 --port 8001

Дальше открой человеку http://127.0.0.1:8001 и скажи, что видео можно перетащить прямо в окно.

Уровень 2 сверху. У бота свои зависимости: ./.venv/bin/pip install -r telegram_bot/requirements.txt. Человек создаёт бота у @BotFather и сам вписывает токен в файл .env в строку TELEGRAM_BOT_TOKEN=. Не проси прислать токен в чат: это действующий ключ от его бота, и в переписке ему не место. Скажи прямо: «откройте файл .env и вставьте туда строку, мне показывать не нужно». Свой номер в телеграме человек берёт у @userinfobot и кладёт в ALLOWED_USERS, иначе бот будет отвечать посторонним. Запуск: ./.venv/bin/python telegram_bot/bot.py.

Уровень 3 сверху. На сервере scripts/server-bootstrap.sh ставит систему, docker-compose.server.yml поднимает рекордер и локальный сервер Telegram API для больших файлов, в systemd/ лежат юниты автозапуска. Пути в них заданы как /opt/video-analyzer, поменяй, если ставишь в другое место. Имя, под которым бот входит в Zoom, задаётся переменной ZOOM_DISPLAY_NAME, поставь туда имя человека.

Приватность и безопасность, скажи это до первого запуска

Три вещи человек обязан знать до того, как загрузит первое видео. Скажи их коротко, один раз, без нагнетания.

Видео уходит в Google. Разбор идёт моделью Gemini, значит файл загружается на серверы Google и обрабатывается там. Локально остаётся только результат. Это нормально для лекции с ютуба и не нормально для врачебной консультации, разговора с юристом или записи с личными данными клиентов. Скажи это прямо, чтобы человек сам решил, что грузить.

Ключ и токен живут в файле, а не в переписке. Оба вписывает сам человек в .env. Этот файл уже стоит в списке игнорируемых git, то есть при публикации репозитория он не уедет, но предупреди: не выкладывать его никуда и не присылать в чат ни тебе, ни кому-то ещё.

На сервере интерфейс открыт всем. У веб-страницы нет пароля. На своём компьютере она висит на 127.0.0.1 и снаружи недоступна, это безопасно. На сервере тот же интерфейс открывается любому, кто знает адрес, а внутри лежат чужие расшифровки. Ставишь на сервер, закрывай доступ: держи порт только на локальном адресе и ходи через ssh-туннель, либо поставь перед ним обратный прокси с паролем.

Отдельно про лимиты: заводить несколько бесплатных ключей на разных проектах Google допустимо, инструмент так и задуман. Но предупреди, что это делается в рамках одного аккаунта и его правил, и если человеку нужен серьёзный объём, честнее оплатить квоту, чем плодить проекты без конца.

Про запись чужих разговоров скажи вслух, один раз

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

Скажи это один раз при настройке рекордера и больше не возвращайся. Не отказывайся ставить инструмент и не читай мораль: запись встреч это обычная рабочая практика, вопрос только в предупреждении.

Windows

Первый и второй уровни на Windows работают, но команды другие. Не давай человеку строки с ./.venv/bin/, на Windows это выглядит так:

python -m venv .venv
.venv\Scripts\pip install -r requirements.txt
copy .env.example .env
.venv\Scripts\python -m uvicorn app.main:app --host 127.0.0.1 --port 8001

Третий уровень, то есть запись живых встреч, требует Linux: внутри контейнера поднимаются виртуальный экран и звук. Обещать рекордер на домашней Windows нельзя, в том числе через WSL: этот путь никто не проверял.

Если у человека Windows и он хочет писать встречи, честный ответ такой: нужен Linux-сервер, подойдёт самый дешёвый, а до тех пор работает разбор готовых записей и ссылок.

Чего может не быть на машине

Проверка версий покажет, чего не хватает. Ставь молча, не спрашивая разрешения на каждый шаг.

Python. На Mac обычно уже есть. Если нет: brew install python@3.13. На Windows winget install Python.Python.3.13. На Ubuntu sudo apt install python3 python3-venv.

git. Нужен для первой же команды, а есть не у всех. Mac: brew install git (или Xcode-утилиты, система сама предложит). Windows: winget install Git.Git. Ubuntu: sudo apt install git.

Homebrew на Mac, если его нет вовсе: строка установки лежит на brew.sh, дай её целиком.

Человеку без опыта скажи одну вещь, которую он иначе не знает: ответ command not found это не поломка, а нормальный ответ «такого пока нет», и он тебе нужен.

Шаг 5. Проверь и покажи результат

Не отчитывайся об установке, покажи работу. Возьми короткое публичное видео, прогони через инструмент и покажи человеку кусок его расшифровки. Пока он не увидел свой текст, работа не сделана.

Проверка, что сервер жив: curl -s http://127.0.0.1:8001/api/health. В ответе видно, найдены ли ffmpeg, ffprobe и yt-dlp и сколько живых ключей. Строка вида 0/0 valid означает, что ключ не подставился в .env, и это самая частая причина, по которой ничего не работает.

Скажи человеку, что он должен увидеть на http://127.0.0.1:8001: страницу с заголовком Video Analyzer, выбором модели и полем, куда перетаскивается файл или вставляется ссылка. Если вместо неё пустота или ошибка соединения, сервер не запустился, смотри вывод команды запуска.

Про окно терминала предупреди сразу. Сервер живёт, пока открыто окно, в котором он запущен: закрыли окно, страница перестала отвечать. Это не поломка. Запуск заново идёт той же командой из папки проекта. Человеку, которому инструмент нужен каждый день, поставь автозапуск: на Mac это launchd, на Linux юниты из папки systemd/.

Что говорить про деньги

Инструмент рассчитан на бесплатные лимиты. Бесплатный ключ Gemini даёт около двадцати разборов в сутки, лимит сбрасывается утром. Если человеку мало, правильный ответ не «включите оплату», а «заведите ещё один бесплатный ключ»: в коде есть ротация нескольких проектов, а scripts/create_gemini_keys.py заводит их пачкой.

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

Частые ситуации первого дня

«У меня нет питона и я не программист». Это норма, а не препятствие. На Mac питон уже стоит в системе, проверь командой. Если его нет, ставится одной строкой через brew. Не объясняй, что такое интерпретатор, просто дай команду и скажи, что она делает одним предложением.

Кончился лимит ключа. Бесплатный ключ даёт около двадцати разборов в сутки и сбрасывается утром. Скажи это спокойно и предложи завести второй бесплатный ключ на другом проекте Google, а не платить. Ошибка про лимит выглядит пугающе технически, переведи её на человеческий язык.

Видео скачивается, а разбора нет. Смотри /api/health: там видно, найдены ли ffmpeg, ffprobe, yt-dlp и сколько живых ключей. Пустое 0/0 valid означает, что ключ не подставился в .env.

Ютуб просит подтвердить, что вы не робот. Это защита площадки от массовых скачиваний, она включается редко. Лечится файлом cookies из браузера, путь к нему кладётся в YT_DLP_COOKIES_FILE. Не выдумывай другие обходы.

Человек хочет разобрать закрытое видео с курса. Приватные ссылки Vimeo требуют хеш в адресе, а площадки с входом по паролю требуют cookies. Скажи честно, что нужно, и не обещай, что откроется любое видео.

Грабли, на которые ты наступишь

Всё это выстрадано живой эксплуатацией, а не выдумано.

Расшифровка бывает уверенной ложью. Если пришёл связный текст про другое видео, значит запрос ушёл не в мультимодальный путь. Видео должно грузиться через File API и дожидаться состояния ACTIVE. Текстовый режим на видео не отказывается, он выдумывает содержание, и это выглядит как успешный разбор.

Длинное видео режется на куски, и куски надо сшивать моделью, а не склеивать подряд. Простая склейка сразу видна: вместо одиннадцати тысяч слов выходит четыре, и человек решает, что инструмент испортился.

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

Запись Zoom без звука выглядит как успех. Клиент Zoom не подключает звук сам, окно выбора звукового режима надо нажать. Если звука не было ни разу, запись обязана падать с понятной причиной, а не уходить в разбор тишины.

Каждый новый тип ссылки живёт в двух местах. Есть распознавание ссылки и есть фильтр, который пропускает её дальше. Добавили в одно место, забыли во втором, и ссылка молча проваливается в ответ «пришлите видеофайл». Не держи список доменов в двух файлах.

Проверяй новый вход целиком, а не нижний слой. Скачивание может уметь площадку, а бот её не распознавать. Мёртвая возможность при этом выглядит готовой.

Правила, которые ты не нарушаешь

  1. Человек не принимает технических решений, их принимаешь ты.
  2. Без своего терминала не давай больше одной команды за раз.
  3. Не обещай запись живых встреч на домашнем компьютере.
  4. Не советуй платные ключи и модели без прямого разговора о деньгах.
  5. Не заканчивай установку, пока человек не увидел свой результат.
  6. Не проси ключи и токены в чат без нужды: токен его бота и его ключ Gemini кладутся в файл на его машине, и только они.

Документация

  • docs/API.md, описание веб-интерфейса и всех запросов.
  • docs/API_INTEGRATION.md, как обращаться к инструменту из своего кода.

Происхождение и лицензия

Основа инструмента, а именно веб-приложение разбора видео через Gemini и OpenRouter, нарезка длинных видео, генератор запросов и ключевые кадры, взята из открытого проекта kdoronin/video_analyzer. Автор объявил лицензию MIT в описании своего репозитория. Спасибо ему.

Поверх этой основы добавлено около восемнадцати тысяч строк: дословная транскрипция, работа с большими файлами, телеграм-бот, запись Zoom и браузерных вебинаров, пакетная обработка, локальная расшифровка на Apple Silicon, ротация бесплатных ключей, защита от выдуманного содержания и каталог отказов из живой эксплуатации.

Доработки распространяются по MIT, файл LICENSE. Права на исходную часть принадлежат её автору.

About

Видео в текст: расшифровка и разбор видео по ссылке, запись Zoom и вебинаров. Установка нейросетью по одной ссылке, бесплатно на лимитах Gemini.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages