使用 After Effects 表达式元素以及标准 JavaScript 元素来编写您的表达式。您可随时使用“表达式语言”菜单将方法和属性插入到表达式中,您还可以随时使用关联器来插入属性。

如果参数描述包含等号 (=) 和一个值(例如 t=timewidth=.2),则当您未指定其他值时,该参数将使用随附的默认值。

一些参数描述在方括号中包括一个数字,此数字表示预期的属性或数组的维度。

一些返回值描述在方括号中包括一个数字,此数字指定返回的属性或数组的维度。如果未包括特定维度,则返回的数组的维度取决于输入的维度。

W3Schools JavaScript 参考网站提供了标准 JavaScript 语言的信息,包括 JavaScript MathString 对象的页面。

全局对象、属性和方法(表达式引用)                

comp(name)


返回类型:合成。

参数类型:name 是一个字符串。

按照名称检索其他合成。


footage(name)


返回类型:素材。

参数类型:name 是一个字符串。

按照名称检索素材项目。


thisComp


返回类型:合成。

表示包含表达式的合成。


thisLayer


返回类型:图层、光照或摄像机。

表示包含表达式的图层。因为 thisLayer 是默认对象,所以其使用是可选的。例如,以 thisLayer.widthwidth 开头的表达式将生成相同的结果。


thisProperty


返回类型:属性。

表示包含表达式的属性。例如,如果您对旋转属性编写表达式,则可使用以 thisProperty 开头的表达式来引用旋转属性。


time


返回类型:数值。

表示以秒为单位的合成时间,将以此计算表达式。


colorDepth


返回类型:数值。

返回项目颜色深度值。例如,当每个通道的项目颜色深度为 16 位时,colorDepth 返回 16。


posterizeTime(framesPerSecond)


返回类型:数值。

参数类型:framesPerSecond 是数值。

framesPerSecond 值成为其余表达式运行的帧速率。此表达式允许您将属性的帧速率设置为低于合成的速率。例如,以下表达式每秒使用随机值更新一次属性值:

??posterizeTime(1);??random()


value


返回类型:数值、数组或字符串。

表示当前时间包含表达式的属性的值。


时间转换方法(表达式引用)                

timeToFrames(t = time + thisComp.displayStartTime, fps = 1.0 / thisComp.frameDuration, isDuration = false)


返回类型:数值。

参数类型:tfps 是数值;isDuration 是布尔值。

将默认为当前合成时间的 t 的值转换为整数数目的帧。每秒的帧数在 fps 参数中指定,该参数默认为当前合成的帧速率 (1.0/thisComp.frameDuration)。isDuration 参数默认为 False,如果 t 值表示两个时间的差值而非绝对时间则为 True。绝对时间向下舍入到负无穷;持续时间向远离零的方向舍入(向上舍入为正值)。


framesToTime(frames, fps = 1.0 / thisComp.frameDuration)


返回类型:数值。

参数类型:framesfps 是数值。

timeToFrames 的反向。返回与必需的 frames 参数对应的时间。它不必是一个整数。有关 fps 参数的说明,请参阅 timeToFrames


timeToTimecode(t = time + thisComp.displayStartTime, timecodeBase = 30, isDuration = false)


返回类型:字符串。

参数类型:ttimecodeBase 是数值;isDuration 是布尔值。

t 的值转换为表示时间码的字符串。有关 tisDuration 参数的说明,请参阅 timeToFramestimecodeBase 值默认为 30,用于指定一秒内的帧数。


timeToNTSCTimecode(t = time + thisComp.displayStartTime, ntscDropFrame = false, isDuration = false)


返回类型:字符串。

参数类型:t 是数值,ntscDropFrameisDuration 是布尔值。

t 转换为表示 NTSC 时间码的字符串。有关 tisDuration 参数的说明,请参阅 timeToFrames。如果 ntscDropFrame 为 False(默认值),则结果字符串为 NTSC 未丢帧时间码。如果 ntscDropFrame 为 True,则结果字符串为 NTSC 丢帧时间码。


timeToFeetAndFrames(t = time + thisComp.displayStartTime, fps = 1.0 / thisComp.frameDuration, framesPerFoot = 16, isDuration = false)


返回类型:字符串。

