# 拆分镜头指南(短剧 / Seedance) > 面向 PRINTFILM 漫剧分镜操作细节。 > **产品主规范请先读 [EPISODE_RULES.md](./EPISODE_RULES.md)**;参数硬限制见 [SEEDANCE_2_5.md](./SEEDANCE_2_5.md)。 > 资料综合:影视分镜常识、Seedance 公开 Prompt 指南、本仓库 `fragment_plan` / `build_fragments` / `seedance_segments`。 检索与整理日:2026-08-13。 --- ## 1. 为什么要拆镜 Seedance 2.5 **单次最长约 30 秒**,可在一段里做多镜头叙事,但: - 单次塞太多事件 → 漏戏、跳切混乱、主体漂移 - 单次太碎(1–2 秒一切)→ 油腻感、口播赶词、字幕糊 - 本产品按「分镜 = 一次 Seedance 任务」计费与排队,拆镜直接决定成本与可控性 目标:**每一镜叙事完整、可单独成片**,镜内再用 `@duration` 切小节段。 --- ## 2. 两层结构(本仓库约定) ``` 场记剧本 └─ 分镜 Fragment(一次 Seedance 调用,4–30s) └─ 段 Beat(@duration:N,建议 3–12s) ├─ 画面 / 空镜(无配音、无字幕) ├─ 旁白(口播 + 字幕) └─ 对白(口播 + 字幕) ``` | 层级 | 时长建议 | 职责 | |------|----------|------| | Fragment(镜) | 优先 **8–20s**,硬上限 **30s** | 一场戏的一个情绪/场面单元 | | Beat(段) | **3–12s** | 镜内节奏:建立 → 动作 → 口播 | 常量对齐:`SEGMENT_DURATION_MIN/MAX = 3/12`,`SHOT_DURATION_MAX / FRAGMENT_TOTAL_MAX = 30`。 --- ## 3. 何时「切新镜」(Fragment) 满足任一条,优先开新镜: 1. **场景切换**(地点 / 日夜 / 内外景明显变化) 2. **主要角色组合变化**(新主角进场、群像切双人对峙) 3. **情绪段落切换**(铺垫 → 冲突 → 反转 → 收束) 4. **叙事职责不同**(开幕介绍 ≠ 正戏对白 ≠ 空镜收尾) 5. **累计时长将超过 20–30s**(软上限约 20s 可先切,硬上限 30s) 不要: - 机械按字数 / 行数切 - 「一句对白一镜」 - 开幕后再重复整集片头 ### 3.1 开幕镜(强制) 每集 `fragments[0]`: - 集号 + 集名 - 1–3 句世界观 / 前情 - 建立主场景气氛(可先不出主角) - 人物介绍叠字由系统注入,模型不要编介绍文案 --- ## 4. 镜内怎么切段(Beat) ### 4.1 推荐节奏模板 **建立空镜 → 动作 → 对白/旁白 →(可选)反应空镜** ``` 【字幕:底部居中·简体中文·逐句轮换·与口播同步】 【BGM:……;音量低于人声】 @duration:4 【画面·无配音仅环境音】空镜:黄河浊浪拍击老石,远处百姓扶老携幼…… @duration:6 【对白·慢速清晰·同步字幕】禹:水患未平,岂能退! @duration:4 【画面·无配音仅环境音】特写:禹攥紧治水简册,目光望向河道。 ``` ### 4.2 画面 vs 口播(易错) | 写法 | 正确前缀 | 是否配音/字幕 | |------|----------|----------------| | `空镜:…` / `远景:…` / 纯环境描写 | `【画面·无配音仅环境音】` | **否** | | `角色名:台词` | `【对白·慢速清晰·同步字幕】` | 是 | | `旁白(VO):…` | `【旁白·慢速清晰·同步字幕】` | 是 | | 人物介绍 | `【人物介绍·画面叠字·角色身旁】姓名|简介` | 贴角色身旁叠字,非口播念介绍全文 | **禁止**:把 `空镜:黄河浪…` 打成对白——模型会念「空镜」并烧字幕。 提交前仓库会对误标行做纠正,但脚本里仍应写对。 ### 4.3 时长估算 | 类型 | 估时经验 | |------|----------| | 空镜 / 纯画面 | 约 2–6s(看信息量) | | 旁白 | 约 **3 字/秒** 慢速清晰,再钳到 3–12s | | 对白 | 略短于旁白估时,留呼吸 | 口播忌「赶词」:Seedance 强制约束里要求语速偏慢、吐字清晰。 --- ## 5. Seedance 友好的多镜头写法 公开指南建议: 1. **阶段 + 结束态**:每阶段一个主事件,写清结束时可见状态 2. **时间戳**(可选):`0-5秒` / `5-10秒` 分配节奏预算 3. **单次 15s 左右**:约 **3–5 个镜头变化**较稳(产品侧单镜 3–7 行);再密易闪 4. **参考素材按场景选用**,不要一镜塞进全部 30 张图 5. **画面行密度**:`主体 + 动作 + 场景 + 景别/运镜 + 结束态`;禁止「众人惊慌」「山崩」式干瘪摘要 示例(时间戳): ``` 0-4秒:空镜建立河道,仅环境音与 BGM。结束态:浊浪拍岸,无人近景。 4-10秒:禹入画中景,对白「……」。结束态:禹立于石上,面向下游。 10-15秒:远景百姓撤离。结束态:高坡人影渐远,河道仍汹涌。 ``` 本仓库会把 `@duration:N` 展开为 `00:00-00:04` 这类区间再交给模型。 `fragment_plan_prompt` 已把「画面描写密度」写成系统硬约束;文档学到的粒度必须落到 LLM 输出,不能只停在 docs。 --- ## 6. 资产与参考(拆镜时就要想好) 拆镜时同步决定「这镜谁出场」: | 资产 | Seedance 用途 | |------|----------------| | 角色图 | `reference_image` + 形象约束 | | 场景图 | `reference_image` + 场景约束 | | 角色/旁白音色 | `reference_audio`(单条建议 ≤15s,API 上限约 30s) | | `@asset:ID` | 正文替换为「名称(参考图 N)」 | 规则: - `character_names` 只列真正出镜且正文点到的角色 - 群演 / 兵丁 / 百姓可省略 - 人物介绍仅在本剧**首次出场**那一镜由系统叠字 --- ## 7. AI 分镜(`fragment_plan`)输出约定 模型只输出 JSON `fragments[]`,每项含: - `duration_sec`(4–30) - `scene_name` / `character_names` - `is_opening`(首条 true) - `lines`:纯画面 / 对白 / 旁白文本 禁止模型输出:`### 场`、出场人物行、`【字幕】【BGM】【人物介绍】`、`@asset`、`@duration`(由系统后处理写入)。 系统后处理会: 1. `_format_narrative_line` 打上画面/对白/旁白前缀 2. 注入 `@duration`、字幕/BGM cue、开幕叠字、首次出场介绍 3. 超软上限拆成多条 Fragment --- ## 8. 质量自检清单 生成前快速过一遍: - [ ] 单镜合计时长 ≤ 30s,单段 3–12s - [ ] 空镜 / 景别描写已是「画面」前缀,不会被念 - [ ] 有口播则有对应旁白/对白 cue;无口播则不要写「同步字幕」对白前缀 - [ ] 出镜角色有参考图;口播无需绑定音色 - [ ] 顶栏画幅 / 清晰度 / 风格与本集一致 - [ ] 未在普通生成 prompt 里误写「编辑/延长」类措辞(避免任务被重分类) --- ## 9. 与官方能力的关系 Seedance 2.5 宣传「一镜成片、多轮延长、30s 多镜头」——**不等于**不需要拆镜: | 策略 | 适用 | |------|------| | 单次长镜(15–30s)内多切 | 同一空间、连续动作、少换装 | | 产品拆 Fragment 多次生成 | 换场、换人、强情绪转折、要单独重跑一镜 | | 延长(extend) | 已有成片尾帧衔接;本产品当前主路径仍是「按 Fragment 新建」 | 优先:**可重跑、可替换的分镜粒度**,再用镜内 `@duration` 做叙事节奏。 --- ## 10. 相关代码 | 文件 | 作用 | |------|------| | `backend/app/services/drama/fragment_plan_prompt.py` | LLM 拆镜系统提示 | | `backend/app/services/drama/fragment_plan.py` | LLM 结果规范化 | | `backend/app/services/drama/build_fragments.py` | 场记切镜、行分类、时长打包 | | `backend/app/services/seedance_segments.py` | 生产约束、空镜纠正、时长展开 | | `frontend/src/lib/segmentDuration.ts` | 前端时长校验常量 | | `frontend/src/components/drama/SeedanceRulesModal.tsx` | 产品内规则弹窗 |