← 返回博客

案例11:视频脚本 + 语音合成 + 字幕生成工具

📑 目录

  1. 整体工具链架构
  2. 脚本生成模块
  3. 语音合成(TTS)模块
  4. 字幕生成模块
  5. 一键全流程管线
  6. 批量生产管线
  7. 工具沉淀与自动化部署

步骤1:整体工具链架构

工具链全景

前置环境准备

# 1. 安装 Edge TTS(免费,中文效果好,推荐)
pip install edge-tts

# 2. 安装 ffmpeg(音视频处理)
yum install -y ffmpeg        # CentOS/RHEL
# 或
apt install -y ffmpeg        # Ubuntu/Debian

# 3. 确认 OpenClaw 可执行 shell 命令
openclaw status

# 4. 创建项目目录
mkdir -p ./video-pipeline/{scripts,audio,subtitles,output}

# 验证安装
edge-tts --version
ffmpeg -version

工具选型对比

本手册以 Edge TTS 为主力工具(免费+简单+中文效果好),其他方案作为备选。

📌 说明:本案例的核心是将”脚本生成”、“语音合成”、“字幕生成”三个模块串联为一条完整的自动化管线。

步骤2:脚本生成模块

一键生成视频脚本

请基于以下参数生成视频脚本:

主题:[填写,如"AI在教育行业的最新应用"]
时长:[60秒 / 120秒 / 300秒]
平台:[抖音 / 视频号 / B站]
风格:[轻松幽默 / 严肃专业 / 情感故事 / 快节奏资讯 / 教程科普]

生成以下文件保存到 ./video-pipeline/scripts/[主题]/ :

1. 分镜脚本 → storyboard.json
   - 每个分镜包含:时长/画面描述/旁白/字幕/转场
   - 包含AI视频生成英文提示词

2. 口播文案 → narration.md
   - 含情感标注、停顿标记、重读标记

3. 纯口播文本 → narration-clean.txt
   - 无任何标注,纯文字
   - 用于TTS语音合成和提词器

4. 发布元数据 → publish-meta.md
   - 视频标题(3个候选)
   - 视频简介
   - 话题标签

生成完成后列出所有文件。

脚本质量检查

请检查生成的脚本:

1. 各分镜时长之和是否等于总时长?
2. 旁白字数是否与时长匹配?(中文口语约4字/秒)
3. 开头5秒是否有强钩子?
4. 结尾是否有行动引导?
5. 口播文本是否口语化?
6. 节奏是否有起伏?

如有问题请修正。

步骤3:语音合成(TTS)模块

方案A:Edge TTS(推荐,免费)

# 安装
pip install edge-tts

# 查看可用中文语音
edge-tts --list-voices | grep zh

# 常用中文语音:
# zh-CN-XiaoxiaoNeural   — 女声,自然温暖(推荐)
# zh-CN-YunxiNeural      — 男声,年轻阳光
# zh-CN-XiaoyiNeural     — 女声,活泼可爱
# zh-CN-YunjianNeural    — 男声,沉稳专业
# zh-CN-XiaohanNeural    — 女声,知性优雅

# 基本使用:将纯文本转为语音
edge-tts \
  --text "你好,今天我们来聊聊AI的最新进展" \
  --voice zh-CN-XiaoxiaoNeural \
  --rate "+0%" \
  --volume "+0%" \
  --pitch "+0Hz" \
  --write-media output.mp3

# 从文件读取文本生成语音
edge-tts \
  --file ./video-pipeline/scripts/[主题]/narration-clean.txt \
  --voice zh-CN-XiaoxiaoNeural \
  --rate "+5%" \
  --write-media ./video-pipeline/audio/[主题].mp3 \
  --write-subtitles ./video-pipeline/audio/[主题]-words.vtt

# 调节参数:
# --rate  语速:-50% 到 +100%
# --volume 音量:-100% 到 +100%
# --pitch 音调:-50Hz 到 +50Hz

让 OpenClaw 执行 TTS