参数类型:tfpsframesPerFoot 是数值;isDuration 是布尔值。

t 的值转换为表示胶片和帧的英尺的字符串。有关 tfpsisDuration 参数的说明,请参阅 timeToFramesframesPerFoot 参数指定一英尺胶片中的帧数。它默认为 16,是 35 毫米素材的最常见速率。


timeToCurrentFormat(t = time + thisComp.displayStartTime, fps = 1.0 / thisComp.frameDuration, isDuration = false)


返回类型:字符串。

参数类型:tfps 是数值;isDuration 是布尔值。

t 的值转换为表示采用当前项目设置显示格式的时间的字符串。有关所有参数的定义,请参阅 timeToFrames

可选的 ntscDropFrame 参数已添加到 After Effects CS5.5 和更高版本中的 timeToCurrentFormat() 函数。默认值:ntscDropFrame = thisComp.ntscDropFrame


如果您需要对素材中的时间码外观进行更多控制,请使用 timeToCurrentFormat 方法或其他 timeTo 方法生成时间码,而非使用时间码或编号效果。创建文本图层,向源文本属性添加表达式,并在表达式字段中输入 timeToCurrentFormat()。使用此方法,您可以对时间码文本进行格式设置以及动画制作。此外,时间码使用当前的项目设置定义的同一显示样式。

矢量数学方法(表达式引用)                  

矢量数学函数是对数组进行运算的全局方法,将其视为数学矢量。与内置 JavaScript 方法(例如 Math.sin)不同,这些方法不与 Math 前缀一起使用。除非另有说明,否则矢量数学方法对维度的要求是宽松的并返回属于最大输入数组对象的维度的值,用零填充缺失的元素。例如,表达式 add([10, 20], [1, 2, 3]) 返回 [11, 22, 3]

JJ Gifford 的网站提供了演示如何将简单的几何图形和三角函数与表达式结合使用的说明和示例。

Chris 和 Trish Meyer 在 ProVideo Coalition 网站上的一篇文章中提供了有关矢量数学方法和数组的附加信息。

add(vec1, vec2)


返回类型:数组。

参数类型:vec1vec2 是数组。

添加两个矢量。


sub(vec1, vec2)


返回类型:数组。

参数类型:vec1vec2 是数组。

减去两个矢量。


mul(vec, amount)


返回类型:数组。

参数类型:vec 是数组,amount 是数值。

将矢量的每个元素与数量相乘。


div(vec, amount)


返回类型:数组。

参数类型:vec 是数组,amount 是数值。

用矢量的每个元素除以数量。


clamp(value, limit1, limit2)


返回类型:数值或数组。

参数类型:valuelimit1limit2 是数值或数组。

value 的每个组件的值都限定为介于 limit1limit2 相应值的值之间。

Chris 和 Trish Meyer 在一篇文章中提供了有关 clamp 方法的附加信息,该文章位于 ProVideo Coalition 网站上。


dot(vec1, vec2)


返回类型:数值。

参数类型:vec1vec2 是数组。

返回矢量参数的点(内)积。


cross(vec1, vec2)


返回类型:数组 [2 或 3]。

参数类型:vec1vec2 是数组 [2 或 3]。

返回 vec1vec2 的矢量叉积。有关更多信息,请参阅数学参考或 JavaScript 指南。


normalize(vec)


返回类型:数组。

参数类型:vec 是数组。

标准化矢量以使其长度为 1.0。使用 normalize 方法是执行运算 div(vec, length(vec)) 的简便方法。


length(vec)


返回类型:数值。

参数类型:vec 是数组。

返回矢量 vec. 的长度


length(point1, point2)


返回类型:数值。

参数类型:point1point2 是数组。

返回两点之间的距离。point2 参数是可选的。例如,length(point1, point2)length(sub(point1, point2)) 一样。

例如,将此表达式添加到摄像机的焦距属性中,从而将焦平面锁定到摄像机的目标点,以便目标点对准焦点:

长度(位置,目标位置)


lookAt(fromPoint, atPoint)


返回类型:Array [3]。

参数类型:fromPointatPoint 是 Arrays [3]。

