转语音工具

微信读书里的电子书有配套的自动音频,而且声音优化的不错,比传统的机械朗读听起来舒服很多。

记得之前看到过Python有一个工具包,可以将文字转换为语音,支持英文和中文,而且能调节语速语调、导出mp3等。

去Github查了下,这个库叫:pyttsx3

简单来说,pyttsx3可以文字转语音,且是离线工作的,这一点就很实用。

安装比较容易,直接在命令行用pip安装:

pip install pyttsx3

我准备动手试试,将PDF书籍转成音频。

用什么书呢?最近在群里看到有人发张磊的新作《价值》电子书,这本今年刚出的畅销书盗版猖獗,我之前在微信读书里看过,对作者长期主义的观点深信不疑。

那就它了。

2. PDF转文本

既然是把PDF转化成语音,肯定是需要先读取PDF中的文字,再利用pyttsx3转语音。

Python中操作PDF的工具库主要是PyPDF2,但发现编码实在有点繁琐,我就换了另一个库pdfplumber,与PyPDF2语法类似,用起来还算流畅。

pdfplumber可以处理PDF包括文本、表格、格式在内的各种信息,小而强大。

# 读取PDF文档
pdf = pdfplumber.open("价值.pdf")

# 获取页数
print("总页数:",len(pdf.pages))
print("-----------------------------------------")

# 读取第4页
first_page = pdf.pages[3]
print("本页:",first_page.page_number+1)
print("-----------------------------------------")

# 导出第4页文本
text = first_page.extract_text()
print(text)

输出:

上面的代码做了几件事情:「读取PDF文档、读取页数、读取第4页、输出第4页文本」

3. 文本转语音

接下来开始将第4页的文本转化为音频。

import pyttsx3

# 初始化来获取语音引擎
engine = pyttsx3.init()

# 去掉文本中的换行符
text = text.replace('\n','')

# 朗读文本
engine.say(text)
engine.runAndWait()

上面代码使用pyttsx3将文本转化为音频,然后朗读出来。我是在jupyter notebook上做实验的,代码执行后,电脑会直接朗读。

也可以将生成的音频保存为mp3格式。

# 保存音频到本地,格式为mp3
engine.save_to_file(text, 'test.mp3')
engine.runAndWait()

当然你还可以调整声音的类型、速度、大小。

# 调整人声类型
voices = engine.getProperty('voices')  
engine.setProperty('voice', voices[0].id)

# 调整语速,范围一般在0~500之间
rate = engine.getProperty('rate')                         
engine.setProperty('rate'200)     

# 调整声量,范围在0~1之间
volume = engine.getProperty('volume')                         
engine.setProperty('volume',0.8

最后听下生成的语音是什么样的?

test.mp3来自Python大数据分析00:0001:58

整体比较流畅,虽然不如微信读书语音听着那般舒服,但做做小工具还是不错的。


©著作权归作者所有:来自51CTO博客作者mb5fe18fab305a5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Plotly中4种文本类型设置详解
  2. 动画:散列表 | 文本编辑器是如何检查英文单词出错的?
  3. 利用PHP和百度ai实现文本以及图片的审核
  4. 文本_bash笔记4
  5. 【荐读】基于文本数据的消费者洞察
  6. jQuery——将title属性用作悬停的文本,但只在同一父类中使用。
  7. 如何在java脚本中获取节点内部文本?
  8. jquery 监控文本框键盘事件(回车事件),附常用keycode值。

随机推荐

  1. Discuzx2.5 数据库连接问题 Host '**
  2. Python 连接数据库 mysql
  3. SELECT * FROM MULTIPLE + DYNAMIC table
  4. 使用来自相同表注释的两个外键来休眠
  5. [实战]MVC5+EF6+MySql企业网盘实战(27)—
  6. 如何在SQL查询中显示特定范围的数字
  7. 从零开始搭建框架SSM+Redis+Mysql(二)之MAV
  8. MySQL中find_in_set的用法(某个字段包含某
  9. mysql-proxy实现读写分离
  10. 保存在Java桌面应用程序应用程序和网站上