表达式示例

  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 色彩管理
    5. 增强的 HDR 支持
  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 表达式之一。将在随机值之间摆动对象。此表达式可使您的场景看起来更加自然。在图层的位置属性中添加此表达式。

  1. 在合成中选择一个图层。

  2. P时间轴面板中显示其位置属性。

  3. 按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (macOS) 属性名称左边的秒表图标。

  4. 在表达式字段中输入以下代码片段:

    wiggle(2,30)

    在此示例中,摆动(频率,数量),第一个数字是每秒摆动次数,第二个数字是摆动值。因此,使用 wiggle(2,30) 表示在任意方向,图层每秒摆动 2 次,最多 30 像素。

使用“滑块”控件控制摆动

可以通过使用到表达式控件的链接(比如滑块控件)替换值设定表达式的关键帧。通过使用滑块控件的链接替换 wiggle() 表达式的第二个参数,可以为该行为设定关键帧,以便在特动时间开始和停止。

  1. 向任何图层添加滑块控件效果,并将其命名为摆动量

  2. 在同一图层的位置属性中应用以下表达式:

    // 使用关联器创建到滑块的 “effect(...)” 链接
    var wiggleAmount = effect(“Wiggle Amount”)(“Slider”
    
    // 按照滑块设置的数量每秒摆动 4 次
    wiggle( 4, wiggleAmount 

使图层做圆周运动

您可以创建表达式,而不使用其他图层中的属性。例如,可以使图层围绕合成的中心旋转。

  1. 在合成中选择一个图层。

  2. P时间轴面板中显示其位置属性。

  3. 按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (macOS) 属性名称左边的秒表图标。

  4. 在表达式字段中输入以下代码片段:

    var centerOfComp = [ ( thisComp.width / 2 ), ( thisComp.height / 2) ];
    var circleOverTime = [ Math.sin( time ) * 50, -Math.cos( time ) * 50 ];
    centerOfComp + circleOverTime;

抖动

通常称为惯性回弹,该表达式使用图层自身关键帧动画创建自然抖动。将根据其速度创建从一个关键帧到下一个关键帧的任何参数的回弹运动。回弹可发生在对象移动的任何方向。要实现此动画,请执行以下操作:

  1. 在 After Effects 中创建或导入图形。

  2. 在要设置动画的图层的位置属性中添加关键帧。

  3. 在该图层的位置属性中添加以下表达式:

    // 设置值以控制抖动。
    // 将这些值链接到滑块表达式控件以快速预览不同的设置。
    var amp = 40;
    var freq = 30;
    var decay = 50;
    
    // 查找最新的关键帧
    var nK = nearestKey(time);
    var n = (nK.time <= time) ?nK.index : --nK.index;
    var t = (n === 0) ?0 : time - key(n).time;
    
    // 如果当前时间晚于一个关键帧,则计算抖动。
    // 反之,则使用原始值。
    if ( n > 0 && t < 1 ) {
     var v = velocityAtTime( key( n ).time - thisComp.frameDuration /10 );
     value + v * amp * .001 * Math.sin(freq * .1 * t * 2 * Math.PI) / Math.exp(decay * .1 * t);
    } else {
     value;
    }

随时间旋转

您可以使用关联器将图层之间的旋转值关联起来,从而为对象设置动画。时钟的工作方式,将这三个圆圈视为时钟的三个指针 - 时针一小时一小时地移动,分针围绕钟面的整个圆周旋转。

  1. 导入或创建三个圆形纯色图层。让我们假设其中一个像时针一样工作,另一个像分针一样工作,第三个像秒针一样工作。

  2. 在图层结尾设置锚点

  3. 移动图层以便锚点位于合成的中心。

  4. 设置时针的旋转关键帧。选择分针的旋转属性并选择动画 > 添加表达式

  5. 将关联器拖动到最大圆的旋转属性。将显示以下表达式:

     thisCompayer(“circle”)otation
  6. 要使第二个圆的旋转速度是第一个圆的 12 倍,请在表达式末尾添加 *12,如下所示:

    thisCompayer(“circle”)otation*12
  7. 对第三个圆重复相同的操作,并在表达式末尾添加 *24

    thisCompayer(“circle”)otation*24

循环

表达式可用于循环和扩展动画,而无需添加额外的关键帧 - 例如,可以在合成结束前进行多个形状的旋转。为此,请为起始旋转的旋转属性添加一个关键帧,然后在结束旋转中添加另一个。 然后,将 loopOut() 方法应用于关键帧旋转属性,将允许图层在最后一个关键帧之后保持旋转。

下面的 loopOut() 示例中使用的参数设置了循环类型以及要包含在循环中的关键帧数量。

//loopOut 设置为循环所有关键帧
loopOut(“cycle”, 0

第一个参数为 "cycle",它是适用于 loopOut 方法的四个可用循环模式之一。其他三个参数是 "continue""offset""ping-pong""cycle" 在最后一个关键帧处开始循环,并在第二个参数所定义的范围内的第一个关键帧的值处重新开始。

第二个参数是指包含在循环中的关键帧数,从最后一个关键帧向后计数。如果第二个参数未给定或设置为 0,则属性上的所有关键帧动画将在最后一个关键帧之后循环。如果参数为 1,则将循环最后一个关键帧与它前一个关键帧之间的动画。如果参数为 2,则将循环位于最后一个关键帧和它之前的两个关键帧之间的动画,依次类推。

获取有父级的图层的真实“位置”

当图层有父级时,其位置属性中显示的值不是其在合成中的“真实”位置,而是相对于其父图层的位置。要找到有父级的图层的真实位置,必须使用表达式将父图层的坐标空间转化为合成的坐标空间。将以下表达式应用于无父级的图层的位置以将其链接到有父级的图层的位置:

// 定义有父级的图层
var targetLayer = thisCompayer(“Parented Layer”

// 在合成中查找有父级的图层的“锚点”
targetLayeroComp( targetLayernchorPoint 

从父图层延迟图层的位置

延迟偏移是使动画更具动感且更自然的好方法。您可以将多个图层关联到一个父图层,然后将表达式应用于每个子图层的位置以延迟从父级继承的运动来创建和控制这些类型的偏移。

注意,这仅适用于有父级的图层。

// 以帧为单位设置延迟量
var delay = 5;

// 根据延迟在时间上偏移图层的位置
parent.fromComp( toComp( anchorPoint, time - framesToTime( delay ) ) );

还可以根据子图层相对于父图层的索引来驱动延迟量。这样,您可以通过在父级下方的时间轴中重新排列子图层的动画来轻松重排它们的顺序(如果您希望子图层的动画出现在父级之前,则在时间轴上方):

// 以帧为单位设置延迟量
var delay = 5;

// 根据该图层相对于其父图层的索引乘以延迟
var multiplyDelay = delay * ( index - parent.index )

// 基于延迟在时间上偏移图层的位置
parent.fromComp( toComp( anchorPoint, time - framesToTime( multiplyDelay ) ) );

表达式示例:在特定时间开始或停止摆动

将以下表达式添加到元素的位置属性,以在动画播放 2 秒处启动摆动效果:

var timeToStart = 2;

if (time > timeToStart) {
 wiggle(3,25);
} else {
 value;
}

将以下表达式添加到元素的位置属性,以在动画开头启动摆动效果并在 4 秒后停止:

var timeToStop = 4;

if ( time > timeToStop ) {
 value;
} else {
 wiggle( 3, 25 );
}

将以下表达式添加到元素的位置属性,以在动画开头 2 秒处启动摆动效果并在 4 秒处停止:

var timeToStart = 2;
var timeToStop = 4;

if ( ( time > timeToStart ) && ( time < timeToStop ) ) {
 wiggle(3,25);
} else {
 value;
}

表达式示例:将一个图层放置在其他两个图层之间

此示例表达式将一个图层放置在其他两个图层之间并使其保持在其间的平衡距离处。

  1. 首先,请创建三个图层

  2. 时间轴面板中前两个图层的位置设置动画。

    提示:

    了解如何使用运动路径

  3. 选择第三个图层。按 P 显示位置属性。按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (macOS) 属性名称左侧的秒表 按钮。

  4. 在表达式字段中输入以下内容:
    ( thisComp.layer(1).position + thisComp.layer(2).position ) / 2

创建图像轨迹

此示例指示图层位于与“时间轴”面板中下一个更高图层相同的位置,但延迟了指定时间量(在此情况下为 0.5 秒)。您可以为其他几何属性设置类似表达式。

  1. 打开位置属性并添加关键帧。选择图层。按 P 显示位置属性。按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (macOS) 属性名称左侧的秒表 按钮。

  2. 在表达式字段中输入以下内容:

    thisComp.layer(thisLayer, -1).position.valueAtTime(time - .5)
  3. 通过选择最后一个图层并按 Ctrl+D (Windows) 或 Command+D (macOS) 5 次,将最后一个图层复制 5 次。所有图层使用同一路径,且每个比上一个延迟 0.5 秒。

表达式示例:在两个图层之间创建凸出

此示例表达式将一个图层中凸出效果的凸出中心参数与另一图层的位置同步。例如,您可以创建看来像在图层上方移动的放大镜的效果,当镜头(即覆盖层)移动时内容在放大镜下凸出。此表达式使用 fromWorld 方法,该方法使表达式正确运行,而无论您是否移动放大镜图层或者底层图层。您可以旋转或缩放底层图层,表达式会保持不变。

您还可以将其他效果(例如波纹)与此表达式结合使用。

  1. 首先,请创建两个图层。使一个图层成为放大镜或中间有孔的类似对象,并将其命名为放大镜

  2. 为放大镜图层的位置设置动画。

  3. 将凸出效果应用于其他图层。

  4. 时间轴面板中选择凸出效果的凸出中心属性。选择动画 > 添加表达式,或按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (macOS) 属性的秒表 按钮。

  5. 选择默认表达式文本并键入以下内容:
    fromWorld(thisCompayer(“Magnifier”)osition)

表达式示例:基于与摄像机的距离淡化 3D 图层的不透明度

将以下表达式应用于 3D 图层的不透明度属性:

var  startFade = 500; // 在距离摄像机 500 像素的位置开始淡化。
var  endFade = 1500; // 在距离摄像机 1500 像素的位置结束淡化。

try {
 // 检查是否存在摄像机
 var C = thisComp.activeCamera.toWorld([0,0,0]);
} catch ( err ) {
 // 无摄像机,因此假设 50mm
 var w = thisComp.width * thisComp.pixelAspect;
 var z = (w/2)/Math.tan(degreesToRadians(19.799));
 var C = [0,0,-z];
}

var P = toWorld( anchorPoint );
var d = length( C, P );

linear( d, startFade, endFade, 100, 0 );

淡化从距摄像机 500 像素处开始,在距摄像机 1500 像素处完成。linear 插值方法用于将距离值映射到不透明度值。

表达式示例:背对摄像机时使 3D 图层不可见

将以下表达式应用于 3D 图层的不透明度属性:

if ( toCompVec([0, 0, 1])[2] > 0 ) {
 value;
} else {
 0;
}

表达式示例:背对摄像机时将图层水平翻转

将以下表达式应用于 3D 图层的缩放属性:

if ( toCompVec([0, 0, 1])[2] > 0 ) {
 value;
} else {
 [ -value[0], value[1], value[2] ];
}

表达式示例:在每个图层标记对缩放进行动画制作

将以下表达式应用于缩放属性以在每个标记处摆动图层:

var n = 0;
var t = 0;

if (marker.numKeys > 0){
 n = marker.nearestKey(time).index;
 if (marker.key(n).time > time) n--;
}
if (n > 0) t = time - marker.key(n).time;
   
var amp = 15;
var freq = 5;
var decay = 3.0;
   
var angle = freq * 2 * Math.PI * t;
var scaleFact = (100 + amp * Math.sin(angle) / Math.exp(decay * t)) / 100;

[value[0] * scaleFact, value[1] / scaleFact];
注意:

要添加标记,请选择图层 > 标记 > 新建标记

您可以使用任何表达式代替此处所用的 wiggle 表达式,以便在特定时间开始和结束任何表达式的影响。

表达式示例:将摄像机焦平面与另一图层匹配

将以下表达式应用于摄像机图层的焦距属性,以便其焦距与到名为 'Target' 的图层的锚点的距离相匹配:

var target = thisCompayer(“target”
var V1 = targetoWorld( targetnchorPoint ) - toWorld( [ 0, 0, 0 ] 
var V2 = toWorldVec( [ 0, 0, 1 ] 

dot( V1, V2 

更多表达式资源

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

更快、更轻松地获得帮助

新用户?