
Введение
Разработчикам часто требуется превращать аудио в текст — для создания приложений распознавания речи, разбора записей совещаний или наложения субтитров на видео. Обработка файлов прямо на своем компьютере гарантирует безопасность данных и избавляет от регулярных трат на облачные сервисы.
Здесь разберем, как собрать быструю локальную систему транскрипции на базе Whisper и его улучшенной версии Faster-Whisper. Обсудим подготовку аудио, например конвертацию MP3 в WAV, напишем скрипт на Python и разберем запуск на процессоре или видеокарте.
Что такое Whisper и зачем локальная оптимизация?
Whisper от OpenAI — это модель автоматического распознавания речи (ASR). Она обучена на огромном массиве многоязычного аудио, справляется с шумом и разными акцентами.
Оригинальная модель работает медленно на CPU и жрет много памяти. Поэтому появились ускоренные варианты.
- whisper.cpp написан на C++ без лишних зависимостей. Летит на CPU, но нужно компилировать, и с Python не очень дружит.
- Faster-Whisper — переработка на базе CTranslate2. Работает до 4 раз шустрее базового Whisper, тратит меньше оперативки и идеально интегрируется с Python. Именно его используем в гайде.
Оба варианта запускаются полностью локально — данные не уходят с вашего ПК.
Настройка окружения (для всех платформ)
Инструкция подходит для Windows, macOS и Linux с Python 3.8+. Создайте виртуальное окружение (желательно):
python -m venv whisper_envАктивация на macOS/Linux:
source whisper_env/bin/activateНа Windows:
whisper_env\Scripts\activateУстановите Faster-Whisper:
pip install faster-whisperУстановка инструментов для обработки аудио
Whisper требует WAV в формате 16 кГц, моно. Для конвертации MP3, M4A, OGG и прочего понадобится FFmpeg плюс библиотека Python pydub.
Установка FFmpeg:
- Windows: скачайте с FFmpeg.org и добавьте в PATH или
winget install ffmpeg. - macOS:
brew install ffmpeg. - Linux (Ubuntu/Debian):
sudo apt install ffmpeg.
Затем pydub:
pip install pydubПоддержка GPU (опционально)
Есть NVIDIA-видеокарта? Для ускорения следуйте руководству по GPU для Faster-Whisper — поставьте cuBLAS и cuDNN. Без этого скрипт сам переключится на CPU.
Подготовка аудио: конвертация из других форматов в WAV
Большинство аудиофайлов сжаты (MP3) или в контейнерах (M4A). Перед подачей в Whisper их нужно перевести в 16 кГц, моно, PCM WAV.
Вот функция на Python с pydub (которая зовет FFmpeg под капотом):
from pydub import AudioSegment
import os
def convert_to_wav(input_path, output_path=None):
"""
Convert any audio file (MP3, M4A, OGG, etc.) to WAV (16 kHz, mono).
If output_path is None, replaces extension with .wav in the same folder.
"""
if output_path is None:
base, _ = os.path.splitext(input_path)
output_path = base + ".wav"
# Load audio (pydub uses ffmpeg)
audio = AudioSegment.from_file(input_path)
# Convert to mono and set sample rate to 16000 Hz
audio = audio.set_channels(1).set_frame_rate(16000)
# Export as WAV
audio.export(output_path, format="wav")
return output_pathПример:
wav_file = convert_to_wav("meeting.mp3")
print(f"Converted to: {wav_file}")Простой скрипт транскрипции на Faster-Whisper
Теперь соберем полный скрипт: загрузка модели Whisper, транскрипция WAV и вывод результата.
from faster_whisper import WhisperModel
def transcribe_audio(wav_path, model_size="base", device="cpu"):
"""
Transcribe a WAV file (16 kHz mono) using Faster-Whisper.
model_size: "tiny", "base", "small", "medium", "large-v2", "large-v3"
device: "cpu" or "cuda" (if GPU is available)
"""
# Initialize model (downloads automatically on first use)
model = WhisperModel(model_size, device=device, compute_type="int8")
# Run transcription
segments, info = model.transcribe(wav_path, beam_size=5, language="en")
print(f"Detected language: {info.language} (probability: {info.language_probability:.2f})")
print("\nTranscription:")
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")
# Return full text if needed
full_text = " ".join([seg.text for seg in segments])
return full_text
# Example usage
if __name__ == "__main__":
text = transcribe_audio("my_recording.wav", model_size="small", device="cpu")Что в коде:
WhisperModelкачает модель (напримерsmall) в~/.cache/huggingface/hubпри первом запуске.beam_size=5балансирует точность и скорость. Больше (10) — точнее, но медленнее.compute_type="int8"применяет 8-битную арифметику для ускорения. На GPU можно"float16".
| Устройство | Скорость | Сложность настройки | Кому подойдет |
|---|---|---|---|
| CPU | Медленнее (но ок для файлов до 10 мин) | Никакой (только установка) | Новичкам, ноутбукам, мелким задачам |
| GPU (CUDA) | В 3–5 раз быстрее | Нужны драйверы NVIDIA, cuBLAS, cuDNN | Длинным файлам, пакетной обработке |
Для GPU укажите device="cuda". Faster-Whisper сам найдет CUDA, если все на месте.
Совет: Даже на CPU Faster-Whisper сильно обгоняет оригинал. Базовая модель на свежем процессоре тратит около 2 минут на 10-минутный MP3.
От MP3 к транскрипту: полный пример
Скрипт, который конвертирует любой аудиофайл в WAV и сразу транскрибирует.
import os
from pydub import AudioSegment
from faster_whisper import WhisperModel
def convert_to_wav(input_path):
"""Convert any audio to 16kHz mono WAV."""
audio = AudioSegment.from_file(input_path)
audio = audio.set_channels(1).set_frame_rate(16000)
wav_path = os.path.splitext(input_path)[0] + ".wav"
audio.export(wav_path, format="wav")
return wav_path
def transcribe_file(audio_path, model_size="base", device="cpu"):
# Step 1: Convert if not already WAV
if not audio_path.lower().endswith(".wav"):
print(f"Converting {audio_path} to WAV...")
audio_path = convert_to_wav(audio_path)
# Step 2: Transcribe
print(f"Loading model '{model_size}' on {device.upper()}...")
model = WhisperModel(model_size, device=device, compute_type="int8")
segments, info = model.transcribe(audio_path, beam_size=5)
print(f"\nLanguage: {info.language} (prob: {info.language_probability:.2f})")
print("\nTranscript:")
for seg in segments:
print(seg.text, end=" ", flush=True)
print() # final newline
if __name__ == "__main__":
# Example: transcribe an MP3 file
transcribe_file("interview.mp3", model_size="small", device="cpu")Сохраните как transcribe.py и запустите:
python transcribe.pyСкрипт один раз скачает модель, переконвертирует файл и выдаст транскрипт.
Итоги
Теперь у вас есть локальная, скоростная система транскрипции аудио с защитой приватности. Главные выводы:
- Faster-Whisper дает почти реал-тайм на CPU и отличную скорость на GPU.
- Всегда приводите аудио к 16 кГц моно WAV через pydub и FFmpeg.
- Параметр
model_sizeменяет точность на скорость — начните с"base"или"small". - Локальный запуск без ключей API, без передачи данных и без абонплаты.
Экспериментируйте с размерами моделей Whisper для большей точности. Добавьте диаризацию спикеров через pyannote.audio. Сделайте веб-интерфейс на Gradio или Streamlit.