After Effects 脚本:如何实现父文本层向子层逐字符继承多字符混合样式
混合字符样式AE文本同步脚本优化方案
原参考脚本仅提取父文本层的全局基础样式数据,未读取单个字符对应的局部格式属性,因此当父文本存在字重、字号、颜色等局部差异(如半粗体/常规混合的多字符格式)时,子层只会沿用统一的全局样式,无法继承对应的混合格式。
逐字符样式遍历的实现方案
AE的文本对象内置了针对字符级样式的读取、写入API,不需要手动拆分文本匹配位置,可通过以下逻辑实现全量样式同步:
- 读取父文本层的完整源文本文档对象,获取包含所有字符内容、逐字符样式的原始数据
- 初始化目标文本文档容器,从索引0开始逐一遍历每个字符,提取每个位置对应的独立字符样式
- 将逐字符收集的样式数据和对应文本内容绑定,直接返回给当前子文本层的源文本属性
// 替换为实际的父层所在合成、父层名称 const parentComp = comp("Precomp - People"); const parentLayer = parentComp.layer("Single Title"); // 获取父层完整的文本文档对象(包含文本内容、全量段落+字符级样式) const parentDoc = parentLayer.text.sourceText.value; // 初始化目标文档,同步首个字符的样式 let syncDoc = new TextDocument(parentDoc.text).setStyleAt( 0, parentDoc.style.getStyleAt(0) ); // 从第2个字符(索引1)开始,逐位同步每个字符的独立样式 for (let charIdx = 1; charIdx < parentDoc.text.length; charIdx++) { const charSpecificStyle = parentDoc.style.getStyleAt(charIdx); syncDoc = syncDoc.setStyleAt(charIdx, charSpecificStyle); } // 返回同步完成的文档,作为子文本层的源文本属性值 syncDoc
效果说明
- 可完整覆盖单字符级的所有格式差异:包括半粗体/常规字重混合、局部字号调整、自定义字间距、描边、填充色等场景,所有样式和父层逐位置完全匹配
- 遍历逻辑的运算开销极低,不会造成表达式计算卡顿
- 兼容AE 2020及以上版本的文本引擎API能力
内容的提问来源于stack exchange,提问作者ryan
相关产品推荐
相关产品推荐

