sub-align 文档
该页面由AI翻译并经过人工校对,你可能想要 查看原文
Sub-align
用 WhisperX 强制对齐,将 .srt / .lrc / .txt 字幕(或直接生成字幕)对齐到音视频——每条 cue 可独立调整时间,而不只是整条时间轴做一次全局偏移。
为什么不只做全局偏移?
像 ffsubsync 这类工具通常在语音活动与字幕「出现」时刻之间找一个恒定偏移(或拉伸)。对整轨漂移效果不错,但开头/结尾静音或局部时间误差仍可能让某些行偏早或偏晚。
sub-align 会按输入类型选择策略,再跑 WhisperX 音素 / 词级强制对齐,让每一行对照音频精修:
| 输入 | 策略 |
|---|---|
| 仅媒体 | Whisper ASR → 词级对齐 → 切成带时间的 cue |
.txt 剧本 |
ASR 只用于搜索窗口 → 对原文行强制对齐 |
.srt / .lrc |
可选全局偏移 → 用 --margin 扩大窗口 → 强制对齐 |
局限: 字幕文本须大致与口述内容一致。对齐不会翻译,也不会改正错误用词。
更多细节:docs/pipeline.md · 场景与参数:docs/usage.md
安装
需要 **Python 3.10+**,且 ffmpeg 在 PATH 中。首次运行会下载 WhisperX 对齐模型(占用磁盘 / 内存)。
1 | pip install 'sub-align[align]' |
Extras [align]、[cpu]、[gpu] 都会安装 WhisperX。若需要特定 CPU/CUDA wheel,请先安装匹配的 PyTorch:
1 | # CPU |
开发
1 | uv venv |
用法
1 | # Timed subtitles: auto global offset + per-cue refine |
务必传入 --language(如 en、zh)或 --detect-language。
--model、--margin、--offset、--fill-gaps、--trim-*、仅音频时的行数限制,以及 Whisper 模型体积 / VRAM 速查,见 docs/usage.md。
Python API
1 | from sub_align import align_file |
工作原理(简述)
- 将媒体加载为 16 kHz 单声道音频(经 WhisperX / ffmpeg);可选
--trim-start/--trim-end。 - 解析语言(
--language或 tiny 模型检测)。 - 按输入类型构建搜索窗口(
.txt用 ASR token 匹配;.srt/.lrc用偏移 + margin 精修;仅媒体则完整 ASR)。 - 运行 WhisperX 强制对齐;将词时间映射回原文 cue;裁剪重叠;可选
--fill-gaps;写出.srt或.lrc。
完整流程图与技术说明:docs/pipeline.md。
License
MIT