Видео → текст → саммари. Ставим транскрибацию на Mac

от автора

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

Есть вариант лучше: транскрибировать локально, прямо на своём Маке. Бесплатно, приватно, с качеством на уровне платных сервисов. На Apple Silicon это работает быстро — распознавание идёт на GPU.

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

Гайд проверен на живой системе, со всеми граблями — они тоже здесь.

Один практический момент: вся работа идёт через терминал — встроенное приложение Terminal.app, ищется через Spotlight по слову «терминал». Его полностью достаточно; про более продвинутые терминалы — в конце гайда. Если регулярно с командной строкой не сталкиваетесь, ничего страшного: команды ниже достаточно копировать и выполнять по очереди. Я веду по шагам.

Часть 1. Готовим среду

Это разовая настройка. Один раз проходим — дальше Mac готов транскрибировать что угодно.

Инструменты разработчика

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

xcode-select -p

Если в ответ — путь к папке, всё на месте. Если «command not found» или «not installed»:

xcode-select --install

Откроется окно установки, соглашаемся и ждём.

Homebrew — менеджер пакетов

Через него ставится всё остальное одной строкой. Проверяем:

brew --version

Если версия не показывается — устанавливаем. Команду берём с официального сайта brew.sh, она там всегда актуальная. На сегодня это:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Важно: в конце установки Homebrew напечатает блок «Next steps» с двумя строчками — их обязательно нужно выполнить, иначе команда brew не заработает в новом окне. На Apple Silicon это обычно:

echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofileeval "$(/opt/homebrew/bin/brew shellenv)"

Не пропускайте то, что установщик просит сделать в конце — это самое частое место, где всё «ломается».

Утилиты — одной командой

brew install cmake ffmpeg yt-dlp

Что ставим:

  • cmake — нужен для сборки движка транскрибации

  • ffmpeg — конвертирует аудио в нужный формат

  • yt-dlp — качает видео с YouTube и сотен других сайтов

whisper.cpp — движок транскрибации

Это и есть программа, которая превращает речь в текст. Собираем её с поддержкой Metal — тогда задействуется GPU и всё работает быстро.

cd ~git clone https://github.com/ggml-org/whisper.cppcd whisper.cppcmake -B build -DGGML_METAL=ONcmake --build build -j --config Release

Сборка занимает пару минут — это нормально, ждём приглашение строки.

Модель распознавания

Сам движок без модели не работает — модель это «мозг», который понимает речь.

sh ./models/download-ggml-model.sh large-v3

large-v3 — самая точная, отлично понимает русский. Весит около 3 ГБ, качается не моментально. Если нужно легче и быстрее ценой точности — вместо large-v3 можно поставить medium или small.

VAD‑модель — против сбоев на музыке и тишине

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

Лечится это VAD‑моделью (Voice Activity Detection) — она заранее размечает, где в аудио речь, а где нет, и движок просто не лезет в пустые участки. Модель маленькая, качается быстро:

cd ~/whisper.cppsh ./models/download-vad-model.sh silero-v5.1.2

Проверка

Убедимся, что всё на месте:

ls ~/whisper.cpp/build/bin/whisper-clils ~/whisper.cpp/models/ggml-large-v3.binls ~/whisper.cpp/models/ggml-silero-v5.1.2.bin

Если все три команды показали файл, а не ошибку — Mac готов.

Важно про папку

Один грабль, на который легко наступить. Не держите рабочие файлы и скрипты в папке «Загрузки» — macOS её защищает, и терминал может выдать «Operation not permitted». Заведите отдельную папку:

mkdir ~/scripts

Теперь она у вас лежит: Macintosh HD → Пользователи → Имя пользователя → scripts.

И всё, что связано с транскрибацией — скрипт, аудиофайлы — держите там.

Часть 2. Скрипт и запуск

Подготовка позади. Теперь — сам скрипт, который делает всю работу за один запуск. Он берёт ссылку на видео или локальный файл, вытаскивает звук, распознаёт речь и сохраняет текст в двух форматах: сплошным текстом и с таймкодами. Понимает и YouTube, и сотни других сайтов, и просто файл с диска.

Куда положить скрипт

Скрипт будет жить в папке ~/scripts, которую мы сделали. Скачайте файл и положите в эту папку. Важный момент: не оставляйте его в «Загрузках», оттуда macOS не даст его запустить. Перенесите именно в ~/scripts — через Finder проще всего, просто перетащите.

Скачать transcribe.sh

Скрипт открытый, его можно открыть в любом текстовом редакторе и посмотреть содержимое — там всё подписано. Исходник на GitHub.

Снять «карантин»

Файл, скачанный из интернета, macOS помечает как потенциально небезопасный. Снимаем эту метку:

cd ~/scriptsxattr -cr transcribe.sh

Это разовая процедура.

Запуск

Общий вид — команда из двух строк, выполнять вместе. Первая переводит терминал в папку со скриптом, вторая запускает:

cd ~/scriptsbash transcribe.sh "<ссылка-или-файл>" <язык> <имя>

Где:

  • ссылка-или-файл — ссылка на видео или путь к файлу на диске

  • язык — ru, en или auto (определит сам)

  • имя — как назвать итоговый файл с текстом

Пример с видео из YouTube:

cd ~/scriptsbash transcribe.sh "https://youtu.be/G2B0YWuJUgI" ru lecture

Пример с локальным файлом:

cd ~/scriptsbash transcribe.sh ~/Movies/interview.mp4 ru interview

