付费?不存在的,20 行代码将电子书转换为有声小说

封面

类似得到电子书或者樊登读书会等平台,现在都可以直接听书了,而且声音方面听起来非常舒服,但无一例外,这些平台都需要购买会员,作为技术人的我简直不能忍,于是尝试自己动手丰衣足食。

既然要将电子书转换为语音文件,那么第一步要解决的问题就是将电子书中的文字解析出来,这个可以用 pdfplumber 库来解决。

安装

1
pip3 install pdfplumber

读取 PDF 内容

Python 之所以强大就是因为有很多各种各样的库给你用,读取 PDF 内容只需三行代码即可搞定,刚好手里有本「欺骗的艺术」一起来看看。

重点看第四页的内容即可,接下来就直接用 pdfplumber 来读取第四页内容。

1
2
3
4
with pdfplumber.open("欺骗的艺术.pdf") as pdf:
    page = pdf.pages[3]
    text = page.extract_text()
    print(text)

看下输出日志:

从日志中可以看出转换还是相当精准的。

文字转音频

文字转音频是使用的 pyttsx3 库,直接安装使用即可。

1
pip3 install pyttsx3

正式转换之前呢先做一个简单的测试,看看是否可以正确将文字朗读出来。

1
2
3
4
5
6
7
8
9
10
import pyttsx3

def read_by_mp3(text):
    engine = pyttsx3.init() # 初始化语音引擎
    text = text.replace('\n', '') # 去掉换行符
    engine.say(text) # 读文本
    engine.runAndWait()

if __name__ == '__main__':
    read_by_mp3('一些黑客毁坏别人的文件甚至整个硬盘,他们被称为电脑狂人')

该函数会直接将文本内容读出来,当然你也可以选择下载保存音频文件到本地。

1
2
3
4
5
6
7
import pyttsx3

def read_by_mp3(text):
    engine = pyttsx3.init() # 初始化语音引擎
    text = text.replace('\n', '') # 去掉换行符
    engine.save_to_file(text, 'text.mp3') # 保存音频文件到本地
    engine.runAndWait()

效果如下:

音频整体听起来还是非常流畅的,只是少了些许感情,剩下的流程派森酱就不再赘述啦,无非就是获取到 PDF 所有的内容,然后调用 read_by_mp3 函数就可以啦。

总结

今天派森酱带领大家试着通过语音朗读的方式来读取 PDF 内容,整体流程已经跑通,而且效果比较顺畅,商业化估计有点不够要求,但还是可以考虑做一些小工具的,毕竟免费嘛。

Python Geek Tech wechat
欢迎订阅 Python 技术,这里分享关于 Python 的一切。