脚本将文本转音频的核心是选用合适TTS引擎并规范流程:在线API音质好但依赖网络与费用,离线工具如Piper轻量支持中文;脚本需含文本读取、TTS调用、格式处理三部分,输出推荐16kHz单声道MP3,并用ffmpeg统一转换与ID3嵌入。
用脚本把文本转成音频,核心是调用语音合成(tts)服务或本地引擎,配合文件读写与格式处理。关键不在于写多复杂的代码,而在于选对工具、理清流程、避开权限和格式坑。
选对TTS引擎:在线API还是离线工具?
在线方案(如阿里云TTS、腾讯云TTS、Google Cloud Text-to-Speech)音质好、语种全、支持情感调节,但需网络、有调用配额和费用;离线方案(如eSpeak、Piper、Coqui TTS)无需联网、隐私可控、可批量跑,但安装稍麻烦、中文效果参差不齐。
- 快速验证用 Piper:它支持中文,单个二进制文件即可运行,命令行直接转,适合脚本集成
- 生产环境且有预算,优先用云厂商SDK:稳定性高,API返回音频流或URL,便于后续处理
- 避免用已停止维护的工具(如旧版pyttsx3在某些系统上无法输出MP3)
脚本结构要轻量、可复用
一个实用的转换脚本通常包含三部分:读取文本(支持txt、md或stdin)、调用TTS生成wav/mp3、按需重命名或归档。不必写成Web服务,用Python或Shell都能搞定。
- 文本预处理很重要:清理空行、合并段落、过滤控制字符(比如\x00),否则TTS可能静音或报错
- 输出路径建议带时间戳或哈希前缀,防止同名覆盖,例如 output_$(date +%s).mp3
- 加简单错误判断:检查输入文件是否存在、TTS命令是否成功执行、输出文件大小是否为0
格式与播放兼容性别踩坑
不是所有TTS输出都直接能在手机或播客软件里播放。常见问题包括采样率不匹配(如48kHz导致部分设备无声)、容器格式不标准(如无ID3标签的MP3被识别为损坏)。
- 推荐统一输出为 16kHz / 16bit / 单声道 MP3,兼容性最广
- 用ffmpeg后处理:比如 ffmpeg -i input.wav -ar 16000 -ac 1 -codec:a libmp3lame output.mp3
- 若需播客发布,可自动嵌入标题、作者等简易ID3信息(用mutagen库或ffmpeg -metadata)
批量处理与任务调度很简单
把单次转换封装成函数后,批量就是循环+并行。不需要上Celery,用shell的parallel或Python的concurrent.futures就足够。
- 文本文件放同一目录,用 find ./texts -name "*.txt" | parallel -j 4 python tts_script.py {}
- 每天早上自动生成昨日会议纪要音频?加一行crontab:0 9 * * * cd /path && python daily_tts.py
- 注意磁盘空间:大文本生成的音频可能达几十MB,加一句清理旧文件的逻辑更稳妥


















