Новости и статьи об искусственном интеллекте и нейросетях. Мы собираем и обрабатываем самую актуальную информацию из мира AI. О проекте

Статьи

Локальная транскрипция аудио с Faster-Whisper

Гайд по настройке локальной транскрипции аудио с Faster-Whisper, которая в 4 раза быстрее оригинального Whisper и тратит меньше памяти. Описаны установка на CPU/GPU, предобработка файлов pydub+FFmpeg и готовые скрипты для MP3 в текст. Система работает оффлайн, защищая приватность.

2 часа назад
9 мин
0
Local Whisper Audio Transcription

Введение

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

Здесь разберем, как собрать быструю локальную систему транскрипции на базе 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.

Горячее

Загружаем популярные статьи...

Faster-Whisper ускорил локальную транскрипцию в 4 раза