ТранскрибаторТранскрибатор
Практическая инструкция

faster-whisper: как расшифровать запись через Python и сохранить текст

Установка faster-whisper, русская запись на CPU, генератор segments, сохранение TXT и JSON, проверка VAD и полноты результата.

02 октября 2026Транскрибатор
sample.wavWhisperModel → transcribefor segment in segmentssample.txt + segments.json
Проверенные ограниченияРазобранный примерРабочий шаблон
1. ПодготовитьCPU / int8 / ruИсходник и модель2. Обработатьfor segment in segmentsДождаться конца цикла3. СохранитьTXT + JSONОткрыть и сверить
Сохранение — самостоятельный этап Python-сценария. Объект генератора ещё не является готовым документом.

Выберите библиотеку для своей задачи

faster-whisper — реализация распознавания Whisper на движке CTranslate2. Эта инструкция относится к Python-библиотеке: вы управляете чтением результата и его сохранением из кода. Приложения с похожим названием, готовые Windows-сборки и графические оболочки могут добавлять собственные команды и экспорт. Не переносите их параметры в Python без проверки.

Если нужен привычный вызов из терминала, начните с инструкции по команде openai-whisper. Библиотека удобна для повторяемой обработки файлов и включения распознавания в свой сценарий. Для разовой расшифровки установка окружения может оказаться избыточной: получите текст аудиофайла в Транскрибаторе, если подходит онлайн-обработка.

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

Подготовьте короткую пробу на CPU

Официальная документация указывает установку пакета faster-whisper из PyPI. Создайте отдельное Python-окружение, активируйте его по правилам своей ОС и установите пакет именно туда. На дату проверки README требует Python 3.9 или новее. Сохраните версии Python, faster-whisper и ctranslate2: без них повторить ошибку будет труднее.

python -m venv .venv
# активируйте окружение для своей ОС
python -m pip install faster-whisper
python -m pip show faster-whisper ctranslate2

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

Декодирование аудио в этой библиотеке выполняет PyAV с библиотеками FFmpeg в пакете. Отдельная системная команда ffmpeg не является обязательным условием этого базового примера. Для GPU зависимости другие: сначала сверьте совместимость CTranslate2, CUDA и cuDNN по документации выбранной версии. Рабочее окружение не следует менять методом случайного понижения пакетов.

Обойдите генератор и сохраните два результата

Сохраните следующий код в transcribe_sample.py рядом с sample.wav. Запускайте его из этой папки командой python transcribe_sample.py. На другом компьютере сначала замените путь и проверьте доступ к модели. Код — учебная заготовка; он не выполнялся на вашей записи и не содержит замера производительности.

from pathlib import Path
import json
from faster_whisper import WhisperModel

model = WhisperModel("small", device="cpu", compute_type="int8")
segments, info = model.transcribe(
    "sample.wav", language="ru", task="transcribe",
    beam_size=5, vad_filter=False
)
rows = []
for segment in segments:
    rows.append({
        "start": segment.start, "end": segment.end,
        "text": segment.text.strip()
    })

Path("sample.txt").write_text(
    "\n".join(row["text"] for row in rows), encoding="utf-8"
)
Path("sample-segments.json").write_text(
    json.dumps(rows, ensure_ascii=False, indent=2), encoding="utf-8"
)
print("Сохранено сегментов:", len(rows))

Ключевой шаг — цикл for. Распознавание ленивое: наличие segments не означает, что весь файл уже обработан. Если только вызвать transcribe и выйти из программы, ожидаемого готового текста может не быть. Генератор также исчерпывается при чтении: второй цикл по нему не вернёт те же сегменты. В примере данные один раз собирают в rows и уже из этого списка создают оба файла.

TXT здесь содержит слова без временных меток. JSON сохраняет границы сегментов в секундах, но не является файлом SRT и не предназначен для прямого импорта как субтитры. Если нужен только текст, не добавляйте к нему случайные таймкоды. Для длинных записей учтите, что этот простой пример хранит все сегменты в памяти; производственный сценарий может сохранять их постепенно и отдельно отмечать успешное завершение.

Проверьте полноту до настройки ускорения

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

Для отдельной пробы можно включить vad_filter=True — фильтр участков без речи. Сравните с вариантом без фильтра на том же фрагменте, особенно возле пауз и тихих ответов. VAD отделяет речь от неречевых участков; он не исправляет слова и не назначает имена участников. Если часть реплики исчезла, зафиксируйте место, а не объявляйте результат автоматически очищенным.

При сравнении скорости записывайте модель, устройство, тип вычислений, beam_size и число потоков. Отделяйте время первой загрузки модели от обработки подготовленного файла. Быстро завершившийся запуск с пропущенной речью не равноценен полному результату. Числа из чужого теста нельзя считать прогнозом для вашего ноутбука.

Учебный пример

Модель готова, а текст ещё не сохранён

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

НаблюдениеВозможная причинаПроверка
Модель загружена, TXT нетГенератор не прочитанДойти до конца цикла и сохранения
Второй экспорт пустПовторное чтение генератораСохранять оба файла из rows
Нет тихого ответаНастройки VAD или распознаванияСравнить одинаковую пробу без VAD
Конец JSON раньше конца файлаПосле речи тишина либо пропускПрослушать последний речевой участок
Модель готоваСегменты обработаныФайлы провереныWhisperModel(...)Цикл завершёнTXT и JSON открытыМожно начать пробуМожно записать результатМожно передать редактору
Учебная схема состояния: готовая модель, обработанные сегменты и проверенные файлы — три разные отметки.

Редактор добавляет обход segments и явное сохранение, открывает оба результата и сверяет последнюю реплику. В журнале он различает «модель готова», «обработка закончилась» и «файлы проверены».

Карточка пробы faster-whisper

Рабочая заготовкаВыделите и скопируйте
Исходник и длительность:
Python / faster-whisper / CTranslate2:
Модель / путь:
Устройство / compute_type:
Язык / задача / beam_size:
VAD включён:
Генератор прочитан полностью:
Пути TXT и JSON:
Число сегментов:
Начало / тихая речь / конец проверены:
Ошибка или предупреждение дословно:
Исправленная версия текста:

Частые вопросы

Почему transcribe не создал TXT?

Метод возвращает сегменты и сведения о распознавании. В этой заготовке обход и запись файлов выполняет ваш код. Проверьте, дошла ли программа до цикла и сохранения.

Можно ли пройти segments дважды?

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

Нужен ли интернет при каждом запуске?

Для загрузки отсутствующих моделей сеть может понадобиться. Автономность проверяют с подготовленной локальной моделью и доступными зависимостями, а не по названию библиотеки.

JSON из примера — это субтитры?

Нет. Это список сегментов с временем в секундах. SRT имеет другую структуру и требует собственного преобразования и проверки синхронизации.

VAD улучшает все записи?

Универсального обещания нет. Проверьте одинаковую пробу с фильтром и без него, в том числе тихие ответы и речь рядом с паузами.