Microsoft/VibeVoice
Microsoft/VibeVoice. VibeVoice — это аудиомодель Microsoft в стиле Whisper для преобразования речи в текст, лицензированная MIT и со встроенной в модель диаризацией говорящего.
Microsoft выпустила его 21 января 2026 года, но я не пробовал его до сегодняшнего дня. Вот однострочник для запуска его на Mac с помощью uvmlx-audio (от Prince Canuma) и преобразование MLX mlx-community/VibeVoice-ASR-4bit объемом 5,71 ГБ модели VibeVoice-ASR объемом 17,3 ГБ, в данном случае против загруженной копии моего недавнего выступления в подкасте с Ленни Рачицким:
uv run --with mlx-audio mlx_audio.stt.generate \
--model mlx-community/VibeVoice-ASR-4bit \
--audio lenny.mp3 --output-path lenny \
--format json --verbose --max-tokens 32768

Инструмент сообщил:
Processing time: 524.79 seconds
Prompt: 26615 tokens, 50.718 tokens-per-sec
Generation: 20248 tokens, 38.585 tokens-per-sec
Peak memory: 30.44 GB
Итак, это 8 минут 45 секунд на час аудио (при работе на MacBook Pro M5 Max емкостью 128 ГБ).
Я проверил это на .wav и .mp3 файлы, и они оба работали нормально.
Если вы опустите --max-tokens по умолчанию установлено значение 8192, чего достаточно примерно для 25 минут звука. Я обнаружил это методом проб и ошибок и увеличил его в четыре раза, чтобы гарантировать, что получу полный час.
Эта команда сообщила об использовании 30,44 ГБ ОЗУ на пике, но в Activity Monitor я заметил использование 61,5 ГБ на этапе предварительного заполнения и около 18 ГБ на этапе генерации.
Вот полученный JSON. Ключевая структура выглядит следующим образом:
{
"text": "And an open question for me is how many other knowledge work fields are actually prone to these agent loops?",
"start": 13.85,
"end": 19.5,
"duration": 5.65,
"speaker_id": 0
},
{
"text": "Now that we have this power, people almost underestimate what they can do with it.",
"start": 19.5,
"end": 22.78,
"duration": 3.280000000000001,
"speaker_id": 1
},
{
"text": "Today, probably 95% of the code that I produce, I didn't type it myself. I write so much of my code on my phone. It's wild.",
"start": 22.78,
"end": 30.0,
"duration": 7.219999999999999,
"speaker_id": 0
}
Поскольку это массив объектов, мы можем открыть его в Datasette Lite, что упрощает просмотр.
Забавно, что в представлении Datasette Lite показаны три динамика: он идентифицировал Ленни и меня для разговора, а затем отдельный Ленни для голоса, который он использовал для дополнительного вступления и спонсора!
VibeVoice может обрабатывать аудио продолжительностью не более часа, поэтому при выполнении приведенной выше команды расшифровывается только первый час подкаста. Чтобы расшифровать больше, вам нужно будет разделить аудио, в идеале с перекрытием в минуту или около того, чтобы избежать ошибок из-за частично транскрибированных слов в точке разделения. Затем вам также потребуется выровнять идентифицированные идентификаторы говорящих по нескольким сегментам.
