ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Edge-TTS 实战教程:一条命令把文本变成 MP3 语音,免费且无需 API 密钥

Edge-TTS 实战教程:一条命令把文本变成 MP3 语音,免费且无需 API 密钥 Edge-TTS 实战教程一条命令把文本变成 MP3 语音免费且无需 API 密钥【免费下载链接】edge-ttsUse Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key项目地址: https://gitcode.com/GitHub_Trending/ed/edge-ttsedge-tts 是一个开源 Python 文本转语音TTSText-to-Speech把文字念成语音库。它直接调用微软 Edge 浏览器内置的在线语音合成服务你不需要安装 Edge、不需要 Windows 系统、也不需要申请任何 API 密钥就能把任意文字合成为自然的中文、英文 MP3 音频。这篇文章带你从零跑通第一个语音文件再逐步拆解开声音选择、参数调节、Python 接口和字幕生成这些核心能力最后给出几个真实落地场景和容易踩的坑。看完你应该能独立用 edge-tts 做出带字幕的配音文件。它对你有什么用三个具体的收益不空谈强大直接说它能帮你做什么把文字变成可直接使用的 MP3。一条命令生成语音文件视频配音、课件朗读、播客素材都能直接拿到成品。完全免费零配置。用的是微软官方神经网络语音Neural 音色音质接近真人但没有任何订阅费、调用配额或密钥申请流程。声音库极大。覆盖中文、英语、日语、法语等上百种语言和方言男女声都有--list-voices一条命令全部列出。命令行和 Python 代码两种用法都有。脚本党用命令就够了开发者可以在代码里调用还能一边收音频一边生成字幕。动手前的准备前置条件只有一个Python 环境建议 3.8 及以上和能访问外网——合成是在线服务完成的断网跑不了。装包有两种方式按你的用途选# 要在 Python 代码里调用装成普通依赖 pip install edge-tts# 只打算用命令行工具用 pipx 装进独立环境更干净 pipx install edge-tts安装完成后你会得到两个可执行命令edge-tts负责生成文件和edge-playback负责边合成边播放。最快上手先跑通你的第一个语音文件在终端执行下面这条命令把一句中文变成 MP3edge-tts --text 欢迎使用 Edge-TTS 语音合成服务 --write-media welcome.mp3--text是要念的文字--write-media指定输出的 MP3 路径。执行完在当前目录打开welcome.mp3听一下——默认音色是一位中文女声。想顺便要一份字幕文件SRT一种通用的视频字幕格式带时间轴加一个参数edge-tts --text 今天天气真好适合外出散步 \ --write-media weather.mp3 \ --write-subtitles weather.srtweather.srt里会按句记录每段语音的起止时间之后做视频时可以直接导入剪映、OBS 这类工具做字幕。不想生成文件、只想马上听个响用edge-playback实时播放edge-playback --text 这是一个实时语音播放的示例注意Linux 和 macOS 上edge-playback依赖 mpv 播放器apt install mpv/brew install mpv安装Windows 上不需要额外装东西。核心能力拆解选声音先列出再指定默认音色不一定合你的场景。列出全部可用声音edge-tts --list-voices输出是张表格每行一个声音含名称、性别、适用类别和性格描述Name Gender ContentCategories VoicePersonalities zh-CN-XiaoxiaoNeural Female General Friendly, Positive zh-CN-YunxiNeural Male General Friendly, Positive en-US-JennyNeural Female General Friendly, Positive看到满意的名字用--voice指定即可# 中文男声 edge-tts --voice zh-CN-YunxiNeural --text 你好这是云希在说话 --write-media zh.mp3 # 英语女声 edge-tts --voice en-US-JennyNeural --text Hello, this is a test of the Edge-TTS service --write-media en.mp3声音命名规则是语言-地区-名字比如zh-CN是普通话、zh-TW是台湾中文看前缀就能大致挑语言。调参数语速、音量、音调三个参数控制听感--rate语速百分比、--volume音量百分比、--pitch音调赫兹。一个容易翻车的细节负数必须用--参数值的写法写成空格分隔会被当成另一个命令行选项。# 语速放慢 30% edge-tts --rate-30% --text 这是一个慢速语音示例 --write-media slow.mp3 # 音量降低 20% edge-tts --volume-20% --text 这是较低音量的语音 --write-media low_vol.mp3 # 音调降低 30 赫兹声音更低沉 edge-tts --pitch-30Hz --text 这是较低音调的语音 --write-media low_pitch.mp3想加快语速就写--rate50%。三个参数可以叠着用比如慢速 低音调很适合做讲解类配音。生成字幕和语音一起产出 SRT前面已经见过--write-subtitles的用法了这里补充一点字幕按句子切分时间轴由服务端返回的句边界数据对齐拿来直接给视频打字幕是可以用的。进阶用 Python 接口做更灵活的事命令行够用就停在这里。如果你的应用里需要批量合成、动态选声音、或者把音频流式地喂给别的组件看 src/edge_tts/communicate.py 暴露的Communicate类。最小 Python 例子三行生成 MP3不想碰asyncioPython 的异步编程框架可以简单理解为不阻塞地同时干多件事的话用同步接口import edge_tts # save_sync 内部帮你处理了异步调用方式和普通函数一样 communicate edge_tts.Communicate(Hello World!, en-GB-SoniaNeural) communicate.save_sync(test.mp3)项目里 examples/sync_audio_gen_with_predefined_voice.py 就是这个写法的完整版。异步接口批量处理更快要一次生成几十上百个文件时异步模式async/await能显著缩短总耗时。这是 examples/async_audio_gen_with_predefined_voice.py 的思路精简后长这样import asyncio import edge_tts async def amain(): communicate edge_tts.Communicate(异步语音生成示例, zh-CN-XiaoxiaoNeural) await communicate.save(async_output.mp3) # 异步版 save asyncio.run(amain())批量任务可以并发发起再用asyncio.gather一起等import asyncio import edge_tts async def batch(texts, voicezh-CN-XiaoxiaoNeural): tasks [ edge_tts.Communicate(t, voice).save(fout_{i}.mp3) for i, t in enumerate(texts) ] await asyncio.gather(*tasks) # 并发跑完所有任务 asyncio.run(batch([第一段, 第二段, 第三段]))流式接收边收音频边写文件、顺手做字幕communicate.stream()是个异步生成器逐个吐出数据块chunk一段音频或一条边界信息。这是 examples/async_audio_streaming_with_predefined_voice_and_subtitles.py 的核心逻辑import asyncio import edge_tts async def amain(): communicate edge_tts.Communicate(你好世界, zh-CN-XiaoxiaoNeural) submaker edge_tts.SubMaker() # 字幕合成器 with open(test.mp3, wb) as f: async for chunk in communicate.stream(): if chunk[type] audio: f.write(chunk[data]) # 音频块直接落盘 elif chunk[type] in (WordBoundary, SentenceBoundary): submaker.feed(chunk) # 边界信息喂给字幕器 with open(test.srt, w, encodingutf-8) as f: f.write(submaker.get_srt()) asyncio.run(amain())同步版把stream()换成stream_sync()、去掉async/await即可参考 examples/sync_audio_streaming_with_predefined_voice_subtitles.py。动态选声音按性别、语言程序化挑选不想写死声音名可以让VoicesManager按属性筛选完整示例在 examples/async_audio_gen_with_dynamic_voice_selection.pyimport asyncio import random import edge_tts from edge_tts import VoicesManager async def amain(): manager await VoicesManager.create() # 拉取全部声音列表 matches manager.find(GenderMale, Languagees) # 按性别语言筛 name random.choice(matches)[Name] await edge_tts.Communicate(Hoy es un buen día., name).save(spanish.mp3) asyncio.run(amain())find()还支持Locale具体地区如es-AR等属性多语言产品里很实用。另外超长文本不用自己切Communicate会按 4096 字节自动分段、在服务端逐段合成后再拼起来中文多字节字符和 XML 实体如amp;都处理好了你只管传整段文字。落地场景谁在什么情况下用它视频创作者做旁白。把分稿喂给edge-tts--write-media出 MP3、--write-subtitles出 SRT音轨和字幕一次齐活直接进剪辑软件。做无障碍朗读的开发者。网页、文档 App 里嵌入朗读按钮后端用 Python 接口实时生成语音返回给前端。多语言产品。用VoicesManager.find(Language...)按用户语言自动分配声音一套代码出几十种语言的语音提示。播客/有声内容自动化。脚本 批量异步接口把稿件批量变成 MP3 分集。避坑指南这几个问题最容易被问Linux/macOS 上edge-playback没声音缺 mpv 播放器。装一下就好或者改用edge-tts生成文件后自己播放完全绕开这个依赖。--rate -30%报错负数必须紧贴等号--rate-30%。这是命令行解析的通用规则edge-tts 的文档里也专门强调了。想传自定义 SSML 被拒这条路已经走不通了。微软只接受 Edge 浏览器自己生成的 SSML 结构而prosody里能调的选项语速、音量、音调edge-tts 全都已暴露成参数没有功能损失。提示NoAudioReceived或连接失败先查网络——这是在线服务代理环境下可在Communicate里传proxy参数。服务返回 403通常是本地时钟偏差触发时库内部会自动补偿重试一次仍失败再检查系统时间。文本里有奇怪控制字符导致失败从 OCR 出来的 PDF 常夹带垂直制表符之类不可见字符Communicate会自动清洗但如果你从别处拿到的是原始 bytes 且编解码不对会直接抛TypeError统一转成 UTF-8 字符串再传入即可。异常体系集中在 src/edge_tts/exceptions.pyNoAudioReceived、WebSocketError等都可单独捕获方便你写重试逻辑。上手清单按这个顺序跑一遍装包pip install edge-tts生成第一个文件edge-tts --text 你好世界 --write-media hello.mp3挑声音edge-tts --list-voices选一个名字加参数--voice、--rate、--volume、--pitch各试一次听出差别带字幕加上--write-subtitles hello.srt把两个文件一起交给剪辑工具进代码复制上面save_sync的三行例子改成你的文本和声音跑完这一圈你已经覆盖了 edge-tts 日常用量的 90%。剩下 10%——流式接口和动态选声音——在需要时回来看进阶一节就行。【免费下载链接】edge-ttsUse Microsoft Edges online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key项目地址: https://gitcode.com/GitHub_Trending/ed/edge-tts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表