跳转到内容

社区脚本示例

探索我们收集的社区贡献的 After Effects 脚本。这些自动化工具和工作流程增强器有助于简化您的创作过程并提高生产力。

/**
* 智能项目清理器
* 移除未使用的项目并组织项目结构
* 作者: 社区
*/
(function() {
'use strict';
function cleanProject() {
app.beginUndoGroup('清理项目');
try {
var project = app.project;
var removedItems = 0;
// 移除未使用的素材项
for (var i = project.numItems; i >= 1; i--) {
var item = project.item(i);
if (item instanceof FootageItem && item.usedIn.length === 0) {
item.remove();
removedItems++;
}
}
alert('项目已清理!移除了 ' + removedItems + ' 个未使用的项目。');
} catch (error) {
alert('错误: ' + error.toString());
} finally {
app.endUndoGroup();
}
}
cleanProject();
})();
/**
* 批量渲染设置
* 自动为多个合成设置渲染队列
*/
(function() {
'use strict';
function setupBatchRender() {
var project = app.project;
var renderQueue = app.project.renderQueue;
var outputPath = Folder.selectDialog('选择输出文件夹');
if (!outputPath) return;
app.beginUndoGroup('批量渲染设置');
try {
for (var i = 1; i <= project.numItems; i++) {
var item = project.item(i);
if (item instanceof CompItem && item.name.indexOf('[RENDER]') === 0) {
var renderItem = renderQueue.items.add(item);
var outputModule = renderItem.outputModule(1);
var fileName = item.name.replace('[RENDER]', '').trim();
var outputFile = new File(outputPath.fsName + '/' + fileName + '.mov');
outputModule.file = outputFile;
outputModule.applyTemplate('高质量');
}
}
alert('渲染队列设置完成!');
} catch (error) {
alert('错误: ' + error.toString());
} finally {
app.endUndoGroup();
}
}
setupBatchRender();
})();
/**
* 智能图层组织器
* 按类型组织图层并创建文件夹结构
*/
(function() {
'use strict';
function organizeLayers() {
var comp = app.project.activeItem;
if (!comp || !(comp instanceof CompItem)) {
alert('请选择一个合成');
return;
}
app.beginUndoGroup('整理图层');
try {
var folders = {
'文本图层': [],
'形状图层': [],
'固态图层': [],
'素材图层': [],
'空对象': []
};
// 分类图层
for (var i = 1; i <= comp.numLayers; i++) {
var layer = comp.layer(i);
if (layer instanceof TextLayer) {
folders['文本图层'].push(layer);
} else if (layer instanceof ShapeLayer) {
folders['形状图层'].push(layer);
} else if (layer.source instanceof SolidSource) {
folders['固态图层'].push(layer);
} else if (layer.nullLayer) {
folders['空对象'].push(layer);
} else {
folders['素材图层'].push(layer);
}
}
// 创建文件夹结构
for (var folderName in folders) {
if (folders[folderName].length > 0) {
var folderLayer = comp.layers.addNull();
folderLayer.name = folderName;
folderLayer.label = 14; // 橙色
// 将图层父级链接到文件夹
for (var j = 0; j < folders[folderName].length; j++) {
folders[folderName][j].parent = folderLayer;
}
}
}
alert('图层整理成功!');
} catch (error) {
alert('错误: ' + error.toString());
} finally {
app.endUndoGroup();
}
}
organizeLayers();
})();
/**
* 关键帧烘焙器
* 将表达式烘焙为关键帧以获得更好的性能
*/
(function() {
'use strict';
function bakeExpressions() {
var comp = app.project.activeItem;
if (!comp || !(comp instanceof CompItem)) {
alert('请选择一个合成');
return;
}
var selectedLayers = comp.selectedLayers;
if (selectedLayers.length === 0) {
alert('请选择带有表达式的图层');
return;
}
var frameRate = comp.frameRate;
var duration = comp.duration;
var totalFrames = Math.floor(duration * frameRate);
app.beginUndoGroup('烘焙表达式');
try {
for (var i = 0; i < selectedLayers.length; i++) {
var layer = selectedLayers[i];
bakeLayerExpressions(layer, frameRate, totalFrames);
}
alert('表达式已烘焙为关键帧!');
} catch (error) {
alert('错误: ' + error.toString());
} finally {
app.endUndoGroup();
}
}
function bakeLayerExpressions(layer, frameRate, totalFrames) {
var properties = ['position', 'scale', 'rotation', 'opacity'];
for (var i = 0; i < properties.length; i++) {
var prop = layer.transform[properties[i]];
if (prop.expression !== '') {
var expression = prop.expression;
prop.expression = ''; // 移除表达式
// 采样值并创建关键帧
for (var frame = 0; frame <= totalFrames; frame++) {
var time = frame / frameRate;
prop.expression = expression;
var value = prop.valueAtTime(time, false);
prop.expression = '';
prop.setValueAtTime(time, value);
}
}
}
}
bakeExpressions();
})();
/**
* 图层数据导出器
* 将图层信息导出为 JSON 以供外部处理
*/
(function() {
'use strict';
function exportLayerData() {
var comp = app.project.activeItem;
if (!comp || !(comp instanceof CompItem)) {
alert('请选择一个合成');
return;
}
var exportData = {
composition: {
name: comp.name,
width: comp.width,
height: comp.height,
duration: comp.duration,
frameRate: comp.frameRate
},
layers: []
};
// 收集图层数据
for (var i = 1; i <= comp.numLayers; i++) {
var layer = comp.layer(i);
var layerData = {
index: layer.index,
name: layer.name,
type: getLayerType(layer),
inPoint: layer.inPoint,
outPoint: layer.outPoint,
startTime: layer.startTime,
position: layer.transform.position.value,
scale: layer.transform.scale.value,
rotation: layer.transform.rotation.value,
opacity: layer.transform.opacity.value
};
exportData.layers.push(layerData);
}
// 保存到文件
var file = File.saveDialog('保存图层数据', '*.json');
if (file) {
file.open('w');
file.write(JSON.stringify(exportData, null, 2));
file.close();
alert('图层数据导出成功!');
}
}
function getLayerType(layer) {
if (layer instanceof TextLayer) return 'text';
if (layer instanceof ShapeLayer) return 'shape';
if (layer instanceof CameraLayer) return 'camera';
if (layer instanceof LightLayer) return 'light';
if (layer.nullLayer) return 'null';
if (layer.source instanceof SolidSource) return 'solid';
return 'footage';
}
exportLayerData();
})();
  • 批量操作: 自动处理多个项目
  • 工作流程优化: 简化重复性任务
  • 项目管理: 组织和维护项目
  • 动画助手: 辅助复杂动画
  • 效果实用工具: 高效管理和应用效果
  • 文本工具: 高级文本图层操作
  • 数据交换: 导入/导出项目数据
  • 格式转换: 在不同格式之间转换
  • 资产管理: 组织和管理项目资产
  • 单一用途的自动化
  • 基本的图层操作
  • 简单的计算
  • 多步骤工作流程
  • 用户界面元素
  • 数据处理
  • 完整的工作流程系统
  • 高级 UI 面板
  • 与外部工具集成
