一场两小时的直播结束,回放躺在硬盘里。想剪切片,得重新拖进度条,两小时的素材来回看三遍;想复盘哪句话讲得好,只能靠记忆;至于直播过程中有没有说出不该说的词,往往是等系统提示了才知道。
这些麻烦的根源是同一个:直播里的语音没有被结构化。画面录下来了,声音却是一团没法检索的东西。把两小时的人声转成一份带时间码的文字,字幕、口播预警、切片定位这三件事就能共用同一份数据。下面这条链路在 2026 年可以自己搭起来,用到的都是开源或免费工具。
一、先分轨录音,别让背景音乐混进人声
OBS 默认把麦克风、桌面音频、连麦声音混在一条轨道里录进文件。转写时,背景音乐和音效会被人声模型当成语音去猜,出来的文字里夹杂大量乱码,纠错的时间比自己听打还长。
改法不复杂:设置 → 输出 → 输出模式改为「高级」,在「录像」标签页勾选音轨 1 到 3。回到主界面,在音频混音器里对每个来源点齿轮图标 → 高级音频属性,把麦克风勾到音轨 1,桌面音频勾到音轨 2,连麦或音效留空。这样录出来的文件里嵌着多条独立音轨,后续用 FFmpeg 单独抽出第一轨做人声识别。
不想动录制设置的话,另一条路是装虚拟声卡。VB-Audio 的 VB-CABLE 和 VoiceMeeter 在 Windows 上都有免费版本,把麦克风信号同时复制一份给虚拟设备,OBS 照常录真实设备,转写程序去读虚拟设备。好处是不影响已有的直播工程和推流配置,代价是多一层音频路由,出问题时排查的地方变多。
麦克风增益顺手调一下。语音识别对削波失真比较敏感,音量条长期打到红色区域,识别率下降的幅度会比想象中明显。
二、选引擎:实时字幕和离线转写是两件事
做实时字幕要求低延迟、能持续吃音频流;做下播后的转写只要求准确和便宜。这两类需求对应的工具不一样,别拿一个方案硬扛。
| 工具 | 授权方式 | 中文表现 | 硬件门槛 | 适合的环节 |
|---|---|---|---|---|
| FunASR(流式 Paraformer) | 阿里达摩院开源 | 中文优化,流式延迟较低 | CPU 可跑小模型,有独显更稳 | 直播间实时字幕 |
| SenseVoice-Small | FunAudioLLM 开源 | 多语种,附带情绪与事件标签 | 8GB 显存可跑实时 | 想顺带看语气和互动热度 |
| faster-whisper | 基于 OpenAI Whisper 的开源实现 | 中文标点偏弱,长音频稳定 | large 模型需要较好显卡 | 下播后的整场转写 |
| 云端会议记录类服务 | 商业,按量或订阅 | 省心,准确率不错 | 无 | 内容不敏感、不要求实时 |
具体的模型版本、显存占用和延迟指标,以各项目官方仓库的说明为准,更新频率不低。
三、把字幕推进直播画面
OBS 从 28 版本开始内置了 obs-websocket,在「工具 → WebSocket 服务器设置」里开启并设一个密码就能用。推荐的接法是:转写程序把识别结果写进一个本地文本文件,OBS 里新建「文本(GDI+)」源,勾选「从文件读取」,让 OBS 自己去刷新。比每识别一句就通过 WebSocket 改一次源属性要稳,不容易把 OBS 卡住。
真正影响观感的是断句,不是识别速度。流式模型按语音活动检测断句,句尾静音阈值设短了字幕会被切碎,设长了整句会滞后。直播间里 1.5 到 2.5 秒的滞后观众基本能接受,超过 3 秒就跟不上口播节奏了。前几场先在后台看回放,看字幕和口型的错位有多大,再回头调这个阈值。
四、口播违禁词提示:把同音字也算进去
先把平台规则中心当前版本的违禁表述整理成一份词库,再把自己被提示过的词补进去。每个类目的监管重点不一样,通用词库只能当底子。
匹配别用简单的字符串包含判断。主播口播和书面语差距很大,「最」可能被念成「贼」,「绝对」会吞音,直接比对会漏掉一大半。做一次拼音归一化能覆盖多数同音情况:
import pypinyin
BANNED = ["最", "第一", "绝对", "国家级"]
def norm(text):
return "".join(pypinyin.lazy_pinyin(text))
def check(text):
n = norm(text)
for w in BANNED:
if norm(w) in n:
return w
return None
这只是演示思路,实际用的时候词库要按业务分类管理,还要处理多音字带来的误报。提醒方式上,在 OBS 里放一个纯色块,命中时脚本让颜色变红;或者直接给你耳机里放一声提示音。后者更实用,主播的眼睛基本没空看角落的色块。
要说清楚的是,这套东西只能做事中提示和事后自查。平台判定会结合上下文、音画内容和商品信息,工具既不能替代人工把关,也不能保证某个说法一定安全。
五、下播之后:用时间码直接跳到切片位置
转写结果里每句话都带起止时间戳,剪辑时不用再拖进度条,直接在文本里搜关键词定位。想找讲某个尺码建议的片段,搜「一米六」就能跳到那一段。
挑片段的判断标准可以简化成两条:这一段有没有完整的信息点,主播的语气有没有起伏。再用 FFmpeg 的静音检测找出停顿位置,停顿密集的地方通常是主播在思考或者在回应弹幕,容易出真实反应:
ffmpeg -i mic.wav -af silencedetect=noise=-30dB:d=0.6 -f null -
确定好时间码之后批量切割:
ffmpeg -ss 00:42:10 -to 00:42:52 -i live.mp4 -c copy clip_01.mp4
-c copy 不重新编码,一条切片几秒钟就出来,代价是切点会对齐到最近的关键帧,开头可能差一两秒。要精确到帧就去掉这两个参数,导出速度会慢很多。切片数量多的时候,把这些命令写进一个脚本跑批更省事。
有一条不能省:切自己的直播没问题,切别人的直播需要拿到达人授权并在平台完成切片报备。这块规则各家平台都在收紧,动手前先去规则中心确认当前要求。
现在能动手的一件事
今天先把下一场直播的 OBS 输出模式改成「高级」,把麦克风和桌面音频分到两条音轨上录下来。这一步不改,后面所有转写、字幕、切片的工作都要多花几倍时间返工。录完之后用 FFmpeg 把第一轨单独抽出来,随便找个转写工具跑一遍,看看出来的文本里还有多少是背景音造成的乱码。
延伸学习
B 站搜索「OBS 多轨录音」「FunASR 流式识别部署」「faster-whisper 本地转写」,优先看 2025 年之后发布、带完整部署过程的长视频;抖音搜索「直播切片报备流程」,看平台官方账号发布的规则讲解。
视频来源网络,仅供学习参考,如有侵权请联系删除。