2026年6月2日星期二

用 Whipser 模型生成播客文字稿

上一篇文章里,我说到我在做自己的 LLM Wiki,那我肯定是要把我参与主持的《牛油果烤面包》播客收纳进去的。问题是,播客的内容主要是音频,而我写的所有 skills 都是用来处理基于 Markdown 的文本的,那我要如何收纳音频呢?

跟 ChatGPT 和 Claude 讨论之后,得到的方案是:用 OpenAI 开源的 Whipser 模型,输入音频生成文字稿。在 macOS 上面,只需要用 brew install whisper-cpp 安装 Whipser,然后就可以调用 whisper-cli 来处理音频文件。听起来很简单,但实际操作肯定是要踩坑的。

large-v3 模型会产生 loop

Whisper 当下有两个主流模型,large-v3large-v3-turbo。前者大一些,跑起来慢一些,但效果更好一些;后者小一些,速度快两三倍,但输出精度差一些。我让 Claude Code 帮我写实际调用 whisper-cli 的代码,让它分别测试这两个模型的效果,它发现 large-v3 确实好一些,所以我们先选择了它,尽管处理每一期播客都要花 30 分钟。

处理了几期播客后,Claude Code 发现输出的文字稿存在 loop 的问题。意思是,同一句话在音频中只出现了一次,但模型听到了多次,所以同一行文字在文字稿中重复了多次。如果不是 Claude Code 在帮我看着文字稿输出的结果,我自己肯定不会留意到这样的问题(几百上千行的文字稿没办法看)。它留意到这个问题后,跟我解释说更大的模型更容易出现 loop 的问题,建议降级到 large-v3-turbo 试试,降级后问题确实消失了。

最后我跟 Claude Code 做了一个决定:每一期的音频先用 large-v3 处理,等处理完了再分析文字稿,如果同一行内容连续出现 5 次或以上,那就算做 loop,然后用 large-v3-turbo 重新生成文字稿。我们用这个方法把剩余的音频都处理了,大概有 1/3 的文字稿因为存在 loop 而需要重新生成。

Whipser 把我的名字听成了「Kat」

我参与录制的节目,开头肯定会有一句「大家好,我是 Cat」,然后 Whipser 会把「Cat」听成了「Kat」。我问 Claude Code 怎么办,它发现 Whipser 可以输入一个文本的 prompt,于是我就把播客的核心信息写到 prompt 里面去,包括我名字的正确拼写:

《牛油果烤面包》播客聊科技发展趋势,聊各行业来龙去脉。我们坐标硅谷,邀请第一线的资深专家分享给大家听!主持人:Cat、斯图亚特、Sean、Vindy、David。

在这段 prompt 的帮助下,Whipser 识别我名字的正确率提高了,虽然还是不完美。

既然可以用文本 prompt,我就把每一期节目的文字描述也追加进 prompt 里,这样 Whipser 听到有关信息能够更好地识别出来。我粗略地看了一下,效果还不错。