目录表达式参考

表达式

表达式参考

表达式能用的全部名称,从编辑器的表达式运行时生成。名称沿用 After Effects 的表达式语言,大多数 After Effects 表达式可以直接使用。

表达式是一小段 JavaScript⁠ (外部网站,在新标签页打开) 脚本,在每一帧算出属性的值。最后一行的值就是结果,类型要与属性一致:数字、[x, y] 这样的数组、0 到 1 的颜色 [r, g, b, a]、文字,或真/假。

每次运行都与编辑器和网络隔开:读不到文件、时钟和页面,在哪台机器上算结果都一样。一次运行最多用 8 MB 内存、从项目里读 64 个值;表达式读另一个属性时,会先把那个属性算出来,两个属性互相读取则会报错。

属性面板里形状图层“位置”上的一段表达式:表达式按钮、它给出的值,以及表达式本身。
  1. 每个属性旁的表达式按钮打开它的表达式。
  2. 有表达式时,属性显示表达式在当前帧给出的值。
  3. 表达式本身。“预览”试运行,“应用”保留它,“转换为关键帧”把结果变成关键帧。

当前属性

表达式所在的属性。这些名称可以单独使用;读取任何属性时,也能用同样的成员,例如 thisComp.layer("Ball").transform.position.valueAtTime(1)。

名称得到什么
value属性在当前时间、被表达式改变之前的值。
time合成的当前时间,单位为秒。
thisProperty表达式所在的属性,带有本表中的各个成员。
valueAtTime(t)属性在时间 t(秒)的值。
velocity数值此刻每秒变化多快。
velocityAtTime(t)时间 t 的速度。
speed数值此刻移动多快,不论方向:即速度向量的长度。
speedAtTime(t)时间 t 的速率。
numKeys属性有几个关键帧。
key(index)按序号(从 1 开始)取一个关键帧,带有它的 time、value 和 index。
nearestKey(t)离时间 t 最近的关键帧。
name属性的名称。
wiggle(freq, amp, octaves = 1, ampMult = 0.5, t = time)让数值每秒随机抖动约 freq 次、幅度最多 amp;每多一个八度就多一层更细的抖动,强度乘以 ampMult。
temporalWiggle(freq, amp, octaves = 1, ampMult = 0.5, t = time)在 t 附近随机漂移的时间点读取数值,让动画本身随机地忽快忽慢。
smooth(width = 0.2, samples = 5, t = time)在 t 前后共 width 秒内读取 samples 次(1 到 32)取平均,用来抹平抖动。
loopIn(type = "cycle", numKeyframes = 0)在第一个关键帧之前重复关键帧动画。type 可以是 cycle、pingpong、offset 或 continue;numKeyframes 只循环最前面的几个关键帧。
loopOut(type = "cycle", numKeyframes = 0)在最后一个关键帧之后用同样四种方式重复关键帧动画;numKeyframes 只循环最后几个关键帧。
loopInDuration(type = "cycle", duration = 0)与 loopIn 相同,但循环最前面的 duration 秒。
loopOutDuration(type = "cycle", duration = 0)与 loopOut 相同,但循环最后的 duration 秒。
property("address")按地址取项目里的任意属性,地址的写法与编辑器关联两个属性时写下的相同。

图层

一个图层,来自 thisLayer 或 thisComp.layer(…)。当前图层的这些名称也可以单独使用:position 就是 thisLayer.transform.position。

