Qwen3 TTS vs. ElevenLabs
通过 vLLM 使用 Qwen3 TTS 超越 ElevenLabs:开源 - 自定义语音生成和语音克隆
AI编程/Vibe Coding 遇到问题需要帮助的,联系微信 ezpoda,免费咨询。
通过 Qwen3-Audio 模型的强大功能,超越 ElevenLabs 的语音合成能力,该模型现在支持文本到语音(TTS)。我将其与 vLLM 一起部署,以实现最快的推理,并展示了如何进行自定义语音克隆。
ElevenLabs 一直被认为是语音合成的基准产品,有着其先进的语音克隆和高质量音频生成能力。但开源模型已经追平了,特别是在 Qwen3-Audio 发布之后。这个模型不仅支持 ASR(自动语音识别)和音频理解,现在还包含了 TTS 功能。
在这篇文章中,我将向你展示如何使用 Qwen3-Audio 的 TTS 能力,使用 vLLM 进行部署(以获得超快的推理速度),以及如何克隆你自己的声音或生成自定义的声音,而无需依赖昂贵的专有服务。
1、为什么 Qwen3-Audio 用于 TTS?
ElevenLabs 以其卓越的音质和简单的语音克隆界面而闻名,但它有明显的限制:
- 成本: 随着使用量的增加会变得昂贵
- API 依赖: 你受到其 API 限制的约束
- 闭源: 你无法访问模型或对其进行微调
Qwen3-Audio 通过提供免费的、可在本地部署的替代方案解决了这些问题,它具有以下特点:
- 高性能: Qwen 团队在音频任务方面的表现可媲美顶级专有模型
- 开源: 完全开放源代码,可本地部署和微调任何用途
- 灵活性: 你可以通过提供音频样本来克隆任何声音
与 ElevenLabs 的比较
| 特性 | ElevenLabs | Qwen3-Audio |
|---|---|---|
| 价格 | 昂贵 | 免费且开源 |
| 部署 | 仅限云 | 本地部署选项 |
| 音质 | 优秀 | 与 ElevenLabs 相当 |
| 自定义 | 文本/语音输入 | 文本/语音输入 + 微调 |
| API 速率 | 受限 | 受限于你的硬件 |
2、配置步骤
我推荐使用 Anaconda 管理环境以避免冲突。
conda create -n qwen_tts python=3.10
conda activate qwen_tts
pip install vllm
2.1 使用 vLLM 进行 Qwen3 TTS 部署
vLLM 是进行高性能模型推理的完美工具。它通过其连续批处理和 PagedAttention 技术实现了高吞吐量。
首先克隆 Qwen-Audio 仓库以获取模型权重和必要的配置文件。
git clone https://github.com/QwenLM/Qwen-Audio
cd Qwen-Audio
现在从 Hugging Face 下载 Qwen3-Audio-Chat 模型。这个版本专门为对话和交互场景进行了优化。
pip install huggingface_hub
from huggingface_hub import snapshot_download
model_path = snapshot_download("Qwen/Qwen3-Audio-Chat")
注意:该模型约 10GB,所以下载可能需要一些时间。
2.2 启动 vLLM 服务器
使用 vLLM 的 OpenAI 兼容 API 服务器进行部署,这使得集成变得容易。
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen3-Audio-Chat \
--served-model-name Qwen3-Audio-TTS \
--dtype auto \
--max-model-len 8000 \
--trust-remote-code \
--limit-mm-per-prompt audio=1 \
--host 0.0.0.0 \
-p 8000

启动 vLLM 服务器的过程
3、体验 TTS
现在服务器已经运行,我们可以测试 TTS。
3.1 基础文本转语音
import openai
from IPython.display import Audio
client = openai.OpenAI(
base_url="http://localhost:8000/v1",
api_key="dummy",
)
# 基础 TTS 请求
response = client.chat.completions.create(
model="Qwen3-Audio-TTS",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "Tell me a joke about cats"
}
]
}
],
audio={"voice": "Chelsie"},
)
# 保存音频
audio_data = response.choices[0].message.audio.data
with open("output.wav", "wb") as f:
f.write(audio_data)
print("音频已保存到 output.wav")
# 在笔记本中播放
Audio("output.wav")
Qwen3-Audio 包含多个预定义的声音,如 Chelsie、Mitchell 等。你也可以在推理过程中使用 --audio-template-prompt 参数加载自定义语音模板。
3.2 语音克隆
真正的魔法从语音克隆开始。通过提供简短的音频样本,Qwen 会在输出中复制说话者的音色、语气和细微差别。
克隆你自己的声音
import openai
import base64
client = openai.OpenAI(
base_url="http://localhost:8000/v1",
api_key="dummy",
)
# 读取你的语音样本(~10 秒)
with open("your_voice_sample.wav", "rb") as f:
voice_sample_b64 = base64.b64encode(f.read()).decode("utf-8")
# 创建 TTS 请求,使用你的语音样本
response = client.chat.completions.create(
model="Qwen3-Audio-TTS",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": "Hello! This is my cloned voice speaking. How cool is that?"
},
{
"type": "audio_url",
"audio_url": {
"url": f"data:audio/wav;base64,{voice_sample_b64}"
}
}
]
}
],
audio={"voice": "Chelsie"},
)
# 保存音频
audio_data = response.choices[0].message.audio.data
with open("cloned_voice_output.wav", "wb") as t:
t.write(audio_data)

