用户指南 取消(C)

了解表达式语言

  1. After Effects 用户指南
  2. Beta 版
    1. Beta 版项目概述
    2. After Effects Beta 版主页
  3. 快速入门
    1. After Effects 快速入门
    2. After Effects 的新增功能 
    3. 发行说明 | After Effects
    4. After Effects 系统要求
    5. After Effects 中的键盘快捷键
    6. 支持的文件格式 | After Effects
    7. 硬件建议
    8. 适用于 Apple Silicon 的 After Effects
    9. 规划和设置
  4. 工作区
    1. 常规用户界面项
    2. 了解 After Effects 界面
    3. 工作流程
    4. 工作区、面板和查看器
  5. 项目与合成
    1. 项目
    2. 合成基础知识
    3. 预合成、嵌套和预渲染
    4. 使用合成分析器查看详细的性能信息
    5. CINEMA 4D 合成渲染器
  6. 导入素材
    1. 准备并导入静止图像
    2. 从 After Effects 和 Adobe Premiere Pro 导入
    3. 导入和解释视频与音频
    4. 准备和导入 3D 图像文件
    5. 导入和解释素材项目
    6. 使用素材项目
    7. 使用“场景编辑检测”检测编辑点
    8. XMP 元数据
  7. 文本和图形
    1. 文本
      1. 设置字符格式和“字符”面板
      2. 文本效果
      3. 创建和编辑文本图层
      4. 设置段落格式和“段落”面板
      5. 凸出文本和形状图层
      6. 为文本设置动画
      7. 文本动画的示例和资源
      8. 实时文本模板
    2. 动态图形
      1. 在 After Effects 中使用动态图形模板
      2. 使用表达式在动态图形模板中创建下拉列表
      3. 使用“基本属性”创建动态图形模板
      4. 替换动态图形模板和基本属性中的图像和视频
      5. 使用“属性”面板更快、更轻松地制作动画
  8. 绘图、绘画和路径
    1. 形状图层、路径和矢量图形的概述
    2. 绘画工具:笔刷、仿制图章和橡皮擦
    3. 将形状描边椎体化
    4. 形状图层的形状属性、绘画操作和路径操作
    5. 使用“位移路径”形状效果更改形状
    6. 创建形状
    7. 创建蒙版
    8. 使用内容识别填充面板,移除视频中的对象
    9. Roto 笔刷和调整遮罩
  9. 图层、标记和摄像机
    1. 选择和排列图层
    2. 混合模式和图层样式
    3. 3D 图层
    4. 图层属性
    5. 创建图层
    6. 管理图层
    7. 图层标记和合成标记
    8. 摄像机、光和目标点
  10. 动画、关键帧、运动跟踪和抠像
    1. 动画
      1. 动画基础知识
      2. 使用人偶工具制作动画
      3. 管理形状路径和蒙版并对其进行动画制作
      4. 使用 After Effects 为 Sketch 和 Capture 形状制作动画
      5. 分类动画工具
      6. 使用数据驱动的动画
    2. 关键帧
      1. 关键帧插值
      2. 设置、选择和删除关键帧
      3. 编辑、移动和复制关键帧
    3. 运动跟踪
      1. 跟踪和稳定运动
      2. 人脸跟踪
      3. 蒙版跟踪
      4. 蒙版引用
      5. 速度
      6. 时间拉伸和时间重映射
      7. 时间码和时间显示单位
    4. 抠像
      1. 抠像
      2. 抠像效果
  11. 透明度与合成
    1. 合成和透明度概述及资源
    2. Alpha 通道和遮罩
    3. 轨道遮罩和移动遮罩
  12. 调整颜色
    1. 颜色基础知识
    2. 色彩管理
    3. 颜色校正效果
    4. OpenColorIO 和 ACES 色彩管理
  13. 效果和动画预设
    1. 效果和动画预设概述
    2. 效果列表
    3. 效果管理器
    4. 模拟效果
    5. 风格化效果
    6. 音频效果
    7. 扭曲效果
    8. 透视效果
    9. 通道效果
    10. 生成效果
    11. 时间效果
    12. 过渡效果
    13. 果冻效应修复效果
    14. 模糊和锐化效果
    15. 3D 通道效果
    16. 实用效果
    17. 遮罩效果
    18. 杂色和颗粒效果
    19. 保留细节放大效果
    20. 旧版效果
  14. 表达式和自动化
    1. 表达式
      1. 表达式基础知识
      2. 了解表达式语言
      3. 使用表达式控件
      4. JavaScript 与旧版 ExtendScript 表达式引擎之间的语法差别
      5. 正在编辑表达式
      6. 表达式错误
      7. 使用表达式编辑器
      8. 使用表达式编辑和访问文本属性
      9. 表达式语言引用
      10. 表达式示例
    2. 自动化
      1. 自动化
      2. 脚本
  15. 沉浸式视频、VR 和 3D
    1. 在 After Effects 中构造 VR 环境
    2. 应用沉浸式视频效果
    3. 用于 VR/360 视频的合成工具
    4. 高级 3D 渲染器
    5. 将 3D 模型导入并添加到合成中
    6. 从 Creative Cloud Libraries 导入3D 模型
    7. 基于图像的光照
    8. 从 3D 模型中提取光线和相机并为其制作动画
    9. 跟踪 3D 摄像机运动
    10. 投射和接受阴影
    11. 嵌入的 3D 模型动画
    12. 阴影捕手
    13. 3D 深度数据提取
    14. 修改 3D 图层的素材属性
    15. 使用 3D 设计空间
    16. 3D 变换 Gizmo
    17. 使用 3D 动画执行更多操作
    18. 使用 Mercury 3D 引擎实时预览对 3D 设计的更改
    19. 向图形添加响应式设计
  16. 视图和预览
    1. 预览
    2. 使用 Mercury Transmit 进行视频预览
    3. 修改和使用视图
  17. 渲染和导出
    1. 渲染和导出的基础知识
    2. After Effects 中的 H.264 编码
    3. 将 After Effects 项目导出为 Adobe Premiere Pro 项目
    4. 转换影片
    5. 多帧渲染
    6. 自动渲染和网络渲染
    7. 渲染和导出静止图像及静止图像序列
    8. 在 After Effects 中使用 GoPro CineForm 编解码器
  18. 使用其他应用程序
    1. Dynamic Link 和 After Effects
    2. 使用 After Effects 和其他应用程序
      1. 将 After Effects 项目导出为 Premiere Pro 项目
    3. After Effects 中的同步设置
    4. After Effects 中的 Creative Cloud Libraries
    5. 增效工具
    6. Cinema 4D 和 Cineware
  19. 协作:Frame.io 和团队项目
    1. 在 Premiere Pro 和 After Effects 中协作
    2. Frame.io
      1. 安装和激活 Frame.io
      2. 将 Frame.io 与 Premiere Pro 和 After Effects 搭配使用
      3. 常见问题解答
    3. 团队项目
      1. 开始使用团队项目
      2. 创建团队项目
      3. 使用团队项目进行协作
  20. 内存、存储、性能
    1. 内存和存储
    2. After Effects 处理预览时内存不足问题的方式    
    3. 提高性能
    4. 首选项
    5. After Effects 的 GPU 和 GPU 驱动程序要求
  21. 知识库
    1. 已知问题
    2. 已修复的问题
    3. 常见问题解答
    4. After Effects 和 macOS Ventura
    5. After Effects 处理预览时内存不足问题的方式

