案例11:视频脚本 + 语音合成 + 字幕生成工具
📑 目录
步骤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 ← 一键脚本