Gentle 强制对齐实操指南:把音频和文字逐词对齐到时间戳
【免费下载链接】gentlegentle forced aligner项目地址: https://gitcode.com/gh_mirrors/ge/gentle
Gentle 是一个基于 Kaldi 的语音文本强制对齐工具,把一段文字转录稿和音频逐词对齐,输出每个单词的起始/结束时间戳,常用于字幕生成和语音分析。
⚡ 30 秒拿到第一个强制对齐结果
仓库里自带一段现成的音频和转录稿(examples/data/lucier.mp3和examples/data/lucier.txt),装完环境后直接跑:
python3 align.py examples/data/lucier.mp3 examples/data/lucier.txt -o align.json输出是一个 JSON 数组,每个单词一个对象,包含 start、end(秒)和音素级别的信息;不写-o时结果直接打印到终端。这就是强制对齐的核心产物:文字和时间轴的一一映射。
📦 装好 Kaldi 与模型,一次到位
依赖要求如下,全部由脚本自动处理,你只需要系统里装好 Python 3:
| 依赖 | 用途 | 安装方式 |
|---|---|---|
| Python 3 | 运行 align.py / serve.py | 系统自带或 brew |
| ffmpeg | 把任意格式音频重采样为 8kHz wav | install_deps.sh 自动装 |
| gcc、make、automake、autoconf 等 | 编译 Kaldi | install_deps.sh 自动装 |
| ATLAS、zlib 等数学库 | Kaldi 数值计算依赖 | install_deps.sh 自动装 |
安装命令就三行:
git clone https://gitcode.com/gh_mirrors/ge/gentle cd gentle ./install.shinstall.sh内部依次做了四件事:拉取 Kaldi 子模块、执行 install_deps.sh 装系统包并注册 Python 包、在 ext/install_kaldi.sh 里编译 Kaldi、再用 install_models.sh 下载并解压 kaldi-models-0.04.zip 预训练模型。Kaldi 编译耗时约 30~60 分钟。不想自己编译的话,也可以直接跑docker run -P lowerquality/gentle得到一个开箱即用的服务。
用三种方式跑对齐
命令行跑一次强制对齐
align.py接收音频和转录文本两个位置参数,常用选项:
| 参数 | 默认值 | 作用 |
|---|---|---|
-o/--output | 输出到 stdout | 指定 JSON 输出文件 |
--nthreads | CPU 核数 | 对齐线程数 |
--conservative | 关 | 启用更严格的对齐策略 |
--disfluency | 关 | 把 uh、um 等填充词也纳入对齐 |
--log | INFO | 日志级别 |
音频在送进 Kaldi 前会统一重采样为 8kHz wav,所以 mp3、wav 等 ffmpeg 支持的格式都能处理。
浏览器上传音频看对齐结果
python3 serve.py服务默认监听 8765 端口,打开网页后可以上传音频和文本,查看对齐过程并在结果页下载数据。每次任务的结果保存在transcriptions/<uid>/目录下,包含 align.json、align.csv 和可视化页面 index.html,csv 格式方便直接导入表格软件。
在程序里调用对齐接口
服务还暴露了 REST API,同步调用时响应体就是 JSON 结果:
curl -F "audio=@audio.mp3" -F "transcript=@words.txt" "http://localhost:8765/transcriptions?async=false"去掉async=false则返回 302 跳转到任务目录,轮询其中的 status.json 即可拿到进度。
值得深挖的两个进阶特性
多轮对齐:给没对上词第二次机会
第一轮对齐后,部分词可能因为噪声或含糊发音匹配不到时间戳。transcribe流程会把这些未对齐词自动切成片段(时长限制在 0.75~60 秒之间),对每段音频单独重跑一次 Kaldi,再把结果拼回原对齐序列。这段逻辑在 gentle/multipass.py 里,日志会打印两轮前后未对齐词的数量,方便你判断音频质量是否拖累了精度。它始终自动运行,不需要额外开关。
强制对齐参数怎么调:保守模式与填充词
两个开关都作用于词与音频片段的匹配策略:--conservative启用更保守的对齐,适合转录稿和音频不完全吻合、宁可少标时间也不标错位置的场景;--disfluency开启后 uh、um 这类填充词也会被分配时间戳,适合口语播客、访谈类音频。Web 界面的上传选项里对应同名勾选框,行为一致。
⚠️ 避坑指南
- 安装时 Kaldi 编译报错→ 系统依赖没装全 → 先单独跑
./install_deps.sh,对照 install_deps.sh 里的包清单确认安装成功再继续。 - 模型下载中断或特别慢→
install_models.sh从外网拉取 zip 包 → 手动下载 kaldi-models-0.04.zip 放到项目根目录解压,跳过该步骤即可。 - 浏览器提示 Encoding failed→ 系统缺少 ffmpeg 或上传的不是合法媒体文件 → Ubuntu 上需从 PPA 装 ffmpeg,装完重传音频。
- uh、um 在结果里没有时间戳→ 默认填充词不参与对齐 → 命令行加
--disfluency,网页端勾选 disfluency。 - 长音频处理时 CPU、内存吃紧→ 线程数默认取 CPU 核数 → 用
--nthreads调小,或把长音频切成片段分批处理。
📚 延伸阅读
- gentle/forced_aligner.py:对齐主入口,能看到首轮转录、差异对齐、二轮重对齐和邻接优化的完整流水线。
- gentle/multipass.py:未对齐词如何被切出片段、单独重对齐再拼回原序列。
- gentle/standard_kaldi.py:Kaldi 子进程接口的封装,音频怎么喂进去、结果怎么解析都在这里。
【免费下载链接】gentlegentle forced aligner项目地址: https://gitcode.com/gh_mirrors/ge/gentle
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考