关于 rostrum
rostrum 是面向演讲者和活动团队的本地命令行工具,用于审核并清理演讲录音。它检测可能的重录、重复、停顿等剪辑点,再渲染并验证成片;默认要求先审核剪辑点。
主要功能
- 01检测重录、重复、停顿和静音
- 02在 HTML 页面审核并调整剪辑点
- 03使用 ffmpeg 渲染逐帧精确的剪辑
- 04验证音视频、解码和同步
- 05处理分段演讲及活动文件夹
- 06通过 MCP 服务控制任务
适用场景
- 01删除单次录制演讲中的重录片段
- 02审核和编辑多文件录音的剪辑点
- 03清理整场活动的录音
- 04让 Agent 准备剪辑点供人工审核
MCP 相关
运行 `rostrum mcp` 可通过 stdio 启动 MCP 服务。Agent 可调用其命令,耗时步骤以可轮询任务处理;文档所述流程要求渲染前先审核剪辑点。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
11收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| paths | array | 是 | |
| engine | any | 否 | |
| project_dir | string | 是 |
详细介绍
rostrum
无论是单个视频还是整场活动,都能手动或通过 Agent 清理演讲录音。 rostrum 可以找到重录、重拍、重复内容和静音片段,向你展示每处剪辑及其原因,然后使用 ffmpeg 渲染并检查结果。一切都在你的设备上运行。

