- Дата публикации
Yapsnap: офлайн‑транскрипция YouTube, TikTok, X и Reels на одном CPU
Что нового
Yapsnap — это консольный инструмент на Python, который превращает любой поддерживаемый URL с видео или аудио, а также локальный файл, в обычный .txt без GPU и без облака.
Ключевые факты:
- Работает только на CPU. Никакого CUDA, никаких «фишек» Apple Silicon — достаточно обычного ноутбука или десктопа.
- Скорость: автор заявляет, что Streaming Zipformer (Kroko English) обрабатывает звук на ноутбуке в несколько раз быстрее реального времени. То есть часовой ролик можно получить в текст за меньше чем час.
- Модель весит около 80 МБ. Yapsnap скачивает её один раз и кладёт в кэш; дальше всё работает офлайн.
- Поддерживаемые источники:
- YouTube и YouTube Shorts
- X (Twitter) — видео по ссылкам вида
https://x.com/user/status/.../video/1 - TikTok
- Instagram Reels
- Прямые ссылки на медиа (
.mp4,.mp3и др.) - Локальные файлы:
.mp3,.mp4,.m4a,.wav,.webm,.mov,.mkv,.aac,.opus,.ogg,.flacи другие, которые умеет ffmpeg
- Формат вывода: обычный UTF‑8 текстовый файл. Можно получить либо один абзац, либо построчный текст с таймкодами
[MM:SS]для каждого предложения. - Есть флаг
--speed, который по умолчанию ускоряет звук до 1.5x перед распознаванием с сохранением высоты тона. Это примерно на треть сокращает время транскрипции. - Команда
yapsnapставится вместе с алиасомtranscribe— на случай, если название забудете.
Как это работает
Под капотом Yapsnap использует связку из трёх ключевых компонентов:
-
yt-dlp — скачивает медиа по URL
- Для YouTube, TikTok, X, Instagram и других поддерживаемых платформ Yapsnap передаёт URL в
yt-dlp. yt-dlpвыбирает лучший аудиопоток и сохраняет его во временный файл.- Если вы подаёте локальный путь, этот шаг пропускается.
- Для YouTube, TikTok, X, Instagram и других поддерживаемых платформ Yapsnap передаёт URL в
-
ffmpeg — декодирует аудио в формат для распознавания
- ffmpeg конвертирует видео или аудио в 16 кГц, моно, PCM.
- При включённом ускорении используется фильтр
atempo, который ускоряет воспроизведение до нужного коэффициента (--speed), но не меняет высоту голоса.
-
sherpa-onnx + Kroko (Streaming Zipformer2) — распознаёт речь
- Используется потоковый трансдьюсер Zipformer2 (Kroko English) в формате INT8 ONNX, размером примерно 80 МБ.
- Модель обрабатывает аудио чанками в режиме реального времени и быстрее.
- Распознавание идёт жадным декодированием (greedy decode), без сложных поисковых деревьев.
- Работает только на CPU, без GPU‑ускорения.
После этого Yapsnap форматирует результат:
-
Без флага
--timestampsвы получаете один абзац текста:Welcome to the show. Today we're talking about transcription. Let's get started. -
С флагом
--timestampsкаждая строка — отдельное предложение с таймкодом в формате[MM:SS]:[00:00] Welcome to the show. [00:03] Today we're talking about transcription. [00:08] Let's get started.
Таймкоды привязаны к исходному аудио. Если вы ускоряете звук до 1.5x или 2x, Yapsnap масштабирует время обратно, чтобы оно соответствовало оригинальному ролику.
Кэш модели хранится локально:
- macOS:
~/Library/Caches/yapsnap/ - Linux:
$XDG_CACHE_HOME/yapsnap/или~/.cache/yapsnap/ - Windows:
%LOCALAPPDATA%\yapsnap\
Можно подменить модель через --model или переменную окружения KROKO_MODEL. Для этого в директории должны лежать файлы encoder(.int8).onnx, decoder(.int8).onnx, joiner(.int8).onnx и tokens.txt.
Что это значит для вас
Yapsnap полезен, если вы:
-
Делаете расшифровки контента
- Лекторы и преподаватели: быстро получить текст с YouTube‑лекций и вебинаров.
- Подкастеры: превратить выпуск в заметки или черновик статьи.
- SMM‑специалисты: вытянуть речь из TikTok, Reels или X‑видео для описаний и цитат.
-
Работаете с конфиденциальными данными
- Вся обработка идёт на вашей машине. Аудио никуда не отправляется.
- Нет API‑ключей, нет квот, нет логов на стороне сервиса.
- Это удобно для внутренних созвонов, интервью, закрытых митапов.
-
Не хотите связываться с облачными API
- Не нужно регистрироваться в сторонних сервисах.
- Не нужно платить за минуты распознавания.
- Один раз поставили
ffmpegи Python‑модуль — и дальше всё работает локально.
Где инструмент особенно уместен:
- Быстрая расшифровка длинных роликов, когда задержка в несколько минут не критична.
- Подготовка черновиков: конспекты, заметки, поиск цитат.
- Навигация по записи с помощью таймкодов: найти нужный фрагмент по тексту и перейти в плеере.
Где есть ограничения:
-
Язык по умолчанию — только английский.
- Встроенный Kroko‑модельный набор заточен под английскую речь.
- Для других языков нужно самостоятельно подключать совместимую модель sherpa-onnx через
--model.
-
Точность и таймкоды
- Таймкоды достаточно точные для навигации.
- Для субтитров «в кадр‑в кадр» лучше использовать специализированные инструменты с выравниванием по кадрам.
-
Качество исходника
- Для шумных записей, мямлящей речи или сверхбыстрого темпа лучше снизить
--speedдо 1.0. - Автор прямо рекомендует: 1.5 — хороший баланс, 2.0 — быстрее, но риск потери точности выше.
- Для шумных записей, мямлящей речи или сверхбыстрого темпа лучше снизить
По доступности: Yapsnap опирается на yt-dlp. Если платформа блокирует контент по гео или требует авторизацию, yt-dlp честно об этом сообщит, и транскрипция не состоится. В таких случаях можно сначала скачать файл вручную (с VPN или без), а потом скормить его Yapsnap как локальный путь.
Место на рынке
Yapsnap живёт в другом сегменте, чем облачные сервисы распознавания речи наподобие Google Speech‑to‑Text или Azure Cognitive Services:
-
Модель и инфраструктура
- Yapsnap использует локальную модель Kroko (~80 МБ) через sherpa-onnx.
- Облачные сервисы держат большие серверные модели и масштабируют их в дата‑центрах.
-
Стоимость
- У Yapsnap нет тарификации за минуты или запросы: вы платите только «железом» и временем.
- У облачных API цена идёт за минуту аудио или за количество символов.
-
Скорость и удобство
- Заявленная скорость «несколько раз быстрее реального времени» на ноутбуке делает Yapsnap практичным для личного и малого командного использования.
- Облако часто даёт схожую или более высокую скорость, но требует настройки ключей, учётной записи и интеграции.
-
Функциональность
- Yapsnap даёт базовый набор: транскрипция, таймкоды по предложениям, настройка скорости и выбор модели.
- Облачные решения обычно предлагают языковую идентификацию, множество языков «из коробки», диаризацию, дополнительные метаданные.
Если вы уже используете что‑то вроде Whisper на CPU или GPU, Yapsnap интересен именно как «готовый конвейер» для соцсетей: он сам вытащит медиа через yt-dlp, прогонит через ffmpeg и модель, а на выходе даст .txt с таймкодами.
Установка
Yapsnap требует две вещи: установленный ffmpeg и сам Python‑пакет.
1. Устанавливаем ffmpeg
Команды для разных ОС:
macOS
brew install ffmpeg
Linux
sudo apt install ffmpeg
# или
sudo dnf install ffmpeg
Windows
winget install ffmpeg
# или
choco install ffmpeg
2. Устанавливаем Yapsnap
pip install .
После установки в PATH появятся две команды:
yapsnap— основнаяtranscribe— алиас на тот же инструмент
Как запустить
Базовые сценарии запуска выглядят так.
Локальный файл
yapsnap path/to/audio.mp3
Любой поддерживаемый видео‑URL
yapsnap "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
С таймкодами по предложениям
yapsnap input.mp4 --timestamps
Свой путь для вывода
yapsnap input.mp4 -o ./transcripts/talk.txt
По умолчанию Yapsnap создаёт директорию ./transcripts/ в текущей папке и складывает туда файлы вида <id>_transcript.txt. Для URL имя берётся, например, из ID ролика: dQw4w9WgXcQ_transcript.txt.
Управление скоростью обработки
По умолчанию Yapsnap ускоряет аудио до 1.5x, сохраняя высоту голоса. Это экономит примерно треть времени транскрипции.
Чтобы отключить ускорение и оставить 1.0x:
yapsnap input.mp4 --speed 1.0
Можно попробовать и более агрессивные значения, например 2.0, если качество записи хорошее и важнее скорость, чем точность.
Сохранить скачанное аудио
По умолчанию при работе с URL Yapsnap удаляет временный аудиофайл после распознавания. Если хотите его сохранить:
yapsnap "https://..." --keep-audio
Примеры быстрого старта
# 1. ffmpeg на PATH (один раз для системы)
# 2. Установка
pip install .
# 3. Транскрипция TikTok
yapsnap https://www.tiktok.com/@user/video/7234567890123456789
# 4. Митинг с таймкодами
yapsnap meeting.mp4 --timestamps
# 5. Подкаст в конкретную папку
yapsnap podcast.mp3 -o ~/notes/episode.txt
Первая команда скачает модель (~80 МБ) и положит её в кэш. Все дальнейшие запуски работают полностью офлайн.
Ограничения и нюансы
- Языковая поддержка по умолчанию — английский. Для других языков нужно подключать совместимую streaming‑модель sherpa-onnx вручную.
- Скорость
--speed 1.5— разумный компромисс между временем и точностью. 2.0 ускорит ещё сильнее, но может ухудшить результат на сложном аудио. - Некоторые ссылки на соцсети могут быть недоступны из‑за геоблокировок или требований авторизации. В таких ситуациях
yt-dlpявно сообщает о проблеме. - Таймкоды основаны на позициях токенов в потоке распознавания. Для навигации этого достаточно, но для точной верстки субтитров лучше использовать специализированные решения.
Лицензия
- Код Yapsnap распространяется под лицензией Apache‑2.0.
- Модель Kroko поставляется по отдельной лицензии, подробности — на странице: https://huggingface.co/Banafo/Kroko-ASR.
- Проект использует sherpa-onnx и yt-dlp как ключевые зависимости для распознавания и скачивания медиа.
Читайте также
- Stable Audio 3: генерация музыки и звуков за пару секунд на обычном ноутбуке
- AWS запустила двунаправочный стриминг в SageMaker AI: как собрать свой real-time голосовой сервис на vLLM и Voxtral
- Antigravity CLI: терминальный ИИ‑ассистент для кода с мног шаговым мышлением и мультифайловым редактированием