参数 fromPoint 是您要定向的图层的世界空间中的位置。参数 atPoint 是您要将图层指向的世界空间中的点。返回值可用作方向属性的表达式,使图层点的 z 轴指向 atPoint。此方法对摄像机和光照特别有用。如果您对摄像机使用此表达式,请关闭自动方向。例如,聚光灯的方向属性的以下表达式会将光点指向同一合成中的 1 号图层的锚点:lookAt(position, thisComp.layer(1).position)


随机数方法(表达式引用)                

注意:          

用于随机地改变属性值的摆动方法属于属性特性和方法类别。(请参阅性质属性和方法(表达式参考)。)


seedRandom(offset, timeless=false)


返回类型:无。

参数类型:offset 是数值,timeless 是布尔值。

randomgaussRandom 方法使用控制数字序列的种子值。默认情况下,种子计算为唯一图层标识符的函数、图层中的属性、当前时间以及位移值 0。调用 seedRandom 以将位移设为 0 之外的某个值,从而创建其他随机序列。

timeless 参数使用 true 以便不使用当前时间作为随机种子的输入。对 timeless 参数使用 true 使您能够生成一个随机数值,该值不会随计算时间而改变。

offset 值(而非 timeless 值)还用于控制 wiggle 函数的初始值。

例如,不透明度属性的以下表达式可将不透明度值设为不随时间而改变的随机值:

seedRandom(123456, true); ??random()*100

此示例中的乘以 100 会将 random 方法返回的范围 0?1 内的值转换为范围 0?100 内的数;此范围通常对不透明度属性(具有 0% 到 100% 不等的值)更有用。


random()


返回类型:数值。

返回范围 0?1 内的随机数。

在 After Effects CC 和 CS6 中,当图层 id 靠近时,random() 的行为会变得更随机。wiggle() 表达式不受影响。


random(maxValOrArray)


返回类型:数值或数组。

参数类型:maxValOrArray 是数值或数组。

如果 maxValOrArray 是数值,则此方法会返回范围 0 到 maxValOrArray 的数值。如果 maxValOrArray 是数组,则此方法会返回与 maxValOrArray 维度相同的数组,每个组件的范围为 0 到 maxValOrArray 的相应组件。


random(minValOrArray, maxValOrArray)


返回类型:数值或数组。

参数类型:minValOrArraymaxValOrArray 是数值或数组。

如果 minValOrArraymaxValOrArray 是数值,则此方法会返回范围 minValOrArraymaxValOrArray 内的数值。如果参数是数组,则此方法会返回与维度更大的数组维度相同的数组,每个组件处于 minValOrArray 的相应组件到 maxValOrArray 的相应组件这一范围中。例如,表达式 random([100, 200], [300, 400]) 返回其第一个值在范围 100?300 内且其第二个值在范围 200?400 内的数组。如果两个输入数组的维度不匹配,则将用零填充较短数组的更高维度的值。


gaussRandom()


返回类型:数值。

返回随机数。结果有一个高斯(钟形)分布。大约 90% 的结果都处于范围 0?1 内,其余 10% 在此范围之外。


gaussRandom(maxValOrArray)


返回类型:数值或数组。

参数类型:maxValOrArray 是数值或数组。

maxValOrArray 是数值时,此方法会返回一个随机数。大约 90% 的结果都处于 0 到 maxValOrArray 范围内,其余 10% 在此范围之外。当 maxValOrArray 是数组时,此方法会返回一个随机值数组,维度与 maxValOrArray 相同。90% 的值都处在 0 到 maxValOrArray 范围内,其余 10% 在此范围之外。结果有一个高斯(钟形)分布。


gaussRandom(minValOrArray, maxValOrArray)


返回类型:数值或数组。

参数类型:minValOrArraymaxValOrArray 是数值或数组。

如果 minValOrArraymaxValOrArray 是数值,则此方法会返回随机数。大约 90% 的结果都介于 minValOrArraymaxValOrArray 范围内,其余 10% 在此范围之外。如果这些参数是数组,则此方法会返回与具有较大维度的参数维度相同的随机数数组。对于每个组件,大约 90% 的结果都处于 minValOrArray 的相应组件到 maxValOrArray 的相应组件范围内,其余 10% 在此范围之外。结果有一个高斯(钟形)分布。


noise(valOrArray)


返回类型:数值。

参数类型:valOrArray 是数值或数组 [2 或 3]。

