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

405 阅读6分钟

根据结构类型的属性分类

在 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 枚举。

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

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

3.png

属性的可见性

在 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 文件的下载链接: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);

4.png

脚本中访问属性的简介写法

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