# Space Video Audio

> 视频配音与配乐。三件事——(1) 配音：把口播稿用 TTS 生成旁白音频；(2) 配乐：根据视频内容/节奏匹配合适的 BGM，从免版权曲库找到并下载；(3) 混音：把 BGM + 旁白 + 视频用 ffmpeg 合成，自动压音(BGM 在人声下自动变小)、响度归一、淡入淡出、对齐视频长度。当用户说「配音」「配乐」「加 BGM」「背景音乐」「找音乐」「给视频配旁白」「TTS 口播」「混音」「audio」时触发。

- Skill: `spacezephyr/space-video-audio` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add spacezephyr/space-video-audio`
- Raw SKILL.md: https://api.skillmd.com/api/skills/spacezephyr/space-video-audio/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: spacezephyr (https://skillmd.com/u/spacezephyr)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/spacezephyr/space-video-audio

---


# space-video-audio · 配音与配乐

给视频补上声音：**旁白(TTS) + 背景音乐(BGM) + 混音**。三块可单用，也能一次做完。

## 一、配音（TTS 旁白）

把口播稿变成旁白音频。按可用后端分档，**优先质量高的**：

| 档 | 后端 | 说明 |
|---|---|---|
| 高 | IndexTTS2 / 克隆音色 | 有本地模型/配置时用，最像真人、可定制音色 |
| **中（默认）** | `edge-tts` | 免费、自然，中文音色好。`uvx edge-tts` 直接跑 |
| 兜底 | macOS `say` | 无网络/无依赖时用，机械感强 |

edge-tts 生成（推荐中文音色 `zh-CN-XiaoxiaoNeural` / `zh-CN-YunxiNeural`）：

```bash
uvx edge-tts --voice zh-CN-YunxiNeural --rate=+8% \
  --text "$(cat 02_脚本/口播.txt)" --write-media 05_音频/voice.mp3
```

- 长稿按句/段分段生成再拼接，避免一句错整条重来
- 生成后走 `space-video-subtitle` 用**旁白音频**重转写做字幕对齐（TTS 段时长只是规划元数据，不能当字幕时间轴）
- 语速：口播偏快更精神，中文 `+8%~+15%` 常用

## 二、配乐（找 BGM 并下载）

### 选曲：先定情绪，再找曲

根据视频内容和节奏定 BGM 的情绪与 BPM：

| 视频类型 | BGM 方向 |
|---|---|
| 干货/教程 | 轻快 lo-fi / 简约电子，低存在感，不抢话 |
| 产品/科技 | 干净的合成器 pad / 节奏感电子 |
| 生活/小红书 | 明亮 ukulele / 轻流行 / 暖钢琴 |
| 观点/严肃 | 极简钢琴 / 环境氛围 |
| 快节奏盘点 | 有鼓点的 upbeat，卡点用 |

### 免版权来源（务必看授权）

见 `references/music-sources.md`。核心几个：
- **Pixabay Music**：免费、多数免署名（需网页/API）
- **YouTube Audio Library**：免费，部分需署名（需登录）
- **Free Music Archive / ccMixter**：CC 授权，多数需署名
- **Incompetech**（Kevin MacLeod）：CC-BY，需署名

### 下载

- 有直链的 → `curl -L -o 05_音频/bgm.mp3 "<直链>"`
- YouTube/B站 的免版权曲目 → `yt-dlp -x --audio-format mp3 -o 05_音频/bgm.mp3 "<URL>"`

**红线**：只用有权使用的曲目；需署名的记下来放视频简介；不搬运受版权保护的流行音乐；不确定授权就不用。选曲/授权是用户的决定，拿不准先问。

## 三、混音（合成到视频）

用 `scripts/mix.sh`，一条命令把 BGM(+旁白) 压进视频：

```bash
bash scripts/mix.sh --video in.mp4 --bgm bgm.mp3 [--voice voice.mp3] \
  --out out.mp4 [--bgm-db -20] [--fade 1.0] [--duck]
```

管线做的事（见 `references/mixing-recipes.md` 全套 ffmpeg）：
1. **对齐长度**：BGM 太短自动循环，太长裁切到视频时长
2. **响度归一**：`loudnorm` 把整体拉到 -14 LUFS 左右（平台友好）
3. **压音 ducking**：有旁白时用 `sidechaincompress`，人声一响 BGM 自动下沉，人声停 BGM 回来
4. **淡入淡出**：首尾 `afade`，别硬切
5. **BGM 音量**：无旁白约 -12~-16dB，有旁白垫底约 -20~-26dB
6. **封装**：`-c:v copy` 不重编码画面，只替换/混合音轨

## 交接

- 上游：`space-video-script` 的口播稿（→旁白）、`space-video-edit` 的成片、`space-video-broll` 的 B-roll
- 下游：带声音的成片 → 发布，或回 `space-video-edit` 做最终封装

## 依赖

`ffmpeg`（需带 loudnorm/sidechaincompress，本机已支持）、`yt-dlp`、`uvx`（跑 edge-tts）；克隆音色档需 IndexTTS2 环境。

## 核心原则

- **BGM 垫底不抢话**：有旁白必开 ducking，BGM 只做氛围
- **响度归一**：别让视频忽大忽小，统一到 -14 LUFS
- **授权优先**：只用免版权/有权曲目，需署名的记下来
- **不重编码画面**：混音只动音轨，`-c:v copy` 保画质

