Слогер Создать блог
Разработка

Создаём 100% офлайн-инструмент для вживления субтитров с помощью Next.js, NestJS и faster-whisper

Рассказываю, как с помощью связки Next.js, NestJS и AI-модели faster-whisper собрать инструмент, который работает полностью на локальной машине — без подписок и отправки видео в облако.

Я открыл CapCut, чтобы вживить субтитры в 12-секундный ролик. Приложение попросило оформить подписку. Я закрыл вкладку и пошёл смотреть, что на самом деле делает всю работу под капотом: FFmpeg.

Оказалось, кто-то уже собрал бесплатную версию. Называется SubtitleStudio, и работает она полностью на вашем железе.

Зачем это вообще понадобилось

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

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

SubtitleStudioAdobe Premiere ProCapCut Pro
ЦенаБесплатно навсегда~$20–35/мес~$20/мес
Работает офлайнДаЧастичноНет
ТранскрибацияЛокальный AI, встроенВручную / платный плагинОблачная
Видео покидает машинуНикогдаЗависит от тарифаДа
ЛицензияMIT, открытый кодПроприетарнаяПроприетарная

Помнится, CapCut Pro стоил $10 в месяц. Я проверил — к началу 2026 года цена незаметно выросла до $20. Программа, которую ты установил один раз, не имеет права так делать.

Что происходит, когда вы загружаете видео

SubtitleStudio — это не одна программа, а три, работающие вместе. Веб-интерфейс на Next.js, API-сервер на NestJS и небольшой AI-сервис на Python общаются через Docker. Три повара на одной кухне, каждый отвечает за своё блюдо.

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

Загрузка → Извлечение аудио → Транскрибация через AI → Группировка слов в реплики

Обратите внимание: ни одного обращения к облаку. Всё после «Загрузки» происходит на вашем собственном железе. В этом и смысл.

Мозг: faster-whisper слушает

Движок AI — faster-whisper, ускоренная версия модели распознавания речи Whisper от OpenAI. Внутри используется более лёгкий бэкенд CTranslate2, который работает в 2–4 раза быстрее обычного Whisper. Те же способности, но меньше веса.

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

SubtitleStudio позволяет выбрать размер модели: от tiny до large-v3. Как выбор рюкзака для поездки на выходные.

МодельVRAM / RAMСкоростьТочность
tiny~1 ГБМаксимальнаяСредняя
base~1.5 ГБВысокаяХорошая
small~2.5 ГБУмереннаяЛучше
medium~5 ГБМедленнаяОтличная
large-v3~10 ГБСамая медленнаяЛучшая

По умолчанию стоит base — золотая середина для большинства ноутбуков. На чистом аудио точность распознавания large-v3 достигает 93–95%. Это почти как человек, печатающий в реальном времени.

Редактор, который не врёт

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

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

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

  • Для 1080p коэффициент масштаба: 1080 ÷ 540 = 2
  • Для 4K: 2160 ÷ 540 = 4
  • Для вертикального рилса высотой 1920: ~3.5

Один и тот же шрифт, одна позиция — никаких гаданий, любое разрешение.

Живой прогресс без замёрзших спиннеров

Старые приложения заставляют обновлять страницу, чтобы проверить статус задачи. SubtitleStudio транслирует обновления через Server-Sent Events (SSE). Как трекер пиццы: приложение само уведомляет об изменении статуса, не надо дёргать его каждые две минуты.

ПодходКак работаетОщущается как
PollingКлиент постоянно спрашивает «уже готово?»Звонки в пиццерию каждые 2 минуты
WebSocketsДвусторонняя связь, оба говорят когда угодноОткрытая телефонная линия
SSEСервер отправляет обновления, обратной связи не нужноТрекер сам обновляется

SubtitleStudio нужны обновления только в одну сторону, поэтому SSE — лёгкое и простое решение. Во время транскрибации шкала проходит реальные стадии: 40%, 75%, 100% — когда реплики готовы. Прогресс экспорта растёт от 10 до 98% по мере того, как FFmpeg сообщает фактическое время кодирования. Живое число, а не крутящийся спиннер.

Финишная прямая: GPU против CPU

При нажатии «экспорт» SubtitleStudio сначала пробует видеокарту NVIDIA, используя чип NVENC, созданный специально для кодирования видео. Нет GPU — без проблем, автоматически переключается на процессор.

Представьте забег по одной трассе. NVENC — это спорткар для одной задачи: быстро кодировать видео. CPU — обычный велосипед, тоже доедет, но с бóльшими усилиями.

Попробовать NVENC (GPU) → Получилось? Быстрый экспорт → Не вышло? Переключиться на libx264 (CPU) → Экспорт всё равно завершится

Любая ветка приводит к финишу. С GPU вы приедете, пока читаете это предложение. В тестах замена программного кодирования на NVENC сократила время экспорта с 12 минут до 2. Примерно в 6 раз быстрее, а иногда и больше, в зависимости от карты.

Два момента, которые часто неверно понимают: вам не нужна дорогая видеокарта; экспорт только на CPU — не ошибка. Ноутбуки без дискретной графики справляются нормально. Медленнее, но не ломаются.

Кратко

  • SubtitleStudio вживляет субтитры, распознанные AI, полностью офлайн, бесплатно навсегда, под лицензией MIT
  • Состоит из трёх сервисов в Docker: фронтенд на Next.js, API на NestJS и AI-движок на Python с faster-whisper
  • Редактор «что видишь, то и получишь» совпадает с экспортом пиксель в пиксель благодаря опорной высоте 540px
  • Живые индикаторы прогресса на SSE — никаких спиннеров
  • Экспорт сначала пробует NVENC, затем автоматически падает на CPU
  • Никаких облачных вызовов, никаких API-ключей, никаких ежемесячных счетов

По материалам: productivity. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.