Дальше скрипт всё сделает сам: скачает или сконвертирует аудио, прогонит через whisper.cpp и покажет прогресс. На часовом видео это несколько минут — окно не закрывайте, дождитесь надписи «Готово».

Результат

Готовые файлы появятся в папке ~/scripts/transcripts:

  • имя.txt — сплошной текст, для чтения и дальнейшей обработки

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

Если что‑то пошло не так

  • command not found: yt-dlp — не установлен yt‑dlp, вернитесь к части 1

  • Operation not permitted — скрипт лежит в защищённой папке, перенесите его в ~/scripts

  • скрипт ругается на путь к модели — проверьте, что модель докачалась полностью (около 3 ГБ)

  • whisper-cli не найден — значит whisper.cpp не собрался, повторите сборку из части 1

  • в тексте одна фраза повторяется десятки раз подряд — whisper зациклился на трудном участке. В скрипте уже стоит защита от этого, но если попалось упрямое место — проверьте, что скачали VAD‑модель

Часть 3. Превращаем текст в пользу

Транскрипт на руках — и вот тут начинается самое ценное.

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

Это делает нейросеть. Но качество саммари целиком зависит от того, как вы попросите. «Сделай саммари этого текста» даст водянистый пересказ ни о чём. Поэтому — рабочий промпт.

Универсальный промпт

Берёте текст транскрипта, вставляете в нейросеть вместе с этим промптом:

Это автоматическая расшифровка видео, поэтому в тексте могут быть ошибки распознавания — особенно в терминах, именах и названиях. Сначала мысленно исправь очевидные ошибки, не меняя смысл.​Затем сделай структурированное саммари:— в 2–3 предложениях суть: о чём это и для кого;— ключевые тезисы и идеи, сгруппированные по смысловым блокам;— конкретику, если она есть: факты, цифры, выводы, рекомендации.​Пиши по существу, без воды и общих фраз. Если о чём-то в тексте сказано вскользь и неясно — так и помечай, не додумывай за автора.

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

Почему он работает

В нём четыре вещи, и каждая делает свою работу.

Первое — предупреждение про ошибки распознавания. Нейросеть не знает, что текст пришёл из транскрибации. Скажешь ей об этом — и она аккуратно поправит «Карпатий» на «Карпати», а не потащит ошибку в саммари.

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

Третье — «без воды». Модели по умолчанию склонны к обтекаемым формулировкам. Прямой запрет на это заметно поднимает плотность текста.

Четвёртое — «не додумывай». Важный предохранитель: без него нейросеть дорисовывает то, чего в видео не было, и саммари перестаёт быть надёжным.

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

Вариации под задачи

Под конспект лекции. К универсальному промпту добавьте: «Сделай подробный конспект по разделам, сохрани логику и последовательность изложения. К каждому разделу — главную мысль одной фразой».

Под рабочий созвон. «Извлеки из расшифровки только: принятые решения, договорённости, задачи — кто что делает и к какому сроку. Остальное обсуждение опусти».

Под черновик статьи или поста. «На основе расшифровки набросай структуру статьи: рабочий заголовок, 4–6 смысловых блоков, к каждому — тезис и опорные факты из текста. Это черновик для дальнейшей доработки, не финальный текст».

Под быструю выжимку. «Сделай короткое саммари: 5–7 пунктов, только самое важное. Без подробностей — чтобы за минуту понять, стоит ли смотреть видео целиком».

Почему транскрипт — это.txt

Маленькое отступление, которое часто вызывает вопрос. Скрипт сохраняет расшифровку в .txt — обычный текст, без всякого форматирования. И это не недоработка: whisper в принципе не умеет отдавать Markdown.

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

Markdown появляется на следующем шаге. Саммари, конспект, структура статьи — это уже осмысленный текст, и вот его логично получить сразу размеченным. Достаточно добавить в промпт строчку вроде «оформи результат в Markdown» — и нейросеть вернёт текст с заголовками и списками. Особенно удобно, если вы держите всё в Obsidian: такое саммари просто кладётся в базу знаний и сразу выглядит как нормальная заметка.

То есть полная цепочка честнее выглядит так: видео → .txt (сырьё) → .md (отформатированный материал).

Про терминалы — если захотите больше

Штатного «Терминала» для всего выше достаточно. Но если втянетесь в работу с командной строкой, есть варианты поудобнее:

  • iTerm2 — классический сторонний терминал, много настроек, удобный поиск и сплит‑панели.

    brew install --cask iterm2
  • Ghostty — новый, очень быстрый, рендеринг через GPU.

    brew install --cask ghostty
  • cmux — самый продвинутый вариант, построен на движке Ghostty. Заточен под работу с AI‑агентами (Claude Code и другими): вертикальные вкладки, уведомления когда агент ждёт ответа. Если плотно работаете с агентами — стоит посмотреть. cmux.com

Это уже на вырост — для самой транскрибации ничего из этого не обязательно.

Итог

Полный цикл собран: видео → текст (локально, бесплатно, приватно) → готовый материал.

Лекцию на час можно за несколько минут превратить в конспект. Часовой созвон — в список задач. Чужой доклад — в черновик собственной статьи.

Ускоряемся и не страдаем!


Пишу про практики работы с AI в Telegram‑канале «Я и мой друг робот» — про мульти‑агентные системы, визуализацию данных и реальные автоматизации: https://t.me/mewithrobot

ссылка на оригинал статьи https://habr.com/ru/articles/1040998/