Overview

项目说明

这个项目的本质不是”做了一支品牌片”,而是用代码搭出了一条”分镜文档进 → 成片 MP4 出”的视频生产流水线。它把视频后期里所有传统上需要剪辑师手工操作的环节——素材生成、字幕渲染、配乐调音、规格归一、拼接编码——全部脚本化、可复现、可回滚、可批量。

它的真正意义在三层:

第一层 · 可复用性。这套流水线换一份分镜文档就能跑出第二支片子。同一品牌的春夏秋冬季片、同一品牌的不同 SKU 介绍片、甚至完全另一个品牌的形象片,只要输入端的分镜文档和 prompt 模板替换掉,后端的 13 段提交、轮询、下载、字幕、配乐、拼接代码都不必动。做一支片是项目,做一条流水线才是产品

第二层 · 可调试性。传统视频制作如果客户说”配乐再低一点、字幕停留再久一点”,剪辑师要重新对时间线;这里只要改 build_music.py 里 numpy envelope 的两个数字,或改 render_captions.sh 里字幕停留时长参数,几分钟就能跑出 v10、v11、v12 版本。审美迭代从手工劳动变成参数调整,这是这个项目最反传统的地方。

第三层 · 角色重构。Claude Code Agent 在这里不是写代码的助手,而是承担了自动化导演 + 制片协调 + 后期工程师三个角色的合一。它读分镜、拆任务、写脚本、调用 API、诊断失败、修改重试、根据反馈迭代——这些原本需要一支多人团队完成的事,被压缩成一个 Agent + 一份分镜文档 + 一个工作目录。

也正因为流程是这样跑出来的,这支片才能维持”克制、留白、慢节奏”的统一气质——因为没有任何环节由不同的人接力做,审美一致性是天然的。这一点反而是传统团队最难做到的事。

Process

制作流程

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

01

分镜文档 → Agent 任务拆解

用户提供品牌策略和分镜文档 melange_eclat_brand_film_storyboard_v9.md。Claude Code Agent 读取后,把整支片子拆成 13 段独立的 5 秒镜头(S1–S13)+ 3 段字幕段(M5/M8/M13)+ 1 段品牌片尾(end.mp4),并为每段写出独立的英文 Seedance prompt。 配图:t1 触陶开场。

02

LibTV OpenAPI 自动提交 13 段生成任务

脚本 submit_libtv_v2.py 通过 https://im.liblib.tv/openapi/session 端点用 Bearer Token 鉴权,把 13 段 prompt 一次性提交给 LibTV,后台调度 Seedance 2.0 模型并发生成。关键参数严格锁定为 720p / 16:9 / duration=5s / enableSound=off,避免触发会员/参数错误。 配图:t5 匠人之手

03

长轮询 + URL 提取 + 自动下载

poll_libtv.py 每 30 秒向 LibTV 拉一次会话状态,把响应保存为 iter-xxxx.json。inspect_msgs.py 解析消息流抽取每段视频的 mp4 URL,map_urls.py 用关键词指纹把乱序回包重新映射回 S1–S13 的顺序,dl_libtv.py 批量下载到 _build/libtv/downloaded/。 配图:t3 皮具匠人

04

ffmpeg 渲染三段字幕黑场

render_captions.sh 用 ffmpeg 的 drawtext filter + Cormorant Garamond 衬线字体,在暗紫底上以 alpha 渐入渐出做出三段字幕——M5「What hands shape, life inherits.」、M8「Curated from every land, for your day.」、M13「Real craft. / Curated beauty. / Your everyday light.」。每段同时挂空音轨,保证后续 concat 不会音视频结构错位。 配图:t9 第一段字幕

05

numpy 采样级配乐 envelope

build_music.py 没用 ffmpeg 复杂滤镜表达式,而是把 mp3 配乐 loop 成 60 秒立体声 WAV,用 Python wave 读取 PCM,再用 numpy 在每个采样点上逐采样乘以一条手工绘制的音量曲线——开头淡入、字幕段轻拉低、剪影段上扬、结尾逐渐沉降到品牌片尾。这样做的好处是每一帧的音量都对应一个具体的可读数值,可复现、可调试。 配图:t13 晨光静物

06

全片规格归一 → concat 拼接

assemble.py 把 13 段 Seedance 720p 素材 + 3 段字幕 + 1 段片尾全部归一化为 1920×1080 / 30fps / H.264 / yuv420p / AAC stereo 48kHz,写到 _build/scenes_norm/,然后用 ffmpeg concat demuxer 串成 ME_brand_film_v9_no_music.mp4(无配乐版)。 配图:t27 黄昏侧影

