用 Coze 工作流搭一套口播视频自动化流水线:从文案到成片全流程拆解

1 阅读6分钟

用 Coze 工作流搭一套口播视频自动化流水线:从文案到成片全流程拆解

最近帮团队搭了一套口播视频的全自动生产链路,核心用的是 Coze 工作流 + 若干 API 节点,实现「输入关键词 → 输出带字幕短视频」的完整闭环。这篇文章把整个工程思路和踩坑记录下来,供有类似需求的同学参考。


背景:为什么要做这套系统

口播类短视频的生产成本主要集中在三个环节:

  1. 文案创作:找选题、写脚本、打磨语气,人均 30-60 分钟/条
  2. 录制或数字人渲染:真人出镜或数字人合成
  3. 剪辑上字幕:对齐时间轴、加字幕、调色调速

如果每条视频都手工走这三步,日产 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_textnode4_srt_url,不用 outputresult 这种通用名。

坑 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 回矫字幕时间轴,比纯估算精度高一个量级

有问题欢迎在评论区交流。