【github 有趣项目】 EdgeTTS 微软 Edge 浏览器的联机文本转语音服务 & TXT/PDF转音频(TXT/PDF → MP3)实现

  • EdgeTTS(https://github.com/rany2/edge-tts) 是一个非常实用的开源工具,它调用 微软 Edge 浏览器背后的 Azure TTS(Text-to-Speech)接口,可以免费合成高质量的语音,并支持多语言(包括自然中文发音),无须 API 密钥,即装即用,非常适合开发者和批处理任务。
    • EdgeTTS 是一个基于 Python 的命令行工具和库
    • 使用 Microsoft Edge 的 在线语音合成服务(等同 Azure TTS,但不需要登录或 key,大规模需求(如商业音频、播客、导航等)建议购买正式的 Azure TTS 服务或下载微软语音包离线使用)
    • 支持 中文(普通话/粤语),支持不同语音角色、语速、音调
    • 可将文本直接转换为音频文件(如 .mp3 / .wav

快速使用 EdgeTTS

  • 安装 EdgeTTS:
pip install edge-tts
  • 最简单命令行示例:
edge-tts --text "你好,这是Edge TTS语音合成测试。" --voice zh-CN-XiaoxiaoNeural --write-media output.mp3
  • 输出 MP3 文件

可选参数说明:

参数说明
--text你要朗读的文字(可传入多段)
--voice语音角色(如 zh-CN-XiaoxiaoNeural
--write-media输出文件名(如 output.mp3
--rate语速(如 +20%-10%
--volume音量(如 +5dB
--output-file也可以输出成 WAV

支持语音列表查询

  • 你可以运行:
edge-tts --list-voices > voices.json
  • 中文语音示例:
语音名说明
zh-CN-XiaoxiaoNeural女声(自然流畅)
zh-CN-YunxiNeural男声(中气十足)
zh-CN-XiaoyiNeural女声(温柔型)
zh-HK-HiuGaaiNeural粤语(香港)女声
zh-TW-HsiaoChenNeural台湾普通话女声

CODE

Python 脚本调用 EdgeTTS 合成中文语音

import asyncio
from edge_tts import Communicate

async def main():
    communicate = Communicate(text="你好,欢迎使用 Edge TTS 中文语音合成。", voice="zh-CN-XiaoxiaoNeural")
    await communicate.save("demo.mp3")

asyncio.run(main())

txt转音频

import os
import asyncio
import edge_tts

# 设置语音参数(可根据喜好调整)
VOICE = "zh-CN-XiaoxiaoNeural"  # 中文女声
RATE = "+0%"  # 语速
FOLDER = "texts"  # 存放 txt 文件的目录名

async def text_to_mp3(file_path, output_path):
    # 读取文本文件内容
    with open(file_path, "r", encoding="utf-8") as f:
        # text = f.read()
        text = f.read().replace('\n', '')  # 去除所有换行符,避免语音停顿过多

    # 初始化 tts
    communicate = edge_tts.Communicate(text, voice=VOICE, rate=RATE)
    
    # 保存为 mp3 文件
    await communicate.save(output_path)
    print(f"✅ 已生成:{output_path}")

async def main():
    # 遍历文件夹
    for filename in os.listdir(FOLDER):
        if filename.endswith(".txt"):
            txt_path = os.path.join(FOLDER, filename)
            mp3_name = os.path.splitext(filename)[0] + ".mp3"
            mp3_path = os.path.join(FOLDER, mp3_name)

            await text_to_mp3(txt_path, mp3_path)

# 运行主函数
asyncio.run(main())

PDF转音频

import asyncio
import os
from PyPDF2 import PdfReader
from edge_tts import Communicate

# === 设置参数 ===
PDF_PATH = "input.pdf"          # ← 替换为你的 PDF 文件路径
OUTPUT_MP3 = "output.mp3"       # ← 输出音频文件名
VOICE = "zh-CN-XiaoxiaoNeural"  # 中文女声(可改为男声等)

# === 提取 PDF 文本 ===
def extract_text_from_pdf(pdf_path):
    reader = PdfReader(pdf_path)
    text = ""
    for page in reader.pages:
        text += page.extract_text() + "\n"
    return text.strip()

# === 异步 TTS 合成 ===
async def convert_text_to_speech(text, output_path, voice):
    communicate = Communicate(text=text, voice=voice)
    await communicate.save(output_path)

# === 主流程 ===
async def main():
    if not os.path.exists(PDF_PATH):
        print(f"❌ PDF 文件不存在: {PDF_PATH}")
        return

    print("📄 正在提取 PDF 文本...")
    text = extract_text_from_pdf(PDF_PATH)

    if not text:
        print("⚠️ 没有提取到文本内容。请检查 PDF 是否为扫描图像。")
        return

    print("🎙️ 正在合成语音,请稍候...")
    await convert_text_to_speech(text, OUTPUT_MP3, VOICE)
    print(f"✅ 已保存为音频文件: {OUTPUT_MP3}")

# === 执行 ===
asyncio.run(main())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值