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

**URL:** <https://forum.freemdict.com/t/topic/44762>\
**Category:** 软件经验交流展望\
**Created:** [2026 年8 月 10 日 00:54 UTC](https://forum.freemdict.com/t/topic/44762 "2026-08-10T00:54:38Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 10 日 00:54 UTC](https://forum.freemdict.com/t/topic/44762/1 "2026-08-10T00:54:38Z")

</div>

之前哈利波特出了新版有声书有坛友讨论过这个问题： [关于新出的《哈利波特》多人配音版音频书 字幕快速生成的探讨 - 软件经验交流展望 - FreeMdict Forum](https://forumcdn.freemdict.com/t/topic/44154)

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

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

github地址：

> **[GitHub - wynick27/AudioAlignTool](https://github.com/wynick27/AudioAlignTool)**
>
> 通过在 GitHub 上创建帐户来为 wynick27/AudioAlignTool 开发做出贡献。

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

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

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/6/a/6ac255b0e32f11789fae3717781f1eeeaf97a3ab.png)

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/b/d/bde010ade5da253678b46e18bedf8c27973c8774.png)

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/b/a/ba21a2b79f87cc404a99f2c8dae1558a6f948827.png)

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

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/6/2/627502e6ae43522a0b7eb0ea2aa4b3a1ad15ae1b.jpeg)

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

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/1/3/13d7580a03a51890ada0b1176bbfcc7d1d889e62.png)

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/3/7/378dc23cea8f794c23d1c5ddef4698628233fbbb.png)

---

<div class="post-metadata">

**Author:** ![Linzertorte](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/linzertorte/32/66123_2.png) [@Linzertorte](https://forum.freemdict.com/u/Linzertorte)\
**Post date:** [2026 年8 月 10 日 01:47 UTC](https://forum.freemdict.com/t/topic/44762/2 "2026-08-10T01:47:25Z")

</div>

前排膜拜一下

---

<div class="post-metadata">

**Author:** ![winn](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/9dc877/32.png) [@winn](https://forum.freemdict.com/u/winn)\
**Post date:** [2026 年8 月 10 日 16:04 UTC](https://forum.freemdict.com/t/topic/44762/3 "2026-08-10T16:04:28Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 11 日 01:03 UTC](https://forum.freemdict.com/t/topic/44762/4 "2026-08-11T01:03:36Z")

</div>

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

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/3/e/3e1e15f531441ad9c90e74b1dda908c164443b33.png)

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 11 日 01:08 UTC](https://forum.freemdict.com/t/topic/44762/5 "2026-08-11T01:08:03Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2026 年8 月 11 日 02:12 UTC](https://forum.freemdict.com/t/topic/44762/6 "2026-08-11T02:12:30Z")

</div>

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

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

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 11 日 02:28 UTC](https://forum.freemdict.com/t/topic/44762/7 "2026-08-11T02:28:09Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2026 年8 月 11 日 02:30 UTC](https://forum.freemdict.com/t/topic/44762/8 "2026-08-11T02:30:49Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 11 日 02:37 UTC](https://forum.freemdict.com/t/topic/44762/9 "2026-08-11T02:37:10Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 11 日 02:55 UTC](https://forum.freemdict.com/t/topic/44762/10 "2026-08-11T02:55:04Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![sJppLh](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/s/8e7dd6/32.png) [@sJppLh](https://forum.freemdict.com/u/sJppLh)\
**Post date:** [2026 年8 月 12 日 02:32 UTC](https://forum.freemdict.com/t/topic/44762/11 "2026-08-12T02:32:02Z")

</div>

- 当时提[HarryPotter字幕快速生成的探讨](https://forum.freemdict.com/t/topic/44154) 主要是下面场景。

> [@Vim](#):
>
> 1. 场景1：各种英文教材，如果我已有官方提供的音频和文本（称为A），那么就可以使用该软件先调用 whisper 或 qwen 模型将音频识别为文本（称为B）及时间戳等必要的信息，然后对齐A和B文本，通过时间戳实现文本A与音频的对齐，最终实现逐句或逐词的点击定位朗读，或音频播放时高亮相应的文本？

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

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 12 日 02:44 UTC](https://forum.freemdict.com/t/topic/44762/12 "2026-08-12T02:44:01Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![天气敷和](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/%E5%A4%A9/43a26b/32.png) [@天气敷和](https://forum.freemdict.com/u/%E5%A4%A9%E6%B0%94%E6%95%B7%E5%92%8C)\
**Post date:** [2026 年8 月 13 日 08:20 UTC](https://forum.freemdict.com/t/topic/44762/13 "2026-08-13T08:20:04Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 13 日 08:50 UTC](https://forum.freemdict.com/t/topic/44762/14 "2026-08-13T08:50:25Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 13 日 22:23 UTC](https://forum.freemdict.com/t/topic/44762/15 "2026-08-13T22:23:29Z")

</div>

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

导出后效果如下：

---

<div class="post-metadata">

**Author:** ![Vim](https://forumcdn.freemdict.com/user_avatar/forum.freemdict.com/vim/32/8408_2.png) [@Vim](https://forum.freemdict.com/u/Vim)\
**Post date:** [2026 年8 月 14 日 03:27 UTC](https://forum.freemdict.com/t/topic/44762/16 "2026-08-14T03:27:57Z")

</div>

> [@sJppLh](#):
>
> - **①带时间单词级别的json** ②纯文本txt③srt字幕。 提一句，对于断句，识别小错误可以通过修改②借助①重新得到③。

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

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

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

---

<div class="post-metadata">

**Author:** ![dictionaryfan](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/d/34f0e0/32.png) [@dictionaryfan](https://forum.freemdict.com/u/dictionaryfan)\
**Post date:** [2026 年8 月 14 日 04:09 UTC](https://forum.freemdict.com/t/topic/44762/17 "2026-08-14T04:09:15Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![wynick27](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/w/958977/32.png) [@wynick27](https://forum.freemdict.com/u/wynick27)\
**Post date:** [2026 年8 月 15 日 11:43 UTC](https://forum.freemdict.com/t/topic/44762/18 "2026-08-15T11:43:36Z")

</div>

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

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/1/4/1478a839a5857b54e0321a300035b2b1ba100d97.png)

 ![image](https://forumcdn.freemdict.com/uploads/default/original/3X/c/2/c2ed14983b717f8b61dc4424a8300636be9df568.jpeg)

---

<div class="post-metadata">

**Author:** ![liwenyi777](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/l/e95f7d/32.png) [@liwenyi777](https://forum.freemdict.com/u/liwenyi777)\
**Post date:** [2026 年8 月 18 日 09:27 UTC](https://forum.freemdict.com/t/topic/44762/19 "2026-08-18T09:27:11Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![天气敷和](https://forumcdn.freemdict.com/letter_avatar_proxy/v4/letter/%E5%A4%A9/43a26b/32.png) [@天气敷和](https://forum.freemdict.com/u/%E5%A4%A9%E6%B0%94%E6%95%B7%E5%92%8C)\
**Post date:** [2026 年8 月 25 日 01:07 UTC](https://forum.freemdict.com/t/topic/44762/20 "2026-08-25T01:07:29Z")

</div>

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

[下一页](https://forum.freemdict.com/t/topic/44762.md?page=2)
