写了一个电子书和音频对齐工具

之前哈利波特出了新版有声书有坛友讨论过这个问题: 关于新出的《哈利波特》多人配音版音频书 字幕快速生成的探讨 - 软件经验交流展望 - FreeMdict Forum

我虽然之前一直在用Subtitle Edit,但总感觉不尽如人意,其实之前匹配日文课文时就想写个类似的工具,更适合电子书或者文章的匹配,现在AI编程越来越强,终于可以快速实现这个想法了。

这次用了一晚上用ai写了个音频对齐工具,复刻了Subtitle Edit的部分功能,而且侧重电子书的强制对齐。目前思路和之前写的OCR工具类似,先识别,后匹配,然后可以通过静音区优化,为了方便调用各种模型,仍然选择了python。目前支持两种ASR模型,包括Whisper和Qwen ASR,此外还支持Qwen3-ForcedAligner-0.6B直接对齐。

github地址:

注意,虽然github编译了一个版本,但是是cpu版,需要用gpu加速的话还是下载源码自行配置gpu版torch环境比较好。打包gpu版python环境太大了,光cuda相关就要4gb。

测试采用了哈利波特的日语版和西语版,支持三个视图,句子,文章和对比视图:

可以选择波形图或者频谱图,可以手动编辑段落

结果可以导出为网页或字幕:

前排膜拜一下

我以前都是用程序分拆音频。有些分拆得不好的,需要人工编辑。

版本更新,现在支持全书识别,而且长任务会主动释放缓存防止显存占用过高。增加大量编辑功能,支持自动分句和按词定位

我也是程序拆分+人工编辑集成的功能,不过是直接实现了subtitle edit的主要功能,而且用了更好的Qwen模型,可以词级别对齐,比whisper的大致时间准很多

对 subtitle edit 比较熟悉,但我还是不太理解本程序要解决或优化的核心问题是什么?能否说说主要的使用场景?我的以下理解是否正确:

  1. 场景1:各种英文教材,如果我已有官方提供的音频和文本(称为A),那么就可以使用该软件先调用 whisper 或 qwen 模型将音频识别为文本(称为B)及时间戳等必要的信息,然后对齐A和B文本,通过时间戳实现文本A与音频的对齐,最终实现逐句或逐词的点击定位朗读,或音频播放时高亮相应的文本?
  2. 场景2:电影或视频,只有语音,没有字幕,那么就可以使用该软件识别出相应的文本和时间轴(这是whisper的基本功能),并可以按需编辑文本并自由断句,在此基础上就可以进一步转换为字幕格式?
  3. 场景3:视频编辑中,要添加字幕,已有语音和文本,但还没有打轴对齐,剪映有个自动对齐的功能(不熟悉,好像是这么称呼),原理上好像也是先语音识别,将其与用户提供的文本对比,从而对齐时间抽,但给到用户的感觉,好像很智能,将文本自动匹配到音频上了,是否本软件也实现了类似的功能?

是的,我写这个主要是用来对齐多章节的音频和文本,和之前ocr工具思路类似,ocr是用一个能输出带位置信息的模型,对比另一个不准确的文本,然后人工修正的,人工修正因为可以直接定位到图片,会方便很多。这个是类似的用asr生成的文字,对齐另一个准确的文本定位,生成字幕和带时间的可以按句跳转的html,没有准确文本直接用生成的文本也可以,然后人工修正时间轴。就是给电子书和有声书对齐设计的,所以一开始就支持分章节,m4b格式,长音频,导入epub,现在很多工具要不就是能对齐但不能修改,要不就是对齐不准确,要不就是不支持分章节,没一个满足我需求的,所以自己写了一个。

之前我使用 whisper,如果篇幅一长,会出现很多识别问题,使用 whisperx 会好一些。您对于电子书等这种长篇幅的音频,是如何解决这个问题呢?

目前是分段识别的,一段5分钟左右,优先用静音区域分割

查了下WhisperX其实是多步骤的,也是前面有VAD分段,然后调whisper识别,不用whisper本身的时间,而是后面加了个wav2vec2模型对齐,还有pyannote-audio分析说话人。

  • 对于8个小时的音频hp.mp3, 开始也想分段识别。 后面发现 CapsWriter-Offline 搭配Qwen3或SenseVoice-Small(具体看配置),不用vad 切片 也能得到完整的:①带时间单词级别的json ②纯文本txt③srt字幕。 提一句,对于断句,识别小错误可以通过修改②借助①重新得到③。
  • 在上面①带时间单词级别的json + ④小说文本基础上进行对齐,会不会更轻量方便些?
    – ①和④也不一定谁包含谁, ①里面可能有很多错误,漏读, 导言多读的。④里面也可能多一些AA said 这个叙述文字。
    – ① 也不一定要多准确,只要大部分正确, 通过前面捋顺的, 得到朗读速度, 也可以定位④中文本大概位置

我实现的就是这个啊,asr对比界面就是左侧是实际文本,右侧是词级别对齐的识别结果,点右边的词可以直接定位,然后各段是可以直接编辑的。另外8小时的mp3没分章节肯定是不对的,应该是用的工具不支持m4b的章节信息强行转换的。

音频播放器的桌面歌词功能可以支持srt吗?不支持的话需要再转成lrc呢

导出支持srt,桌面歌词是指什么啊

重大更新,编辑界面添加很多优化,然后标题和章节单独的地方也会合并,而且现在支持直接导出epub3 media overylay格式,需要支持的阅读器,比如Thorium。

导出后效果如下:

我之前也实现了这些,不过我的思路与楼主的可能有所不同:

  1. 我将每个步骤都拆分为一个独立的模块,甚至还有更多的辅助模块,如纯文本的清理(低级错误等)、智能断句(有些文本没有标点)、智能断行(适配字幕长度)、各种格式转换、视频和字幕下载、翻译、翻译与原文的时间轴匹配等
  2. 像搭积木一样,根据任务的不同,使用 DAG 将这些模块组装为一个workflow,而这些 workflow 可以保存和加载,最终实现灵活应对各种任务。

我做这些,主要用于一个场景:对于喜欢的视频等,但是没有字幕或字幕断句不合理,或翻译不正确等各种不爽,使用这些工具,就可以生成完美的字幕,特别适合对各种新领域的学习等。

看界面感觉字幕组的人常用的

版本更新0.3.2,优化原书视图和对齐视图,可以直接预览原书的排版了,html导出接近原书格式,大量编辑功能优化:

之前试过用workaudiobook单纯打轴字幕,周末试用一下这个

就是像听歌那样,在桌面显示一个歌词小组件,播到哪句字幕就滚动到哪句,而且不会影响其他窗口。音乐播放器一般只支持lrc格式