Как ответить
Whisper принимает на вход аудиоданные в формате одноканального (моно) PCM с частотой дискретизации 16000 Гц и разрядностью 16 бит со знаком. На практике модель ожидает массив float32 в диапазоне [-1, 1] — это может быть numpy ndarray или torch тензор. Если вы передаёте путь к файлу, встроенная функция whisper.load_audio() сама приведёт сигнал к нужному формату.
Проще всего использовать model.transcribe(), которая внутри вызывает load_audio и разбивает длинные записи на блоки до 30 секунд. Если вы работаете с готовым массивом, убедитесь, что частота дискретизации именно 16 кГц, иначе модель выдаст некорректные результаты.
import whisper
import librosa
# Вариант 1: встроенная загрузка
aud = whisper.load_audio('speech.wav') # -> numpy array, 16kHz, моно
result = whisper.transcribe(model, aud)
# Вариант 2: через librosa (ресемпл обязателен)
aud, sr = librosa.load('speech.mp3', sr=16000, mono=True)
aud = aud.astype('float32') # librosa уже возвращает float32
result = whisper.transcribe(model, aud)
Эти методы автоматически нормализуют значения в диапазон [-1, 1]. Если вы подаёте аудио вручную, например, из записи микрофона, обязательно проверьте частоту — 16 кГц, моно, float32.
Для длинных файлов (более 30 секунд) transcribe применяет окно длиной 30 секунд с перекрытием. Вы также можете подать список отрезков в виде списка массивов, но это редко нужно — встроенный механизм справляется сам.