用 Coze 工作流搭一套口播视频自动化流水线:从文案到成片全流程拆解
最近帮团队搭了一套口播视频的全自动生产链路,核心用的是 Coze 工作流 + 若干 API 节点,实现「输入关键词 → 输出带字幕短视频」的完整闭环。这篇文章把整个工程思路和踩坑记录下来,供有类似需求的同学参考。
背景:为什么要做这套系统
口播类短视频的生产成本主要集中在三个环节:
- 文案创作:找选题、写脚本、打磨语气,人均 30-60 分钟/条
- 录制或数字人渲染:真人出镜或数字人合成
- 剪辑上字幕:对齐时间轴、加字幕、调色调速
如果每条视频都手工走这三步,日产 5 条就已经是天花板。
目标是:批量化、模板化、最小人工干预。Coze 工作流的可视化节点编排 + 插件生态,正好契合这个诉求。
系统架构
用户输入(关键词/主题)
│
▼
[Coze 工作流]
├─ LLM 节点:生成口播文案(8 段式结构)
├─ 代码节点:文本清洗 + 分段
├─ HTTP 节点:调用 ASR/TTS API 生成语音
├─ HTTP 节点:渲染字幕 SRT
└─ HTTP 节点:ffmpeg 合成最终视频
│
▼
OSS 存储 → 返回视频链接
整个链路在 Coze 工作流内编排,对外只暴露一个输入参数(主题关键词),输出视频 URL。
核心节点详解
1. 文案生成节点(LLM 节点)
Prompt 模板采用 8 段式口播结构:
角色:你是一位经验丰富的短视频文案策划。
任务:围绕「{topic}」,写一段 300-400 字的口播稿。
结构要求(严格按以下 8 段输出,用 [SEG] 分隔):
[SEG1] 开场钩子(1句话,制造好奇心或痛点共鸣)
[SEG2] 问题放大(2-3句,描述该问题的普遍性)
[SEG3] 解决方案预告(1句,吊胃口)
[SEG4] 核心方法讲解(4-5句,干货主体)
[SEG5] 具体步骤/案例(3-4句,可执行)
[SEG6] 效果展示(2-3句,数据/对比)
[SEG7] 反转或升华(1-2句,打破认知)
[SEG8] 行动号召(1句,CTA)
语气:口语化,避免书面腔,禁止「首先其次最后」等套话。
关键点:用 [SEG] 标记分段,后续代码节点直接 split('[SEG]') 处理,每段对应字幕一屏。
2. 代码节点:文本处理
def main(args):
text = args['llm_output']
segments = [s.strip() for s in text.split('[SEG]') if s.strip()]
# 移除段落编号前缀(如 "1 " "2 " 等)
import re
cleaned = []
for seg in segments:
seg = re.sub(r'^\d+\s*', '', seg)
cleaned.append(seg)
# 估算每段语速(每字 0.3s,加 0.5s 停顿)
timings = []
cursor = 0.0
for seg in cleaned:
duration = len(seg) * 0.3 + 0.5
timings.append({'start': cursor, 'end': cursor + duration, 'text': seg})
cursor += duration + 0.2
return {
'segments': cleaned,
'timings': timings,
'total_duration': cursor,
'full_text': ''.join(cleaned)
}
3. TTS/语音合成节点
通过 HTTP 节点调用语音合成 API,参数结构:
{
"text": "{{full_text}}",
"voice_id": "male_confident_01",
"speed": 1.1,
"format": "mp3"
}
返回的音频文件 URL 传给后续的视频合成节点。
注意:语音合成的实际时长和代码节点估算时长可能有偏差,后续字幕对齐用 ASR 回矫比手动估算精度高很多。
4. ASR 字幕回矫节点
把 TTS 生成的音频送回 ASR(语音识别)获取精准时间轴:
POST /asr/transcribe
{
"audio_url": "{{tts_audio_url}}",
"language": "zh",
"output_format": "srt"
}
这一步是精度保证的关键——TTS 生成的语音在句末停顿、语气词处会有额外时长,ASR 回矫后字幕时间轴误差能控制在 ±0.1s 内。
5. ffmpeg 视频合成节点
最终通过 HTTP 节点调用服务端的合成接口:
{
"background_video": "{{bg_video_url}}",
"audio": "{{tts_audio_url}}",
"subtitle_srt": "{{srt_content}}",
"subtitle_style": {
"font_size": 48,
"font_color": "white",
"stroke_color": "black",
"stroke_width": 2,
"position": "bottom_center"
}
}
服务端执行的 ffmpeg 命令核心:
ffmpeg -i background.mp4 -i voice.mp3 \
-vf "subtitles=subs.srt:force_style='FontSize=48,PrimaryColour=&H00ffffff,OutlineColour=&H00000000,Outline=2'" \
-c:v libx264 -c:a aac -shortest output.mp4
工作流编排截图说明
开始
│
├──[LLM节点]──文案生成
│ │
│ [代码节点]──文本解析+时间估算
│ │
│ [HTTP节点]──TTS语音合成
│ │
│ [HTTP节点]──ASR字幕回矫
│ │
│ [HTTP节点]──ffmpeg视频合成
│ │
结束──返回视频URL
整个工作流约 8-12 个节点,在 Coze 可视化编辑器里拖拽完成,不需要写框架代码。
踩坑记录
坑 1:LLM 节点输出不稳定
LLM 偶尔会在 [SEG] 前后加换行或序号,导致代码节点 split 结果数量不对。
解法:在代码节点加正则清洗,同时在 LLM Prompt 末尾加强制约束:
重要:只输出 [SEG1]...[SEG8] 内容,不要输出任何其他文字。
坑 2:字幕中文乱码
ffmpeg 处理中文字幕时,字体路径和编码设置不对会乱码。
解法:
-vf "subtitles=subs.srt:fontsdir=/usr/share/fonts/chinese:force_style='Fontname=PingFang SC'"
服务器上提前装好中文字体包。
坑 3:工作流节点间变量命名冲突
Coze 工作流里,不同节点的同名输出变量会互相覆盖。
解法:养成按节点编号命名的习惯,如 node2_text、node4_srt_url,不用 output、result 这种通用名。
坑 4:HTTP 节点超时
视频合成耗时较长(30-120s),Coze HTTP 节点默认超时可能触发。
解法:合成节点改为异步模式——先发起任务拿到 task_id,再用轮询节点(循环 + 等待)查询状态,确认完成后取结果 URL。
效果数据
接入这套流水线后,团队的内容生产效率变化:
| 指标 | 之前(纯人工) | 之后(工作流辅助) |
|---|---|---|
| 单条视频耗时 | 45-90 分钟 | 8-15 分钟(人工审核+微调) |
| 日产量上限 | 5-8 条 | 20-30 条 |
| 文案一次通过率 | 60% | 82%(Prompt 迭代后) |
模板资源
目前整理了 200+ 套按行业/品类分类的工作流模板(电商带货、知识付费、工具测评等),在 三千AI工作台 可以直接调取使用,不需要从头搭建。
总结
Coze 工作流做口播视频自动化的核心价值不是替代创作,而是把重复的流程性工作固化成可复用的管道。
几个关键经验:
- LLM 节点专注结构化输出,用标记符([SEG])而非自然语言分段
- 代码节点做数据清洗和格式转换,不要指望 LLM 直接输出干净数据
- 异步 HTTP 节点处理耗时任务,轮询 + 等待比同步超时更稳
- ASR 回矫字幕时间轴,比纯估算精度高一个量级
有问题欢迎在评论区交流。