Fish Audio(鱼声)+ Python:零门槛用自己声音合成任何文本
🎯 读完这篇,你就能——上传一段 30 秒录音,让 AI 用你的声音朗读任何文字!
一、🤔 这是什么神仙项目?
👉一句话总结:
- 🏠开源地址:https://github.com/fishaudio/fish-speech
- 📖官方文档:https://docs.fish.audio
- 🌐在线体验:https://fish.audio
🌟 核心亮点速览
| 🏷️ 特性 | 📝 说明 |
|---|---|
| ⚡ 零样本克隆 | 无需训练,上传录音即用,10 秒即可克隆基础声线 |
| 🌍 多语言 | 中英日韩法等 13 种语言,中文效果尤其惊艳 |
| 💰 性价比爆表 | 成本仅为 ElevenLabs 的约六分之一 |
| 🔓 完全开源 | Apache 2.0 协议,支持本地部署,数据不出门 |
二、⚡ 3 分钟极速上手(API 方案 · 零显卡)
🚫🧠 不需要显卡!不需要训练!有网就能跑!
🪜 Step 1:获取 API Key 🔑
- 🌐 打开 Fish Audio 官网 注册/登录
- ⚙️ 进入 用户设置 → API Keys
- 🆕 点击New API Key,复制密钥(形如
sk-xxxxxxxx)
🎁免费额度:每月7 分钟高质量语音 +8000 积分,够你玩到吐!
📦 Step 2:安装依赖
pip install requests gradio # 就这两个,没了🚀 Step 3:跑通第一个 Demo(这个要充值)
把下面代码保存为tts_demo.py,替换YOUR_API_KEY,运行即可:
import requests API_KEY = "YOUR_API_KEY" TEXT = "你好,欢迎使用 Fish Audio,这是我的声音克隆效果。" # ✏️ 改这里 REFERENCE_AUDIO = "my_voice.wav" # 🎤 改成你的录音文件路径 OUTPUT_AUDIO = "output.mp3" # 💾 输出文件名 url = "https://api.fish.audio/v1/tts" headers = {"Authorization": f"Bearer {API_KEY}"} with open(REFERENCE_AUDIO, "rb") as f: files = {"reference_audio": (REFERENCE_AUDIO, f, "audio/wav")} data = { "text": TEXT, "reference_text": "", # 录音对应的文本,不知道可留空 "model": "fish-speech-1.5", "format": "mp3" } response = requests.post(url, headers=headers, files=files, data=data) if response.status_code == 200: with open(OUTPUT_AUDIO, "wb") as out: out.write(response.content) print(f"✅ 合成成功!音频已保存为 {OUTPUT_AUDIO}") else: print(f"❌ 请求失败:{response.status_code}\n{response.text}") python tts_demo.py意思是余额不足,要充值
🎉 打开output.mp3——恭喜,你已经成功克隆了自己的声音!
三、🖥️ Python 图形界面——点点鼠标就能用!
🎨 基于 Gradio 的 Web 界面,上传录音 → 输入文字 → 一键合成 → 在线播放 & 下载!
🎛️ 界面功能
- 📁 拖拽上传你的录音文件
- ✏️ 输入要合成的文字
- 🔑 填写 API Key(仅本地使用,不上传)
- 🎤 一键合成,自动播放
💾 下载合成音频
📝 完整代码
新建fish_tts_gui.py,粘贴以下代码:
import gradio as gr import requests import tempfile import os def tts_clone(audio_file, text, api_key): """🪄 使用 Fish Audio API 进行声音克隆与合成""" if not api_key: return None, "❌ 请输入 API Key" if audio_file is None: return None, "❌ 请上传参考录音" if not text.strip(): return None, "❌ 请输入要合成的文本" url = "https://api.fish.audio/v1/tts" headers = {"Authorization": f"Bearer {api_key}"} with open(audio_file, "rb") as f: files = {"reference_audio": (os.path.basename(audio_file), f, "audio/wav")} data = { "text": text, "reference_text": "", "model": "fish-speech-1.5", "format": "mp3" } try: resp = requests.post(url, headers=headers, files=files, data=data, timeout=30) except Exception as e: return None, f"❌ 网络错误:{e}" if resp.status_code == 200: with tempfile.NamedTemporaryFile(suffix=".mp3", delete=False) as tmp: tmp.write(resp.content) tmp_path = tmp.name return tmp_path, "✅ 合成成功!请播放或下载。" else: return None, f"❌ API 错误 {resp.status_code}:{resp.text}" # 🎨 构建界面 with gr.Blocks(title="🐟 Fish Audio 声音克隆合成器") as demo: gr.Markdown(""" # 🐟 Fish Audio 声音克隆合成器 ### 📤 上传录音 + ✏️ 输入文字 → 🎧 一键合成你的 AI 语音! """) with gr.Row(): with gr.Column(scale=1): audio_input = gr.Audio( label="📁 上传你的录音 (10~30秒, wav/mp3)", type="filepath" ) text_input = gr.Textbox( label="✏️ 要合成的文字", lines=4, placeholder="请输入需要朗读的内容... 💬" ) api_key_input = gr.Textbox( label="🔑 API Key", type="password", placeholder="输入你的 Fish Audio API Key" ) submit_btn = gr.Button("🎤 开始合成", variant="primary", size="lg") with gr.Column(scale=1): output_audio = gr.Audio(label="🔊 合成结果", type="filepath", interactive=False) status_text = gr.Textbox(label="📊 状态", interactive=False) submit_btn.click( fn=tts_clone, inputs=[audio_input, text_input, api_key_input], outputs=[output_audio, status_text] ) gr.Markdown("---") gr.Markdown(""" > 🔐 API Key 仅在本地使用,不会上传到第三方。 > 🔗 获取地址:[Fish Audio 设置页](https://fish.audio/user/settings) """) if __name__ == "__main__": demo.launch()▶️ 运行
python fish_tts_gui.py浏览器打开http://127.0.0.1:7860,开箱即用!
📦 打包成 EXE(可选)
pip install pyinstaller pyinstaller --onefile --collect-all gradio fish_tts_gui.py💡 更省事的方案:代码中
demo.launch(share=True)即可生成公网链接(72 小时有效),分享给任何人直接使用!
四、🥊 同期精品大乱斗:谁才是声音克隆之王?
2024~2025 年开源 TTS 迎来大爆发,各家打得不可开交。下面一张表帮你快速选型:
| 🏷️ 维度 | 🐟Fish Audio | 🎯CosyVoice(阿里) | ⚡GPT-SoVITS | 🔥F5-TTS | 🌍OpenVoice |
|---|---|---|---|---|---|
| ⭐ GitHub | 17k+ | 13.7k+ | 56k+ | 12k+ | 4k+ |
| 🎤 最少样本 | 10~30 秒 | 3 秒🏆 | 5 秒 | 2 秒🏆 | 10 秒 |
| 🌐 语言支持 | 13 种🏆 | 5 种 + 方言 | 5 种 | 中英 | 6 种 |
| 🎭 情感控制 | S1 模型支持 | 细粒度情感指令🏆 | 自然继承 | ❌ | 8 种情绪 |
| ⚡ 推理速度 | 中等 | 流式 150ms 🏆 | 快 | RTF 0.15🏆 | 快 |
| 🎯 音色相似度 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 95%+🏆 | ⭐⭐⭐ | ⭐⭐⭐ |
| 📜 开源协议 | Apache 2.0 ✅ | Apache 2.0 ✅ | MIT ✅ | MIT ✅ | MIT ✅ |
| 💻 本地部署 | 需 GPU | 需 GPU | 需 GPU | 需 GPU | 需 GPU |
| 🌍 在线 API | ✅ 免费额度 | ✅ 阿里云 | ❌ | ❌ | ❌ |
📌选型指南(太长不看版):
- 🧧中文优先 + 有 API 需求→ 🐟 Fish Audio(语言支持最广,在线 API 可用)
- 🎙️追求极致克隆逼真度→ 🎯 CosyVoice / ⚡ GPT-SoVITS(音色相似度天花板)
- 🏭批量生产 + 极速推理→ 🔥 F5-TTS(2 秒克隆,实时因子 0.15)
- 🎬需要情感表演→ 🎯 CosyVoice(支持哭腔、方言口音调整)
Fish Audio 的差异化王牌🃏:它是唯一一个同时提供在线 API + 免费额度 + 13 语言支持的开源方案。不需要折腾 GPU,注册就能用,跟 ElevenLabs 这种商业产品对标,但成本只有其六分之一。
五、🎓 进阶玩家必读:让克隆效果飙升的秘籍
🎤 录音黄金法则
📌 参考音频是克隆的基石,录得好,效果立竿见影:
| ✅ 推荐 | ❌ 避免 |
|---|---|
| 🎧 安静环境,手机就够 | 📢 嘈杂背景、多人说话 |
| ⏱️ 时长5~30 秒 | 📉 短于 5 秒(信息不足) |
| 🗣️ 自然语速、清晰发音 | 🏃 过快/过慢/刻意朗读 |
| 📱 手机放桌面,距嘴 20~30cm | ✋ 手持手机(摩擦噪音) |
| 🔇 关闭空调、风扇 | 🎵 背景音乐、混响 |
💡实测发现:只需一部智能手机 + 安静卧室 + 语音备忘录,就能录出可克隆的参考音频。
📈 进阶优化套路
- 🔉降噪处理:录好的音频可用 Audacity(免费)做轻微降噪
- 📝提供参考文本:如果你知道录音内容,务必填入
reference_text,音色对齐准确率大幅提升 - 🎚️音量标准化:归一化到 -3dB,避免爆音或过轻
- 🔀多参考音频融合:准备 2~3 段不同情绪的短录音,克隆效果更稳定、表现力更强
🎭 这些脑洞大开的应用,你绝对想不到
- 🎮游戏 NPC 配音:某独立游戏团队用 Fish Speech 后,角色对话制作周期从 2 周缩短到 3 天
- 📖有声书量产:效率提升 60%,一个人就是一个配音工作室
- 👨👩👧数字分身 & 情感陪伴:把 AI 助手声音设置成孩子或恋人的声音,随时随地听到想听的声音
- 👻鬼畜整活:克隆朋友的声音说骚话,效果拔群
- 🎓知识科普新玩法:用克隆的爱因斯坦声线讲解相对论,学生们听得眼睛发光
- 🏠留学生「在场感」:有海外留学生用声音克隆保持与国内家人的日常交流,让家人感知到的「在场率」提升 76%
六、📊 API 费用一览 & 本地部署预告
| 💎 套餐 | 💰 价格 | 📦 API 额度(月) | 🏷️ 适合 |
|---|---|---|---|
| 🆓 Free | 免费 | 7 分钟 + 8000 积分 | 尝鲜、个人测试 |
| ⭐ Plus | $11/月(约 ¥80) | 200 分钟 | 自媒体、内容创作者 |
| 🚀 Pro | $75/月(约 ¥540) | 27 小时 | 企业级、批量生产 |
🔮 如果你后期想要完全免费 + 无限调用 + 数据不出门,本地部署是终极选择(需要 NVIDIA 显卡,显存 ≥ 8GB)。需要的话告诉我,我为你出完整教程!
七、🐟 总结
| 你的需求 | 推荐方案 |
|---|---|
| 🧪 我就想试试,零成本 | 注册 API → 免费额度 → 跑 Demo |
| ✍️ 自媒体/内容创作 | Plus $11/月,性价比拉满 |
| 🏭 批量生产 | Pro 套餐或本地部署 |
| 🔒 数据敏感/离线使用 | 本地部署(需 GPU) |
🎉 恭喜你读到这里!现在你已经是声音克隆理论 + 实战双修的选手了。
📣 有任何问题(本地部署教程、效果调优、API 报错排查),随时告诉我,我给你续上!
关注我,送你一个月的“plus”会员权益
