跳转到内容

实时听写与字幕

openasr live 从麦克风或系统音频中采集声音,经过 VAD(语音活动检测)分句后,逐句输出实时转写结果。支持流式中间结果的模型包还会在句内增量推送部分识别文本。

bash
openasr live

默认采集系统默认麦克风,以 text 格式逐行输出最终转写结果。按 Ctrl-C 结束会话。

--source 控制采集来源,可选 mic(默认)或 system(系统回环音频):

bash
openasr live --source system

使用 --list-devices 查看当前可用的输入设备及配置,然后用 --device 指定设备名称:

bash
openasr live --list-devices
openasr live --device "USB Microphone"

如果需要在没有物理麦克风的环境下测试或演示,可以用 --input-file 从本地音频文件模拟实时流输入(支持 WAV、MP3、MP4、M4A、WEBM、FLAC、OGG):

bash
openasr live --input-file recording.wav --format jsonl

-f/--format 支持两种格式:

  • text(默认):每句一行,适合人工阅读和终端查看。
  • jsonl:每行一个 JSON 对象,适合管道传入其他工具做进一步处理。
bash
openasr live --source mic --max-seconds 5 --format jsonl

VAD 决定了何时开始和结束一句话。以下参数可以根据实际场景做精细调整:

参数说明
--frame-duration-ms <10|20|30>实时帧时长,默认 20 毫秒
--speech-start-ms <N>判定”开始说话”所需的语音持续时长
--speech-stop-ms <N>判定”停止说话”所需的静音持续时长
--pre-roll-ms <N>VAD 触发前保留的音频时长
--max-utterance-ms <N>单句最大时长,超过后强制切断
--no-speech-timeout-ms <N>初始无语音超时
--energy-threshold <F>MVP VAD 的能量阈值

典型调优场景:

  • 会议/对话:适当增大 --speech-stop-ms,避免说话人短暂停顿导致句子被过早切断。
  • 快速指令:减小 --speech-start-ms,降低首字延迟。
  • 嘈杂环境:提高 --energy-threshold,减少误触发。

对于声明了 streaming-partial 能力的模型包,openasr live 会在句内增量推送部分识别文本。两个参数控制推送节奏:

参数说明默认值
--partial-interval-ms <N>两次中间结果之间的最小间隔300 ms
--partial-window-ms <N>用于生成中间结果的滑动窗口时长3000 ms

--diarize 为最终转写结果标注匿名说话人标签(SPEAKER_00SPEAKER_01……):

bash
openasr live --diarize

首次使用时,如果本地尚未安装所需的 WeSpeaker 说话人嵌入能力包,传入 --diarize 即视为同意自动安装。

openasr transcribe 不同,openasr live--diarize 没有 --speakers <n> 伴随参数。说话人登记等高级功能详见说话人分离参考

--save 在会话结束时将完整转写记录导出到文件,文件扩展名决定导出格式:

bash
openasr live --save session.srt

支持 .txt.json.md.srt.vtt 五种格式。

搭配选项:

  • --save-join-segments:导出时将所有字幕段落合并为一个完整段落。
  • --save-suggest-title:根据转写文本自动建议一个保守的标题。

openasr live 可以将字幕实时写入一个本地文本文件,配合 OBS 的「文本(GDI+)」源的「从文件读取」功能,即可在直播画面中叠加实时字幕:

bash
openasr live --obs-text-file ~/captions.txt --obs-max-lines 2
参数说明
--obs-text-file <PATH>字幕文本文件路径,OBS 文本源指向此文件
--obs-max-lines <N>文件中保留的最大行数,默认 3
--obs-clear-on-start会话开始时清空文件
--obs-clear-on-stop会话结束时清空文件

会话结束时,可以同时输出一份 Markdown 格式的会话笔记:

bash
openasr live --markdown-note ~/notes/meeting.md --markdown-suggest-title
参数说明
--markdown-note <PATH>Markdown 笔记输出路径
--markdown-append追加内容而非覆盖文件
--markdown-title <STR>手动指定笔记标题
--markdown-suggest-title根据转写文本自动建议标题
参数说明
--max-seconds <N>采集指定秒数后自动停止
--max-utterances <N>完成指定句数后自动停止

openasr live 使用 native 后端在本机运行模型,通过 -m/--model 指定模型 ID(也可通过环境变量 OPENASR_MODEL 设置),或通过 --model-pack 直接指定本地 .oasr 模型包文件。

如果指定的模型尚未安装,CLI 会在交互式终端中弹出确认提示;传入 -y/--yes(或设置环境变量 OPENASR_ASSUME_YES)可跳过确认直接下载。传入 --offline(别名 --no-pull,或设置环境变量 OPENASR_OFFLINE)则完全禁止下载——模型未安装即报错退出。

OpenASR 不包含遥测,不会回退到云端,不会静默下载任何内容。native 后端采用 fail-closed 设计:遇到不支持的输入或路径时直接报错,而非编造部分结果。

可用模型见模型页面,CLI 完整参考见 CLI 文档。服务端的 WebSocket 流式转写接口(GET /v1/audio/realtime)与 openasr live 共享相同的事件体系(VAD、部分/最终转写片段、语音边界),详见本地 API 文档