名称得到什么
thisLayer表达式所在的图层。
name图层的名称。
index图层在合成中的序号;1 是最上面的图层。
inPoint图层开始的时间,单位为秒。
outPoint图层结束的时间,单位为秒。
startTime图层自身时间为 0 时对应的合成时间,单位为秒。
width图层的宽度,单位为像素。
height图层的高度,单位为像素。
active图层开着、且当前时间在它的开始与结束之间时为真。
enabled图层开着时为真。
hasParent图层有父级时为真。
parent图层的父级;没有父级时报错。
transform图层的变换属性,见下面几行。
transform.anchorPoint图层的 anchorPoint,作为属性读取。可以省略 transform.。
transform.position图层的 position,作为属性读取。可以省略 transform.。
transform.xPosition图层的 xPosition,作为属性读取。可以省略 transform.。
transform.yPosition图层的 yPosition,作为属性读取。可以省略 transform.。
transform.zPosition图层的 zPosition,作为属性读取。可以省略 transform.。
transform.scale图层的 scale,作为属性读取。可以省略 transform.。
transform.rotation图层的 rotation,作为属性读取。可以省略 transform.。
transform.xRotation图层的 xRotation,作为属性读取。可以省略 transform.。
transform.yRotation图层的 yRotation,作为属性读取。可以省略 transform.。
transform.zRotation图层的 zRotation,作为属性读取。可以省略 transform.。
transform.orientation图层的 orientation,作为属性读取。可以省略 transform.。
transform.opacity图层的 opacity,作为属性读取。可以省略 transform.。
transform.pointOfInterest图层的 pointOfInterest,作为属性读取。可以省略 transform.。
transform.zoom图层的 zoom,作为属性读取。可以省略 transform.。
marker图层的标记(见“标记”)。
effect("name")("parameter")按名称或序号取图层上的一个效果,再按名称或序号取它的一个参数。.param(…) 也能读参数。
layer.property("group-id/property-id")按组与属性的 ID 路径取图层的一个属性。
toComp(point, t = time)把图层空间里的点换算到合成空间。不计入 3D 摄像机的投影。
fromComp(point, t = time)把合成空间里的点换算到图层空间。
toWorld(point, t = time)与 toComp 相同,用的是 After Effects 里的名称。
fromWorld(point, t = time)与 fromComp 相同,用的是 After Effects 里的名称。
toCompVec(vector, t = time)与 toComp 相同,但换算的是方向而不是点:不计位置,只计旋转与缩放。
fromCompVec(vector, t = time)与 fromComp 相同,但换算的是方向而不是点。
toWorldVec(vector, t = time)与 toCompVec 相同。
fromWorldVec(vector, t = time)与 fromCompVec 相同。

合成

图层所在的合成,或按名称找到的另一个合成。

名称得到什么
thisComp图层所在的合成。
comp("name")按名称取项目里的另一个合成。
thisProject.comp("name")当前项目;它的 comp("name") 与 comp("name") 相同。
thisComp.layer("name" | index | otherLayer, relIndex)按名称或序号取一个图层,或取离另一个图层 relIndex 层的图层。
name合成的名称。
width合成的宽度,单位为像素。
height合成的高度,单位为像素。
duration合成的时长,单位为秒。
frameDuration一帧持续多久,单位为秒。
numLayers合成有几个图层。
pixelAspect合成的像素长宽比。
displayStartTime合成时间码的起始时间,单位为秒。
marker合成的标记(见“标记”)。

标记

图层或合成的标记,来自它的 marker。

名称得到什么
numKeys一共有几个标记。
marker.key(index | "name")按序号(从 1 开始)或按名称、注释取一个标记,带有它的 time、duration、comment、name 和 index。
marker.nearestKey(t)离时间 t 最近的标记。

向量运算

对数字和数组都适用的函数。缺少的维度按 0 计算。

名称得到什么
add(a, b)把两个数字或数组相加。
sub(a, b)用 a 减去 b。
mul(vector, amount)把数字或数组乘以一个量。
div(vector, amount)把数字或数组除以一个量。
clamp(value, limit1, limit2)把一个值(或数组的每一项)限制在两个界限之间。
dot(a, b)两个数组的点积。
cross(a, b)两个三维数组的叉积。
normalize(vector)把数组缩放到长度为 1。
length(vector) / length(a, b)数组的长度,或两点之间的距离。
lookAt(fromPoint, atPoint)让位于 fromPoint 的 3D 图层朝向 atPoint 的方向。
degreesToRadians(degrees)把角度换算成弧度。
radiansToDegrees(radians)把弧度换算成角度。