了解表达式语言,并使用它在 After Effects 中构成不同的表达式。

After Effects 表达式语言基于 JavaScript,具有一组扩展的内置对象。After Effects 使用核心标准 JavaScript 语言,而不是特定于 Web 浏览器的扩展,并且包含自己的一组扩展对象,如图层合成素材相机

虽然表达式语言基于脚本语言,但脚本和表达式之间存在本质上的差别,即使这种差别比较细微。脚本指示应用程序执行某些操作,而表达式则指示属性执行某些操作。

创建表达式时,须牢记下列几点:

  • 表达式的值是计算的最后一个语句的值。这通常是表达式的最后一行。在其最简形式中,表达式的值由基于计算顺序调用的表达式中的最后一个变量或函数生成。但是,该值也可以是任何显式引用为返回值的值。这可能包括表达式中先前用于调试目的的值,或未按写入顺序处理的显式声明函数和变量之外的值。
  • JavaScript 是区分大小写的语言。
  • 不应在表达式底部声明函数。

语言基础知识

在 JavaScript 中,存储在对象中的值称为属性。但是,After Effects 使用术语属性来指代时间轴面板中定义的图层组件。因此,After Effects 称 JavaScript 属性 (property) 为方法属性 (attribute)。通常情况下,方法属性之间的区别是方法通常执行某些操作来创建其输出(返回)值,而属性则简单地引用现有值来确定其输出(返回)值。您可以通过查找方法名称后面的圆括号(括住方法的任何输入参数)轻松地将方法和属性区分开来。