# 在 OpenClaw 对话中直接执行

请帮我执行以下操作:

1. 读取 ./video-pipeline/scripts/[主题]/narration-clean.txt
2. 使用 edge-tts 生成语音:
   - 语音:zh-CN-XiaoxiaoNeural(女声)
   - 语速:+5%(稍快,适合短视频)
   - 输出到 ./video-pipeline/audio/[主题].mp3
3. 同时生成带时间戳的字幕文件:
   - 输出到 ./video-pipeline/audio/[主题]-words.vtt
4. 完成后告诉我:
   - 音频时长
   - 音频文件大小
   - 是否与预期时长匹配

请执行并报告结果。

方案B:阿里云 TTS(付费,高质量)

# 安装阿里云 TTS SDK
pip install alibabacloud_nls

# 配置 API Key(环境变量)
export ALIBABA_ACCESS_KEY_ID="***"
export ALIBABA_ACCESS_KEY_SECRET="***"

# Python 脚本调用阿里云 TTS
import json
from alibabacloud_nls import SpeechSynthesizer

client = SpeechSynthesizer(
    appkey="你的AppKey",
    token="你的Token",
    url="wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1"
)

# 读取口播文本
with open("./video-pipeline/scripts/[主题]/narration-clean.txt", "r") as f:
    text = f.read()

# 合成语音
audio = client.synthesize(
    text=text,
    voice="xiaoyun",        # 语音人
    format="mp3",           # 输出格式
    sample_rate=48000,      # 采样率
    volume=50,              # 音量 0-100
    speech_rate=0,          # 语速 -500~500
    pitch_rate=0            # 音调 -500~500
)

# 保存音频
with open("./video-pipeline/audio/[主题].mp3", "wb") as f:
    f.write(audio)

print("语音合成完成")

⚠️ 注意:阿里云 TTS 需要开通智能语音交互服务并获取 AppKey 和 Token。费用按调用量计算。

方案C:讯飞 TTS(中文效果最佳)

# 安装讯飞 SDK
pip install xf_tts

# 配置环境变量
export XF_APPID="***"
export XF_API_KEY="***"
export XF_API_SECRET="***"

# Python 脚本
from xf_tts import XFTTS

tts = XFTTS(
    appid="***",
    api_key="***",
    api_secret="***"
)

with open("./video-pipeline/scripts/[主题]/narration-clean.txt", "r") as f:
    text = f.read()

audio = tts.synthesize(
    text=text,
    voice="xiaoyan",        # 小燕(经典女声)
    speed=50,               # 语速
    volume=50,              # 音量
    pitch=50                # 音调
)

with open("./video-pipeline/audio/[主题].mp3", "wb") as f:
    f.write(audio)

多声音版本对比

# 用不同声音生成同一文案,选择最佳

请为以下文案生成3个不同声音的版本:

文案:[narration-clean.txt 的内容]

版本1 — 女声自然温暖
edge-tts --file narration-clean.txt \
  --voice zh-CN-XiaoxiaoNeural \
  --rate "+5%" \
  --write-media audio-xiaoxiao.mp3

版本2 — 男声年轻阳光
edge-tts --file narration-clean.txt \
  --voice zh-CN-YunxiNeural \
  --rate "+5%" \
  --write-media audio-yunxi.mp3

版本3 — 女声知性优雅
edge-tts --file narration-clean.txt \
  --voice zh-CN-XiaohanNeural \
  --rate "+0%" \
  --write-media audio-xiaohan.mp3

生成后列出3个文件,让我试听选择。

音频质量检查

# 检查生成的音频文件

请检查音频文件 ./video-pipeline/audio/[主题].mp3:

1. 音频时长是多少?是否与预期时长匹配?
2. 文件大小是否合理?
3. 是否有明显的合成痕迹(断句不自然、语调异常)?
4. 语速是否合适?

