做视频分发的小伙伴,大概率都经历过这种“强迫症发作”的瞬间:
你精心做好了一个 16:9 的横屏视频,字幕排版漂漂亮亮。结果当你把它发到抖音、视频号或 YouTube Shorts(9:16 竖屏)时,字幕的断行彻底崩了——
一行字硬生生断在“the”或者“of”后面;两个不同说话人的台词被挤在了同一行;原本横屏两行能显示完的句子,在竖屏里变成了遮天蔽日的“四行大字”,直接挡住了画面主体。
为了解决这个问题,很多人只能苦哈哈地做两版字幕,或者在剪辑软件里手动一行行调。
今天,必须给你安利一款堪称 “字幕界降维打击” 的开源神器——Overtone。它不仅能帮你生成字幕,更能让你的字幕在任何屏幕比例下,都保持最优雅、最符合人类阅读习惯的排版。

1. 魔法断行:告别“按字数硬切”
传统的字幕工具(甚至很多 AI 字幕工具),断行逻辑非常简单粗暴:数够 20 个字符,或者到了屏幕边缘,直接“咔嚓”切断。这就导致了大量反人类的“弱词断行”。
Overtone 引入了一套版本化的语义断行规则集:
- 绝不断在弱词上:行尾绝对不会出现“the”、“of”、“and”等悬空词。
- 保持语义完整:人名、数字、专有名词会被死死绑在一起,绝不拆分。
- 尊重说话人与停顿:每个说话人拥有独立的字幕行;哪怕是 0.5 秒的微小停顿,也会被识别为换行点,让观众有喘息的空间。
看看这组来自 NASA 采访的对比,治愈感拉满:
| 传统工具(硬切到长度限制) | Overtone(智能语义断行) |
|---|---|
| the 2004 class. Jim, thank you for joining | Jim, thank you for joining us. |
| us. It’s great to be here, Allard. Thanks. | It’s great to be here, Allard. Thanks. |
| through you? Okay. A little about me: I | Okay. A little about me: |
| grew up in Eugene, Oregon. I joined the | I grew up in Eugene, Oregon. |
| I joined the Astronaut Corps |
2. 底层格式革命:为什么不用 SRT 或 WebVTT?
你可能会问,既然只是排版好看点,我手写 SRT 不行吗?
Overtone 的野心不止于此。传统的 SRT 或 WebVTT 存储的是 “已经排好版的句子(Prompt)”,播放器只能傻乎乎地按原样显示,遇到屏幕变窄,就只能粗暴地重新换行。
Overtone 创造了一种全新的 .overtone.json 格式。
它的核心逻辑是:将每个“词”及其“时间戳”和“说话人”只存储一次。 然后,在生成文件时,它为 16:9、9:16 甚至你自定义的任何比例,单独计算并存储一套“剪切(Cut)”方案。
在前端,配合官方的 video.js 插件,播放器会根据当前窗口的宽高,自动调用最适合的那套字幕剪切方案。一次转录,多端完美自适应!
3. AI 工作流:LLM 纠错,但绝不碰时间轴
现在用 AI 生成字幕最怕什么?大模型喜欢“幻觉”,经常把时间轴搞乱,或者自作主张地修改原话。
Overtone 设计了一套极其严谨的“听审与投票”流水线:
- 多引擎听写:同时调用 OpenAI、Azure AI Speech 甚至 ElevenLabs 进行识别。
- 文本投票:遇到识别不一致的地方,切片交给 LLM 重新听并挑选最准确的词。
- LLM 上下文纠错:利用 LLM 的世界知识修正专有名词(比如把听错的“Telecom Cell”自动修正为印尼电信巨头“Telkomsel”),并标记说话人。
- 🛡️ 铁律:LLM 绝不碰时间戳。每个词的时间戳死死绑定在底层语音引擎返回的数据上,代码只检查 LLM 修改的文本结构,彻底杜绝了 AI 字幕“音画不同步”的绝症。
4. 抄作业时间:极客与创作者怎么用?
Overtone 提供了极其强大的 CLI(命令行)工具,无论你是想处理已有字幕,还是从头生成,都只需一行命令。
场景 A:我已经有 SRT 字幕了,想重新排版
不需要 API,不需要 ffmpeg,纯离线重新计算排版:
npx overtone-captions recut my_video.srt
瞬间生成 .overtone.json 以及适配横屏/竖屏的 .vtt 和 .srt 文件。
场景 B:从音视频直接生成完美字幕
支持调用云端 API,也支持完全本地离线运行(使用 whisper.cpp + 本地 Ollama):
# 预估成本(不实际发送)
overtone transcribe talk.mp4 --language en --context "关于城市骑行的圆桌派" --dry-run
# 本地离线运行(保护隐私,零成本)
overtone transcribe talk.mp4 --language en --local
场景 C:前端开发者集成
在你的 Web 播放器中引入 video.js 插件,加载 .overtone.json,还能套用官方提供的 5 种绝美样式包(clean、social、minimal 等):
import videojs from 'video.js';
import 'videojs-overtone';
import 'videojs-overtone/themes/clean.css';
videojs('my-video').overtone({ src: 'talk.overtone.json' });
5. 避坑与局限性提示
虽然 Overtone 极其强大,但在使用前也需要了解它的边界:
- 语言支持:目前最完美的语义断行和数字规则针对英语和荷兰语。中、日、韩等没有空格的文字,它会将“整个短语”视为一个词,换行只能在短语之间进行。
- 功能聚焦:它专注于“转录、排版和校对”,不支持翻译,也不会生成
[音乐]、[掌声]等声音标签。 - 时长限制:目前处理的媒体文件最长支持 2 小时。
无论你是需要批量处理短视频的自媒体人,还是追求极致体验的前端开发者,这个开源项目都值得你立刻 Star 并试玩。