对象是一个可包含其他对象、属性和方法的项。例如,合成、图层和素材项目都属于对象。特别是,合成、图层和素材项目都是全局对象,这意味着可以在任何上下文中引用它们而无需引用一些更高级别的对象。

访问属性和方法

您可以使用表达式语言访问图层属性 (property) 的属性 (attribute) 和方法。要访问值,请使用由句号 (.) 运算符分隔的一系列对象引用。要跨图层级别串联对象引用(例如,要引用效果属性、蒙版或文本动画),也可以使用圆括号。例如,要将图层 A 中的不透明度属性与图层 B 中高斯模糊效果的模糊度属性相关联,请在表达式字段中为图层 A 的不透明度属性输入以下表达式:

thisCompayer(“Layer B”)ffect(“Gaussian Blur”)(“Blurriness”)

从左向右读取此表达式,可从包含对象的较高级别向下到特定属性:

  • 使用的全局对象引用当前合成:thisComp

  • 该合成中的特定图层对象由其名称引用:layer("Layer B")

  • 该图层中的特定效果对象由其名称引用:effect("Gaussian Blur")

  • 该效果中的特定效果属性由其名称引用:("Blurriness")

对于多维属性的第 n 个组件(如效果控制点的 y 组件),请在结尾附加 [n],如下所示:

thisCompayer(“Layer B”)ffect(“Advanced Lightning”)(“Origin”1]

表达式的默认对象是对其编写表达式的属性,随后是包含该表达式的图层;因此,您无需指定属性。例如,对图层的位置属性写入的摆动表达式可以是以下任何一个:

wiggle(5, 10)  
position.wiggle(5, 10) 
thisProperty.wiggle(5, 10)

从图层外部和对其写入表达式的属性中检索图层和属性时,请包括图层和属性。例如,对图层 B 的不透明度属性写入的表达式(将其链接到图层 A 的旋转属性)将类似以下表达式:

thisCompayer(“Layer A”)otation
注意:

要查看表达式工作原理的更多示例,请使用关联器将一个图层属性关联到另一个图层属性,并查看它创建的表达式。

数组和多维属性

数组是一类存储一组有序数值的对象。数组表示为由逗号分隔且由括号括起的数值列表,如以下示例所示:

  [10, 23]

您可以将数组对象分配给变量,从而轻松引用表达式其他区域中的数组值。例如:

  myArray = [10, 23]

数组对象的维度是数组中元素的数目。myArray 的维度是 2。After Effects 中不同属性的维度不同,具体取决于这些属性具有的值参数的数目。在表达式语言中,属性值是单个值(数值对象)或数组(数组对象)。

下表提供了一些属性及其维度的示例:

维度

属性

1

旋转

不透明度 %

2

缩放 [x=宽度, y=高度]

位置 [x, y]

锚点 [x, y]

音频水平 [left, right]

3

缩放 [width, height, depth]

3D 位置 [x, y, z]

3D 锚点 [x, y, z]

方向 [x, y, z]

4

颜色 [red, green, blue, alpha]

可以使用括号和索引号来指示所需的元素,从而访问数组对象的各个元素。数组对象中的元素从 0 开始索引。使用前面的示例,myArray[0] 值为 10,而 myArray[1] 值为 23