如需调整:
# 语速偏慢 → 提高 --rate 值(如 +10%)
# 语速偏快 → 降低 --rate 值(如 -5%)
# 声音太尖 → 降低 --pitch 值(如 -5Hz)
# 声音太低 → 提高 --pitch 值(如 +5Hz)

📌 推荐方案:Edge TTS — 免费、无需API Key、中文语音质量优秀、支持离线。

步骤4:字幕生成模块

从 TTS 自动生成字幕(最准确)

# edge-tts 可以直接生成带精确时间戳的字幕

edge-tts \
  --file ./video-pipeline/scripts/[主题]/narration-clean.txt \
  --voice zh-CN-XiaoxiaoNeural \
  --write-media ./video-pipeline/audio/[主题].mp3 \
  --write-subtitles ./video-pipeline/subtitles/[主题].vtt

# 生成的 VTT 文件包含精确到毫秒的时间戳
# 格式示例:
WEBVTT

00:00:00.000 --> 00:00:03.500
你知道吗?就在今年,

00:00:03.500 --> 00:00:07.000
AI已经能够独立诊断疾病了

VTT 转 SRT(通用格式)

# VTT 和 SRT 格式几乎相同,只需去掉 VTT 的 WEBVTT 头部

# 方法1:用 sed 转换
sed '1,2d' ./video-pipeline/subtitles/[主题].vtt \
  > ./video-pipeline/subtitles/[主题].srt

# 方法2:用 ffmpeg 转换
ffmpeg -i ./video-pipeline/subtitles/[主题].vtt \
  ./video-pipeline/subtitles/[主题].srt

# 方法3:让 OpenClaw 写转换脚本
请写一个 Python 脚本,将 VTT 文件转为 SRT 格式:
- 读取 VTT 文件
- 去掉 WEBVTT 头部
- 保留时间戳和文本
- 保存为 SRT 格式
- 执行转换

生成 ASS 高级字幕(带样式)

# ASS 格式支持丰富的字幕样式(字体、颜色、位置、动画)

请基于口播文案生成 ASS 格式字幕:

主题:[主题]
视频分辨率:1080×1920(竖屏)

ASS 样式要求:
- 字体:思源黑体 / 微软雅黑
- 字号:48px
- 颜色:白色文字 + 黑色描边
- 位置:底部居中
- 每行不超过20个字符
- 超出自动换行

生成 ASS 文件:
保存到 ./video-pipeline/subtitles/[主题].ass

ASS 文件头部示例:
[Script Info]
Title: [主题]
ScriptType: v4.00+
PlayResX: 1080
PlayResY: 1920

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Microsoft YaHei,48,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,0,2,10,10,60,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text

字幕质量检查

# 检查字幕文件

请检查字幕文件 ./video-pipeline/subtitles/[主题].srt:

1. 总段数是否合理?
2. 每段是否不超过2行?
3. 每行是否不超过20个中文字符?
4. 时间戳是否连续且无重叠?
5. 最后一段的结束时间是否等于音频总时长?
6. 是否有断句不当?

如有问题请修正并重新生成。

平台适配字幕

# 为不同平台生成适配版字幕

请基于原始字幕,生成以下平台适配版本:

抖音版(subtitle-douyin.srt):
- 每行不超过15个字符
- 节奏快,每段2-3秒
- 适合竖屏手机小屏幕

B站版(subtitle-bilibili.srt):
- 每行不超过22个字符
- 节奏适中,每段3-4秒
- 适合横屏

视频号版(subtitle-videoaccount.srt):
- 每行不超过18个字符
- 节奏中等

每个版本独立保存到 ./video-pipeline/subtitles/ 目录。

步骤5:一键全流程管线

一条指令完成全流程

请帮我执行完整的视频脚本+语音+字幕生成流程:

主题:[填写]
时长:[60秒/120秒/300秒]
平台:[抖音/视频号/B站]
风格:[填写]
语音:zh-CN-XiaoxiaoNeural(女声)