/**
* 脚本模板
* 描述: 此脚本的功能
* 作者: 您的姓名
* 版本: 1.0.0
* 日期: YYYY-MM-DD
*/
(function() {
'use strict';
// 配置
var CONFIG = {
scriptName: '我的脚本',
version: '1.0.0'
};
// 主函数
function main() {
try {
// 验证环境
if (!validateEnvironment()) {
return;
}
// 执行主要逻辑
executeScript();
} catch (error) {
handleError(error);
}
}
function validateEnvironment() {
if (typeof app === 'undefined') {
alert('此脚本需要 After Effects');
return false;
}
return true;
}
function executeScript() {
// 您的脚本逻辑在此处
}
function handleError(error) {
alert('' + CONFIG.scriptName + ' 中发生错误: ' + error.toString());
}
// 执行
main();
})();
// 始终使用 try-catch 块
try {
// 风险操作
var comp = app.project.activeItem;
if (!comp) {
throw new Error('没有活动的合成');
}
} catch (error) {
// 优雅地处理错误
$.writeln('错误: ' + error.toString());
alert('操作失败: ' + error.message);
}
// 使用撤销组以获得更好的性能
app.beginUndoGroup('脚本操作');
try {
// 此处有多个操作
} finally {
app.endUndoGroup();
}
// 缓存频繁访问的对象
var comp = app.project.activeItem;
var transform = layer.transform;
// 避免重复的属性访问
for (var i = 1; i <= comp.numLayers; i++) {
var layer = comp.layer(i); // 缓存图层引用
// 多次使用 layer
}
  1. 文档: 清晰的注释和使用说明
  2. 错误处理: 健壮的错误检查和用户反馈
  3. 性能: 针对速度和内存使用进行优化
  4. 兼容性: 在不同的 AE 版本中测试
  • 清晰的目的和描述
  • 正确的错误处理
  • 用户友好的反馈
  • 性能优化
  • 代码注释
  • 使用说明
  • 版本兼容性说明
  • 项目模板创建器
  • 资产组织器
  • 渲染队列管理器
  • 版本控制助手
  • 关键帧实用工具
  • 运动路径生成器
  • 缓动曲线创建器
  • 动画预设
  • CSV 导入器
  • JSON 导出器
  • 批量处理器
  • 格式转换器

与社区分享您的脚本,帮助每个人更强大地使用 After Effects!