从一个文件中切除每个屏幕形状的说明。
活地演示 · 快速启动 · CLI · 玩家 · 格式 spec · 基准测试
1个.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 (Node.js 22.12 或更新):
卷曲 - O https://download.blender.org/demo/movies/ToS/subtitles/TOS-en.srt (中文(简体) ).
npx 重剪 TOS- en. srt
你得到TOS -en. overtonone.json,. 横向和。 垂直.vtt和.srt文件,和一份笔录。 单词
时间由提示来估计。
从它的音频中描述一段视频。 这需要ffmpeg和提供者API密钥(默认的OpenAI和Azure AI Speech;
透通提供商列出变量). -干燥运行的显示音频去的地方和估计费用,发送
无:
npm 安装 - g 显式封装
超音速 translacy talk.mp4 - language en - context "关于城市自行车的小组" - 干跑
超音速 translatis talk.mp4 - 语言 en - context "关于城市自行车的小组"
- 本地运行的离线,代之以whisper.cpp和Ollama.
在视频中显示标题( J):
从“ video.js” 导入视频;
导入“video.js/dist/video-js.css”;
导入“ videojs- overtone ”;
导入“ videojs- overtone ”;
导入“ videojs- overtone/ 主题/ clean.cs”;
videojs('my-video').overtone({ src: 'talk.overtone.json' });
多数标题被剪切一次,用于一个屏幕,将每行填入长度限制。 16:9的剪接为9:16的电话视频取而代之太宽了,线条以"the"或"of"结尾,两位演讲者共享一个字幕。
Overtone将每个屏幕形状的切口保存在一个文件中。 削减遵循了阅读规则:行会避免以弱词作结尾,名和数保持在一起,每个发言者都会得到自己的标题,而暂停会变成行或标题中断,因此听不到犹豫的观众可以阅读。
美国国家航空航天局的一次采访中同样的话语和时间,剪接为9:16(22个字符×2行):
为什么新格式代替了WebVTT或TTML:这些商店完成提示,所以玩家只能重新包装。
.overtonone.json存储每个单词一次,加上指向这些单词的任何编号的削减。 导出 WebVTT 或 SRT 每张
需要标准文件时切入。
为什么WhisperX, squit-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"或"并"等单词结束,后无暂停。 将行填充到限制值时,ElevenLabs的SRT出口在28.8%的间隔值为16.1%。 超音速显示全部47个扬声器的0.5–1.5s暂停为休息;另外两个显示为28%和72%.
- 文本(以四种语言制作的6个片段,20分钟,3跑,2026-10-23):在每台引擎返回文本的5个片段上,文字出错率为5.3%,而单是gpt-transis就为6.2%,单是Azure Speech就为7.7%.
静静的失败:gpt -trancis在每跑一次的静静会中,都不归还任何东西。 Overtone用其他引擎所听到的语言重试,得分32.8%,而仅Azure Speech就得分42.9%.
- 费用:这些运行中每发音频分钟0.023-0.025美元,其中0.029美元为ElevenLabs Scribe(清单价格)。
- 英语和荷兰语有全线切割和数字规则。 德语,法语,西班牙语,意大利语和葡萄牙语有语言检测;其他语言则有中性规则。 见"语言".
- 在没有空格的脚本(中文,日文,泰文)中,"字"是一整句:每句一次,行间只分出句子。
- 没有翻译,没有[音乐]等音标,没有GUI编辑器。 媒体最多2小时。
- CLI指南和CLI参考:每个命令,选项和输出文件。
- 玩家指南:选项,风格包和主题。
- 格式规格。
- Agent技术用于Claude Code和Codex:将技能/高通复制到.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 Gem Box. All rights belong to the original author.