# 对白类型和画外音角色设计总结 **设计日期**: 2026-02-02 **设计版本**: v2.0(方案B) --- ## 设计演进 ### 初始方案(已废弃) - ❌ 在 role_type 中增加 4 = narrator(旁白) - ❌ 问题:维度混乱(主角/配角/群演 按重要性分类,旁白按出场方式分类) ### 最终方案(已采纳) - ✅ 保持 role_type 原样(1=主角, 2=配角, 3=群演) - ✅ 新增 is_offscreen 字段标识画外音角色 - ✅ 新增 dialogue_type 字段区分对白类型 --- ## 核心设计理念 ### 三维度分离 **维度1:角色重要性(role_type)** - 描述角色在剧情中的地位 - 1 = main(主角) - 2 = supporting(配角) - 3 = extra(群演) **维度2:出场方式(is_offscreen)** - 描述角色是否出现在画面中 - false = 出现在画面中(默认) - true = 画外音角色(如纪录片解说员) **维度3:对白类型(dialogue_type)** - 描述对白的表现形式 - 1 = normal(普通对白) - 2 = inner_monologue(内心OS) - 3 = narration(旁白) --- ## 数据库变更 ### screenplay_characters 表 ```sql -- 新增字段 is_offscreen BOOLEAN NOT NULL DEFAULT false -- 列注释 COMMENT ON COLUMN screenplay_characters.is_offscreen IS '是否为画外音角色(不出现在画面中,如纪录片解说员)'; -- 索引 CREATE INDEX idx_screenplay_characters_offscreen ON screenplay_characters(is_offscreen) WHERE is_offscreen = true; ``` ### storyboard_dialogues 表 ```sql -- 新增字段 dialogue_type SMALLINT NOT NULL DEFAULT 1 -- 列注释 COMMENT ON COLUMN storyboard_dialogues.dialogue_type IS '对白类型:1=normal(普通对白), 2=inner_monologue(内心OS), 3=narration(旁白)'; -- 索引 CREATE INDEX idx_storyboard_dialogues_type ON storyboard_dialogues(dialogue_type) WHERE dialogue_type != 1; ``` --- ## 使用场景示例 ### 场景1:纪录片解说员 ```json { "character": { "name": "解说员", "role_type": "main", // 重要性:主角(贯穿全片) "is_offscreen": true // 出场方式:画外音 }, "dialogue": { "content": "公元627年,唐僧踏上了西行之路...", "dialogue_type": "narration" // 表现形式:旁白 } } ``` ### 场景2:甄嬛的回忆旁白 ```json { "character": { "name": "甄嬛", "role_type": "main", // 重要性:主角 "is_offscreen": false // 出场方式:画面中 }, "dialogue": { "content": "那一年,我还是个天真的少女...", "dialogue_type": "narration" // 表现形式:旁白(回忆画外音) } } ``` ### 场景3:孙悟空的内心OS ```json { "character": { "name": "孙悟空", "role_type": "main", // 重要性:主角 "is_offscreen": false // 出场方式:画面中 }, "dialogue": { "content": "师父又在念紧箍咒了,我得忍住...", "dialogue_type": "inner_monologue" // 表现形式:内心OS } } ``` --- ## 设计优势 ### 1. 维度清晰 - 三个维度互不干扰,各司其职 - 避免了分类标准混乱的问题 ### 2. 灵活性高 - 支持任意组合:主角+画外音+旁白、主角+画面中+内心OS 等 - 不强制约束,保持最大灵活性 ### 3. 扩展性好 - 未来可以轻松增加更多对白类型(画外音、独白、aside等) - 可以增加更多角色属性(如 is_virtual 虚拟角色等) ### 4. 业务价值 - **资源库筛选**:可以筛选 `is_offscreen = true` 的角色 - **AI生成优化**:画外音角色不需要生成角色形象图片 - **统计分析**:准确统计各类角色数量 - **TTS处理**:根据对白类型使用不同音色 --- ## 前端实现建议 ### 角色编辑表单 ```tsx 画外音角色(不出现在画面中) ``` ### 对白编辑表单 ```tsx ``` ### 时间轴对白轨道样式 ```typescript const getDialogueStyle = (type: DialogueType) => { switch (type) { case 'inner_monologue': return 'bg-purple-100 border-purple-400 italic'; case 'narration': return 'bg-amber-100 border-amber-400'; default: return 'bg-blue-100 border-blue-400'; } }; ``` --- ## 相关文档 - [对白类型和画外音角色设计 Changelog](./changelogs/2026-02-02-dialogue-type-and-narrator-role.md) - [剧本管理服务](../requirements/backend/04-services/project/screenplay-service.md) - [分镜资源服务](../requirements/backend/04-services/project/storyboard-resource-service.md) --- **设计版本**: v2.0 **最后更新**: 2026-02-02