环境说明

组件 规格
GPU AMD Radeon RX 7900 XTX(24GB VRAM)
OS Ubuntu 24.04 + ROCm 7.2.4
生图引擎 ComfyUI(Flux1.dev-fp8 / Flux2-Klein-4B)
视频编译 HyperFrames(Headless Chrome + GSAP)
TTS IndexTTS(本地 GPU 推理)
分辨率 1080×1920(竖屏 9:16)

目标

输入一个故事关键词(如"猴子捞月"),30 分钟内全自动输出一条 2 分钟绘本风格短视频,包含:

  • 水彩风格插画序列
  • 中文配音(可切换英文)
  • 自动字幕(毫秒级声画对齐)
  • Ken Burns 推镜头特效

全文不涉及云端 API 调用,全部基于本地开源模型,单次运行成本 = 电费。

page001_img01.png


一、流水线架构总览

整个流水线分为 5 个模块,数据依次传递,无人工介入:

选题配置 → 分镜生成 → 批量生图 → TTS 配音 → 视频编译

1.1 选题配置层

config.json 中定义故事参数:

{
  "story": "猴子捞月",
  "style": "watercolor picture book, hand-drawn lines, soft colors",
  "voice": "female_gentle",
  "output": "output/monkey_moon.mp4",
  "lang": "zh"
}

1.2 分镜生成层

AI 自动搜索该故事的背景资料并拆解为 13 个分镜,每个分镜包含:

  • 画面描述(英文,供生图模型使用)
  • 旁白文本(中文,供 TTS 使用)
  • 镜头时长(秒)

1.3 批量生图层

ComfyUI 接收分镜描述,调用 FLUX 模型批量渲染水彩风格插画。关键参数:

  • 模型:Flux1.dev-fp8 / Flux2-Klein-4B
  • 分辨率:1024×1024(后续裁剪为竖屏比例)
  • 步数:20(FLUX)/ 4(Klein 蒸馏)
  • CFG:3.5

1.4 TTS 配音层

IndexTTS 接收旁白文本,生成中文女声朗诵音频。系统自动读取每段音频的结束时间戳,为后续字幕对齐提供精确时间轴。

1.5 视频编译层

HyperFrames 启动 Headless Chrome,将图片、音频、字幕、动画参数编译为最终 MP4。包含:

  • 图片 Ken Burns 缩放(8% 慢推)
  • 字幕逐字时间轴对齐
  • CSS 封面标题渲染(避免 AI 生图错字)

二、核心实现

2.1 Pipeline 启动命令

python3 pipeline.py --config config.json

2.2 后台执行链路

  1. 解析配置文件,加载故事主题
  2. 调用 LLM 生成分镜脚本(13 镜头,含中英文双语描述)
  3. 逐镜头向 ComfyUI API 发送生图请求(批处理)
  4. 所有图片生成完成后,启动 IndexTTS 生成配音
  5. 读取配音时间戳,生成字幕 JSON
  6. 调用 HyperFrames,在 Headless Chrome 中渲染最终视频
  7. 输出 MP4 到指定目录

2.3 流程耗时分布(实测,FLUX fp8 / 20步)

阶段 耗时
分镜生成 ~2 min
13 张生图 ~12 min
TTS 配音 ~3 min
HyperFrames 编译 ~10 min
总计 ~27 min

三、踩坑记录与解决方案

3.1 问题一:全局风格词污染所有分镜

现象: 全局提示词中写了"深蓝月夜森林、温暖圆月、古老石井",AI 把这三个元素塞进每一个分镜,导致第一幕猴群在林间玩耍时画面里也多了一口井。

原因: ComfyUI 的 CLIP Text Encode 会将全局提示词与分镜提示词叠加。全局词中的具象元素会无差别渗透。

解法: 全局提示词仅控制美术风格:

watercolor picture book, hand-drawn lines, soft colors, warm lighting

具体道具(月亮、水井)只写在对应分镜的局部提示词中。

3.2 问题二:动作描述歧义

现象: 提示词写 hanging,AI 生成的猴子全是正抓着树枝站着。

原因: FLUX 对 hanging 的理解偏向"悬挂着某物",而非猴子以脚倒挂的物理姿态。

解法: 将动作描述扩展为精确的物理结构:

three cute brown monkeys hanging upside down by feet, head pointing downwards

3.3 问题三:角色重复出现

现象: AI 在同一个画面中生成两只一模一样的老猴子,左右对称排列。

原因: 偶数构图触发 AI 的原生对称偏好。

解法: 为每个分镜设置独立随机种子(seed),并将老猴位置从井沿改为草地,打破对称布局。

--seed 12841  # 每个分镜使用不同 seed

四、视频质量优化

4.1 封面标题渲染

AI 生图的中文渲染能力普遍较弱(FLUX 中文乱码、Ideogram 虽好但需联网)。解决方案是将封面制图分为两层:

  1. 生图层:提示词中加入 top half of the image has open clean deep blue night sky for text overlay,让 AI 在上半部分留出空白排版区
  2. 渲染层:在 HTML/CSS 中用 96px 字体渲染标题,带文本阴影,保证中文清晰

4.2 Ken Burns 推镜头

静态图片连续切换在短视频中容易被划走。实现方案:

  • 每张图片从 scale(1.0) 推至 scale(1.08)
  • 时长:与对应旁白音频长度一致
  • 渲染方式:GSAP 在 Canvas/Chrome 中做矢量缩放,边缘无像素损失

4.3 声画同步

IndexTTS 输出的每段音频附带精确到毫秒的时间戳。字幕渲染时以时间戳为基准对齐,避免手动调整。


五、多垂类扩展

流水线架构是通用的,只需修改配置文件的文本内容即可切换赛道:

垂类 美术风格 配音
成语故事 水彩绘本 女声温柔
睡前童话 梦幻彩铅 女声舒缓
国学古诗 水墨淡彩 男声朗诵
禅意夜听 深蓝夜景 女声轻语

出海适配

切换为英文版本仅需修改两项配置:

  1. 分镜文案翻译为英文
  2. TTS 模型切换为英文音色

时间轴和字幕对齐由代码自动计算,无需人工介入。


六、总结

本文完整拆解了一条基于本地开源模型的 AI 短视频自动流水线,覆盖架构设计、核心实现、踩坑记录和质量优化。核心经验:

  1. 提示词分层设计:全局仅控风格,局部控具体元素
  2. 物理约束优先:动作描述要精确到结构级,而非语义级
  3. 封面文字走 CSS:避免 AI 中文渲染的固有缺陷
  4. 静态图加动效:8% Ken Burns 缩放即可显著提升观感

整套方案跑在本地 24GB 显存 GPU 上,单条视频耗时为 30 分钟内,适用于个人创作者和小团队的内容生产场景。


配置模板地址:https://github.com/xxx/ai-video-pipeline
欢迎 Star 和 PR。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