利用Python将PDF文档转为MP3音频
1. 转语音工具
微信读书有一个功能,可以将书里的文字转换为音频,而且声音优化的不错,比传统的机械朗读听起来舒服很多。
记得之前看到过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)
最后生成的语音整体还是比较流畅的,虽然不如微信读书语音听着那般舒服,但做做小工具还是不错的。
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!
利用Python将PDF文档转为MP3音频的更多相关文章
- 【技术博客】利用Python将markdown文档转为html文档
利用Python将markdown文档转为html文档 v1.0 作者:FZK 元素简单的md文件 Python中自带有一个markdown库,你可以直接这样使用 md_file = open(&qu ...
- 利用Python操作Word文档【图片】
利用Python操作Word文档
- python实用小技能分享,教你如何使用 Python 将 pdf 文档进行 加密 解密
上次说了怎么将word转换为pdf格式 及 实现批量将word转换为pdf格式(点击这里),这次我又get到一个新技能–使用 Python 将 pdf 文档进行 加密 解密,哈哈哈 希望帮到更多人! ...
- qt 利用 HTML 生成PDF文档,不能显示jpg图片
利用 QPrinter 和html 生成 pdf文档 其中用html语句有显示图片的语句 但只能显示png格式的图片,不能显示jpg格式图片. 经过排查:语法,文件路径等都正确,最终在stack ov ...
- 利用ItextSharp 生成PDF文档改进版
导入的ItextSharp.dll一定要是较高的版本 数据库表结构 生成的PDF样式 代码: namespace WebPDF { public partial class _Default : Sy ...
- Python读取PDF文档
from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams from pdfminer. ...
- 第一节:python提取PDF文档中的图片
由于项目需要将PDF文档当中的图片转换成图片,所以参考了这篇文章https://blog.csdn.net/qq_15969343/article/details/81673302后项目得以解决. 1 ...
- 【转】Python读取PDF文档,输出内容
Python3读取pdf文档,输出内容(txt) from urllib.request import urlopen from pdfminer.pdfinterp import PDFResour ...
- python 操作pdf文档
简介 在实际项目中,我们有可能需要提取当中的部分内容并导出,给PDF文件添加水印,合并多份PDF文件等等,而本文会着重用到PyPDF2模块来玩转PDF文档,以及tabula模块来对PDF文档中的表格数 ...
随机推荐
- python中正则表达式
正则表达式是一种通用的字符串匹配技术,是不会因为编程语言不一样而发生变化的如果想查找对应规则的字符串,就可以用正则表达式python中要使用正则表达式需使用re模块,它是正则表达式在python中的封 ...
- Shamir秘密共享方案 (Python)
Shamir's Secret Sharing scheme is an important cryptographic algorithm that allows private informati ...
- Jmeter(二十八) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy1(详解教程)
1.简介 在使用jmeter自动录制脚本时会产生很多无用的请求,所以推荐使用badboy录制脚本之后保存为jmx文件,在jmeter中打开使用.因此宏哥在这里介绍一下Badboy这款工具,本来打算不做 ...
- nginx介绍及常用功能
什么是nginx nginx跟Apache一样,是一个web服务器(网站服务器),通过HTTP协议提供各种网络服务. Apache:重量级的,不支持高并发的服务器.在Apache上运行数以万计的并发访 ...
- LeetCode双周赛#33 题解
5480. 可以到达所有点的最少点数目 #贪心 题目链接 题意 给定有向无环图,编号从0到n-1,一个边集数组edges(表示从某个顶点到另一顶点的有向边),现要找到最小的顶点集合,使得从这些点出发, ...
- 基于混沌Logistic加密算法的图片加密与还原
摘要 一种基于混沌Logistic加密算法的图片加密与还原的方法,并利用Lena图和Baboon图来验证这种加密算法的加密效果.为了能够体现该算法在图片信息加密的效果,本文还采用了普通行列置乱加密算法 ...
- Kubernetes-20:日志聚合分析系统—Loki的搭建与使用
日志聚合分析系统--Loki 什么是Loki? Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统.它的设计非常经济高效且易于操作,因为它不会 ...
- .NET使用AutoResetEvent实现多线程打印奇偶数
AutoResetEvent 类 (System.Threading) | Microsoft Docs 定义 命名空间: System.Threading 程序集: mscorlib.dll, Sy ...
- 《应用计算方法教程》matlab作业一
运行界面: 运行界面: 运行界面: 运行界面: 运行界面: 运行界面: 运行界面: 运行界面: 运行界面: 运行界面: word文档百度云链接: 链接:https://pan.baidu.com/s/ ...
- 基于gin的golang web开发:认证利器jwt
JSON Web Token(JWT)是一种很流行的跨域认证解决方案,JWT基于JSON可以在进行验证的同时附带身份信息,对于前后端分离项目很有帮助. eyJhbGciOiJIUzI1NiIsInR5 ...