
Local Whisper Audio Transcription
https://ift.tt/1xmr7yW
Image by Author
# Вступ
Транскрибування аудіо в текст — це поширена потреба розробників: чи ви створюєте застосунок з розпізнавання мови, аналізуєте запис зустрічей, чи додаєте субтитри до відео. Робота локально (на вашому власному комп’ютері) забезпечує конфіденційність та дозволяє уникати щомісячних витрат на хмарні сервіси.
У цій статті ви дізнаєтесь, як налаштувати швидку локальну систему транскрипції за допомогою Whisper та її оптимізованої версії Faster-Whisper. Ми розглянемо попередня обробка аудіо, таку як конвертація MP3 у WAV, напишемо Python-скрипт та обговоримо використання як на CPU, так і на GPU.
# Що таке Whisper? І чому варто використовувати локальну версію?
OpenAI Whisper — це модель автоматичного розпізнавання мови (ASR). Вона натренована на великій кількості багатомовного аудіоматеріалу та добре працює навіть за фонових шумів або різних акцентів.
Однак оригінальний Whisper може бути повільним на CPU та потребує значної пам’яті. Саме тут на допомогу приходять оптимізовані варіанти.
- whisper.cpp написаний на C++ без великих залежностей. Дуже швидкий на CPU, але потребує компіляції та менш зручний для Python.
- Faster-Whisper — це переписана версія, що використовує CTranslate2. Працює до 4× швидше за оригінальний Whisper, споживає менше RAM та безперебійно інтегрується з Python. У цьому посібнику використаємо Faster-Whisper.
Обидва варіанти запускються повністю локально; дані не залишають ваш комп’ютер.
# Налаштування середовища (крос-платформенно)
Ця конфігурація працює на 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:
// Опційна підтримка GPU
Якщо у вас є графічна картка NVIDIA та ви хочете швидшу транскрипцію, встановіть cuBLAS та cuDNN, дотримуючись керівництва Faster-Whisper для GPU. Без цього код автоматично переходить на CPU.
# Попередня обробка аудіо: конвертація файлів, не у WAV
Більшість аудіофайлів не є сирими 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
Тепер напишемо повний Python-скрипт, який завантажує модель 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" або "cuda" (якщо є GPU)
"""
# 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 значно швидший за оригінальний Whisper. Для 10-хвилинного MP3 базова модель на сучасному CPU займає близько 2 хвилин.
# Конвертація 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 та запустіть:
Скрипт завантажить модель один раз, конвертує файл та виведе транскрипт.
# Висновок
Тепер у вас є локальна, швидка та приватна система транскрипції аудіо. Деякі ключові моменти:
- Faster-Whisper дає майже реальний час транскрипції на CPU та чудову швидкість на GPU.
- Завжди попередньо обробляйте аудіо до 16 кГц моно WAV за допомогою pydub та FFmpeg.
- Параметр
model_sizeторгує за точність і швидкість — почніть із"base"або"small". - Локальний запуск означає відсутність API-ключів, відсутність передачі даних та відсутність щомісячних платежів.
Спробуйте різні розміри моделей Whisper для кращої точності. Додайте діаризацію мовців (визначення того, хто говорив і коли) з використанням бібліотек, таких як pyannote.audio. Створіть простий веб-інтерфейс за допомогою Gradio або Streamlit.
Shittu Olumide — інженер програмного забезпечення та технічний писач, який прагне застосовувати передові технології для створення переконливих наративів, з проникливим поглядом на деталі та вмінням спрощувати складні концепції. Також можна знайти Шитту в Twitter.
HI-FI News
via KDnuggets https://ift.tt/szxRACQ
April 28, 2026 at 04:12PM
April 28, 2026 at 04:12PM

Залишити відповідь