Overview

项目说明

这支《woven-tote-bag-creative · creative_smooth_clean》是一次「Claude Code Agent 全程编排 → GPT-Image-2 出图 → Seedance 2.0 出视频 → ffmpeg 拼接 → Claude Vision 审查」的端到端 AIGC 产品广告流水线产物。

与传统视频创作不同,这里没有剪辑师按时间线对刀,也没有人在 Premiere 里画关键帧。所有操作都被压成了一条 PowerShell 命令链——init → phase1 → phase2 → phase3 → draft → review——每个 phase 都把 prompt、参考图、meta 和输出落到 runs/<run-id>/ 目录的固定层级里,既能复盘,也能复跑。

这种「流程即作品」的工作方式真正的价值有三层:

第一层 · 可复用性。换一份 inputs/<product-id> 就能跑出第二支片,前期写好的 prompt 模板、ad_mode 模板、duration 模板都不必动。做一支片是项目,做一条流水线才是产品。

第二层 · 可调试性。当用户说「这段太跳了 / 配乐再轻一点 / 箭头别出现在视频里」,改的不是时间线而是 prompt 模板里的几行约束——下一次 run 自动生效。审美迭代从手工劳动变成参数调整,这是这条流水线最反传统的地方。

第三层 · 角色重构。Claude Code Agent 在这里同时承担「创意指导 + 制片协调 + 后期工程师」三个角色——读 brief、拆任务、生成 prompt、调度 API、做视觉审查、给出迭代建议。这些原本需要一支多人团队完成的事,被压成「一个 Agent + 一份分镜模板 + 一个工作目录」。

也正因为整条链路是这样跑出来的,这支片才能保持「克制、稳定、产品居中」的统一气质——没有人在不同环节做不同审美的妥协,审美一致性是流水线天然带来的

Process

制作流程

每个详情页都把真正重要的步骤拆开,不只展示结果,也展示判断是如何形成的。

Phase 1 · Claude Creative Agent 生成创意 brief
01

Phase 1 · Claude Creative Agent 生成创意 brief

Claude Code CLI(`claude -p --add-dir D:\wabi\sys`)读入 brand_context.md、ad_mode=playful_effects、video_duration=30 与产品前/侧/背三视图,在同一轮交互里依次完成:产品视觉解构 → 近 6 个月趋势侦察 → 15-20 个概念发散 → 锦标赛打分 → 输出 brief。本次最终选用 Candidate 4「Smooth Summer Orbit」——剔除 stop-motion / freeze / jump,改用真实手部轻推、桌面滑行、半圆轨道镜头,让产品始终稳定居中。

Phase 2 · GPT-Image-2 生成 Hero Shot 作为视觉锚点
02

Phase 2 · GPT-Image-2 生成 Hero Shot 作为视觉锚点

把产品前/侧/背三张参考图喂给 OpenAI GPT-Image-2(1536×1024 / quality=high / moderation=low / seed=54457),生成全片唯一的 Hero shot。后续 Storyboard 与 Seedance 都拿这张图当 reference,保证整片的产品形状、藤编纹理、用光、人物状态不漂移。

03

系统级修正:把「标注泄漏 + 30fps 顿挫」翻译成硬约束

smooth clean 之前在仓库层面做了三项不可回退的修正——`prompts/03_storyboard_prompt_template.md` 显式禁止箭头 / panel 编号 / 手写注释 / diagram lines / 白描边图形;`prompts/04_seedance_timeline_template.md` 锁定单一主角 + 单一产品禁止背景替身;`tools/ffmpeg_variants.py::stitch_videos()` 增加 fps 参数默认 24fps。把过去的体验问题以约束条件的形式沉淀,避免「修一次再回归一次」。

Phase 3 · GPT-Image-2 双 storyboard(part1 + part2)
04

Phase 3 · GPT-Image-2 双 storyboard(part1 + part2)

`pipeline.py phase3 --duration 30 --tag creative_smooth_clean` 被拆成 part1 / part2 两份 15 秒分镜任务,各跑一份 storyboard prompt → GPT-Image-2 出 1536×1024 分镜图(seed=38837 / 95356)。两张 storyboard 都把 `02_hero.png` 写进 input_refs,保证两段之间产品形态、人物身份、环境质感不会漂移。

Phase 4 · Seedance 2.0 reference-to-video 两段 15 秒
05

Phase 4 · Seedance 2.0 reference-to-video 两段 15 秒

走 fal.ai 的 `bytedance/seedance-2.0/reference-to-video` 端点,每段把 hero + 对应 storyboard 两张图当 reference,16:9 / 480p / 15s / generate_audio=false,固定 seed(part1=38877 / part2=68853)让重跑可复现。两段分别落到 `04_video_draft_*_part1.mp4` 和 `_part2.mp4`,可独立交付、也可作为后续剪辑素材包。

06

ffmpeg 拼接:854×480 / 24fps / yuv420p / libx264 / CRF18