一段 58 秒的合成演示演讲。终端显示实际输出,并精简为主要内容。
一镜到底录制演讲,意味着要重说句子、重做幻灯片操作和点击操作。手动剪辑要花上好几个小时,一个糟糕的拼接就会毁掉一段视频。rostrum 会根据证据为每处剪辑提出建议,你可以批准或调整,然后它会进行帧精确拼接,并验证每处拼接的同步情况。
快速开始
uv tool install rostrum
rostrum init talk.mp4
pipx install rostrum 也可以。
你还需要 ffmpeg(winget install Gyan.FFmpeg、brew install ffmpeg、apt install ffmpeg)。
init 会完成整个初步处理:
- 探测文件,并使用默认设置写入
rostrum.json; - 使用本地语音引擎转录(首次运行会下载模型,大小约为 480 MB);
- 查找剪辑点:口头提示词(“redo”“stop”“restart”)、重拍、重复内容、长时间停顿、开头和结尾的静音片段,以及难以辨认或未转录的语音,供你试听;
- 生成
review.html,你可以播放每处拼接、切换保留或剪除,并微调边界。
在你看到剪辑点之前,不会进行任何剪辑。
rostrum plan会列出所有剪辑点和预计时长。- 审核剪辑点之前,
render会拒绝执行:你可以使用rostrum decide审核,也可以从页面保存文件后再导入。--yes可跳过此检查。 - 页面会保存
<talk>-decisions.json。导入此文件不会撤销较新的决定:对于每个剪辑点,较新的决定会优先。 - 源文件不会被修改,输出文件也不会被覆盖。
rostrum plan # every cut, its reason, and the expected output length
rostrum decide <cut-id> keep # or: cut, with --start/--end to move its edges
rostrum decide --import talk-decisions.json # apply what you saved from review.html
rostrum render # frame-accurate render into <talk>.rostrum/renders/render-N/
rostrum verify --mode full # checks the newest render: frames, audio, decode, A/V sync at every join
rostrum map 23:30 --from render-1 # a time in the edited video -> the source time
直接运行 rostrum 会显示项目状态,运行 rostrum doctor 会检查你的设置。
预期效果
以下数据来自一段 60 分钟的一镜到底演讲,仅使用 CPU 运行(8 核,small.en):
- 速度:
- 首次处理:约 11 分钟;
- 渲染:约 4 分钟;
- 完整验证:约 1.5 分钟。
- **准确率:**与演讲者的最终剪辑相比,标记为
auto的剪辑点覆盖了 69% 的删减时长,其中 95% 的删减确实应该删除。加入建议的剪辑点后,覆盖率提升至 90%。审核可以弥补其余差距,这也是默认启用审核的原因。
为此进行录制
- 如果说错了,就说 “redo”(或“stop”“restart”),停一秒,然后从句子开头重新说。
- 重新做幻灯片操作或点击操作也没问题:错误操作和重新操作看起来就像其他重拍一样。
- 继续录制。单独文件越少,审核越容易;使用多个文件也可以。
单场演讲、多个文件或整场活动
rostrum init talk-part1.mp4 talk-part2.mp4 # one talk recorded in parts: one timeline, one output
rostrum init talks/ # one talk per file; *-part1/*-part2 files are grouped
文件名以 -part1、-part2 等结尾的文件会合并为一场演讲(也可以使用 _ 或空格;设置 init.partPattern 可更改规则)。其他每个文件都会作为单独的一场演讲处理。
各个分段会作为同一条时间线进行分析,因此,即使在一个文件末尾开始重说、并在下一个文件中再次说出,也能识别出来。一场活动共用一组设置(引擎、提示词、渲染设置、响度目标、命名),任何一场演讲都可以覆盖其中任意设置。
配置所有内容
设置采用分层的纯 JSON 格式,后面的设置会覆盖前面的设置:
- 内置默认值;
~/.rostrum/config.json,你的默认设置;rostrum.json,活动或演讲文件;- 命令行标志。
每个阈值、词表、引擎和渲染选项都是一个键,发布的架构可为编辑器提供自动补全。rostrum config 会显示每个键的生效值及其来源。请参阅 examples/rostrum.example.json。
{
"$schema": "https://raw.githubusercontent.com/girishkvs/rostrum/main/src/rostrum/schema/rostrum.schema.json",
"defaults": {
"cues": { "words": ["redo", "stop", "restart"] },
"pauses": { "maxSec": 2.0, "keepSec": 0.5 },
"render": { "crf": 18, "name": "{speaker}-{title}" }
},
"talks": [
{ "id": "keynote", "speaker": "Jane Doe", "title": "Keynote", "sources": ["part1.mp4", "part2.mp4"] }
]
}
每个检测器都有一个级别:
auto:显示时默认选中剪切。propose:显示时默认选中保留。off:不运行。
| 检测器 | 查找内容 | 默认值 |
|---|---|---|
| 口头提示词 | “redo”“stop”“restart”;剪切回重新开始的位置 | auto |
| 重录 | 短时间内再次说出同一句话;“换了一个词又说了一遍”只会作为建议 | 匹配度高时为 auto,否则为 propose |
| 重复 | “now, now”或重新开始的短语 | propose |
| 停顿 | 超过 maxSec 的静音,每侧保留 keepSec | auto |
| 开场和收尾 | 开头和结尾的静音 | auto |
| 话外音 | “is this recording?” 及类似的插话 | propose |
| 不清晰内容 | 含混不清、幻觉生成或未转录的语音 | propose |
| 语气词 | “um”“uh” | off |
计划在 0.2 版本中加入基于演示文稿的幻灯片感知检查。
语音引擎
| 引擎 | 用途 |
|---|---|
faster-whisper | 默认引擎。在本地运行,可使用 CPU 或 GPU。 |
command | 可使用任何能输出 words JSON、SRT 或 VTT 的程序,例如 whisper.cpp 或供应商的 CLI。 |
import | 导入已有的转录文本。 |
command 和 import 引擎无需额外设置即可运行。第三方引擎可以通过 rostrum.engines 入口点注册,并指定一个 rostrum.engines.SpeechEngine 子类;rostrum 会将其构建为 Engine(settings, tools, report)。语音工作进程会根据 CPU 和内存自动确定数量(speech.workers: "auto");也可以设置具体数值来覆盖。
**默认设置为英语:**使用 small.en 模型以及提示词、语气词和话外音词表。要使用其他语言,请将 speech.model 设为 small 等多语言模型,设置 speech.language,并替换词表。
在 Agent 中使用
除 mcp 外,每条命令都接受 --json。rostrum mcp 会通过 stdio 运行 MCP 服务;耗时较长的步骤会作为任务运行,供 Agent 轮询。
一键安装(MCP 服务和 Agent 技能):
| Host | 安装方式 |
|---|---|
| Claude Code | /plugin marketplace add girishkvs/rostrum,然后运行 /plugin install rostrum@rostrum |
| Copilot CLI | copilot plugin install girishkvs/rostrum |
| Gemini CLI | gemini extensions install https://github.com/girishkvs/rostrum |
| Claude Desktop | 打开 最新版本中的 rostrum-<version>.mcpb |
| Cursor |
也可以手动添加服务。 uvx 会运行 PyPI 软件包,因此无需安装其他内容:
| Host | 添加服务 |
|---|---|
| Copilot CLI | 运行 /mcp add,然后将名称设为 rostrum、命令设为 uvx、参数设为 rostrum mcp |
| Claude Code | claude mcp add rostrum -- uvx rostrum mcp |
| VS Code | 依次选择 MCP: Add Server、Command (stdio),然后输入 uvx rostrum mcp |
| Codex CLI | 在 ~/.codex/config.toml 中添加 [mcp_servers.rostrum],并设置 command = "uvx" 和 args = ["rostrum", "mcp"] |
| Gemini CLI、Cursor | 在 ~/.gemini/settings.json 或 ~/.cursor/mcp.json 中添加 "mcpServers": { "rostrum": { "command": "uvx", "args": ["rostrum", "mcp"] } } |
首次启动时会下载 rostrum 的依赖项,耗时可能超过主机等待服务启动的时间。请先运行一次 uvx rostrum doctor。
然后提出请求:“清理 talk.mp4,并展示所有你不确定的地方。”
skills/rostrum/SKILL.md 会告知 Agent 以下规则:
- 渲染前先展示剪辑内容;
- 询问不确定之处;
- 在你提出要求时,导入你从审核页面保存的内容(
import_decisions); - 只有在你提出要求后才进行渲染(随后 Agent 会传入
confirmed)。
mcp-pacemaker 可以托管服务,并使其在不同会话间保持运行。将以下条目添加到 ~/.mcp-pacemaker/servers.json;保存文件后,pacemaker 会重新加载:
{ "rostrum": { "command": "uvx", "args": ["rostrum", "mcp"] } }
verify 的检查内容
- **时长:**输出长度与保留时长的误差不超过一帧。
- **视频:**帧连续,且步长恒定。
- **音频:**数据包连续,没有间隙或重叠。
- **解码:**完整解码成功,且无错误。
- **剪辑接点:**每个接点的时间戳连续。
- **音视频偏移:**在接点处与源文件进行比对;
fast模式下抽样检查,full模式下检查每个接点。
要求
- Python 3.11+ 和 ffmpeg/ffprobe 6.1 或更高版本(CI 使用 6.1 和 9.0)。如果它们不在 PATH 中,请设置
ROSTRUM_FFMPEG/ROSTRUM_FFPROBE,或在rostrum.json中设置defaults.tools.ffmpeg/defaults.tools.ffprobe。 - Windows、macOS 和 Linux。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。