你们有没有遇到过想把整本小说文档转成有声书,结果卡在大文件崩溃的问题?或者想批量处理几百个TXT笔记却找不到免费工具?今天咱们就解决这两个痛点——用Python三分钟搞定批量转换+大文件分割,连代码都给你们调试好了。
一、为什么我选Python而不是在线工具?
讲真,那些在线转换网站限制太多了:
文件大了就报错,超过10MB基本没戏
批量处理要付费,免费版只能一个个传
隐私风险,合同文件你敢上传?
反观Python脚本,本地运行不联网,还能定制语音参数。比如用edge-tts
调成80%语速,避免AI念书像赶火车:
python下载复制运行# 关键参数设置(语速调慢20%) voice = "en-US-AnaNeural" rate = "-20%" # 相当于原速的80%
二、三种库实测对比,新手闭眼选
我测了主流的三个库,直接看表格:
库名 | 优势 | 致命缺陷 | 适用场景 |
---|---|---|---|
edge-tts | 微软语音自然,支持语速调节 | 大文件需手动分割 | 小说/外语学习 |
gTTS | 免费在线,多语言支持 | 必须联网,文本长度限制 | 短文本快速转换 |
pyttsx3 | 完全离线运行 | 机械音重,中文支持差 | 保密文档处理 |
个人建议:追求音质选edge-tts
,要离线选pyttsx3
,但中文长文本…还是放弃后者吧。
三、大文件分割的两种神操作
1. 按行数切割——适合章节分明的文档
比如把10万行小说按章切分,用生成器避免内存爆炸:
python下载复制运行def split_by_line(file_path, chunk_size=1000): with open(file_path, 'r') as f: chunk = [] for i, line in enumerate(f): chunk.append(line) if (i+1) % chunk_size == 0: # 每1000行存一次 yield ''.join(chunk) chunk = [] if chunk: # 处理剩余行 yield ''.join(chunk)
2. 按大小切割——对付超长单章节
直接控制文件体积,比如每10MB存一次:
python下载复制运行import os def split_by_size(file_path, max_size=10 * 1024 * 1024): # 10MB with open(file_path, 'rb') as f: chunk = b'' while True: data = f.read(4096) # 4KB小块读取 if not data: break chunk += data if len(chunk) >= max_size: yield chunk chunk = b''
四、自问自答:你们最常问的坑
Q:转换后语音断断续续咋办?
A:八成是文本太长没分割!edge-tts单次最多支持3000字符,超过就得分段处理。
Q:生成的MP3在手机打不开?
A:用pydub转个码就行,两行代码的事:
python下载复制运行from pydub import AudioSegment AudioSegment.from_mp3("output.mp3").export("final.wav", format="wav")
五、完整代码示例(带文件分割)
结合分割+转换的终极方案:
python下载复制运行import asyncio from edge_tts import Communicate import os async def txt_to_mp3_batch(folder_path, chunk_size=1000): for filename in os.listdir(folder_path): if filename.endswith(".txt"): # 分割大文件 chunks = split_by_line(os.path.join(folder_path, filename), chunk_size) for i, text in enumerate(chunks): output_file = f"{filename}_part{i}.mp3" # 调用edge-tts转换 tts = Communicate(text=text, voice="en-US-AnaNeural", rate="-20%") await tts.save(output_file) print(f"{filename}转换完成!") # 运行脚本 asyncio.run(txt_to_mp3_batch("D:/小说库"))
个人踩坑建议
别用默认语速!调-20%听着更自然,亲测有效
文件名别用中文,edge-tts路径报错能折腾死人
超长文本优先分割,比折腾库参数靠谱多了
要是你还在问“新手如何快速涨粉”,不如先搞定这些技术痛点——内容质量上去了,粉丝自然来敲门。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...