用 GPT-4 和 DALL-E3 搭营销号视频流水线:长文分镜与角色一致性怎么解
从一段文案自动生成营销号风格短视频,流程大致是切片、TTS、结构化分镜、逐镜出图、合成视频。本文拆解每一步的工程细节,并重点讨论两个真正难的问题:多镜头之间主角和画风如何保持一致,以及长文本如何塞进上下文;同时给出可操作的缓解方案与检查清单。
一个「文案进、视频出」的自动化想法
短视频平台上有一类内容高度模板化:一段文案配 AI 配音,几张风格相近的图片轮播,字幕在底部滚动。既然文案、配音、画面都可以由模型生成,就有人把这条制作流程做成自动化流水线,接进自己的 AI 应用:粘贴一篇文章,选个音色,点一下,等几分钟拿到成片。视频生成模型尚未开放时,动态素材先用文生图顶替,等模型可用了再替换掉其中一步。
这类项目的价值并不在于「没人做过」——按关键词抓图配 TTS 的流水线早就出现过,剪辑软件也自带图文成片。真正有讨论价值的是把长文本、分镜、配音、合成串成一站式无人值守流程,以及由此暴露的两个关键问题:多镜头之间主角与画风的一致性,以及长文本如何塞进模型上下文。
流水线的六个阶段
一条完整的链路大致是这样的,每一步的产物都保存到文件,方便单步重跑。
| 阶段 | 输入 | 输出 | 关键点 |
|---|---|---|---|
| 文案准备 | 原始文章 | 清洗后的纯文本 | 去掉多余空行、markdown 符号、参考链接 |
| 切片分段 | 纯文本 | 段落列表 + 索引 | 按句边界切,避免断在引号或数字中间 |
| TTS 合成 | 段落列表 | 音频分片 + 合轨 + 每段时长 | 参数统一,拼接后做响度归一化 |
| 分镜生成 | 段落 + 时长 | JSON 分镜表 | 用结构化输出,字段固定 |
| 出图 | 分镜表 | 图片序列 | 统一尺寸与风格前缀 |
| 合成 | 图片 + 音轨 | 视频文件 | 以实际音频时长为准 |
切片:按语义而不是字数
不要把文本按固定字数切成片段,因为那样很容易切在句子中间,导致配音听起来一顿一顿,分镜也难对应。合理的做法是先按句号、问号、感叹号、分号和换行切成最小单元,再把过短的句子合并到长度上限附近,同时保留原文索引,便于回溯和校对。字幕、配音片段、分镜三者应当共用同一套片段编号,这是全流程对齐的基础。
TTS:先分片,再拼成一条音轨
分片合成有一个容易被忽略的好处:可以直接拿到每一段的真实时长,用来决定每张图的停留时间,音画同步问题自然就解决了。拼接时注意三点:
- 所有分片使用同一音色、同一语速、同一采样率,否则接缝处会有明显顿挫;
- 拼接完成后统一做一次响度归一化,避免音量忽大忽小;
- 把每段时长写入中间文件,供分镜阶段使用。
分镜:让模型输出结构化 JSON
分镜阶段的输入是「段落文本 + 该段音频时长」,输出是一张表。用 JSON 模式或结构化输出,字段固定,缺字段时给默认值:
{
"scenes": [
{
"id": 1,
"text_ref": [1, 2],
"duration_sec": 4.2,
"visual_prompt": "雨夜的便利店门口,暖色灯光,平面插画风格",
"camera": "slow zoom in",
"caption": "字幕文本"
}
]
}
提示词里明确约束:一个分镜对应一到两个段落,画面描述只写可视元素,不要写抽象情绪词,不要在图里生成文字(字幕后期加更可控)。模型给出的时长只是估计,最终以音频真实时长为准。
出图:把风格写进固定前缀
每次调用生图接口时,在画面描述前拼上同一段风格前缀,包括画风、色调、构图倾向和负面约束。这样即使内容各不相同,整条视频的画面也像出自同一套设计。图片尺寸要统一,后期用缓慢缩放或平移制造动态感,可以显著降低「PPT 感」。
合成:concat + 音轨
用 ffmpeg 的 concat 分离器按每张图的时长拼出无声视频,再叠加音轨:
file 'img/0001.png'
duration 4.20
file 'img/0002.png'
duration 3.10
file 'img/0002.png'
最后一行需要重复一次最后一张图,这是 concat 的已知行为。
ffmpeg -y -f concat -safe 0 -i scenes.txt -i voice.wav \
-vf "scale=1280:720,format=yuv420p" \
-c:v libx264 -r 30 -c:a aac -b:a 192k -shortest out.mp4
分歧一:全自动流水线是不是重复建设
常见的反对意见是「这类东西早有了」:文案由大模型生成,配音用 TTS,画面按关键词抓取,再加个过渡动画。消费级剪辑软件的图文成片功能也能做类似的事。
但两者面向的场景不同。剪辑软件适合人工精修,长文本需要自己分段、自己对齐,遇到几十分钟的稿子会很吃力;自建流水线的优势是无人值守、可批量、可复用同一套模板,适合需要持续产出同风格内容的场景。需要清醒的是,单纯「全自动」并不构成优势;真正能形成差异的是画面准确度、可编辑性以及出错后能否只重跑其中一步。如果打算对外提供服务,还要额外考虑素材版权和平台对批量生成内容的规范要求。
分歧二:主角不一致与长文上下文
这是整个流程里最棘手的问题。每次出图都是独立调用,同一篇文案里反复出现的主角,形象必然漂移。有人认为短期内无解,除非模型本身支持角色级别的定制。但实践中可以通过以下几种方式缓解,代价各不相同。
方案 A:把生图模型作为工具调用
不直接批量调用生图接口,而是把生图能力注册成模型可调用的工具,在同一个会话里逐镜生成。这样模型会继承前面已经写过的角色描述,画面连续性明显更好。
代价是 token 消耗成倍增长,长文本很快就会触及上下文窗口。可行的补救是滚动摘要:把已经确定的角色设定和已出分镜压缩成一段固定前缀,每次只保留最近几镜的细节。这套工程比较重,适合对一致性要求高的场景。
方案 B:角色卡 + 固定前缀(推荐作为基线)
先人工或半自动抽出一份「角色卡」:年龄、发型、服装、配色、体态、画风关键词,每条分镜的提示词都拼上同一段内容。成本最低、结果最可控,缺点是角色卡需要人来定,角色一多维护成本上升。
方案 C:首图锚定 + 图生图
先生成一张主角定妆图,后续镜头以它为参考图做图生图或风格迁移。效果取决于模型对参考图的支持程度,接口能力变化较快,使用前请以官方文档为准。
方案 D:在剪辑层统一
统一色调、统一滤镜、统一字幕模板,用后期掩盖素材之间的差异。这听起来像妥协,但对营销号风格的内容来说完全够用;观众对配图跳跃的容忍度本来就很高,真正影响观感的是字幕节奏和声音。
| 方案 | 一致性 | 成本 | 适用场景 |
|---|---|---|---|
| 工具调用 / 会话内继承 | 较好 | 高,token 成倍 | 角色反复出现、要求连贯 |
| 角色卡 + 固定前缀 | 中等 | 低 | 大多数批量场景 |
| 首图锚定 + 图生图 | 较好 | 中 | 模型支持参考图时 |
| 后期统一 | 一般 | 很低 | 画面要求不高的口播类 |
工程检查清单
- 每步产物保存到文件:切片结果、音频分片、分镜 JSON、图片全部写入磁盘,失败时只重跑出错的那一步。
- 幂等:用内容哈希做文件名,重复执行不会产生重复文件。
- 限流与重试:生图接口通常有速率限制,加指数退避,并把失败的分镜单独列出来重试。
- 先跑样片:先生成 30 秒到 1 分钟的短片,估算图片数量与 token 消耗,再决定整篇怎么跑。
- 音画同步:一切时间轴以真实音频时长为准,不要用模型估计的时长直接排图。
- 字幕处理:中文字体、换行位置、单行字数上限都要提前设定,标点结尾的句子不要拆成两行。
- 临时文件清理:图片和音频累积很快,任务结束后按目录清理。
- 日志留全:保存每步的提示词和返回原文,否则出了问题无从复现。
- 账号体系:自建部署时注意登录流程,部分实例会限制邮箱后缀,注册成功后需手动登录而不是自动跳转。
长任务与运行环境
这条流水线是典型的长时间批量任务:TTS 分片、逐张出图、按镜头合成,一条几分钟的成片可能要跑十几分钟甚至更久。跑在本地笔记本上,休眠、断网、CPU 被占满都会让任务中断,前面已经付费生成的图片也就浪费了;调用境外模型接口时,网络抖动同样会导致批量任务中途失败。
如果只是偶尔生成一两条,本地跑完全够用。如果打算长期批量跑,把任务放到一台长期在线的机器上更稳妥——例如整机托管在境外机房的远程 Mac,按月租用、远程连接使用,本地只负责审核和上传;它的网络环境相对稳定,也能持续挂住 Claude Code 一类的长任务。这属于可选方案,不是必需品。
合规与风险提醒
自动化批量生产内容时,有几条底线需要提前想清楚:平台普遍要求对 AI 生成内容作出标识,部分平台对批量发布有明确限制,不要尝试用多账号或技术手段规避;配音音色需要有合法授权,不要克隆他人声音;按关键词抓取网络图片存在版权风险,用模型生成或使用有授权的素材更安全。以上规则更新较快,具体以各平台和模型服务方的最新说明为准。
小结
这条流水线的技术难度并不在每一步本身,而在把六个步骤稳定地串联起来,并且让失败可以局部重跑。切片和 TTS 决定听感,分镜结构决定可维护性,角色卡和后期统一决定画面观感。至于一致性,短期内的务实做法是「固定前缀 + 后期统一」,把工具调用和参考图留给真正需要连贯叙事的场景。