一直用 Kindle 看书,已经习惯性使用EPUB(非常感谢有 ZLibrary)了,但现在眼睛越来越差了,就想把一部分阅读的习惯改到听书上来。经过一段时间的摸索,逐步形成了自己的一套方法,也了解了很多知识,就在这记录一下吧。
从头搭建自己的听书库,需求如下:
- 将 EPUB 文件制作 MP3 音频。
- 对 EPUB 文件内容处理(特别是不规范的),转换为文本
- 图书文字内容转音频,TTS
- 按章节,保留图书结构的可读性
- 搭建音频播放服务及客户端。
- 音频文件存储,必须私有云,安全第一
- 识别 mp3 标签,方便按图书、作者查找浏览,章节播放顺序
- 手机客户端离线播放
一、EPUB转文本
本来打算使用 https://github.com/wp1998/epub_to_audiobook 来做 EPUB 转音频的,但是它的 edge TTS模块特别不稳定,所以为它写了一个腾讯云TTS 语音合成的模块。但转了几本之后发现费用太高,一本书要几十块,就找到了更节省的 TTS 服务,而且生成的 mp3 还需要写入一些标签,所以就没用了。
不过还是用它把 EPUB 按章节分解成 TXT 文件:
python main.py "epub_filename.epub" "txt_dir" --tts edge --preview --output_text --chapter_start 3 --chapter_end 20
可以指定要导出的章节,文件名默认是“序号_章节名称.txt”,方便下一步逐个处理成音频,一般我都是先用 –preview 预览模式先看看章节结构是否完整,如果是的就直接导出文本了,如果不是则需要对 EPUB 编辑校正。
对于一些不规范的 EPUB,就需要 Calibre 这个老牌免费工具了。一般最主要的是内容结构问题,章节不对齐内容割裂,这些都需要 caibre 编辑器来处理一下。这里有一些使用技巧,比如内容分割、批量样式和正则处理,及图书结构XML文件编辑等,很是花了一些时间来熟悉此软件的操作。
二、TTS文本转音频
有了分章节的文本文件之后,剩下就是用语音合成将其转换成所需要的音频。在对比几家之后还是选择了免费的 Edge TTS,电子书的音色使用 zh-CN-YunjianNeural。同时我也发现了一个非常稳定的已封装命令行工具:https://github.com/rany2/edge-tts ,省了我不少麻烦。
剩下的就是写个python脚本,使用这个命令将文本文件逐个转换为音频了,然后使用 AudioTagsTool 为mp3 文件补充以下标签:封面、标题、专辑、作者、音轨。
mp3_title = book_name[5:]
mp3_idx = int(book_name[0:4])
audio_tags = AudioTagsTool.AudioTags(title=mp3_title, author=mp3_author, book_title=mp3_book_title, idx=mp3_idx)
AudioTagsTool.set_audio_tags(mp3_file, audio_tags)
AudioTagsTool.set_mp3_cover(mp3_file, cover_file)
补充这些标签是为了在播放器中有更好的体验,而且基于这些mp3文件即可以自动归档了,一本书相当于一个专辑,每个专辑中的章节按音轨排序。
三、使用群晖 Audio Station
在家里那台DS918上安装 Synology Audio Station 套件,我的所有电子书和音频也都保存在这上面。设定好音频目录后,每转换完一本新书就上传,便自动根据 MP3 的标签整理好了,简直是太方便了。
和 Audio Station 配套的手机应用是 DS Audio,界面虽然丑了些,但使用也没啥问题,把媒体库中要听的书(专辑)下载到本地播放,CarPlay也是支持的。