---
name: qwen3-tts-skills
description: 围绕 Qwen3-TTS 提供本地 TTS 工作流。支持：单句语音生成（CustomVoice/VoiceDesign/VoiceClone）、长文稿批量配音生成（文章→配音稿JSON→批量TTS→合并）。适用场景：生成语音、有声书配音、视频旁白、多角色对话朗读、语音克隆。
---

# Qwen3-TTS 技能

将文本转换为高质量语音的完整工作流。

## 🚀 快速开始

### 场景 1：单句语音生成

直接调用脚本生成语音：

```bash
# 中文语音（默认 Vivian 女声）
uv run qwen3-tts-skills/scripts/run_qwen3_tts.py custom-voice \
  --language Chinese \
  --text "你好，欢迎使用语音合成。" \
  --out-dir outputs

# 英文语音（默认 Ryan 男声）
uv run qwen3-tts-skills/scripts/run_qwen3_tts.py custom-voice \
  --language English \
  --text "Hello, welcome to text-to-speech." \
  --out-dir outputs
```

### 场景 2：长文稿批量配音

将文章转换为完整语音文件：

```
用户文稿 → [AI分析生成配音稿] → [用户审核] → [批量TTS] → 完整语音.wav
```

详见下方 **[长文稿批量配音](#-长文稿批量配音生成)** 章节。

---

## 📋 模型选择指南

根据需求选择合适的模型：

| 模式 | 模型 | 适用场景 | 命令 |
|------|------|----------|------|
| **CustomVoice** | `Qwen3-TTS-12Hz-1.7B-CustomVoice` | 使用内置音色 + 情感控制 | `custom-voice` |
| **VoiceDesign** | `Qwen3-TTS-12Hz-1.7B-VoiceDesign` | 用自然语言描述想要的音色 | `voice-design` |
| **VoiceClone** | `Qwen3-TTS-12Hz-1.7B-Base` | 克隆参考音频的声音 | `voice-clone` |
| **Tokenizer** | `Qwen3-TTS-Tokenizer-12Hz` | 音频编解码 | `tokenizer-roundtrip` |

### 内置 Speaker（CustomVoice 模式）

| 语言 | 默认 Speaker | 说明 |
|------|-------------|------|
| Chinese | Vivian | 女声，自然 |
| English | Ryan | 男声 |
| Japanese | Ono_Anna | 女声 |
| Korean | Sohee | 女声 |

---

## 🎙️ 单句语音生成

### CustomVoice（推荐入门）

使用内置音色，可选情感控制：

```bash
uv run qwen3-tts-skills/scripts/run_qwen3_tts.py custom-voice \
  --language Chinese \
  --text "其实我真的有发现，我是一个特别善于观察别人情绪的人。" \
  --speaker Vivian \
  --instruct "轻松愉快的语气" \
  --out-dir outputs
```

**参数说明**：
- `--language`：Chinese / English / Japanese / Korean
- `--speaker`：可选，不填则按语言自动选默认
- `--instruct`：可选，情感/语气控制（如"开心地说"、"低沉缓慢"）
- `--output`：可选，指定输出文件名（默认自动生成时间戳文件名）

### VoiceDesign（设计独特音色）

用自然语言描述想要的音色：

```bash
uv run qwen3-tts-skills/scripts/run_qwen3_tts.py voice-design \
  --language Chinese \
  --text "哥哥，你回来啦，人家等了你好久好久了，要抱抱！" \
  --instruct "体现撒娇稚嫩的萝莉女声，音调偏高且起伏明显。" \
  --out-dir outputs
```

**注意**：VoiceDesign 的 `--instruct` 是**必填**的，用于描述音色特征。

### VoiceClone（语音克隆）

克隆参考音频的声音：

```bash
uv run qwen3-tts-skills/scripts/run_qwen3_tts.py voice-clone \
  --language English \
  --ref-audio "path/to/reference.wav" \
  --ref-text "参考音频的文本内容" \
  --text "要合成的新文本" \
  --out-dir outputs
```

**参数说明**：
- `--ref-audio`：参考音频文件路径或 URL
- `--ref-text`：参考音频对应的文本（必填）
- `--x-vector-only-mode`：可选，仅使用说话人特征（质量可能降低）

**⚠️ 注意**：VoiceClone 不支持 `--instruct` 情感控制。

### Tokenizer（音频编解码）

用于音频的编码和解码验证：

```bash
uv run qwen3-tts-skills/scripts/run_qwen3_tts.py tokenizer-roundtrip \
  --audio "path/to/audio.wav" \
  --out-dir outputs
```

---

## 🎬 长文稿批量配音生成

将长文章、剧本、有声书内容转换为完整语音文件。

### 工作流程

```
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  Step 1         │     │  Step 2         │     │  Step 3         │     │  输出           │
│  AI分析文稿     │ ──→ │  用户审核修改   │ ──→ │  批量生成语音   │ ──→ │  完整语音.wav   │
│  生成配音稿JSON │     │  保存.json文件  │     │  FFmpeg合并     │     │                 │
└─────────────────┘     └─────────────────┘     └─────────────────┘     └─────────────────┘
```

### Step 1：让 AI 生成配音稿

向 AI 说：*"把下面这篇文章转成语音"* + 贴上文章内容

AI 会按 `dubbing-skills/SKILL.md` 的规则：
1. 智能切分（每段 200-300 字）
2. 识别角色（`【旁白】`、`【小明】` 等）
3. 分析情感，生成 `instruct`
4. 输出配音稿 JSON

### Step 2：用户审核修改

检查 JSON 并调整：
- 切分是否合理
- 角色分配是否正确
- 情感 `instruct` 是否合适
- TTS 模式是否需要调整

保存为 `article.dubbing.json` 文件。

### Step 3：批量生成语音

```bash
uv run qwen3-tts-skills/scripts/batch_dubbing.py \
  --input article.dubbing.json \
  --out-dir outputs
```

**参数说明**：

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `--input` | 配音稿 JSON 文件 | 必填 |
| `--out-dir` | 输出目录 | outputs |
| `--silence-gap` | 普通段落间静音（秒）| 0.3 |
| `--character-switch-gap` | 角色切换时静音（秒）| 0.5 |
| `--clean-segments` | 合并后删除中间片段 | 保留 |

### 输出结构

```
outputs/
├── segments/
│   ├── seg_001_旁白.wav
│   ├── seg_002_小明.wav
│   └── ...
├── article.dubbing.json   # 配音稿备份
└── article_final.wav      # 最终完整语音
```

### 支持的三种模式

| 模式 | 说明 | 适用场景 |
|------|------|----------|
| `custom-voice` | 内置音色 + 情感指令 | 大多数场景（默认）|
| `voice-design` | 自然语言描述音色 | 需要特定音色（萝莉、大叔等）|
| `voice-clone` | 克隆参考音频 | 需要真人/特定人声音 |

---

## 🔧 环境配置

### 推荐方式：直接用 uv run

脚本内已声明依赖，无需手动安装：

```bash
uv run qwen3-tts-skills/scripts/run_qwen3_tts.py -h
```

### 创建固定虚拟环境

```bash
uv venv --python 3.12
.\.venv\Scripts\activate
uv pip install -U qwen-tts
```

### 安装 FlashAttention 2（可选，降低显存）

```bash
uv pip install -U flash-attn --no-build-isolation

# 内存 < 96GB 时限制并行任务
MAX_JOBS=4 uv pip install -U flash-attn --no-build-isolation
```

**使用条件**：
- 硬件兼容 FlashAttention 2
- 模型以 `torch.float16` 或 `torch.bfloat16` 加载

### 安装 FFmpeg（批量配音必需）

Windows：
```powershell
choco install ffmpeg -y
```

验证安装：
```bash
ffmpeg -version
```

---

## 📥 模型离线下载

### 使用 ModelScope（中国大陆推荐）

```bash
uv pip install -U modelscope
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local_dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local_dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign
modelscope download --model Qwen/Qwen3-TTS-12Hz-1.7B-Base --local_dir ./Qwen3-TTS-12Hz-1.7B-Base
modelscope download --model Qwen/Qwen3-TTS-Tokenizer-12Hz --local_dir ./Qwen3-TTS-Tokenizer-12Hz
```

### 使用 Hugging Face

```bash
uv pip install -U "huggingface_hub[cli]"
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --local-dir ./Qwen3-TTS-12Hz-1.7B-CustomVoice
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --local-dir ./Qwen3-TTS-12Hz-1.7B-VoiceDesign
huggingface-cli download Qwen/Qwen3-TTS-12Hz-1.7B-Base --local-dir ./Qwen3-TTS-12Hz-1.7B-Base
huggingface-cli download Qwen/Qwen3-TTS-Tokenizer-12Hz --local-dir ./Qwen3-TTS-Tokenizer-12Hz
```

---

## 🖥️ 本地 Web UI 演示

```bash
# 查看帮助
qwen-tts-demo --help

# 启动 CustomVoice
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-CustomVoice --ip 0.0.0.0 --port 8000

# 启动 VoiceDesign
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-VoiceDesign --ip 0.0.0.0 --port 8000
```

### HTTPS 支持（解决麦克风权限问题）

```bash
# 生成自签名证书
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"

# 启用 HTTPS
qwen-tts-demo Qwen/Qwen3-TTS-12Hz-1.7B-Base \
  --ip 0.0.0.0 --port 8000 \
  --ssl-certfile cert.pem \
  --ssl-keyfile key.pem \
  --no-ssl-verify
```

---

## 📚 参考文档

| 文档 | 说明 |
|------|------|
| `dubbing-skills/SKILL.md` | 配音稿生成规范（AI 阅读用） |
| `dubbing-skills/references/dubbing_format.md` | 配音稿 JSON 格式详细规范 |
| `dubbing-skills/references/examples.md` | 各种场景的配音稿示例 |
| `references/python_api.md` | Python API 集成指南 |

---

## ⚡ 性能参数

```bash
uv run qwen3-tts-skills/scripts/run_qwen3_tts.py custom-voice \
  --device-map cuda:0 \
  --dtype bfloat16 \
  --attn flash_attention_2 \
  --language Chinese \
  --text "测试文本" \
  --out-dir outputs
```

| 参数 | 说明 |
|------|------|
| `--device-map` | 指定 GPU（如 `cuda:0`）或 CPU |
| `--dtype` | 数据类型：auto / bfloat16 / float16 / float32 |
| `--attn` | 注意力实现：auto / flash_attention_2 |

---

## ❓ 常见问题

### Windows 路径问题

绝对路径需要用双引号包裹：

```bash
uv run "C:/Users/lee/.config/alma/skills/qwen3-tts-skills/scripts/run_qwen3_tts.py" -h
```

### SoX 警告

如果看到 `SoX could not be found!`，安装 SoX（不影响功能，只是消除警告）：

```powershell
choco install sox.portable -y
```

### 模型下载慢

优先使用 ModelScope（中国大陆）或提前下载到本地目录。