07

ffmpeg amix 混入配乐 → 最终成片

最后用 ffmpeg amix filter 把无配乐版与处理过的配乐 m4a 合并,输出根目录最终 ME_brand_film_v9.mp4。同时保留无配乐版,方便日后客户要求换配乐时一键替换,不必重跑前面所有步骤。 配图:t43 三行宣言

多轮反馈驱动 v1 → v9 迭代
08

多轮反馈驱动 v1 → v9 迭代

项目并非一次成型——记录显示从 v1 走到 v9 经历了多轮调整:Pexels 真实素材 → 切到 Seedance 生成 → 加配乐 → 修复 voiceover 失真 → 换低沉男声 → 删开场 logo → 延长字幕留白 → 最终去除人声,只留配乐 + 最后品牌揭示。Agent 每次按用户审美反馈改脚本参数、重跑流水线、重新交付。 配图:t51 品牌揭示

Thinking

设计思路

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

品牌判断示意图

"弱身份"叙事:让物说话,让人退场

全片没有一张正面人脸——只有手(老人皴裂的手揉皮革、设计师勾线的手、女子端碗的手)、侧影、背影、剪影。这是给"高端选品"品牌量身定做的语法:Mélange Éclat 卖的是器物,不是某个代言人,也不是某种生活方式标签。让人退场,物才能成为绝对主角。

三双手的共创隐喻

镜头 2/3/4 分别是老匠人的手揉陶、做皮、设计师的手勾线——三双手对应"工艺—制作—设计"三段产业链。不需要任何旁白解释,观众自然理解这个品牌"既不是工业流水线、也不是单纯设计师品牌,而是匠人 + 设计师的合作产物"。

品牌名最后揭示 = 反广告语法

50 秒的纯氛围铺陈 + 1.5 秒的品牌揭示。这个比例在传统广告里几乎是大忌(传统广告恨不得开场就打 logo),但对高端选品品牌反而是优势——观众先建立"这个东西很美、很安静、很考究"的情绪记忆,品牌名出现时是恍然大悟而不是被推销。这与 Aesop、The Row、北欧博物馆短片用的是同一套语法。

字幕分段做"叙事呼吸口"

M5/M8/M13 三段全黑底字幕是叙事的"换气点":铺三个匠人镜头 → 字幕停顿 → 铺四段晨光器物 → 字幕停顿 → 铺四段黄昏侧影 → 三行宣言收束。视频里每隔 7-12 秒就让画面"安静一次",观众的注意力被持续重置,不会麻木,情绪也不会被堆叠到溢出。

配乐 envelope 与画面情绪

极简钢琴配乐被精确地切成几段不同响度,绑死在画面情绪上——匠人段安静、字幕段更安静、晨光段抬起、剪影段抬到峰值、宣言段沉降、片尾归零。这种采样级精度的配乐控制,是手工剪辑师在 Adobe Premiere 里要花 2 小时画关键帧才能做到的事,在这里是一行 numpy 代码自动完成。

把"工艺"做成画面语言而非台词

全片没有任何"匠心"、"工艺"、"全球材质"这种被说烂了的词出现,但通过(揉陶的指压痕、皮料上老人手的纹路、铅笔勾线的弧度、水珠在陶面流过的高速、晨光穿过窗纱的丁达尔光、暮色里被剪成黑影的女子)这一连串纯视觉语言,把"工艺感"做成了不可言说的氛围。Seedance 2.0 在生成这种"无人物正面、纯材质 + 光线"的镜头上特别擅长。

工程化思路就是创作思路

最大的设计决策不在画面而在流程——把 13 段 prompt 写得短、独立、参数严格合规(720p、5 秒、16:9 锁死),是因为长 prompt 会被平台风控拒绝、混合参数会触发模型错误。这看起来像工程问题,但本质是把审美约束翻译成机器约束:每一段 5 秒不是因为美,而是因为这是 Seedance 在自由度和稳定性之间的最佳平衡点。约束设计 = 风格设计。

Result

交付与结果

交付内容
  • 项目源工程(scripts/ + _build/,支持二次跑流水线)
  • 51 秒品牌主片(1920×1080,带配乐 + 无配乐双版本)
  • 13 段原始素材 + 3 段字幕段(支持二次剪辑)
项目结果