microsoft/VibeVoice
microsoft/VibeVoice
Microsoft 于 2026 年 1 月 21 日发布 MIT license 的 VibeVoice speech-to-text audio model,内置 speaker diarization。作者用 uv、mlx-audio 和 5.71GB MLX 4bit 版本在 128GB M5 Max MacBook Pro 转录一小时 podcast,用时 524.79 秒,峰值报告 30.44GB,模型最多处理一小时 audio。
microsoft/VibeVoice VibeVoice 是 Microsoft 的 Whisper 风格 audio model,用于 speech-to-text,采用 MIT license,并在模型中内置 speaker diarization。Microsoft 于 2026 年 1 月 21 日发布了它,但我直到今天才试用。下面是一条 one-liner,可在 Mac 上用 uv、mlx-audio(Prince Canuma 开发)以及 17.3GB VibeVoice-ASR model 的 5.71GB mlx-community/VibeVoice-ASR-4bit MLX 转换版本运行它;这里处理的是我最近与 Lenny Rachitsky 一起录制的 podcast 的下载副本: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 因此,处理一小时 audio 用了 8 分 45 秒(在一台 128GB M5 Max MacBook Pro 上运行)。我用 .wav 和 .mp3 文件测试过,两者都能正常工作。如果省略 --max-tokens,它默认是 8192,大约够处理 25 分钟 audio。我是通过反复试错发现这一点的,然后把它增加到四倍,以确保能拿到完整的一小时。该命令报告峰值 RAM 使用量为 30.44GB,但我在 Activity Monitor 中观察到,prefill 阶段使用量为 61.5GB,generating 阶段约为 18GB。这里是生成的 JSON。其 key structure 如下:{ "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 } 由于这是一个 objects 数组,我们可以在 Datasette Lite 中打开它,这样更容易浏览。有意思的是,那个 Datasette Lite 视图显示了三位 speakers——它在对话中识别出了 Lenny 和我,另外还把 Lenny 用于额外 intro 和 sponsor reads 的声音识别成了一个单独的 Lenny!VibeVoice 最多只能处理一小时 audio,因此运行上面的命令只转录了 podcast 的前一小时。要转录更长的内容,你需要拆分 audio,最好保留一分钟左右的 overlap,这样可以避免 split point 处部分转录词带来的错误。之后还需要在多个 segments 之间对齐已识别的 speaker IDs。Tags: microsoft, python, datasette-lite, uv, mlx, prince-canuma, speech-to-text