by 雪隐_上班了 from juejin.cn/user/143341...
欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可联系授权。
前言:显卡不能只用来跑图,它还得会配音
上回说到,我用 RTX 5060Ti 16G 跑起了 FLUX.2 Klein,让产品经理对着生成图连连点头。
但这块显卡的潜力远不止于此------它不光能看 ,还能听 、能说。
这次我盯上了阿里千问团队开源的 Qwen3-TTS ,一个只需 3 秒参考音频 就能克隆任何声音的神器。
想象一下:老板在晨会上清了清嗓子,我偷偷录了 3 秒,然后让 AI 用他的声音说出"今天早点下班"......(注:仅供娱乐,切勿实操)
本文我就手把手教你搭一个 语音克隆 WebUI,让 5060Ti 变成你的私人配音演员。代码量比上次还少,保证你看了就想动手。
项目概览(又是熟悉的"四件套")
| 技术 | 说明 | 我的吐槽 |
|---|---|---|
| Qwen3-TTS | 阿里开源的语音合成模型,1.7B 参数 | 比 FLUX 还轻,5060Ti 表示"洒洒水" |
| Gradio | 快速搭 WebUI 的 Python 库 | 比 FastAPI 还省事,拖拖拽拽就出来一个界面 |
| qwen-tts | 官方 SDK,封装得比外卖还方便 | from_pretrained 一条龙,懒人福音 |
| soundfile | 保存音频的库 | 就一行 sf.write,不能再多了 |
目录结构?比上次还短,我都不好意思列
bash
005_makevoice_qwen/
├── webui_qwen.py # Gradio 界面,长得像个正经软件
├── qwen_infer.py # 模型推理,核心代码不到 20 行
└── config.py # 配置,就几行路径
核心代码解析(真的只有三段,骗你是小狗)
1. 模型推理类 (qwen_infer.py) ------ 三秒克隆,良心之作
python
from qwen_tts import Qwen3TTSModel
class QwenTTSModel:
def __init__(self, model_path, device_map="cuda:0", dtype="bfloat16"):
self.model = None
self.model_path = model_path
def load_model(self):
"""懒加载,不占着显存不放,跟省油的灯似的"""
if self.model is not None:
return
self.model = Qwen3TTSModel.from_pretrained(
self.model_path,
device_map=self.device_map,
dtype=self.dtype,
)
def infer(self, text, ref_audio, ref_text, output_path, language="chinese", speed=1.0):
"""核心:用一段参考音频,克隆音色,朗读目标文本"""
self.load_model()
# 就这一行!就这一行!就这一行!(重要的事说三遍)
wavs, sr = self.model.generate_voice_clone(
text=text,
language=language,
ref_audio=ref_audio, # 参考音频,3-10秒就行
ref_text=ref_text, # 参考音频里的文字(帮助对齐)
)
import soundfile as sf
sf.write(output_path, wavs[0], sr)
return output_path
你看到了吗?
核心克隆逻辑就是 generate_voice_clone() 这一行,剩下的全是导入、保存。
这要是写简历,我只能写"熟练调用官方 API",但效果就是牛,不服不行。
支持的语言多达 10 种 :中文、英语、日语、韩语、德语、法语、俄语、西班牙语、葡萄牙语、意大利语。
换句话说,你可以用老板的声音说"Bonjour",吓死隔壁老外。
2. WebUI 界面 (webui_qwen.py) ------ Gradio 一把梭
Gradio 就是 Python 里的"拖拽式生成器",代码比写 HTML 还短:
python
import gradio as gr
with gr.Blocks(title="Qwen3-TTS Demo") as demo:
# 先放个加载模型的按钮,免得一启动就爆显存
model_path = gr.Textbox(value="./models/Qwen3-TTS-12Hz-1.7B-Base")
load_btn = gr.Button("加载模型", variant="primary")
# 主功能区:上传参考音频 + 输入文本
with gr.Tab("音频生成"):
ref_audio = gr.Audio(label="参考音频 (3秒就够)", sources=["upload"])
ref_text = gr.TextArea(label="参考音频的文本(越准越好)")
input_text = gr.TextArea(label="你想让它说啥")
gen_btn = gr.Button("生成语音", variant="primary")
output_audio = gr.Audio(label="克隆结果")
# 批量功能,专治新闻小编
with gr.Tab("批量新闻生成"):
news_file = gr.File(label="上传 Markdown 文件")
batch_gen_btn = gr.Button("一键批量生成")
demo.launch(server_port=7861)
整个界面不到 30 行,比写个计算器还快。
而且 Gradio 自动帮你处理文件上传、音频播放,连前端都不需要会。
3. 核心生成函数------连接界面和模型的"传话筒"
python
def gen_single(ref_audio, ref_text, text, language, speed):
global tts
if tts is None:
return None, "大哥,先点'加载模型'啊!"
result = tts.infer(
text=text,
ref_audio=ref_audio,
ref_text=ref_text,
output_path="outputs/result.wav",
language=language,
speed=speed
)
return result, "生成成功,听听看,像不像?"
就这?就这。
没有复杂的参数调优,没有玄学采样,一切都被 Qwen 团队封装得明明白白。
我甚至怀疑他们是不是偷偷给我 5060Ti 开了光。
Qwen3-TTS 工作原理(用厨房比喻)
语音克隆 = 模仿秀
想象你要模仿郭德纲说话:
- 音色提取:你先听郭德纲说 3 秒钟"相声讲究说学逗唱",记住他那种特有的嗓音、语调。
- 文本理解:然后你拿到一段新台词,比如"今天天气不错"。
- 音色迁移:你用郭德纲的腔调去读这句新台词,虽然内容不同,但一听就是他。
- 输出:录下来,放给朋友听,他们惊呼"你啥时候拜师了?"
Qwen3-TTS 干的就是这活儿,只不过它不用嗓子,用显卡。
我的 5060Ti 16G 就是它的"声带",计算起来毫不费力,风扇都不带加速的。
模型下载指南(国内用户继续跳过 HuggingFace)
说真的,HuggingFace 在国内的速度,比我妈催我找对象还让人焦虑。
ModelScope(魔搭) 才是我们的好朋友,下载速度飞起,我的 5060Ti 等得花都谢了。
方式一:ModelScope(推荐,下载像开挂)
模型地址:www.modelscope.cn/models/Qwen...
bash
pip install modelscope
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-Base --local_dir ./models/Qwen3-TTS-12Hz-1.7B-Base
模型大小约 3-4GB,比你下个游戏快多了。
方式二:Hugging Face(如果你有魔法网络)
bash
pip install huggingface_hub
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-Base --local-dir ./models/Qwen3-TTS-12Hz-1.7B-Base
下载后的样子(强迫症舒适)
erlang
005_makevoice_qwen/
├── models/
│ └── Qwen3-TTS-12Hz-1.7B-Base/
│ ├── config.json
│ ├── model.safetensors
│ └── ...
├── webui_qwen.py
├── qwen_infer.py
└── ...
安装与使用(三步走,比泡面还快)
1. 安装依赖(建议新建虚拟环境,免得打架)
bash
conda create -n qwen-tts python=3.12
conda activate qwen-tts
pip install -U qwen-tts
pip install gradio pandas soundfile librosa
2. 启动 WebUI(双击或命令行)
bash
python webui_qwen.py --host 0.0.0.0 --port 7861
浏览器打开 http://localhost:7861,你就看到一个极简风的界面。
3. 玩起来!
- 先点 "加载模型",等个十几秒(5060Ti 表示毫无压力)。
- 上传一段参考音频(3-10 秒,WAV/MP3 都行)。
- 输入参考音频里的文本(帮助模型对齐,越准确越好)。
- 输入你想合成的目标文本,点击"生成语音"。
- 几秒钟后,你就能听到克隆出来的声音朗读新内容了。
小技巧 :如果生成的语音语调有点怪,试试调整 speed 参数,或者换一段更清晰的参考音频。
批量新闻生成(小编的救星)
除了单条生成,我还顺手写了个批量处理功能,专门对付 Markdown 格式的新闻稿。
你只需上传一个 .md 文件,格式如下:
markdown
### 1. 今日头条
**概要**: 今天天气真好,适合摸鱼。
### 2. 科技快讯
**📝 智能概括**: 5060Ti 显卡又降价了,但我已经买了。
程序会自动提取每个 概要 或 智能概括 的内容,用同一个参考音色批量生成音频文件,保存到 outputs/ 目录。
从此小编不用再请配音员,省下的钱够买两包辣条。
与其他 TTS 对比(我为什么选 Qwen3-TTS)
| 特性 | Qwen3-TTS | GPT-SoVITS | Coqui-TTS |
|---|---|---|---|
| 参数量 | 1.7B(适中) | ~1B | ~200M |
| 克隆方式 | 3 秒音频,零训练 | 5-10 秒,需微调 | 需训练,繁琐 |
| 多语言 | ✅ 10 种,切换丝滑 | ⚠️ 中文优先,其他一般 | ✅ 多语言 |
| 显存占用 | 约 4-6GB(5060Ti 笑而不语) | 6-8GB | 3GB |
| 上手难度 | 极低,一行 API | 中等 | 较高 |
Qwen3-TTS 最适合我这种不想折腾、又想要好效果的懒人。
而且官方 SDK 持续更新,未来可期。
应用场景(脑洞大开)
- 有声读物:把自己喜欢的电子书转成音频,上下班路上听。
- 视频配音:克隆自己的声音,给视频配旁白,省得重录。
- 客服机器人:让机器人用你最亲切的声音回答问题。
- 多语言翻译朗读:用同一个音色,读英语、日语、法语......瞬间变国际巨星。
- 恶搞同事(慎用):录一段同事的"口头禅",然后让 AI 说"今晚我请客"......(后果自负)
自己写代码 vs 一键包(老生常谈,但很重要)
市面上确实有 Windows 一键包,比如 VALL-E 的 GUI、GPT-SoVITS 的整合版,下载即用。
但我的 5060Ti 不是用来点"下一步"的,我要的是自由。
| 对比项 | 一键包/GUI | 自己写代码 |
|---|---|---|
| 集成到我的程序 | ❌ 独立运行,无法调用 | ✅ 几行代码导入,随意组合 |
| 批量自动化 | ⚠️ 需手动操作 | ✅ 写个循环,全自动生产 |
| 对外提供 API | ❌ 没法暴露接口 | ✅ FastAPI 一包,随时服务化 |
| 对接 AI Agent | ❌ 连个命令行参数都没有 | ✅ 轻松集成 LangChain |
| 定制音色处理 | ⚠️ 受限于界面选项 | ✅ 想怎么处理就怎么处理 |
举个例子,我想做一个 Telegram 机器人,用户发来一段语音,我克隆它的声音,然后用它读一段今日新闻。
一键包做不到,但我的代码可以,而且只加了不到 50 行。
关于两个"兄弟模型"(要不要下载?)
Qwen3-ForcedAligner-0.6B(语音对齐)
不是必须的!
Qwen3-TTS-12Hz-1.7B-Base 本身就能直接克隆语音。ForcedAligner 是用来做音素级别对齐的,普通用户完全不用碰。
除非你要做语音识别训练数据预处理,否则跳过。
Qwen3-TTS-12Hz-1.7B-VoiceDesign(声线设计)
这个有点意思,它是用文字描述 来创造新音色,而不是克隆已有声音。
比如你输入"一个磁性低沉的男中音,略带沙哑",它就能生成这种声音。
使用场景:
- 为游戏角色设计专属配音
- 为广告生成多种风格试听
- 创造虚拟主播的音色
有了它,你甚至不需要参考音频,直接"无中生有"。
不过这个是另一个模型,需要单独下载,我准备留着下期再玩。
总结(我的 5060Ti 又立一功)
今天我们用 Qwen3-TTS 搭建了一个语音克隆 WebUI:
✅ 3 秒克隆 ,速度快到离谱
✅ 10 种语言 ,切换自如
✅ Gradio 界面 ,友好到小白都会用
✅ 批量处理 ,拯救小编于水火
✅ 核心代码不到 20 行,我都不知道怎么写进简历
我的 5060Ti 16G 表示:这点活儿不够塞牙缝,下次再来点更刺激的。
下期预告:也许我会拿它跑本地 LLM,或者折腾一下视频生成,谁知道呢?
参考链接(真的有用):
- Qwen3-TTS GitHub:github.com/QwenLM/Qwen...
- ModelScope 模型:www.modelscope.cn/models/Qwen...
- HuggingFace 模型:huggingface.co/Qwen/Qwen3-...
最后一句 :用老板的声音生成"今天不加班"之前,请确保你已经买好下个月的话费,以防被开除后找不到工作。
好了,我去玩我的 5060Ti 了,你们随意。🎙️