以下两个表达式是等效的:

  [myArray[0], 5] 
  [10, 5]

位置属性数组

位置属性数组如下所示建立索引:

  • position[0] 是位置的 x 坐标。

  • position[1] 是位置的 y 坐标。

  • position[2] 是位置的 z 坐标。

数组中颜色的表示

颜色表示为 4D 数组:

  • 红色
  • 绿色
  • 蓝色
  • Alpha

在颜色深度为 8 bpc 或 16 bpc 的项目中,颜色数组中的每个值都介于 0(黑色)到 1(白色)之间。例如,red 可以介于 0(无色)到 1(红色)之间。因此,[0,0,0,0] 是黑色且透明,[1,1,1,1] 是白色且不透明。在颜色深度为 32 bpc 的项目中,允许小于 0 和大于 1 的值。

如果您在数组对象中使用大于最高维度组件的索引的索引,则 After Effects 会返回错误。例如,myArray[2] 会引发错误,而 position[2] 会返回位置的 z 坐标。

After Effects 表达式语言中的许多属性和方法将数组对象当作是参数或作为值返回它们。例如,thisLayer.position 是一个二维或三维的数组对象,具体取决于图层是 2D 还是 3D 的。

示例

如果要写入保持位置动画的 y 值但 x 值固定为 9 的表达式,可使用以下命令:

  y = position[1]; 
  [9,y]

以下内容更为简明:

  [9, position[1]]

