一、表达式基础
表达式是基于JavaScript语法的脚本代码,通过动态计算属性值实现自动化动画效果。
启用方式:按住 Alt 点击图层属性前的⏱️秒表图标,输入代码。
二、常用表达式函数与参数详解
1. wiggle() 随机抖动
- 作用:为属性添加随机抖动效果
- 参数:
freq:每秒抖动次数(频率)amp:抖动幅度octaves(可选):噪波细节层级,默认1ampMult(可选):振幅衰减系数,默认0.5t(可选):时间偏移,默认当前时间
// 位置属性:每秒抖动2次,幅度50像素
wiggle(2, 50);
// 旋转属性:高频小幅度抖动
wiggle(10, 5);
2. time 时间驱动
- 作用:用时间轴控制属性变化
- 典型应用:旋转、透明度、比例
// 旋转速度:每秒旋转90度
time * 90;
// 闪烁效果:每0.5秒切换一次透明度
Math.sin(time * 10) > 0 ? 100 : 0;
3. loopOut() 循环动画
- 作用:循环播放关键帧动画
- 参数:
type:循环类型 ("cycle","pingpong","offset","continue")numKeyframes(可选):循环段的关键帧数,默认0(全部)
// 无限循环关键帧动画(默认cycle模式)
loopOut();
// 乒乓循环:往返运动
loopOut("pingpong");
4. linear() 线性映射
- 作用:将输入值映射到指定输出范围
- 参数:
value:输入值inMin,inMax:输入范围outMin,outMax:输出范围
// 用滑块控制透明度:0-100映射到0%-100%
linear(thisComp.layer("Control").effect("Slider")("Slider"), 0, 100, 0, 100);
5. valueAtTime() 时间取样
- 作用:获取指定时间的属性值
- 参数:
t:目标时间(秒)
// 延迟0.5秒跟随另一个图层的位置
thisComp.layer("Leader").position.valueAtTime(time - 0.5);
三、进阶函数组合案例
案例1:弹性拖尾效果
// 位置属性:延迟+弹性
n = 3; // 延迟帧数
delay = time - n*thisComp.frameDuration;
thisComp.layer("Master").position.valueAtTime(delay) + [0, Math.sin(time*5)*10];
案例2:自动朝向运动方向
// 旋转属性:根据运动方向自动转向
velocity = (position.valueAtTime(time) - position.valueAtTime(time - thisComp.frameDuration));
radiansToDegrees(Math.atan2(velocity[1], velocity[0]));
案例3:三维空间随机运动
// 3D位置属性:XYZ独立控制
x = wiggle(1, 50)[0];
y = wiggle(2, 30)[1];
z = wiggle(0.5, 100)[2];
[x, y, z]
四、注意事项
- 表达式错误时属性会变红色,点击 ▶️ 查看错误详情
- 使用
//添加注释说明代码逻辑 - 通过
Pick Whip工具可快速关联属性
掌握这些核心函数即可实现90%的AE自动化效果,建议收藏本文作为速查手册。如需深度定制动画逻辑,可结合JavaScript条件语句和数学函数进行扩展。
五、高级数学函数库
1. Math.sin() / Math.cos() 波形控制
// 位置Y轴正弦波动
y = 540 + Math.sin(time * 3) * 100;
[960, y]
// 颜色通道周期变化
freq = 2; // 波动频率
Math.abs(Math.cos(time * freq)) * 255
2. random() 随机生成器
// 生成固定种子随机数
seedRandom(123, true);
random(0, 100); // 始终生成相同随机序列
// 区间随机整数
Math.floor(random(5, 15))
3. smooth() 曲线平滑
// 平滑位置移动(0.5秒窗口)
smooth(.5, 100);
六、物理模拟表达式
1. 弹性动画
// 弹性位置追随
amp = 0.5; // 弹性强度
freq = 3; // 震动频率
decay = 4; // 衰减速度
x = thisComp.layer("目标").position[0];
y = thisComp.layer("目标").position[1];
dx = x - position[0];
dy = y - position[1];
springForce = Math.exp(-decay * time) * Math.sin(freq * time);
[position[0] + dx * springForce * amp, position[1] + dy * springForce * amp]
2. 抛物线运动
// 初速度与重力模拟
v0 = 500; // 初始速度
angle = 45; // 发射角度
g = 1500; // 重力加速度
rad = angle * Math.PI/180;
x = v0 * time * Math.cos(rad);
y = v0 * time * Math.sin(rad) - 0.5 * g * time * time;
[x + 960, 540 - y] // 以合成中心为原点
七、高级属性控制
1. 时间重映射
// 根据音频振幅驱动播放速度
audioLevel = thisComp.layer("Audio").audio.audioLevels;
linear(audioLevel, -30, 0, 0, 2); // 音量越大播放越快
2. 自动匹配文字内容长度
// 文字图层宽度自适应
text.sourceRectAtTime().width;
3. 3D摄像机跟踪
// 自动保持朝向摄像机
C = thisComp.activeCamera.toWorld([0,0,0]);
lookAt(C, position)
八、表达式模板系统
1. 通用进度控制器
// 用滑块控制多属性动画
progress = effect("全局控制")("滑块");
linear(progress, 0, 100, 起始值, 结束值);
2. 数据可视化模板
// 动态生成柱状图高度
data = thisComp.layer("数据").effect("数据表")("数值");
maxHeight = 500;
(data / 100) * maxHeight;
九、调试技巧
1. 实时数值监控
// 创建调试文本层
text.sourceText = "当前速度:" + velocity.toFixed(2);
2. 帧率同步优化
// 消除60FPS与30FPS差异
framesToSeconds = 1 / thisComp.frameDuration;
time * framesToSeconds;
十、扩展资源库
- 表达式速查表:
- 色彩转换:
rgbToHsl() / hslToRgb() - 空间转换:
fromWorld() / toWorld() - 图层探测:
nearestKey() / key()
- 推荐插件:
- Motion Tools 2(表达式增强工具包)
- Flow(曲线优化插件)
举个例子
// 随时间抖动并平滑停止,可自定义停止时间
freq = 5; // 抖动频率
amp = 50; // 抖动幅度
stopTime = 2; // 停止抖动的时间(秒)
fadeLen = 1; // 衰减时长(秒),越大越平滑
// 使用ease函数让wiggle平滑淡出
fade = ease(time, stopTime - fadeLen, stopTime, 1, 0);
wiggle(freq, amp) * fade + value * (1 - fade);
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END










暂无评论内容