将 PDF / DOCX / TXT 文档按章节转换为语音音频文件,使用微软 Edge TTS 在线语音合成(免费、无需 API Key)。适用于以下场景:(1) 用户要求"把文档转成语音""把PDF变成有声书""做成音频",(2) 用户想"听书""开车时听",(3) 用户提供 PDF/DOCX/TXT 文件并要求输出 MP3 音频。支持自动检测章节标题、分章输出、多种语音(女声/男声)、语速/音量/音调调
PDF/DOCX/TXT 转语音
功能概述
PDF/DOCX/TXT 转语音是一项面向实际任务的技能,主要用于核心工作流;将文档转为章节语音音频的完整流程: 提取文本 → 检测章节 → 合成语音 → 输出MP3;
核心要点
- 第一步:提取文本;
- PDF 优先使用 pdfplumber (提取质量更好),回退到 PyPDF2;
- DOCX 使用 python-docx 提取;
使用与执行
长文本会自动分段合成,无需手动分割;第二步:检测章节;支持的章节标题格式:;第一章 引言 、 第1章。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
结果检查与注意事项
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
PDF/DOCX/TXT 转语音
核心工作流
将文档转为章节语音音频的完整流程:提取文本 → 检测章节 → 合成语音 → 输出MP3
# 一句话调用(自动提取+分章+合成+输出)
import asyncio
from scripts.pdf_to_speech import process_book
result = asyncio.run(process_book(
input_path="精益医院.pdf",
output_dir="./audio", # 音频输出目录
voice="zh-CN-XiaoxiaoNeural", # 女声(推荐听书场景)
rate="0%", # 语速调节
per_chapter=True, # 按章节分文件输出
))
环境要求
pip install edge-tts pypdf2 python-docx pdfplumber
详细步骤
第一步:提取文本
from scripts.pdf_to_speech import extract_text
# 自动识别文件类型(.pdf / .docx / .txt)
text = extract_text("精益医院.pdf")
- PDF 优先使用 pdfplumber(提取质量更好),回退到 PyPDF2
- DOCX 使用 python-docx 提取
- 长文本会自动分段合成,无需手动分割
第二步:检测章节
from scripts.pdf_to_speech import detect_chapters, split_into_chapters # 自动检测章节标题(支持中英文多种格式) chapters = detect_chapters(text) # 按章节切分内容 chapter_contents = split_into_chapters(text, chapters)
支持的章节标题格式:
第一章 引言、第1章 概述、第1节 内容Chapter 1: xxx、Part 1. xxx1.、1、、1)等行列标题
注意: 某些文档的章节格式可能不规范(如标题分两行、编号缺失等)。此时可手动传入自定义正则:
# 自定义章节检测模式
import re
custom_patterns = [
r"第[一二三四五六七八九十百零]+章", # 仅匹配"第X章"格式
]
chapters = detect_chapters(text, patterns=custom_patterns)
第三步:合成语音
from scripts.pdf_to_speech import synth_text_to_speech
# 单段文本合成
result = await synth_text_to_speech(
text="要朗读的文本内容",
output_path="chapter1.mp3",
voice="zh-CN-XiaoxiaoNeural", # 女声
rate="0%", # 语速(+10%加快,-10%减慢)
volume="0%", # 音量
pitch="0Hz", # 音调
chunk_size=2500 # 每段最大字符数
)
自动分段机制: 超长文本(>2500字符)会自动按段落切分为多个合成段,合成完成后二进制拼接为单一 MP3 文件(无需 ffmpeg)。
第四步:完整处理(一键全流程)
import asyncio
from scripts.pdf_to_speech import process_book
async def main():
result = await process_book(
input_path="精益医院.pdf",
output_dir="./audio",
voice="zh-CN-XiaoxiaoNeural", # 女声
rate="0%",
per_chapter=True, # 分章输出
chunk_size=2500,
naming="auto" # 自动从章节标题命名
)
# result = {"chapters": [(title, mp3_path), ...], "total_size": int}
for title, mp3 in result["chapters"]:
print(f" ✓ {title} -> {mp3}")
asyncio.run(main())
语音选择
参见 references/voices.md 获取完整语音列表。
推荐配置:
- 听书/小说:
zh-CN-XiaoxiaoNeural(女声温柔自然,首选) - 汇报材料/公文:
zh-CN-YunxiNeural(男声沉稳专业) - 新闻/公告:
zh-CN-YunyangNeural(男声浑厚有力) - 教学/培训:
zh-CN-XiaoyiNeural(女声热情清晰)
CLI 命令行用法
也可直接在终端使用脚本,适合不需要 Python 代码的场景:
# 基本用法(默认女声) python pdf_to_speech.py 精益医院.pdf --output-dir ./audio # 指定男声 + 减慢语速 python pdf_to_speech.py 报告.docx -v zh-CN-YunxiNeural -r -10% -o ./audio # 整篇合成一个文件(不分章) python pdf_to_speech.py 文章.txt --no-chapter -o ./audio
实际案例:《精益医院》全书12章合成
以下是处理 1.4MB PDF/DOCX、165,382 字符、12章全书时的参数:
result = asyncio.run(process_book(
input_path="精益医院_世界最佳医院管理实践_GLMOCR版.docx",
output_dir="./ebook_output/audio",
voice="zh-CN-XiaoxiaoNeural", # 女声
chunk_size=2500, # 每段2500字符
))
# 输出:12章 MP3,总计约 172MB
已知问题与处理建议
| 问题 | 建议 |
|---|---|
| 章节标题格式不规范(分两行/无编号) | 手动传入 chapter_patterns 自定义正则匹配 |
| 合成超时(沙箱600s限制) | 使用子进程运行脚本,或用 python pdf_to_speech.py CLI 模式 |
| PDF 扫描版(图片格式) | 需先使用 OCR 工具提取文本(如 GLM-OCR),本技能不包含 OCR |
| 文本中包含特殊字符影响合成 | 脚本已自动过滤 `/:*?"<> |
| 文件过大超长 | 按章节分文件合成,每章节自动分段2500字符 |
完整流程示意图
输入文件(.pdf/.docx/.txt)
│
▼
提取文本(自动识别格式)
│
▼
检测章节标题(正则匹配中英文格式)
│
▼
逐章合成(长文本自动分段→Edge TTS→二进制拼接)
│
▼
输出 MP3 文件(每章一个独立文件)
资源说明
scripts/
pdf_to_speech.py— 核心脚本,包含全部功能(文本提取、章节检测、语音合成、CLI入口)
references/
voices.md— Edge TTS 语音列表及参数说明
热门AI工具
相关专题
Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。
0
2026.10.28
Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。
0
2026.10.28
Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。
0
2026.10.28
本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。
0
2026.10.22
本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。
0
2026.10.22
本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。
0
2026.10.22
本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。
0
2026.10.22
本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。
0
2026.10.22
本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。
0
2026.10.22
热门下载
相关下载
精品课程
共6课时 | 12.1万人学习
共79课时 | 161.6万人学习
共6课时 | 54.7万人学习