如何不使用AWS Polly集成AWS Sumerian Host并保留唇形同步
核心结论
可以使用AWS Sumerian Host的3D资产搭配自托管TTS服务(如Mimic3、Web Speech API),同时保留唇形同步等视觉功能——核心是复刻Polly Speechmarks的音素时间戳数据格式,再替换原有代码中调用Polly的逻辑。
具体实现步骤
1. 明确Sumerian Host的同步逻辑
Sumerian Host的唇形同步依赖音素级时间戳数据(对应Polly Speechmarks里的VISIME标记),每个标记包含:
- 匹配的口型动作编码(如
p、a、o等) - 动作在音频中的起始时间(毫秒)
- 动作持续时长
原有代码会把这些标记映射到3D模型的混合形状(blend shape),从而驱动口型变化。
2. 为自定义TTS生成兼容的时间戳数据
针对Mimic3
Mimic3原生支持输出音素级时间戳,可通过以下方式获取:
- 调用时启用
--phoneme-timestamps参数,会输出包含每个音素起始/结束时间的JSON数据。 - 编写映射函数,将Mimic3输出的音素(如
aa、p)转换为Sumerian Host使用的VISIME编码(可参考Sumerian Host源码中的音素-口型映射表)。
针对Web Speech API
Web Speech API本身不直接输出音素时间戳,可通过两种方式补充:
- 使用
SpeechSynthesisUtterance的boundary事件:该事件会在单词/音节边界触发,可基于此生成近似时间戳(精度略低,但能满足基础唇形同步需求)。 - 结合第三方带时间戳的TTS库(如
meSpeak),直接获取音素级时间数据。
3. 修改Sumerian Host的代码逻辑
以ThreeJS版本为例:
- 找到原有调用Polly API的代码文件(如
PollySpeechProvider.js),替换为调用自定义TTS服务的逻辑。 - 将自定义TTS返回的音频和时间戳数据,转换为Polly Speechmarks的兼容格式:
// 示例:将Mimic3时间戳转为Sumerian兼容格式 const convertedSpeechmarks = mimic3Phonemes.map(phoneme => ({ time: phoneme.start * 1000, // 转为毫秒单位 type: 'viseme', value: mapPhonemeToViseme(phoneme.phoneme) // 自定义音素-口型映射函数 })); - 将转换后的时间戳数据传入Sumerian Host的动画驱动模块(如
LipSyncController.js),替换原有Polly Speechmarks的输入。
4. 调试与优化
- 验证音素到VISIME的映射准确性,避免口型与发音不匹配。
- 微调时间戳的偏移量,解决音频播放与口型动画的延迟问题。
- 针对Web Speech API的
boundary事件,可通过预拆分单词音节提升同步精度。
替代方案:使用通用唇形同步库
如果自定义时间戳难度较高,可直接集成通用唇形同步工具(如Rhino Speech-to-Visemes、Web版Wav2Lip):
- 将自定义TTS生成的音频输入到工具中,直接获取驱动3D模型的混合形状动画数据。
- 替换Sumerian Host原有的Polly驱动逻辑,改用该工具的输出控制模型口型。
内容的提问来源于stack exchange,提问作者Joseph Chai
相关产品推荐
相关产品推荐