返回范围 -1 到 1 中的数值。噪声实际上不是随机的;它基于柏林噪声,这意味着相邻的两个输入值的返回值往往也是相邻的。此类噪声在您需要看似随机且相差不会很大的数值序列时(在对任何明显随机的自然运动进行动画制作时通常就如此)非常有用。示例:rotation + 360*noise(time)


插值方法(表达式引用)                

对于所有插值方法,参数 t 通常是 timevalue,但它也可以采用其他值。如果 ttime,则值之间的插值会在持续时间内发生。如果 tvalue,则表达式会将一系列值映射到新系列值。

有关插值方法的其他说明和示例,请访问 JJ Gifford 的网站。

Chris 和 Trish Meyer 在 ProVideo Coalition 网站上的一篇文章中提供了这些方法的附加信息和示例。

Ian Haigh 在 After Effects Scripts 网站上提供了一个脚本,您可将该脚本用于将高级插值方法表达式(例如回弹)轻松应用于属性。

Andrew Devis 在 Creative COW 网站上提供了两个视频教程,其中详细介绍了如何结合使用线性表达式方法和“将音频转换为关键帧”命令。

linear(t, tMin, tMax, value1, value2)


返回类型:数值或数组。

参数类型:ttMintMax 是数值,value1value2 是数值或数组。

t <=>tMin 时返回 value1。当 t >= tMax 时返回 value2。当 tMin <>t <>tMax 时,返回 value1value2 之间的线性插值。

例如,不透明度属性的以下表达式可导致不透明度值在 20 秒到 80 秒的时间内从 0% 线性渐变为 6%:

linear(time, 0, 6, 20, 80)

此方法(像所有插值方法一样)还可用于从一系列值转换为其他系列值。例如,不透明度属性的以下表达式可将不透明度值从范围 0%-100% 转换为范围 20%-80%:

??linear(value, 0, 100, 20, 80)


linear(t, value1, value2)


返回类型:数值或数组。

参数类型:t 是数值,value1value2 是数值或数组。

t 介于 0 到 1 时返回从 value1value2 进行线性插值的值。当 t <=>value1。当 t >= 1 时返回 value2


ease(t, value1, value2)


返回类型:数值或数组。

参数类型:t 是数值,value1value2 是数值或数组。

与具有相同参数的 linear 类似,只不过插值渐进和渐出以使开始点和结束点的速度为 0。此方法会产生一个非常流畅的动画。


ease(t, tMin, tMax, value1, value2)


返回类型:数值或数组。

参数类型:ttMintMax 是数值,value1value2 是数值或数组。

与具有相同参数的 linear 类似,只不过插值渐进和渐出以使开始点和结束点的速度为 0。此方法会产生一个非常流畅的动画。


easeIn(t, value1, value2)


返回类型:数值或数组。

参数类型:t 是数值,value1value2 是数值或数组。

类似于 ease,只不过切线仅在 value1 一侧为 0 且插值在 value2 一侧是线性的。


easeIn(t, tMin, tMax, value1, value2)


返回类型:数值或数组。

参数类型:ttMintMax 是数值,value1value2 是数值或数组。

类似于 ease,只不过切线仅在 tMin 一侧为 0 且插值在 tMax 一侧是线性的。


easeOut(t, value1, value2)


返回类型:数值或数组。

参数类型:t 是数值,value1value2 是数值或数组。

类似于 ease,只不过切线仅在 value2 一侧为 0 且插值在 value1 一侧是线性的。


easeOut(t, tMin, tMax, value1, value2)


返回类型:数值或数组。

参数类型:ttMintMax 是数值,value1value2 是数值或数组。

类似于 ease,只不过切线仅在 tMax 一侧为 0 且插值在 tMin 一侧是线性的。


颜色转换方法(表达式引用)                

Harry Frank 在其 graymachine 网站上提供了一个视频教程,其中演示了如何使用这些颜色转换方法来更改无线电波效果产生的波的颜色。

rgbToHsl(rgbaArray)


返回类型:数组 [4]。

参数类型:rgbaArray 是数组 [4]。

将 RGBA 空间中的颜色转换为 HSLA 空间。输入是标准化的红色、绿色、蓝色和 Alpha 通道值数组,全部介于 0.0 到 1.0 范围内。生成的值是色相、饱和度、亮度以及 Alpha 通道值数组,同样介于 0.0 到 1.0 范围内。示例:

??rgbToHsl.effect("Change Color")("Color To Change")


hslToRgb(hslaArray)


返回类型:数组 [4]。

参数类型:hslaArray 是数组 [4]。

将 HSLA 空间中的颜色转换为 RGBA 空间。此转换与 rgbToHsl 方法执行的转换相反。


其他数学方法(表达式引用)                  

Chris 和 Trish Meyer 在 ProVideo Coalition 网站上的一篇文章中提供了有关这些方法的附加信息。

degreesToRadians(degrees)


返回类型:数值。

参数类型:degrees 是数值。

将度转换为弧度。


radiansToDegrees(radians)


返回类型:数值。

参数类型:radians 是数值。

将弧度转换为度。


合成属性和方法(表达式引用)                  

layer(index)


返回类型:图层、光照或摄像机。

参数类型:index 是数值。

按照编号(“时间轴”面板中的顺序)检索图层。示例:thisComp.layer(3)


layer(name)


返回类型:图层、光照或摄像机。

参数类型:name 是一个字符串。

按照名称检索图层。名称是根据图层名称进行匹配的,如果没有图层名称,则根据源名称。如果存在副本名称,After Effects 会使用“时间轴”面板中的第一个(最高)名称。示例:

??thisComp.layer("Solid 1")


layer(otherLayer, relIndex)


返回类型:图层、光照或摄像机。

参数类型:otherLayer 是图层对象,relIndex 是数值。

检索属于 otherLayer 上面或下面的 relIndex 图层的图层。例如,如果“时间轴”面板中再下面的图层处于活动状态,则 thisComp.layer(thisLayer, 1).active 将返回 true。


标记


返回类型:MarkerProperty。


注意:          

您无法按照标记编号访问合成标记。如果您在 After Effects 的早期版本中创建了在表达式中使用合成标记编号的项目,则必须更改这些调用以改用 marker.key(name)。由于合成标记的默认名称是数值,因此,转换引用以使用名称通常只是用引号括起编号的问题。


marker.key(index)


返回类型:MarkerKey。

参数类型:index 是数值。

返回具有指定索引的标记的 MarkerKey 对象。索引引用标记在合成时间中的顺序,而不是标记名称。例如,以下表达式返回第一个合成标记的时间:

thisComp.marker.key(1).time


marker.key(name)


返回类型:MarkerKey。

参数类型:name 是一个字符串。

返回具有指定名称的标记的 MarkerKey 对象。name 值是标记对话框的注释字段中键入的标记名称,例如,marker.key("1")。对于合成标记,默认名称是数值。如果合成中的多个标记具有相同名称,则此方法返回第一次出现的(在合成时间)标记。标记密钥的值是字符串,不是数值。例如,以下表达式返回具有名称“0”的合成标记的时间:

thisComp.marker.key("0").time


marker.nearestKey(t)


返回类型:MarkerKey。

参数类型:t 是数值。

返回时间最接近 t 的标记。例如,以下表达式返回最接近 1 秒时间的合成标记的时间:

thisComp.marker.nearestKey(1).time

此表达式返回最接近当前时间的合成标记的时间:


marker.numKeys


返回类型:数值。

返回合成中合成标记的总数。


numLayers


返回类型:数值。

返回合成中的图层数。


activeCamera


返回类型:摄像机。

返回通过其在当前帧渲染合成的摄像机的摄像机对象。此摄像机未必是您通过其查看“合成”面板的摄像机。


width


返回类型:数值。

返回合成宽度(以像素为单位)。

将以下表达式应用于图层的位置属性,以将合成帧中的图层居中:

[thisComp.width/2, thisComp.height/2]


height


返回类型:数值。

返回合成高度(以像素为单位)。


duration


返回类型:数值。

返回合成持续时间(以秒为单位)。


ntscDropFrame


返回类型:布尔值。

如果时间码是丢帧格式,则返回 true。(After Effects CS5.5 和更高版本。)


displayStartTime


返回类型:数值。

返回合成启动时间(以秒为单位)。


frameDuration


返回类型:数值。

返回帧持续时间(以秒为单位)。


shutterAngle