执行流程:
1. 生成分镜脚本 → ./video-pipeline/scripts/[主题]/storyboard.json
2. 生成口播文案 → ./video-pipeline/scripts/[主题]/narration.md
3. 提取纯文本 → ./video-pipeline/scripts/[主题]/narration-clean.txt
4. 执行 TTS 语音合成 → ./video-pipeline/audio/[主题].mp3
5. 生成 VTT 字幕 → ./video-pipeline/subtitles/[主题].vtt
6. 转换 SRT 字幕 → ./video-pipeline/subtitles/[主题].srt
7. 生成平台适配字幕 → ./video-pipeline/subtitles/ 下各平台版本
8. 生成发布元数据 → ./video-pipeline/scripts/[主题]/publish-meta.md

每步完成后报告进度。
全部完成后:
- 列出所有生成的文件
- 报告音频时长
- 报告各文件大小
- 检查各环节是否一致(旁白字数 vs 音频时长 vs 字幕段数)

可选:音视频合成

# 如果有画面素材,可以将音频 + 画面合成为视频

# 方式1:静态图片 + 音频 = 视频
ffmpeg -loop 1 \
  -i ./video-pipeline/images/cover.png \
  -i ./video-pipeline/audio/[主题].mp3 \
  -c:v libx264 \
  -tune stillimage \
  -pix_fmt yuv420p \
  -c:a aac \
  -b:a 192k \
  -shortest \
  ./video-pipeline/output/[主题].mp4

# 方式2:多张图片轮播 + 音频 = 视频
# 先用脚本生成图片列表文件
# 再用 ffmpeg 合成

# 方式3:让 OpenClaw 生成视频片段 + 合成
# 使用 video_generate 工具生成各分镜画面
# 再用 ffmpeg 拼接

生成 Shell 自动化脚本

# 让 OpenClaw 生成可复用的 Shell 脚本

请帮我生成一个 Shell 脚本,实现一键全流程:

脚本名称:./video-pipeline/generate.sh

脚本功能:
1. 接收参数:主题、时长、平台、风格、语音
2. 创建项目目录
3. 调用 OpenClaw API 生成脚本(或直接读取已有脚本)
4. 执行 edge-tts 生成语音
5. 生成字幕(VTT + SRT)
6. 生成平台适配字幕
7. 输出报告

脚本使用方式:
./generate.sh "AI教育应用" 60 douyin humorous zh-CN-XiaoxiaoNeural

请生成完整可运行的脚本。

步骤6:批量生产管线

批量主题处理

# 批量生成多个主题的完整管线

请帮我批量处理以下主题:

主题列表:
1. "AI在教育行业的最新应用"
2. "大模型如何改变医疗"
3. "数字人技术发展趋势"
4. "智能客服行业解读"
5. "AI视频生成技术突破"

统一参数:
- 时长:60秒
- 平台:抖音
- 风格:news(快节奏资讯)
- 语音:zh-CN-XiaoxiaoNeural

对每个主题执行完整流程:
1. 生成脚本(分镜+旁白+纯文本)
2. 执行 TTS 语音合成
3. 生成字幕(VTT + SRT)
4. 生成发布元数据

输出目录:
./video-pipeline/batch-[日期]/
├── topic-01-ai-education/
│   ├── scripts/
│   │   ├── storyboard.json
│   │   ├── narration.md
│   │   ├── narration-clean.txt
│   │   └── publish-meta.md
│   ├── audio/
│   │   └── topic-01.mp3
│   └── subtitles/
│       ├── topic-01.vtt
│       └── topic-01.srt
├── topic-02-ai-healthcare/
│   └── ...
...

逐个主题执行,每完成一个报告进度。
全部完成后生成汇总报告。

批量汇总报告

# 批量处理完成后生成汇总报告

请生成批量生产汇总报告:

主题 | 音频时长 | 音频大小 | 字幕段数 | 旁白字数 | 状态
-----|---------|---------|---------|---------|------
AI教育应用 | 58s | 1.2MB | 18 | 232 | ✅
大模型医疗 | 61s | 1.3MB | 19 | 244 | ✅
数字人技术 | 59s | 1.2MB | 17 | 236 | ✅
智能客服 | 60s | 1.2MB | 18 | 240 | ✅
AI视频生成 | 57s | 1.1MB | 16 | 228 | ✅

