背景
PR #414 已让每条字幕携带结构化 speakerIds,当前配音工作台也已支持全局默认音色、单句音色覆盖、单句试听/重生成和会话恢复。现在需要把两者连接起来:让用户只需为每个角色选一次音色,即可完成多人内容的批量配音,同时保留少量特殊句子的精细调整能力。
当前配音会话只解析字幕文件,未读取校对 sidecar 中的角色名册和 cue 归属;如果要求用户逐句选择音色,长视频几乎不可用,也很容易造成同一角色音色不一致。
用户问题
- 多角色视频需要逐句换音色,操作量随字幕数量增长。
- 用户看不出某句正在继承全局音色,还是已有单句覆盖。
- 修改角色音色后,不知道哪些已生成片段需要重新合成。
- 配音会话恢复后,角色与音色映射如果丢失,会破坏前后声音一致性。
- 自动分离中的未分配和多人重叠字幕,需要明确而可预测的兜底规则。
产品目标
- 多角色项目在批量生成前,通过“一角色选一次音色”完成必要配置。
- 默认流程对新手清晰:识别角色 → 选择音色 → 试听 → 开始生成。
- 同一角色默认保持同一音色,单句仍可使用现有能力覆盖。
- 角色音色变化只影响关联字幕,并清楚提示需要重生成的范围。
- 单角色或无角色元数据的项目继续使用当前简洁的全局音色流程。
目标用户与核心故事
- 作为多人访谈制作者,我希望分别给主持人和嘉宾选音色,然后一键生成整段配音。
- 作为新手,我希望界面明确告诉我还有哪个角色没选音色,而不是开始后才报错。
- 作为精细编辑者,我希望某一句可以临时换音色,并能随时恢复为角色默认。
- 作为返工用户,我希望修改一个角色的音色时,只重新生成该角色受影响的片段。
- 作为继续上次任务的用户,我希望角色音色和单句覆盖完整恢复。
核心流程
- 用户进入配音工作台,系统读取字幕及同源校对 sidecar。
- 若检测到多个角色,在现有批量配置区显示“角色与音色”。
- 每个角色只展示一行/一张紧凑条目:颜色、角色名、句数/时长、音色选择、试听按钮。
- 用户为每个角色选择音色;已选音色可用一段代表性字幕试听。
- 所有必要角色配置完成后,“开始生成”可用;生成时每句自动继承所属角色音色。
- 用户在字幕列表中检查结果,可对个别句子选择其他音色并重生成。
对只有一个角色、没有 sidecar 或没有有效 speakerIds 的输入,不显示额外角色配置步骤,保持当前全局默认音色体验。
交互方案
1. “角色与音色”配置区
- 默认按角色首次出现顺序排列,显示角色名、稳定颜色、字幕句数和预计总时长。
- 音色选择复用当前引擎的 voice 列表;提供现有试听能力,不创造新的音色管理入口。
- 尚未选择时显示
请选择音色,并在该条目内给出直接操作,不使用全局报错弹窗。
- 可提供“使用全局默认音色”作为明确选择,但不能让空值含义模糊。
- 不根据性别、年龄或角色名强制自动匹配音色;未来可增加可解释的可选推荐。
- 切换 TTS 引擎后,若原音色在新引擎不可用,对应角色应回到待选择状态并保留清晰提示。
2. 字幕列表中的继承与覆盖
- 每行显示角色标签;多人重叠时显示主要角色和重叠提示。
- 行级音色选择器默认显示
跟随角色(音色名),而不是当前含义不够具体的 全局。
- 用户给某句单独选音色后,显示
单句覆盖 状态;选择 恢复跟随角色 即删除覆盖值。
- 未分配字幕显示
未分配 · 使用全局音色,使兜底行为可见。
- 重叠字幕默认使用主要角色音色,其他角色仍可见,并提示当前仅生成一条语音,避免用户误以为会自动混合多人声音。
3. 修改后重生成
- 当角色音色被修改时,仅将该角色中已生成且未被单句覆盖的字幕标记为“需要更新”。
- 配置区显示受影响句数,并提供
重新生成此角色;列表筛选增加 需要更新。
- 批量开始/导出前,如果存在过期音频,应明确提示并提供一键重生成,避免静默导出旧音色。
- 单句覆盖的修改继续沿用当前“保存并重生成”能力,不影响同角色其他句子。
- 会话应保留旧音频直至新音频成功生成,失败时用户仍可试听/恢复旧结果。
4. 容错与引导
- 有实际字幕的角色未选择音色时,禁用批量开始,并把焦点/滚动定位到第一个待配置角色。
- 已删除或不可用的音色显示
音色不可用,请重新选择,不得静默替换成另一个音色。
- 角色在校对阶段被重命名时,通过稳定 ID 保留原音色映射。
- 角色被合并后,若出现两个不同映射,首次进入配音时要求用户确认合并后使用哪个音色。
- sidecar 缺失或版本不支持时,回退到现有字幕解析和全局音色,不阻断配音。
数据与解析规则建议
interface DubbingSpeaker {
id: number;
name: string;
color?: string;
voiceId?: string;
}
interface DubbingCue {
speakerIds?: number[];
voiceId?: string; // 只保存显式的单句覆盖
}
实际音色解析顺序:
cue.voiceId
?? speakerVoiceMap[primarySpeakerId]
?? config.voice
speakerVoiceMap 以稳定角色 ID 为键,随配音会话持久化。
- 配音创建入口需要同时接收字幕和对应 sidecar,而不是只从导出的字幕正文反推角色。
DubbingSessionView、持久化 meta 和恢复流程应保留角色名册、cue speakerIds、角色音色映射及单句覆盖。
- 流水线从校对/翻译阶段进入配音时,应传递 sidecar 或等价结构化数据。
- 角色默认音色改变后,根据“解析后的 voice 是否变化”判断 stale,避免错误重生成带单句覆盖的 cue。
验收标准
实施拆分
非目标
- 不自动判断角色的性别、年龄、真实身份或强制推荐特定音色。
- 不在本阶段实现同一字幕片段内多人同时配音混音。
- 不新增音色克隆流程;继续复用现有引擎和已注册音色。
- 不重做现有字幕时长、重叠策略和音视频导出管线。
依赖与关联
同类产品实践参考
背景
PR #414 已让每条字幕携带结构化
speakerIds,当前配音工作台也已支持全局默认音色、单句音色覆盖、单句试听/重生成和会话恢复。现在需要把两者连接起来:让用户只需为每个角色选一次音色,即可完成多人内容的批量配音,同时保留少量特殊句子的精细调整能力。当前配音会话只解析字幕文件,未读取校对 sidecar 中的角色名册和 cue 归属;如果要求用户逐句选择音色,长视频几乎不可用,也很容易造成同一角色音色不一致。
用户问题
产品目标
目标用户与核心故事
核心流程
对只有一个角色、没有 sidecar 或没有有效
speakerIds的输入,不显示额外角色配置步骤,保持当前全局默认音色体验。交互方案
1. “角色与音色”配置区
请选择音色,并在该条目内给出直接操作,不使用全局报错弹窗。2. 字幕列表中的继承与覆盖
跟随角色(音色名),而不是当前含义不够具体的全局。单句覆盖状态;选择恢复跟随角色即删除覆盖值。未分配 · 使用全局音色,使兜底行为可见。3. 修改后重生成
重新生成此角色;列表筛选增加需要更新。4. 容错与引导
音色不可用,请重新选择,不得静默替换成另一个音色。数据与解析规则建议
实际音色解析顺序:
speakerVoiceMap以稳定角色 ID 为键,随配音会话持久化。DubbingSessionView、持久化 meta 和恢复流程应保留角色名册、cuespeakerIds、角色音色映射及单句覆盖。验收标准
单句覆盖,且可一键恢复为跟随角色。实施拆分
speakerIds。speakerVoiceMap、角色信息和 cue 归属。非目标
依赖与关联
同类产品实践参考