After Effects 图层属性及属性组结构详解
根据结构类型的属性分类
在 After Effects 的脚本开发中,图层的属性可被区分为三种类型:PROPERTY、INDEXED_GROUP 和 NAMED_GROUP 。通过使用app.project.item().layer().propertySpec.propertyType 可以对属性的类型进行判断。在 AEGP 插件的开发中这些类型对应为 AEGP_StreamGroupingType_LEAF 、AEGP_StreamGroupingType_INDEXED_GROUP 和 AEGP_StreamGroupingType_NAMED_GROUP,通过调用 AEGP_DynamicStreamSuite 的AEGP_GetStreamGroupingType 方法进行获取。
PROPERTY(LEAF)类型的属性为属性组中最底层的属性,即具有对应的值可供用户操作调整的属性;INDEXED_GROUP 类型的属性组中子级的名称可编辑,换言之 INDEXED_GROUP 类型的属性组中的子级是不固定的,可进行增删,如效果和蒙版都是这种类型;NAMED_GROUP 类型的属性组具有固定的子级属性,且子级属性的名称是不可更改的。
在脚本中直接输出 propertyType 时会输出一个数字,这是 ExtendScript 中定义的 PropertyType 枚举。

例如,某个图层的“变换”属性组的 propertyType 输出值如图所示,表明“变换”是一个 NAMED_GROUP 属性组。

某个文字图层的“文本”属性组下的“动画制作工具”属性组是一个 INDEXED_GROUP 属性组。

属性的可见性
在 AEGP 插件的开发中可以通过调用 AEGP_DynamicStreamSuite 的 AEGP_GetDynamicStreamFlags 方法获取属性的标志,其中具有几个值得注意的内容。AEGP_DynStreamFlag_ELIDED 标志着一个属性组始终不会将自身显示在时间轴面板中,但它的子级属性会直接显示在该属性组的父级属性组中。一个常用的例子是文本图层的“动画制作工具”:当给文本图层添加一个动画制作工具后,“文本”属性组中“动画制作工具 1”会与“源文本”、“路径选项”和“更多选项”并列显示,但实际上“动画制作工具 1”是存在于“动画制作工具”属性组中的,但由于“动画制作工具”具有 ELIDED 标志,导致“动画制作工具”不会显示在时间轴中。编写脚本时访问此类属性组中的属性需要注意。另外,在脚本中使用 app.project.item().layer().porpertySpec.elided 也能获取到某属性组是否具有 ELIDED 标志。
特定类型图层所具有的属性组是固定的,未显示在时间轴中的属性不代表它不存在,通常未被修改的属性及其属性组会被隐藏。在脚本中可以通过app.project.item().layer().porpertySpec.isModified判断某属性在创建后是否被修改。
图层属性的结构
在脚本中图层可以当作属性组进行处理,如下图所示:

在 AEGP 插件开发中通常使用 AEGP_DynamicStreamSuite 的 AEGP_GetNewStreamRefForLayer方法检索与图层对应的 AEGP_StreamRefH ,用于启动图层属性流的递归。亦是将图层作为属性组进行处理。
因图层是 NAMED_GROUP 类型的属性组,故其子级属性组是固定的。本文整理了AVLayer、TextLayer、ShapeLayer、CameraLayer 和 LightLayer 五类图层的属性组结构,其中包括属性的中文名称与其 MatchName 的对照。因树形图尺寸过大,以下提供 FreeMind 文件的下载链接:https://wwe.lanzoui.com/ilSn0v23p3e
若您对遍历某属性组中的属性有兴趣,也可以参考以下脚本代码:
var str = '';
var selProp = app.project.activeItem.selectedLayers[0].property("Transform");//将该变量修改为您需要遍历的属性组
var numProps = selProp.numProperties;
for(var i = 0; i < numProps; i ++){
str += selProp.property(i + 1).name + ' - ' + selProp.property(i + 1).matchName + '\n';//输出名称和 MatchName
}
alert(str);
脚本中访问属性的简介写法
在 ExtendScript 脚本中访问属性具有简洁写法,例如 .property("Transform") 也可以使用 . transform。以下提供部分对照以供查找和参考:
| 属性 | 简洁写法 |
|---|---|
| ADBE Transform Group: | 'transform', |
| ADBE Anchor Point: | .pointOfInterest' 或 '.anchorPoint', |
| ADBE Position: | '.position', |
| ADBE Scale: | '.scale', |
| ADBE Orientation: | '.orientation', |
| ADBE Rotate X: | '.xRotation', |
| ADBE Rotate Y: | '.yRotation', |
| ADBE Rotate Z: | .zRotation' 或 '.rotation', |
| ADBE Opacity: | '.opacity', |
| ADBE Material Options Group: | 'materialOption', |
| ADBE Casts Shadows: | '.castsShadows', |
| ADBE Light Transmission: | '.lightTransmission', |
| ADBE Accepts Shadows: | '.acceptsShadows', |
| ADBE Accepts Lights: | '.acceptsLights', |
| ADBE Ambient Coefficient: | '.ambient', |
| ADBE Diffuse Coefficient: | '.diffuse', |
| ADBE Specular Coefficient: | '.specular', |
| ADBE Shininess Coefficient: | '.shininess', |
| ADBE Metal Coefficient: | '.metal', |
| ADBE Light Options Group: | 'lightOption', |
| ADBE Light Intensity: | '.intensity', |
| ADBE Light Color: | '.color', |
| ADBE Light Cone Angle: | '.coneAngle', |
| ADBE Light Cone Feather 2: | '.coneFeather', |
| ADBE Light Shadow Darkness: | '.shadowDarkness', |
| ADBE Light Shadow Diffusion: | '.shadowDiffusion', |
| ADBE Camera Options Group: | 'cameraOption', |
| ADBE Camera Zoom: | '.zoom', |
| ADBE Camera Depth of Field: | '.depthOfField', |
| ADBE Camera Focus Distance: | '.focusDistance', |
| ADBE Camera Aperture: | '.aperture', |
| ADBE Camera Blur Level: | '.blurLevel', |
| ADBE Text Properties: | 'text', |
| ADBE Text Document: | '.sourceText', |
| ADBE Text Path Options: | '.pathOption', |
| ADBE Text Path: | '.path', |
| ADBE Text Reverse Path: | '.reversePath', |
| ADBE Text Perpendicular To Path: | '.perpendicularToPath', |
| ADBE Text Force Align Path: | '.forceAlignment', |
| ADBE Text First Margin: | '.firstMargin', |
| ADBE Text Last Margin: | '.lastMargin', |
| ADBE Text More Options: | '.moreOption', |
| ADBE Text Anchor Point Option: | '.anchorPointGrouping', |
| ADBE Text Anchor Point Align: | '.groupingAlignment', |
| ADBE Text Render Order: | '.fillANdStroke', |
| ADBE Text Character Blend Mode: | '.interCharacterBlending', |
| ADBE Text Animators: | '.animator', |
| ADBE Text Selectors: | '.selector', |
| ADBE Text Percent Start: | '.start', |
| ADBE Text Percent End: | '.end', |
| ADBE Text Percent Offset: | '.offset', |
| ADBE Text Range Advanced: | '.advanced', |
| ADBE Text Range Units: | '.units', |
| ADBE Text Range Type2: | '.basedOn', |
| ADBE Text Selector Mode: | '.mode', |
| ADBE Text Range Shape: | '.shape', |
| ADBE Text Selector Smoothness: | '.smoothness', |
| ADBE Text Levels Max Ease: | '.easeHigh', |
| ADBE Text Levels Min Ease: | '.easeLow', |
| ADBE Text Randomize Order: | '.randomizeOrder', |
| ADBE Text Random Seed: | '.randomSeed', |
| ADBE Text Selector Mode: | '.mode', |
| ADBE Text Wiggly Max Amount: | '.maxAmount', |
| ADBE Text Wiggly Min Amount: | '.minAmount', |
| ADBE Text Range Type2: | '.basedOn', |
| ADBE Text Temporal Freq: | '.wigglesSecond', |
| ADBE Text Character Correlation: | '.correlation', |
| ADBE Text Temporal Phase: | '.temporalPhase', |
| ADBE Text Spatial Phase: | '.spatialPhase', |
| ADBE Text Wiggly Lock Dim: | '.lockDimensions', |
| ADBE Text Wiggly Random Seed: | '.randomSeed', |
| ADBE Text Range Type2: | '.basedOn', |
| ADBE Text Expressible Amount: | '.amount', |
| ADBE Text Animator Properties: | '.property', |
| ADBE Text Anchor Point 3D: | '.anchorPoint', |
| ADBE Text Position 3D: | '.position', |
| ADBE Text Scale 3D: | '.scale', |
| ADBE Text Skew: | '.skew', |
| ADBE Text Skew Axis: | '.skewAxis', |
| ADBE Text Rotation X: | '.xRotation', |
| ADBE Text Rotation Y: | '.yRotation', |
| ADBE Text Rotation: | '.zRotation', |
| ADBE Text Opacity: | '.opacity', |
| ADBE Text Fill Opacity: | '.fillOpacity', |
| ADBE Text Fill Color: | '.fillColor', |
| ADBE Text Fill Hue: | '.fillHue', |
| ADBE Text Fill Saturation: | '.fillSaturation', |
| ADBE Text Fill Brightness: | '.fillBrightness', |
| ADBE Text Stroke Opacity: | '.strokeOpacity', |
| ADBE Text Stroke Color: | '.strokeColor', |
| ADBE Text Stroke Hue: | '.strokeHue', |
| ADBE Text Stroke Saturation: | '.strokeSaturation', |
| ADBE Text Stroke Brightness: | '.strokeBrightness', |
| ADBE Text Stroke Width: | '.strokeWidth', |
| ADBE Text Line Anchor: | '.lineAnchor', |
| ADBE Text Line Spacing: | '.lineSpacing', |
| ADBE Text Track Type: | '.trackingType', |
| ADBE Text Tracking Amount: | '.trackingAmount', |
| ADBE Text Character Change Type: | '.characterAlignment', |
| ADBE Text Character Range: | '.characterRange', |
| ADBE Text Character Replace: | '.characterValue', |
| ADBE Text Character Offset: | '.characterOffset', |
| ADBE Text Blur: | '.blur', |
| ADBE Mask Parade: | 'mask', |
| ADBE Mask Shape: | '.maskPath', |
| ADBE Mask Feather: | '.maskFeather', |
| ADBE Mask Opacity: | '.maskOpacity', |
| ADBE Mask Offset: | '.maskExpansion', |
| ADBE Effect Parade: | 'effect', |
| ADBE Paint Group: | '.stroke', |
| ADBE Paint Shape: | '.path', |
| ADBE Paint Properties: | '.strokeOption', |
| ADBE Paint Begin: | '.start', |
| ADBE Paint End: | '.end', |
| ADBE Paint Color: | '.color', |
| ADBE Paint Diameter: | '.diameter', |
| ADBE Paint Angle: | '.angle', |
| ADBE Paint Hardness: | '.hardness', |
| ADBE Paint Roundness: | '.roundness', |
| ADBE Paint Tip Spacing: | '.spacing', |
| ADBE Paint Target Channels: | '.channels', |
| ADBE Paint Opacity: | '.opacity', |
| ADBE Paint Flow: | '.flow', |
| ADBE Paint Clone Layer: | '.cloneSource', |
| ADBE Paint Clone Position: | '.clonePosition', |
| ADBE Paint Clone Time: | '.cloneTime', |
| ADBE Paint Clone Time Shift: | '.cloneTimeShift', |
| ADBE Paint Transform: | '.transform', |
| ADBE Paint Anchor Point: | '.anchorPoint', |
| ADBE Paint Position: | '.position', |
| ADBE Paint Scale: | '.scale', |
| ADBE MTrackers: | 'motionTracker', |
| ADBE MTracker Pt Feature Center: | '.featureCenter', |
| ADBE MTracker Pt Feature Size: | '.featureSize', |
| ADBE MTracker Pt Search Ofst: | '.searchOffset', |
| ADBE MTracker Pt Search Size: | '.searchSize', |
| ADBE MTracker Pt Confidence: | '.confidence', |
| ADBE MTracker Pt Attach Pt: | '.attachPoint', |
| ADBE MTracker Pt Attach Pt Ofst: | '.attachPointOffset', |
| ADBE Audio Group: | 'audio', |
| ADBE Audio Levels: | '.audioLevels', |
| ADBE Time Remapping: | 'timeRemap', |
| ADBE Layer Styles: | 'layerStyle', |
| ADBE Blend Options Group: | '.blendingOption', |
| ADBE Global Angle2: | ADBE Global Angle2: |
| ADBE Global Altitude2: | '.globalLightAltitude', |
| ADBE Adv Blend Group: | '.advancedBlending', |
| ADBE Layer Fill Opacity2: | '.fillOpacity', |
| ADBE R Channel Blend: | '.red', |
| ADBE G Channel Blend: | '.green', |
| ADBE B Channel Blend: | '.blue', |
| ADBE Blend Interior: | '.blendInteriorStylesAsGroup', |
| ADBE Blend Ranges: | '.useBlendRangesFromSource', |
| dropShadow/enabled: | '.dropShadow', |
| dropShadow/mode2: | '.blendMode', |
| dropShadow/color: | '.color', |
| dropShadow/opacity: | '.opacity', |
| dropShadow/useGlobalAngle: | '.useGlobalLight', |
| dropShadow/localLightingAngle: | '.angle', |
| dropShadow/distance: | '.distance', |
| dropShadow/chokeMatte: | '.spread', |
| dropShadow/blur: | '.size', |
| dropShadow/noise: | '.noise', |
| dropShadow/layerConceals: | '.layerKnocksOutDropShadow', |
| innerShadow/enabled: | '.innerShadow', |
| innerShadow/mode2: | '.blendMode', |
| innerShadow/color: | '.color', |
| innerShadow/opacity: | '.opacity', |
| innerShadow/useGlobalAngle: | '.useGlobalLight', |
| innerShadow/localLightingAngle: | '.angle', |
| innerShadow/distance: | '.distance', |
| innerShadow/chokeMatte: | '.choke', |
| innerShadow/blur: | '.size', |
| innerShadow/noise: | '.noise', |
| outerGlow/enabled: | '.outerGlow', |
| outerGlow/mode2: | '.blendMode', |
| outerGlow/opacity: | '.opacity', |
| outerGlow/noise: | '.noise', |
| outerGlow/AEColorChoice: | '.colorType', |
| outerGlow/color: | '.color', |
| outerGlow/gradientSmoothness: | '.gradientSmoothness', |
| outerGlow/glowTechnique: | '.technique', |
| outerGlow/chokeMatte: | '.spread', |
| outerGlow/blur: | '.size', |
| outerGlow/inputRange: | '.range', |
| outerGlow/shadingNoise: | '.jitter', |
| innerGlow/enabled: | '.innerGlow', |
| innerGlow/mode2: | '.blendMode', |
| innerGlow/opacity: | '.opacity', |
| innerGlow/noise: | '.noise', |
| innerGlow/AEColorChoice: | '.colorType', |
| innerGlow/color: | '.color', |
| innerGlow/gradientSmoothness: | '.gradientSmoothness', |
| innerGlow/glowTechnique: | '.technique', |
| innerGlow/innerGlowSource: | '.source', |
| innerGlow/chokeMatte: | '.choke', |
| innerGlow/blur: | '.size', |
| innerGlow/inputRange: | '.range', |
| innerGlow/shadingNoise: | '.jitter', |
| bevelEmboss/enabled: | '.bevelAndEmboss', |
| bevelEmboss/bevelStyle: | '.style', |
| bevelEmboss/bevelTechnique: | '.technique', |
| bevelEmboss/strengthRatio: | '.depth', |
| bevelEmboss/bevelDirection: | '.direction', |
| bevelEmboss/blur: | '.size', |
| bevelEmboss/softness: | '.soften', |
| bevelEmboss/useGlobalAngle: | '.useGlobalLight', |
| bevelEmboss/localLightingAngle: | '.angle', |
| bevelEmboss/localLightingAltitude: | '.altitude', |
| bevelEmboss/highlightMode: | '.highlightMode', |
| bevelEmboss/highlightColor: | '.highlightColor', |
| bevelEmboss/highlightOpacity: | '.highlightOpacity', |
| bevelEmboss/shadowMode: | '.shadowMode', |
| bevelEmboss/shadowColor: | '.opacity', |
| innerGlow/opacity: | '.shadowColor', |
| bevelEmboss/shadowOpacity: | '.shadowOpacity', |
| chromeFX/enabled: | '.satin', |
| chromeFX/mode2: | '.blendMode', |
| chromeFX/color: | '.color', |
| chromeFX/opacity: | '.opacity', |
| chromeFX/localLightingAngle: | '.angle', |
| chromeFX/distance: | '.distance', |
| chromeFX/blur: | '.size', |
| chromeFX/invert: | '.invert', |
| solidFill/enabled: | '.colorOverlay', |
| solidFill/mode2: | '.blendMode', |
| solidFill/color: | '.color', |
| solidFill/opacity: | '.opacity', |
| gradientFill/enabled: | '.gradientOverlay', |
| gradientFill/mode2: | '.blendMode', |
| gradientFill/opacity: | '.opacity', |
| gradientFill/gradientSmoothness: | '.gradientSmoothness', |
| gradientFill/angle: | '.angle', |
| gradientFill/type: | '.style', |
| gradientFill/reverse: | '.reverse', |
| gradientFill/align: | '.alignWithLayer', |
| gradientFill/scale: | '.scale', |
| gradientFill/offset: | '.offset', |
| patternFill/enabled: | '.patternOverlay', |
| patternFill/mode2: | '.blendMode', |
| patternFill/opacity: | '.linkWithLayer', |
| patternFill/align: | '.scale', |
| patternFill/scale: | '.opacity', |
| patternFill/phase: | '.offset', |
| frameFX/enabled: | '.blendMode', |
| frameFX/color: | '.color', |
| frameFX/size: | '.size', |
| frameFX/opacity: | '.opacity', |
| innerGlow/opacity: | '.opacity', |
| innerGlow/opacity: | '.opacity', |
| frameFX/style: | '.position', |
After Effects 图层属性及属性组结构详解的更多相关文章
- Maven配置文件POM属性最全详解
注:本文内容来源于: BlueKitty1210 <Maven配置文件POM属性最全详解> <project xmlns="http://maven.apache.org/ ...
- moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解
☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:moviepy中的剪辑基类Clip详解>和<moviepy音视频剪辑:moviepy中的剪辑基类Cl ...
- Linux文件系统的目录结构详解
Linux文件系统的目录结构详解 一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...
- web标准 浏览器介绍 开发工具介绍 HTML介绍 HTML颜色介绍 规范 HTML结构详解 {前端之前端初识}
前端之前端初识 前端初识 本节目录 一 web标准 二 浏览器介绍 三 开发工具介绍 四 HTML介绍 五 HTML颜色介绍 六 规范 七 HTML结构详解 一 web标准 web准备介绍: 1. ...
- JS函数动作分层结构详解及Document.getElementById 释义 js及cs数据类型区别 事件 函数 变量 script标签 var function
html +css 静态页面 js 动态 交互 原理: js就是修改样式, 比如弹出一个对话框. 弹出的过程就是这个框由disable 变成display:enable. 又或者当鼠标指向 ...
- OpenCV-Mat结构详解
前面博客中Mat函数谈到一些理解,但是理解的比较浅显,下面谈谈通道,行列等意义: Mat的常见属性 opencv中type类型· CV_<bit_depth>(S|U|F)C<num ...
- JVM结构详解
JVM 结构详解 JVM 结构图 程序计数器(PC 寄存器) 程序计数器的定义 程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址.若当前线程正在执行的是一个本地方法,那么此时程 ...
- Netsuite Formula > Oracle函数列表速查(PL/SQL单行函数和组函数详解).txt
PL/SQL单行函数和组函数详解 函数是一种有零个或多个参数并且有一个返回值的程序.在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类: 单行函数 ...
- BS模式的模型结构详解
编号:1004时间:2016年4月12日16:59:17功能:BS模式的模型结构详解 URL:http://blog.csdn.net/icerock2000/article/details/4000 ...
随机推荐
- web整合Spring
Spring整合Web开发 时间:2017-2-2 02:17 --导入jar包1.导入Spring开发基本jar包 spring-beans-3.2.0.RELEASE.jar spr ...
- Git最强总结!
本文已经收录到Github仓库,欢迎大家围观.star.此仓库用于分享Java核心知识,包括Java基础.MySQL.SpringBoot.Mybatis.Redis.RabbitMQ等等,面试必备. ...
- ECMAScript版本知识点汇总
ECMAScript版本知识点汇总 ES5 btoa.atob 对参数进行base64格式编码.解码 /** * btoa() * base64编码 * @param {string} str * @ ...
- 解决方案-问题001:物理机、虚机等等Linux操作系统/usr/bin目录权限误操作,导致无法切换root
导语:平常运维人员会误操作一些目录权限,导致一些问题,那么如何恢复呢? 问题:物理机.虚机等等Linux操作系统/usr/bin目录权限误操作,导致无法切换root? 实验环境: ip地址 是否目录正 ...
- RabbitMQ-如何保证消息在99.99%的情况下不丢失
1. 简介 MQ虽然帮我们解决了很多问题,但是也带来了很多问题,其中最麻烦的就是,如何保证消息的可靠性传输. 我们在聊如何保证消息的可靠性传输之前,先考虑下哪些情况下会出现消息丢失的情况. 首先,上图 ...
- python3 spider [ urllib.request ]
# # 导入urllib库的urlopen函数 # from urllib.request import urlopen # # 发出请求,获取html # html = urlopen(" ...
- Element UI:级联选择器Cascader_动态加载_多级请求不同接口(已知第一级调取第二级)
ELEMENT UI_CASCADER 使用过饿了么级联动态加载的小伙伴应该都知道,lazyLoad本身是一个无差别返回渲染结点的函数. 当我们存在一个需求:已知级联选择器的第一级结点,现在需要通过第 ...
- Linux-实战常用命令
目录 关机/重启/注销 系统信息和性能查看 磁盘和分区 ⽤户和⽤户组 ⽹络和进程管理 常⻅系统服务命令 ⽂件和⽬录操作 ⽂件查看和处理 打包和解压 RPM包管理命令 YUM包管理命令 DPKG包管理命 ...
- 谈谈Linux系统启动流程
@ 目录 大体流程分析 一.BIOS 1.1 BIOS简介 1.2 POST 二.BootLoader (GRUB) 2.1 What's MBR? 2.2 What's GRUB? 2.3 boot ...
- logstash-input-jdbc 同时同步多个表的情况
input { jdbc { jdbc_connection_string => "jdbc:mysql://localhost:3306/crm?zeroDateTimeBehavi ...