插值

把一个范围换算到另一个范围。只给三个参数时,t 从 0 到 1。

名称得到什么
linear(t, tMin, tMax, value1, value2)把 t 从 tMin–tMax 按直线换算到 value1–value2,超出两端时停在端点。
ease(t, tMin, tMax, value1, value2)同上,开头和结尾都缓动。
easeIn(t, tMin, tMax, value1, value2)同上,开头慢、到达时为全速。
easeOut(t, tMin, tMax, value1, value2)同上,开头为全速、到达时变慢。

随机数与噪波

随机数按属性与帧取种子,所以同一帧总是得到相同的数:预览、导出和每台机器上都一样。

名称得到什么
seedRandom(offset, timeless = false)换一组随机数;timeless 为真时,每一帧都得到同样的数。
random() / random(max) / random(min, max)0 到 1、0 到 max 或 min 到 max 之间的随机数;数组的每一项各得一个数。
gaussRandom() / gaussRandom(max) / gaussRandom(min, max)与 random 相同,但更集中在中间:约九成落在范围之内。
noise(x | [x, y] | [x, y, z])约在 −1 到 1 之间的平滑噪波,输入渐变时它也渐变。

时间

在秒与帧之间换算,或让数值隔几帧才变一次。

名称得到什么
timeToFrames(t = time, fps, isDuration = false)把秒换算成帧数,默认用合成的帧速率,也可以自己给。
framesToTime(frames, fps)把帧数换算成秒。
posterizeTime(fps)让表达式其余部分按 fps 的帧速率运行,使数值一格一格地变化。

颜色

颜色是四个 0 到 1 的数组成的数组:红、绿、蓝和 Alpha。

名称得到什么
rgbToHsl([r, g, b, a])把颜色换算成色相、饱和度、亮度和 Alpha。
hslToRgb([h, s, l, a])把色相、饱和度、亮度和 Alpha 换算成颜色。
hexToRgb("#RRGGBB")把 #FF8800(或 #AARRGGBB)这样的十六进制颜色换算成颜色数组。

文字选择器

在文字动画器的表达式选择器里,表达式对每个字符、单词或行各运行一次。

名称得到什么
textIndex正在计算的字符、单词或行的序号,从 1 开始。
textTotal一共有几个字符、单词或行。
selectorValue这个选择器上方的各选择器给出的值,以百分比表示。

表达式控件

表达式控件是一种只为表达式保存数值、不改变画面的效果;把结果留给表达式读取的跟踪效果也是这样。从“效果和预设”添加,再按效果名称和参数名称读取,写法见下表(每行示例它的第一个参数);同一种控件的第二个会带上编号(“Slider Control 2”)。

读取写法得到什么
effect("Slider Control")("Slider")滑块控制 · 滑块一个数字。
effect("Angle Control")("Angle")角度控制 · 角度一个数字。
effect("Checkbox Control")("Checkbox")复选框控制 · 复选框勾选时为 1,否则为 0。
effect("Color Control")("Color")颜色控制 · 颜色一个颜色 [r, g, b, a]。
effect("Point Control")("Point")点控制 · 点一个点 [x, y]。
effect("Layer Control")("Layer")图层控制 · 图层选中的图层,作为图层读取。
effect("Dropdown Menu Control")("Menu")下拉菜单控制 · 菜单一个整数:菜单中选中的项,从 1 开始。
effect("3D Camera Tracker")("Shot Type")3D 摄像机跟踪器 · 拍摄类型选中的选项,以它的值(文字)表示。
effect("Face Track Points")("Left Eyebrow Inner")面部跟踪点 · 左眉内侧一个点 [x, y]。

暂不支持

  • sampleImage、sourceRectAtTime 与文字样式对象。
  • toComp 中 3D 摄像机的投影:它只在图层空间与合成空间之间换算。
  • After Effects 的旧版 ExtendScript 引擎,以及表达式之外的一切:文件、网络、时钟、eval 与模块。