语音克隆工作流程说明
3.3 修复常见问题
如果克隆效果不好,请确保:
- 音频质量: 使用清晰、无噪音的录音。背景噪音会显著降低性能
- 音频长度: 一段 5-15 秒的清晰音频样本效果最好
- 采样率: 16kHz 或 44.1kHz 采样率通常兼容性最好

音频质量对克隆效果的影响(左:高质量,右:低质量)
4、微调声音
如果预设的语音模板不能满足你的需求,你可以微调模型以更好地匹配特定的说话者风格。
微调步骤:
# 训练数据准备
# 1. 收集目标声音样本(1-2 小时的音频)
# 2. 准备对应的文本转录
# 3. 转换为所需的格式
python scripts/prepare_audio_data.py \
--audio_dir ./my_voice_samples \
--output_dir ./training_data \
--target_sr 16000
# 微调
python scripts/finetune_tts.py \
--model_name_or_path Qwen/Qwen3-Audio-Chat \
--data_path ./training_data \
--output_dir ./my_tuned_model \
--num_train_epochs 3 \
--learning_rate 5e-5
微调后的模型将捕捉特定说话者的细微差别,如停顿、语调和方言特征。
5、性能指标
在我的 RTX 4090 上的测试结果:
| 指标 | 值 |
|---|---|
| 推理速度 | ~10-15 秒音频 ~1-2 秒 |
| 端到端延迟 | ~3-5 秒 |
| MOS(平均意见分数) | 4.2/5(相比 ElevenLabs 的 4.4/5) |
注意:性能取决于你的硬件配置
6、生产部署
Docker 集成
为了生产部署,最好将 vLLM 服务器容器化。
FROM nvidia/cuda:12.1.0-devel-ubuntu22.04
RUN apt-get update && apt-get install -y python3 python3-pip
RUN pip install vllm
COPY . /app
WORKDIR /app
EXPOSE 8000
CMD ["python", "-m", "vllm.entrypoints.openai.api_server", \
"--model", "Qwen/Qwen3-Audio-Chat", \
"--served-model-name", "Qwen3-Audio-TTS", \
"--dtype", "auto", \
"--max-model-len", "8000", \
"--trust-remote-code", \
"--limit-mm-per-prompt", "audio=1", \
"--host", "0.0.0.0", "-p", "8000"]
Docker Compose 部署
version: '3.8'
services:
qwen_tts:
build: .
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
ports:
- "8000:8000"
environment:
- CUDA_VISIBLE_DEVICES=0
保存为 docker-compose.yml 并运行:
docker-compose up -d
7、集成示例
Flask API 封装器
from flask import Flask, request, send_file
import openai
import tempfile
import os
app = Flask(__name__)
client = openai.OpenAI(
base_url="http://localhost:8000/v1",
api_key="dummy",
)
@app.route("/tts", methods=["POST"])
def text_to_speech():
text = request.json.get("text")
voice = request.json.get("voice", "Chelsie")
if not text:
return {"error": "No text provided"}, 400
# 调用 Qwen3-Audio 模型
response = client.chat.completions.create(
model="Qwen3-Audio-TTS",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": text
}
]
}
],
audio={"voice": voice},
)
# 保存输出音频
temp_file = tempfile.NamedTemporaryFile(delete=True, suffix=".wav")
temp_file.write(response.choices[0].message.audio.data)
temp_file.flush()
return send_file(temp_file.name, mimetype="audio/wav")
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
8、结束语
Qwen3-Audio 提供了一个真正可与 ElevenLabs 竞争的开源替代方案,具备高质量 TTS、语音克隆和本地部署的优势。使用 vLLM 部署确保了快速的推理,使其适用于实时应用。
关键要点:
- 设置简单,只需几行代码
- 音质可媲美 ElevenLabs
- 支持自定义语音克隆和微调
- 通过 vLLM 高性能推理
- 无 API 限制或订阅成本的本地部署
原文链接: Qwen3 TTS over ElevenLabs: Open Source - Custom Voice Generation and Voice Cloning via vLLM
汇智网翻译整理,转载请标明出处