异常标记:
- 音频时长偏差 > 3秒的
- 字幕段数异常的
- 生成失败的

保存到 ./video-pipeline/batch-[日期]/summary.md

步骤7:工具沉淀与自动化部署

沉淀视频生产管线技能

请帮我创建技能文件 workspace/skills/video-pipeline/SKILL.md:

## 触发条件
用户要求生成"视频脚本+语音+字幕"或"一键视频生产"

## 输入参数
- 主题(必须)
- 时长(60秒/120秒/300秒)
- 平台(抖音/视频号/B站/小红书)
- 风格(humorous/professional/emotional/news/tutorial)
- 语音(zh-CN-XiaoxiaoNeural 等,默认 Xiaoxiao)

## 执行流程
1. 生成分镜脚本(JSON)
2. 生成口播文案(Markdown + 纯文本)
3. 执行 edge-tts 语音合成
4. 生成字幕(VTT + SRT + 平台适配)
5. 生成发布元数据(标题/简介/标签)

## 输出目录
./video-pipeline/[主题]/
├── scripts/
│   ├── storyboard.json
│   ├── narration.md
│   ├── narration-clean.txt
│   └── publish-meta.md
├── audio/
│   └── [主题].mp3
└── subtitles/
    ├── [主题].vtt
    ├── [主题].srt
    └── [主题]-douyin.srt

## TTS 配置
- 工具:edge-tts
- 默认语音:zh-CN-XiaoxiaoNeural
- 默认语速:+5%
- 备选语音:zh-CN-YunxiNeural(男声)

创建后,下次只需说:
"用视频生产管线,主题:[主题]"
即可一键生成脚本+语音+字幕。

定时自动生产

# 创建定时任务:每天自动生成当日热点视频脚本

请帮我创建一个定时任务:

- 名称:每日视频脚本生产
- 时间:每天早上7点
- 任务内容:
  1. 搜索当日3个热点话题
  2. 对每个话题生成60秒短视频脚本
  3. 执行 TTS 语音合成
  4. 生成字幕
  5. 保存到 ./video-pipeline/daily/YYYY-MM-DD/ 目录
  6. 生成生产报告

注意:
- 只生成脚本和语音,不生成视频画面
- 视频画面由人工审核后决定是否制作
- 如果某天没有合适的热点,跳过并记录

完整项目目录参考

video-pipeline/
├── scripts/                          ← 脚本生成
│   ├── [主题A]/
│   │   ├── storyboard.json           ← 分镜脚本
│   │   ├── narration.md              ← 口播文案(标注版)
│   │   ├── narration-clean.txt       ← 口播文案(纯文本)
│   │   └── publish-meta.md           ← 发布元数据
│   └── [主题B]/
├── audio/                            ← 语音合成
│   ├── [主题A].mp3                   ← TTS 音频
│   ├── [主题A]-words.vtt             ← 逐词时间戳
│   └── [主题B].mp3
├── subtitles/                        ← 字幕文件
│   ├── [主题A].vtt                   ← VTT 字幕
│   ├── [主题A].srt                   ← SRT 字幕
│   ├── [主题A]-douyin.srt            ← 抖音适配版
│   ├── [主题A]-bilibili.srt          ← B站适配版
│   └── ...
├── output/                           ← 最终输出
│   ├── [主题A].mp4                   ← 合成视频(可选)
│   └── ...
├── batch-20260602/                   ← 批量生产
│   ├── topic-01/
│   ├── topic-02/
│   └── summary.md                    ← 汇总报告
├── daily/                            ← 每日自动生产
│   └── 2026-06-02/
│       ├── topic-01/
│       ├── topic-02/
│       └── topic-03/
└── generate.sh                       ← 一键脚本