不做溶解、不做转场,直接 concat。等效 filter:「[0:v]fps=24,scale=854:480:force_original_aspect_ratio=increase,crop=854:480,setsar=1[v0];[1:v]同上[v1];[v0][v1]concat=n=2:v=1:a=0[v]」。preset=slow / CRF=18 平衡码率与视觉。最终输出近 30 秒(29.83s / 716 帧)、30fps 未介入、音轨为空。

Phase 5 · Claude Vision 抽 12 帧做九维度审查
07

Phase 5 · Claude Vision 抽 12 帧做九维度审查

ffmpeg 以 `fps=1, scale=960:-1, frames=12` 抽静帧,生成 review prompt 后给 Claude Code CLI,按 9 个维度逐项 Pass/Fail:人物面部一致性、产品真实性、手部与产品交互、服装连续性、场景一致性、Hook 是否生效、Climax 是否达成、无音频策略、广告六杠杆。本次结论「可接受小瑕疵」——仅剩 frame 06/08 一块外袋顶部白色标签状物 + frame 04→05 轻微桌面质感转场,不影响交付。

Thinking

设计思路

这里说明为什么这样做,而不是只列出做了哪些动作。

不一次性生成 30 秒,而是 2×15s + 拼接

Seedance 对 15 秒片段的稳定度明显高于 30 秒。把 30 秒定义为「两个 15 秒基础单元」,既守住了模型的稳定区,又让前一段「建立」、后一段「释放」各自有完整镜头弧;交付侧 part1 / part2 也可以拆出去单独投放。一个广告接一个不用同时上 30 秒的场景,这种「最小可交付单元 × N 拼接」结构本身就是工业化属性。

锁 24fps 而不是 30fps:把数字标准对齐到模型原生节奏

Seedance 原生输出就是 24fps,旧版拼接强转 30fps 引入了重复帧导致的轻微顿挫——这不是「卡顿」而是「插值噪声」。最终成片选择全链路 24fps:Seedance 24fps → ffmpeg 24fps → 输出 24fps,让节奏感来自素材本身,而不是时间码补帧。御用「不转换」是最尊重模型的选择。

创意服务产品,不让产品被效果遮挡

Candidate 1(stop-motion / freeze / jump)的视觉更跳脱,但用户实际反馈是「包看起来在被特效改造」。换 Candidate 4 后,产品始终稳定居中、真实手部轻推、滑轨镜头,夏日物件围绕产品做轨道编排——把「创意」从『视觉特技』拉回『镜头语言』。这条选择直接决定了 brief / storyboard / timeline 三层 prompt 的连锁修改。

把审美约束翻译成 prompt 硬约束

storyboard 里画箭头本是给人看的辅助语言,但 Seedance 会把它误抄进视频里。修复方法不是「再多看一眼成片」,而是改 prompt:禁止箭头 / panel 编号 / 手写注释 / diagram lines / 白描边图形。同样,timeline prompt 锁死单一主角 + 单一产品。这些约束一旦写进模板,所有后续 run 都自动获益——“修错」进化为「防错」。

Hero 不重跑、复用为视觉锚点

切换 Candidate 后没有重新生成 hero,因为 hero 的人物、环境、产品材质与 Candidate 4 仍然匹配。Hero 的角色不是「封面图」,而是「视觉锚点」:后续 storyboard 和 Seedance 的 reference,都靠它把「同一个产品 / 同一种材质 / 同一种光」传导下去。不重跑是主动选择,不是偼懒。

流水线本身就是作品

这支视频的真正交付物不只是 30 秒 mp4,而是 5 阶段可复跑、可调参、可审查的 pipeline:换一份 `inputs/<product-id>` 就能跑出第二支片,换一组 ad_mode / duration 就能从 playful_effects 切到 elegant_clean、从 30s 切到 15s。每个 phase 都有独立 meta.json + prompt.md 写回 run 目录:失败可定位、成功可复现。做一支片是项目,做一条流水线才是产品。

Result

交付与结果

交付内容
  • 30 秒 480p 成片(854×480 / 24fps / H.264 / yuv420p / 无音频)
  • 两段 15 秒可独立交付的草稿片段(part1 / part2)
  • 1 张 1536×1024 Hero shot + 2 张双 storyboard 静帧与对应 meta.json
  • 完整 run 目录:01_brief.md / 03_storyboard / 04_prompts / 05_review.md / pipeline.log
  • 可复跑的 pipeline 脚本链(init → phase1 → phase2 → phase3 → draft → review)
项目结果
  • Claude 视觉审查的九项关键维度全部 Pass(人物一致性、产品真实性、手部交互、Hook 与 Climax 等),结论「可接受小瑕疵」
  • 全链路锁 24fps(Seedance 原生 → ffmpeg 拼接 → 输出),消除旧版强转 30fps 引入的重复帧顿挫感
  • 通过 storyboard prompt 硬约束彻底解决「箭头/标注/diagram lines 被 Seedance 误抄进视频」的回归问题
  • 交付不只是一支片,而是一条在换一份 inputs/ 后可直接复跑出下一支同类产品广告的流水线