这点很重要,因此让我们再看一个示例。如果要将图层 A 中的 x 位置值与图层 B 中的 y 位置值组合,可使用以下命令:

  x = thisCompayer(“Layer A”)osition[0  
  y = thisCompayer(“Layer B”)osition[1  
  [x]

您可以创建仅引用 2D 或 3D 属性的数组中的一个值的表达式。默认情况下,除非您另外指定,否则会使用第一个值。例如,如果将关联器从图层 A 的旋转属性拖动到图层 B 的缩放属性,将显示以下表达式:

  thisCompayer(“Layer B”)cale[0]

默认情况下,此表达式使用缩放属性的第一个值,即宽度。如果您更喜欢使用高度值,请将关联器直接拖动到第二个值而非属性名称,或者如下所示更改表达式:

  thisCompayer(“Layer B”)cale[1]

相反,如果将关联器从图层 B 的缩放属性拖动到图层 A 的旋转属性,则 After Effects 会自动创建变量,将一维旋转属性值分配给该变量,然后将该变量用于缩放属性的两个维度:

  temp = thisComp.layer(1).transform.rotation; 
  [temp, temp]

矢量

在 After Effects 中,许多属性和方法都采用或返回矢量。如果数组表示空间中的一个点或方向,则 After Effects 将数组称为矢量。例如,After Effects 将 position 描述为返回一个矢量。

然而,虽然 audioLevels 等函数确实返回二维值(左声道和右声道级别),但因为它不表示点或方向,所以并不称为矢量。After Effects 中的一些函数接受矢量参数,但通常仅在传递的值表示方向时才有用。例如,cross(vec1, vec2) 计算与输入矢量成直角的第三个矢量。当 vec1vec2 是两个表示空间中的方向的矢量时,叉积非常有用,但如果它们仅表示两个任意数值集合,则不那么有用。

索引和标签

在 After Effects 中从 1 开始为图层效果蒙版元素建立索引。例如,时间轴面板中的第一个图层是 layer(1)

通常,如果移动了图层、效果或蒙版,或者在产品更新和升级期间更改了参数,则最好使用图层、效果或蒙版的名称而不是编号,以避免混淆和错误。当您使用名称时,请始终将其括在直引号中。例如,第一个表达式比第二个表达式更易于理解,并且即使更改效果的顺序,第一个表达式仍继续运行:

  effect(“Colorama”)aram(“Get Phase From”)  
  effect(1)aram(2)

表达式时间

表达式中的时间始终为合成时间(而非图层时间),以秒为单位 -(与 sourceRectAtTime() 表达式不同)。任何表达式的默认时间是将计算表达式的当前合成时间。下列表达式均使用默认合成时间并返回相同值:

thisComp.layer(1).position  
thisComp.layer(1).position.valueAtTime(time)

要使用相对时间,请向 time 参数添加增量时间值。例如,要在当前时间之前 5 秒获取位置值,请使用以下表达式:

thisComp.layer(1).position.valueAtTime(time-5)

对嵌套合成中属性的默认时间引用使用原始默认合成时间,而不是重新映射的时间。但是,如果您使用 source 函数检索属性,则将使用重新映射的时间。

例如,如果包含的合成中的图层源是嵌套合成,且包含的合成中有重新映射的时间,则使用以下表达式获取嵌套合成中图层的位置值时,位置值将使用合成的默认时间:

comp("nested composition").layer(1).position

但是,如果使用函数访问图层 1,则位置值将使用重新映射的时间:

thisComp.layer("nested composition").source.layer(1).position
注意:

如果在表达式中使用特定时间,After Effects 会忽略重新映射的时间。

因为表达式运行时采用以秒(而不是帧)为单位的时间,所以有时需要使用时间转换方法转换时间值才能基于帧执行操作。

示例:使用表达式语言参考编写表达式

跟随此示例一起学习如何使用 After Effects 表达式语言参考编写表达式。此示例中创建的表达式将“纯色 2”的位置属性与“纯色 1”的位置属性相关联,“纯色 2”的移动与“纯色 1”的移动偏移量为 2 秒。

  1. 创建两个纯色图层:纯色 1 和纯色 2。

  2. 使用关键帧对“纯色 1”的位置属性值进行动画制作。(请参阅关于动画、关键帧和表达式。)

  3. 选择“纯色 2”的位置属性并选择动画 > 添加表达式,或者按住 Alt 键并单击 (Windows) 或按住 Option 键并单击该属性的秒表 按钮。默认情况下将显示以下表达式:

      transform.position
  4. 直接在 transform.position 上键入以下内容:

      thisComp
  5. 元素 thisComp 是全局属性,其值是表示当前合成的合成对象。要确定表达式中 thisComp 后面的内容,请在全局对象、属性和方法下查找 thisComp 的返回值。

    请注意,thisComp 返回的是合成对象。接下来,查看合成属性和方法以了解可以将哪些属性和方法用于合成对象。一种选项是 layer(index)。圆括号内的索引或数字指定要使用的图层。在此示例中,我们假定纯色 1 是您的合成中的第一个图层。要从活动合成的第一个图层中检索值,在表达式末尾键入 .layer(1) 以得到下列内容:

      thisComp.layer(1)
  6. 再次查看表达式元素引用以确认 layer(index) 返回的是图层对象。查看图层常规属性和方法,并查找要使用的元素。例如,如果您要获得图层的位置属性的值,请在表达式结尾键入 .position 以得到下列内容:

      thisComp.layer(1).position
  7. 图层常规属性和方法中,可看到位置特性返回一个属性。查找属性特性和方法,请注意,您可以向表达式添加时间因子。要添加特定时间,例如当前时间外加 2 秒,请在表达式结尾键入 .valueAtTime(time+2) 以得到下列内容:

      thisComp.layer(1).position.valueAtTime(time+2)
  8. 属性特性和方法中,注意 valueAtTime 方法返回的是数字或数组。当表达式返回数目、数组或布尔值(True 或 False)时,您无法再向该表达式添加属性或方法(但如果需要,可以添加算术运算符,例如 +-*/)。

更多表达式资源

当您领会了表达式背后的一些概念之后,请前往社区观看一些真实案例并分享您的作品。

AE Enhancer 论坛也提供了有关表达式、脚本和动画预设的许多示例和大量信息。

 Adobe

更快、更轻松地获得帮助

新用户?

Adobe MAX 2024

Adobe MAX
创意大会

10 月 14 日至 16 日迈阿密海滩及线上

Adobe MAX

创意大会

10 月 14 日至 16 日迈阿密海滩及线上

Adobe MAX 2024

Adobe MAX
创意大会

10 月 14 日至 16 日迈阿密海滩及线上

Adobe MAX

创意大会

10 月 14 日至 16 日迈阿密海滩及线上