微软发布VibeVoice:带说话人分离的开源语音转文字模型

Simon Willison··作者 Simon Willison

关键信息

该模型在处理时最多需30GB内存,超过一小时的音频必须分段处理;默认最大token数(8192)限制了约25分钟的转录,除非手动增加。输出为包含说话人ID的JSON格式,便于通过Datasette Lite等工具分析。

资讯摘要

微软于2026年1月21日发布了VibeVoice,这是一个新的开源语音转文字模型,内置说话人分离功能并采用MIT许可证。西蒙·威尔森用MLX和mlx-audio在Mac上测试了它,将一段99.8分钟的播客转录用了524秒(约8分45秒)。该模型正确识别出三位说话人——包括两个利尼·拉奇茨基的声音版本——并生成结构化的JSON输出。

峰值内存使用量为30.44GB,但活动监视器显示预处理阶段更高。用户必须调整--max-tokens参数以处理更长的音频,因为默认值仅允许约25分钟的转录。这使得VibeVoice成为开发者寻求本地、准确且具备说话人识别能力的转录工具的理想选择。

微软发布VibeVoice:带说话人分离的开源语音转文字模型

资讯正文

VibeVoice 是微软推出的语音转文字模型,类似于 Whisper,采用 MIT 许可协议,并内置了说话人辨识功能。

微软于 2026 年 1 月 21 日发布了该模型,但我直到今天才尝试使用。以下是在 Mac 上用 uv 工具、Prince Canuma 开发的 mlx-audio 库,以及 5.71GB 的 mlx-community/VibeVoice-ASR-4bit 模型(这是对原版 17.3GB 的 VibeVoice-ASR 模型进行 MLX 转换的结果)运行该模型的命令行指令,用于处理我最近与 Lenny Rachitsky 的播客录音文件(已下载):

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 秒(在配备 128GB 内存的 M5 Max MacBook Pro 上运行)。

我测试过 .wav 和 .mp3 文件,两者都能正常工作。

如果省略 --max-tokens 参数,默认值为 8192,大约能处理 25 分钟的音频。我通过反复试验发现这个限制,于是将它扩大四倍以确保能完整提取整小时内容。

该命令报告峰值内存使用量为 30.44GB,但在活动监视器中观察到预填充阶段使用了约 61.5GB,生成阶段则约为 18GB。

这是输出的 JSON 文件:<a href="https://gist.github.com/simonw/d2c716c008b3ba395785f865c6387b6f">点击查看</a>。其核心结构如下:

{

"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 打开它:<a href="https://lite.datasette.io/?json=https://gist.github.com/simonw/d2c716c008b3ba395785f865c6387b6f#/data/raw?_facet=speaker_id">在线浏览</a>,便于查阅。

有趣的是,Datasette Lite 显示出三位说话者——它识别出了我和 Lenny 的对话,还单独识别出一个 Lenny,这是他用来朗读开场白和赞助商广告的声音!

VibeVoice最多只能处理一小时的音频,因此上面的命令只转录了播客的前一个小时。如果要转录更长时间的内容,你需要将音频分割,最好在各段之间保留约一分钟的重叠部分,以避免在分割点因单词转录不完整而产生错误。此外,你还需将多个片段中的发言人ID对齐。

标签:

微软、Python、Datasette Lite、uv、mlx、Prince Canuma、语音转文字

来源与参考

  1. 原始链接
  2. microsoft/VibeVoice

收录于 2026-04-29