After Effects 图层属性及属性组结构详解

根据结构类型的属性分类 【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 枚举。
After Effects 图层属性及属性组结构详解
文章图片

例如,某个图层的“变换”属性组的 propertyType 输出值如图所示,表明“变换”是一个 NAMED_GROUP 属性组。
After Effects 图层属性及属性组结构详解
文章图片

某个文字图层的“文本”属性组下的“动画制作工具”属性组是一个 INDEXED_GROUP 属性组。
After Effects 图层属性及属性组结构详解
文章图片

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

在 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',

    推荐阅读