从一个文件中切除每个屏幕形状的说明。
现场演示 ・ 快速启动 ・ CLI ・ 玩家 ・ 格式 spec ・ 基准测试
一个.overtone.json 文件在 16: 9 和一个 9: 16 播放器(社会风格包),在
Blender开机电影"钢之泪".
电影:(CC)Blender Foundation QQ mango.blender.org,CC BY 3.0.
Overtone 存储每个口语单词一次,带有其时间和扬声器,以及削减标题对每个图片形状分别显示:默认情况下16:9和9:16,或者您命名的任何方面。 一个CLI通过你的字幕,音频或视频制作文件。 一个Video.js插件显示,切口适合玩家。
重新剪辑您已有的字幕。 离线,无 API 密钥,无 ffmpeg (节点 22. 12 或更新 ):
卷曲-O https://download.blender.org/demo/movies/ToS/subtitles/TOS-en.srt
npx 超音速捕捉器重剪 TOS - en.srt
你得到TOS -en.overtone.json,. 横向和。 垂直的.vtt和.srt文件,和一份笔录。 单词
时间根据提示来估计。
从它的音频上记录一段视频。 这需要 ffmpeg 和 API 密钥( OpenAI 和 Azure AI Speech 默认);
透视提供者列出变量). -干燥运行的显示声音去的地方和估计费用,并发送
无:
npm 安装 - g 显式封装
overtone translacy talk.mp4 - 语言 en - context "关于城市自行车的小组" - 干运行
超Tone translacy talk.mp4 - language en - context "关于城市自行车的小组"
- 本地运行则改为下线,有whisper.cpp和Ollama.
在视频中显示标题( J):
从video.js进口视频;
导入“video.js/dist/video-js.css”;
导入“ videojs- overtone ”;
导入“ videojs- overtone/ 主题/ base. css”;
导入“ videojs- overtone/ 主题/ clean.cs”;
视频('my-video'). overtone({ src:'talk.overtone.json'});
大多数标题都剪切一次,一个屏幕,通过将每行填充到长度限制。 16:9的剪接太宽了,一个9:16的电话视频,线条以"the"或"of"结尾,两个演讲者共用一个字幕。
Overtone将每个屏幕形状的切片保存在一个文件中。 削减遵循阅读规则:行避免以弱词结尾,姓名和数字在一起,每个发言者都得到自己的标题,暂停成为线条或标题中断,因此听不到犹豫的观众可以阅读。
NASA的一次采访中同样的话语和时间,切换为9:16(22个字符×2行):
为什么新格式代替WebVTT或TTML:这些商店完成提示,所以玩家只能重新包装。
. overtone.json存储每个单词一次,加上指向这些单词的任何编号的削减。 导出 WebVTT 或 SRT 每张
需要标准文件时剪切。
何不WhisperX,稳定Ts或主持演讲的API:他们给出好的言语和时间,往往更便宜。 超音速新增
顶部的字幕布局。 overtone recut re-削减他们的SRT或WebVTT输出,所以可以保留你的引擎。
- 听证会。 几个引擎听到音频。 文本听觉(gpt-transis)给出词;时间
助听(Azure AI Speech)提供单词时间和发音。 使用 ELEVENLABS API KEY 设置,ElevenLabs Scribe 新增 a
第二次听审。
- 文本投票。 在听证会上意见不一的地方,文本模型会重新收听片段,LLM选择者会选择单词。
- 编辑。 LLM用你的上下文,词汇表和它自己的世界知识(它将"Telecom Cell"修正为"Telkomsel"而不被告知)来校正错误的单词,名称和名词,给扬子贴标签,并标记关键词。 编辑它是不是确定去审查列表让你逐耳检查。
-削减线一个版本的规则为每个剖面图设置了削减的行。 相同的词和规则,相同的标题。
LLM从不设置时间戳:每个词都会从引擎中抽取时间。 代码只检查LLM变化的结构。 输油管的运行方式每一步都有。
在风格画廊中看到每个风格包。
小而大众。 方法、表格和说明:长椅/RESULTS.md和长椅/头盔/RESULTS.md。
- 换行(3个英语片段,20.8分钟,16:9,规则设置1):Overtone的换行结束0.3%在"the","of"或"and"等词上,之后没有暂停。 将线填充到限制时,ElevenLabs的SRT出口在28.8%的间歇时为16.1%。 超过显示全部47位演讲者0.5–1.5的暂停作为休息;另外两个显示28%和72%.
- 文本(6个短片,用4种语言制作,20分钟,3跑,2026-10-23):在每台引擎返回文本的5个短片上,文字错误率为5.3%,而单gpt-tranciste就6.2%,单Azure Speech就7.7%.
- 沉默失败:gpt - 特兰茨在每跑一次的静静会议中都不归还任何东西。 Overtone用其他引擎听到的语言重试,得分32.8%,而仅Azure Speech就得分42.9%.
- 费用:这些运行中每个音频分钟0.023美元-0.025美元,其中0.029美元为ElevenLabs Scribe(清单价格)。
- 英语和荷兰语有全线切割和数字规则。 德语,法语,西班牙语,意大利语和葡萄牙语都有语言检测;其他语言则有中性规则。 见语言。
- 在没有空格的脚本(中文,日文,泰文)中,一个"字"是一个完整的短语:每个短语一次,只有短语之间的线断。
- 没有翻译,没有[音乐]等音标,没有GUI编辑器。 媒体最多2小时。
- CLI指南和CLI参考:每个命令,选项和输出文件。
- 玩家指南:选项,风格包和主题。
- 格式规格。
- Agent技能用于Claude Code和Codex:将技能/overtone复制到.claude/技能/.
- 贡献:语言包、风格包和提供者。 AI编码agents以AGENTS.md开头。
本文由 AI图鉴自动抓取并翻译,版权归原作者所有;如需查看原文请点下方链接。
Captions cut for every screen shape, from one file.
Live demo · Quick start · CLI · Player · Format spec · Benchmark
One .overtone.json file in a 16:9 and a 9:16 player (social style pack), on the
Blender open movie Tears of Steel.
Film: (CC) Blender Foundation | mango.blender.org, CC BY 3.0.
Overtone stores each spoken word once, with its time and speaker, and cuts captions separately for each picture shape: 16:9 and 9:16 by default, or any aspect you name. A CLI makes the file from your subtitles, audio or video. A video.js plugin shows the cut that fits the player.
Re-cut subtitles you already have. Offline, no API key, no ffmpeg (Node.js 22.12 or newer):
curl -O https://download.blender.org/demo/movies/ToS/subtitles/TOS-en.srt
npx overtone-captions recut TOS-en.srt
You get TOS-en.overtone.json, .horizontal and .vertical .vtt and .srt files, and a transcript. Word
times are estimated from the cues.
Caption a video from its audio. This needs ffmpeg and provider API keys (OpenAI and Azure AI Speech by default;
overtone providers lists the variables). --dry-run shows where the audio goes and the estimated cost, and sends
nothing:
npm install -g overtone-captions
overtone transcribe talk.mp4 --language en --context "Panel about urban cycling" --dry-run
overtone transcribe talk.mp4 --language en --context "Panel about urban cycling"
--local runs offline instead, with whisper.cpp and Ollama.
Show the captions in video.js:
import videojs from 'video.js';
import 'video.js/dist/video-js.css';
import 'videojs-overtone';
import 'videojs-overtone/themes/base.css';
import 'videojs-overtone/themes/clean.css';
videojs('my-video').overtone({ src: 'talk.overtone.json' });
Most captions are cut once, for one screen, by filling each line to a length limit. The 16:9 cut is too wide for a 9:16 phone video, lines end on "the" or "of", and two speakers share a caption.
Overtone keeps a cut per screen shape in one file. The cuts follow reading rules: lines avoid ending on weak words, names and numbers stay together, each speaker gets their own caption, and pauses become line or caption breaks, so viewers who cannot hear a hesitation can read it.
The same words and times from a NASA interview, cut for 9:16 (22 characters × 2 lines):
Why a new format instead of WebVTT or TTML: those store finished cues, so a player can only rewrap them.
.overtone.json stores each word once, plus any number of cuts that point to those words. Export WebVTT or SRT per
cut when you need a standard file.
Why not WhisperX, stable-ts or a hosted speech API: they give good words and times, often cheaper. Overtone adds
the caption layout on top. overtone recut re-cuts their SRT or WebVTT output, so you can keep your engine.
- Hearings. Several engines hear the audio. The text hearing (gpt-transcribe) gives the words; the timing
hearing (Azure AI Speech) gives word times and speakers. With ELEVENLABS_API_KEY set, ElevenLabs Scribe adds a
second hearing.
- Text vote. Where the hearings disagree, the text model re-listens to the snippet and an LLM chooser picks the words.
- Editor. An LLM corrects misheard words, names and terms using your context, your glossary and its own world knowledge (it fixes "Telecom Cell" to "Telkomsel" without being told), labels speakers and marks key words. Edits it is unsure about go on a review list for you to check by ear.
- Line cuts. A versioned rule set cuts the lines for each profile. Same words and rule set, same captions.
The LLM never sets timestamps: each word takes its time from the engines. Code checks only the structure of the LLM's changes. How the pipeline works has every step.
See every style pack in the style gallery.
Small and public. Method, full tables and caveats: bench/RESULTS.md and bench/captions/RESULTS.md.
- Line breaks (three English clips, 20.8 minutes, 16:9, rule set 1): 0.3% of Overtone's breaks end on a word like "the", "of" or "and" with no pause after it. Filling lines to the limit does that at 28.8% of its breaks, ElevenLabs' SRT export at 16.1%. Overtone shows all 47 of the speakers' 0.5–1.5 s pauses as a break; the other two show 28% and 72%.
- Text (six clips in four languages, 20 minutes, 3 runs, 2026-10-23): on the 5 clips where every engine returned text, word error rate 5.3%, against 6.2% for gpt-transcribe alone and 7.7% for Azure Speech alone.
- Silent failures: gpt-transcribe returned nothing for a quiet meeting in every run. Overtone retried with the language the other engines heard and scored 32.8%, against 42.9% for Azure Speech alone.
- Cost: $0.023–0.025 per audio minute in those runs, $0.029 with ElevenLabs Scribe (list prices).
- Full line-cutting and number rules exist for English and Dutch. German, French, Spanish, Italian and Portuguese have language detection; other languages get neutral rules. See Language.
- In scripts without spaces (Chinese, Japanese, Thai), a "word" is a whole phrase: one time per phrase, and line breaks only between phrases.
- No translation, no sound tags such as [music], no GUI editor. Media up to 2 hours.
- CLI guide and CLI reference: every command, option and output file.
- Player guide: options, style packs and theming.
- Format specification.
- Agent Skill for Claude Code and Codex: copy skills/overtone into .claude/skills/.
- Contributing: language packs, style packs and providers. AI coding agents start with AGENTS.md.
Auto-fetched and translated by AI Atlas. All rights belong to the original author.