返回类型:数值。

返回合成的快门角度值(以度为单位)。


shutterPhase


返回类型:数值。

返回合成的快门相位(以度为单位)。


bgColor


返回类型:数组 [4]。

返回合成的背景颜色。


pixelAspect


返回类型:数值。

返回合成的像素长宽比。


name


返回类型:字符串。

返回合成的名称。


素材属性和方法(表达式引用)                  

要将“项目”面板中的素材项目用作表达式中的对象,请使用全局 footage 方法,正如 footage("file_name") 中一样。您还可以使用图层(其源为素材项目)上的 source 属性访问素材对象。

width


返回类型:数值。

返回素材项目的宽度(以像素为单位)。


height


返回类型:数值。

返回素材项目的高度(以像素为单位)。


duration


返回类型:数值。

返回素材项目的持续时间(以秒为单位)。


frameDuration


返回类型:数值。

返回素材项目中帧的持续时间(以秒为单位)。


ntscDropFrame


返回类型:布尔值。

如果时间码是丢帧格式,则返回 true。(After Effects CS5.5 和更高版本。)


pixelAspect


返回类型:数值。

返回素材项目的像素长宽比。


name


返回类型:字符串。

返回“项目”面板中所示的素材项目的名称。


图层子对象属性和方法(表达式引用)                

注意:          

在 After Effects CC 和 CS6 中,“表达式语言”菜单、“图层子对象”、“图层常规”、“图层属性”、“图层 3D”以及“图层空间变换”已列入到“图层”子菜单中。


source


返回类型:合成或素材。

返回图层的源合成或源素材对象。默认时间调整为源中的时间。示例:source.layer(1).position


sourceTime(t = time)


返回类型:数值。

返回与时间 t 相应的图层源。(After Effects CS5.5 和更高版本。)


effect(name)


返回类型:效果。

参数类型:name 是一个字符串。

After Effects 在“效果控件”面板中按照名称查找效果。名称可以是默认名称或者用户定义的名称。如果多个效果具有相同名称,则会使用最接近“效果控件”面板顶层的效果。示例:

??effect("Fast Blur")("Blurriness")


effect(index)


返回类型:效果。

参数类型:index 是数值。

After Effects 在“效果控件”面板中按照索引查找效果,从 1 开始并从顶层计算。


mask(name)


返回类型:蒙版。

参数类型:name 是一个字符串。

名称可以是默认名称或者用户定义的名称。如果多个蒙版具有相同名称,则会使用第一个(最高)蒙版。示例:

??mask("Mask 1")


mask(index)


返回类型:蒙版。

参数类型:index 是数值。

After Effects 在“时间轴”面板中按照索引查找蒙版,从 1 开始并从顶层计算。


图层常规属性和方法(表达式引用)                  

width


返回类型:数值。

返回图层的宽度(以像素为单位)。它与 source.width 一样。


height


返回类型:数值。

返回图层的高度(以像素为单位)。它与 source.height 一样。


index


返回类型:数值。

返回合成中图层的索引号。


parent


返回类型:图层、光照或摄像机。

返回图层的父图层对象(如果有)。示例:position[0] + parent.width


hasParent


返回类型:布尔值。

如果图层有父级,则返回 true;如果没有,则返回 false。

使用 hasParent 属性可确定图层是否具有父图层。即使图层目前没有父图层,您也可以使用此属性。例如,以下表达式指示您对其应用父级的图层基于父级的位置摆动。如果图层没有父级,则会基于它自己的位置摆动。如果稍后向图层分配父级,则图层的行为会相应地更改:

??idx = index; ??if (hasParent) { ????idx = parent.index; ??} ??thisComp.layer(idx).position.wiggle(5,20)


inPoint


返回类型:数值。

返回图层的入点(以秒为单位)。


注意:          

通常,outPoint 的值大于 inPoint 的值。但是,如果反转图层时间,则 inPoint 的值大于 outPoint 的值。同样,“开始时间”的值可以大于“入点”

的值。


outPoint


返回类型:数值。

返回图层的出点(以秒为单位)。


startTime


返回类型:数值。

返回图层的起始时间(以秒为单位)。


hasVideo


返回类型:布尔值。

如果图层有视频,则返回 true;如果没有,则返回 false。


,