)
一、这篇教程解决什么问题做字幕的人常卡在同一步文字转出来了时间轴还得手工对。拖进度条、听一句、敲一个时间点返工一次就得重听一遍。这篇教程走一条可复现的动线用阿里云百炼 CLI 合成一段语音或直接用你手上的录音转写拿到词级毫秒时间戳再用词与词之间的静音间隔切出字幕条产出一份可以直接用的 SRT 文件。二、环境准备项目说明命令行工具bl阿里云百炼 CLIAPI Key在控制台密钥管理页创建地域选华北2北京创建后完整复制保存命令文档与音色/模型清单见阿里云百炼 CLIbl与阿里云百炼首页素材一段音频本教程先用合成音频演示也可直接换成自己的录音三、第一步合成一段待转写语音如果你已经有录音可以跳过这一步直接看第四步。bl speech synthesize--text今天下午三点在第二会议室开选题会记得带上周的数据报表。--voicelongcheng_v3--out通知.wav用合成音频做第一次练习的好处是原文已知转写结果可以逐字对照出现差异时能立刻判断是识别问题还是输出约定。四、第二步转写拿到词级时间戳bl speech recognize--url通知.wav--languagezh--out通知.json--url接受本地文件路径也接受音频 URL。转写全文今天下午3点在第二会议室开选题会记得带上周的数据报表。与原文对照唯一差异是三点变成3点。这属于 ASR 的数字规范化输出不是识别错误处理方式见 FAQ Q4。返回的时间结构分三层层级本轮返回用途全文整段文本校对、纪要正文句级1 段160–4440ms粗粒度打点词级16 个词每词带起止毫秒字幕 cue 边界词级时间戳节选词起(ms)止(ms)今天160400下午4006803680840………………会24802640记得29203200报表41604440注意会与记得之间2640 到 2920空了280 毫秒其余相邻词间隔为 0。这 280ms 就是原文逗号处的自然停顿也是下一步切分的依据。五、第三步用静音间隔切分字幕条切分规则顺序遍历词级数组计算相邻词间隔下一个词的起 - 当前词的止间隔 阈值本教程取250ms→ 在此断开间隔 ≤ 阈值 → 并入当前字幕条每条字幕的起止时间取该条首词的起与末词的止不要按标点切词级输出不带标点16 个词拼起来是今天下午3点在第二会议室开选题会记得带上周的数据报表逗号不在里面。也不要按句段切本教程第二轮用三句话素材“第一个议题是季度复盘。第二个议题下月选题排期。散会前记得提交周报。”实测三句被并成了一个句段标点还被规范化“复盘。第二变成复盘第二”。句段数不等于原句数。阈值怎么定见 FAQ Q3。六、第四步生成 SRT按上面规则跑出的真实产物本机文件原样1 00:00:00,160 -- 00:00:02,640 今天下午3点在第二会议室开选题会 2 00:00:02,920 -- 00:00:04,440 记得带上周的数据报表两条 cue 的断点正好落在原句逗号处那里停顿 280ms超过 250ms 阈值其余位置间隔为 0不会被切断。SRT 时间格式为HH:MM:SS,mmm由词级毫秒值换算而来不做取整到秒。七、参数表命令参数本教程取值说明bl speech synthesize--text会议通知一句待合成文本bl speech synthesize--voicelongcheng_v3音色bl speech synthesize--out通知.wav输出音频文件bl speech recognize--url通知.wav音频地址支持本地路径bl speech recognize--languagezh语种bl speech recognize--out通知.json输出结构化结果切分脚本静音阈值250ms自定义参数需按素材校准八、使用边界数字规范化三→3 这类转换是 ASR 的输出约定不是错误字幕文案要哪种写法自己定词级无标点按标点切条不成立静音间隔切分是本教程方法阈值需自校句段会并段多句素材的句段数不等于原句数别拿句段当字幕条说话人分离未实测--diarization本轮未跑素材为单说话人多人会议谁说了什么的效果不在本文结论内补充一条前提本教程素材为 TTS 合成音频干净、单说话人。真实会议录音的底噪与重叠话会改变切分表现请用自己的素材重跑并重新校准阈值。九、常见问题FAQQ1词级输出没有标点字幕条怎么切不按标点切按时间切。词级数组里每个词都带起止毫秒相邻词的间隔就是切分信号间隔大于阈值处断开间隔为 0 处保持同一条。本教程 250ms 阈值下280ms 的逗号停顿被切成断点产出 2 条 cue。字幕文案本身由该条内的词文本拼接得到需要标点的可以在后处理里按断点补。Q2为什么不能直接用句级时间戳做字幕句级粒度太粗而且句段会并段。本轮一句话素材的句级只有 1 段160–4440ms三句话素材同样只返回 1 段。一条字幕横跨 4 秒以上观众读不完拿句段当字幕条必然切错。句级适合做章节打点cue 边界应由词级推导。Q3静音阈值 250ms 怎么定换个素材还适用吗250ms 是对本教程这段素材校准出来的不是通用值。定阈值的做法是先统计素材全部相邻词间隔的分布句内间隔通常接近 0句间停顿通常几百毫秒把阈值取在两者之间即可。语速快、停顿短的素材要调小停顿多的口语和念稿要调大。换素材必须重新统计直接沿用会漏切或碎切。Q4转写把三点写成3点是识别错了吗不是。这是数字规范化输出口语数字在时间语境里被写成阿拉伯数字。字幕要口语写法就在后处理做逆映射纪要、检索类用途保留阿拉伯数字反而好解析。需要与原文逐字比对时先对两边做同一套规范化否则差异统计会被这类转换污染。Q5多人会议的录音能用这套方法吗本教程未验证。素材是单说话人合成音频--diarization说话人分离本轮没有跑因此谁说了什么的效果、多说话人重叠时的切分表现都不在本文结论内。要做多人会议请先用自己的素材实测说话人分离再决定切分策略。Q6可以直接用自己的录音文件吗可以。bl speech recognize --url接受本地文件路径跳过第三步的合成命令直接转写自己的音频即可。真实录音的底噪、口音、重叠话会影响间隔分布切分阈值需要重新校准。Q7生成的 SRT 时间为什么带三位毫秒SRT 标准时间格式是HH:MM:SS,mmm逗号后是毫秒。词级时间戳本身就是毫秒值直接换算即可不建议四舍五入到秒——本教程两条 cue 的起点分别是 160ms 和 2920ms取整到秒会让字幕与语音错位。Q8标点会被改动吗会。第二轮三句素材里“复盘。第二被规范化成复盘第二”。转写文本不能当作原文的可靠副本需要精确标点的环节要么用原文要么接受规范化结果并把规则记录下来。十、小结四步动线合成或准备录音→bl speech recognize转写 → 按静音间隔切分 → 输出 SRT。这套方法里真正解决问题的是词级毫秒时间戳它把在哪切一刀从人工听辨变成了可计算的间隔判断。跑完建议先做一件事把转写全文和原文逐字对一遍看数字与标点差在哪。差异规律摸清了后处理规则才写得准。模型与音色清单可在阿里云百炼首页查看。