开发你的第一个AE插件

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一、环境准备

1.Adobe After Effects 2024
1.1 下载地址: Adobe官网
1.2 模板工程下载:https://developer.adobe.com/console/1367532/user/servicesandapis
在这里插入图片描述

若无权限, 可访问 github 获取

2.Microsoft Visual Studio
下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/
配置好c++开发环境后,打开AE模板工程,右键 > 属性
2.1设置插件输出目录到环境变量
在这里插入图片描述
在这里插入图片描述
2.2设置window调试器目录到环境变量
在这里插入图片描述
在这里插入图片描述
这是方便所有项目统一配置,另外再设置一下
在这里插入图片描述
在这里插入图片描述

二、AE模板工程入口文件分析

函数作用
About插件的关于信息, 用于显示描述插件的对话框
GlobalSetup插件的全局状态和资源初始化,在插件加载时被调用一次,因此可以在这里执行一些一次性的初始化操作,比如分配内存、加载资源、设置全局变量等
ParamsSetup插件UI初始化, 是设置 UI、描述参数和注册它们的函数
Render渲染,在首次应用插件,以及更改插件参数值时执行, 是根据输入和参数将效果渲染到输出的函数
EffectMain根据用户操作,进入不同处理函数。EffectMain 是接受 PF_Cmd cmd 作为一个参数的函数,并使用(如PF_Cmd_ABOUTPF_Cmd_PARAMS_SETUPPF_Cmd_RENDER 的) cmd 作为一个选择器来调用该函数。参考 AE 插件 SDK 指南命令选择器

入口函数EffectMain参数说明

EffectMain(
	PF_Cmd			cmd,
	PF_InData		*in_data,
	PF_OutData		*out_data,
	PF_ParamDef		*params[],
	PF_LayerDef		*output,
	void			*extra)
参数作用
cmdAE使用这个命令选择器来告知此插件主程序将要做什么,便于插件在内部针对相应的主程序事件进行响应,类似于Win32中的消息队列的作用
in_data此参数包含了主程序的状态和那些可以被本插件操作的数据。此指针还提供了大量与界面和图像处理相关的作用
out_data此参数的作用是把经过插件处理后的数据,通过out_data参数传回给AE
params插件参数数组
output此参数包含了被此特效插件渲染后输出的图像信息,最终会被传回到AE中。只有在某些特定的选择器中此参数才有效
extra额外参数会根据发送的命令或(在 PF_Cmd_EVENT 的情况下)事件类型而变化。主要用于事件管理和参数监督

三、开始开发啦

功能: 在插件的用户界面中添加按钮,点击触发提示用户按钮点击次数
在这里插入图片描述
代码实现:
Template/Skeleton/Skeleton.h

...
#define PLUGIN_NAME "Demo"
#define BUTTON_PARAM_ID 1
#define NUM_PARAMS 2 // 包括一个按钮参数和一个结束标记参数

...
typedef struct {
	AEGP_PluginID my_id;
	int click_count; // 记录按钮点击次数
} MyGlobalData;

static MyGlobalData g_my_global_data;

extern "C" {
	DllExport
	PF_Err
	EffectMain(
		PF_Cmd			cmd,
		PF_InData		*in_data,
		PF_OutData		*out_data,
		PF_ParamDef		*params[],
		PF_LayerDef		*output,
		void			*extra);

}
...

Template/Skeleton/Skeleton.cpp

...
static PF_Err 
GlobalSetup (	
	PF_InData		*in_data,
	PF_OutData		*out_data,
	PF_ParamDef		*params[],
	PF_LayerDef		*output )
{
	
	out_data->my_version = PF_VERSION(	MAJOR_VERSION, 
										MINOR_VERSION,
										BUG_VERSION, 
										STAGE_VERSION, 
										BUILD_VERSION);

	out_data->out_flags =  PF_OutFlag_DEEP_COLOR_AWARE;	// just 16bpc, not 32bpc
	
	// 获取插件的 AEGP_PluginID
	AEGP_SuiteHandler suites(in_data->pica_basicP);
	suites.UtilitySuite3()->AEGP_RegisterWithAEGP(NULL, PLUGIN_NAME, &g_my_global_data.my_id);

	g_my_global_data.click_count = 0; // 初始化点击次数

	return PF_Err_NONE;
}

static PF_Err 
ParamsSetup (	
	PF_InData		*in_data,
	PF_OutData		*out_data,
	PF_ParamDef		*params[],
	PF_LayerDef		*output )
{
	PF_Err		err		= PF_Err_NONE;
	PF_ParamDef	def;	

	 // 清除结构体
	AEFX_CLR_STRUCT(def);
	// 定义按钮
	PF_ADD_BUTTON(
		"Click Me",        // PARAM_NAME
		"Click",           // BUTTON_NAME
		0,                 // PUI_FLAGS
		PF_ParamFlag_SUPERVISE, // PARAM_FLAGS
		BUTTON_PARAM_ID    // ID
	);

	// 设置参数数量
	out_data->num_params = NUM_PARAMS;
	
	return err;
}

// 处理按钮点击事件
static PF_Err HandleButtonClick(PF_InData* in_data, PF_OutData* out_data, PF_ParamDef* params[], PF_LayerDef* output) {
	PF_Err err = PF_Err_NONE;
	g_my_global_data.click_count++; // 增加点击次数
	AEGP_SuiteHandler suites(in_data->pica_basicP);
	suites.ANSICallbacksSuite1()->sprintf(out_data->return_msg, "Button clicked %d times!", g_my_global_data.click_count);
	return err;
}

// 插件入口函数
PF_Err
EffectMain(
	PF_Cmd			cmd,
	PF_InData		*in_data,
	PF_OutData		*out_data,
	PF_ParamDef		*params[],
	PF_LayerDef		*output,
	void			*extra)
{
	PF_Err		err = PF_Err_NONE;
	
	try {
		switch (cmd) {
			case PF_Cmd_ABOUT:

				err = About(in_data,
							out_data,
							params,
							output);
				break;
				
			case PF_Cmd_GLOBAL_SETUP:

				err = GlobalSetup(	in_data,
									out_data,
									params,
									output);
				break;
				
			case PF_Cmd_PARAMS_SETUP:

				err = ParamsSetup(	in_data,
									out_data,
									params,
									output);
				break;

			case PF_Cmd_USER_CHANGED_PARAM:
				{
					// 在新的作用域中声明和初始化 extraP
					PF_UserChangedParamExtra* extraP = reinterpret_cast<PF_UserChangedParamExtra*>(extra);
					if (extraP->param_index == BUTTON_PARAM_ID) {
						err = HandleButtonClick(in_data, out_data, params, output);
					}
				}
				break;
				
			case PF_Cmd_RENDER:

				err = Render(	in_data,
								out_data,
								params,
								output);
				break;
			default:            
				break;
		}
	}
	catch(PF_Err &thrown_err){
		err = thrown_err;
	}
	return err;
}
...

四、调试

4.1 点击解决方案 → 生成/重新生成
在这里插入图片描述
4.2 点击本地Window调试器,即可启动AE验证调试插件效果
在这里插入图片描述
代码错误弹窗提示:
在这里插入图片描述

在AE中执行, 编辑>清理>所有[Edit > Purge > All] 命令,它将会清理所有相同特效插件占用的内存,就不用每次都重新启动

这样我们可以成功运行和调试插件,剩下的就是啃API文档~

五、插件安装&使用

将生成的插件文件 .aex 文件复制到 After Effects 插件目录中。默认情况下,插件目录路径如下:
Windows: C:\Program Files\Adobe\Adobe After Effects <版本号>\Support Files\Plug-ins\

如果 After Effects 已经在运行,请关闭并重新启动软件,以便新安装的插件生效
在这里插入图片描述

六、AE插件 VS 脚本

对比项插件(Plug-ins)脚本(Scripts)
性能高性能,适合处理复杂的图像处理任务和实时效果。性能较低,适合自动化任务和批处理操作。
功能可以直接操作图像数据,创建复杂的视觉效果,如粒子系统、3D 渲染等。可以控制 After Effects 的大部分功能,如创建和修改图层、关键帧、合成等,但不能直接操作图像数据。
用户界面可以创建自定义的用户界面,提供丰富的交互功能。可以创建简单的用户界面(如对话框、面板),但交互性和复杂度不如插件。
集成度深度集成到 After Effects 中,作为效果(Effect)或生成器(Generator)使用。通过 ExtendScript 控制 After Effects 的功能,适合自动化和批处理任务。
API使用 Adobe 提供的 After Effects SDK,主要用 C++ 编写。使用 ExtendScript(Adobe 的 JavaScript 变体),适合有 JavaScript 基础的开发者。
开发难度较高,需要熟悉 C++ 和图像处理技术。较低,适合快速开发和调试。
网络功能可以使用标准的 C++ 网络库(如 libcurl)进行 HTTP 请求,但需要自行处理网络通信和数据解析。ExtendScript 本身不支持直接进行 HTTP 请求,但可以通过调用外部工具(如 curl)或使用 Adobe CEP 进行网络通信。
应用场景复杂效果、高性能需求、深度集成。自动化任务、批处理、快速开发、简单交互。
常见用途粒子系统、3D 渲染、图像滤镜、实时数据获取。项目管理、图层操作、关键帧设置、渲染队列管理、参数获取。

小结

  • 插件(Plug-ins):适合高性能、复杂效果和深度集成的需求,但开发难度较高。
  • 脚本(Scripts):适合自动化、批处理和快速开发的需求,开发难度较低。

根据具体需求选择合适的扩展方式,脚本可以满足述求的,用脚本的形式开发更简单些~

利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用 利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用 Dixon整理 此过程说明适合那些使用.NET建立和部署应用的开发者,它描述了使用ArcGIS控件建立和部署应用的方法和步骤。 你可以在下面的目录下找到相应的样例程序: <安装目录>"DeveloperKit"Samples"Developer_Guide_Scenarios" ArcGIS_En... 阅读详情

相关推荐

AE 插件开发-经验分享 (一) AE插件是什么

AE 插件开发-经验分享 (一) AE插件是什么 插件的本质 插件的本质就是一个动态库,只不过文件扩展名不是DLL而是aex;只要把做好的动态库放到AE指定的文件夹下(一般是AE安装文件夹下的Plug-ins),AE启动时就会找到插件并加载它。 入口点函数 DllExport PF_Err EntryPointFunc ( PF_Cmd cmd,...

dianlin7111的博客 3150

adobe-sdk.zip

adobe-sdk.zip,adobe的sdk开发包adobe-sdk.zip

ae需要安装哪些插件?——AE常用插件脚本预设整理合集(不定期更新)

按照ae插件的属性和风格的不同,把ae插件主要分为了粒子、调色、光效、文字、绑定、水彩水墨、表达式、关键帧、三维总共九大类 一、粒子类 粒子插件绝对是最常用非常重要的插件之一。 1、Trapcode Particular AE极品粒子插件Trapcode Particular 2.5汉化中英双语版 2.Trapcode Form    Particular是动态粒子,form是静态粒子,form...

CSDN_NM$L的博客 1万+

AE插件安装路径及编程使用方法

本文将介绍AE插件的安装位置以及如何使用编程添加和调用插件的方法。通过将插件文件复制到正确的路径并使用脚本语言调用插件函数,您可以在AE项目中成功使用插件扩展其功能。请注意,插件的具体调用方法可能因插件的类型和功能而异。您可能需要查阅插件的文档或开发人员指南以了解更多关于插件的使用方法和可用函数。在上述示例中,我们首先获取AE的应用程序对象,然后通过指定插件的名称调用插件的函数。在上述路径中,您可以找到AE插件的安装文件夹。确保将插件文件复制到正确的项目文件夹中,以便在项目中正确加载和调用插件

2301_79331230的博客 1万+

After Effects的常用插件

作者:姜子博。

众智创新团队的博客 4728

搭建AE插件开发框架

第三方应用通过AE插件操作AE

lucas1018的博客 1652

增强AE软件的跟踪功能:探索AE跟踪插件

本文还有配套的精品资源,点击获取 简介:Adobe After Effects(AE)在视觉特效和动画领域广泛使用,其内置跟踪功能对于实现动态图形和视觉效果至关重要。然而,为满足专业用户的复杂需求,第三方开发者提供了各种AE跟踪插件,这些插件扩展了AE的跟踪能力,提供了高级追踪算法如光流追踪、模板匹配和边缘检测。这些插件不仅提高了追踪的准确性和效率,还简化了复杂跟踪任务的处...

weixin_30661119的博客 2270

ae导出gif插件_AE导出SVG,bodymovin插件教程

如果您在寻找一款AE动画导出json插件的话可以来试试Bodymovin最新版,这个插件用于导出web动画的AE扩展,之后您可以在svg,canvas和html上在浏览器中渲染动画,Bodymovin最新版使用简单,功能强大,经常使用AE的朋友一定要常备,欢迎下载! BodyMovin导出的SVG还原AE动效能达到95% 架起了开发与设计师们的一条彩虹桥win版的安装1.首先把压缩包里的文件夹解压...

weixin_42458021的博客 3891

AE】学习七款动态AE插件, 学会了让你的功力突飞猛进

插件AE带来了额外的功能,每一个动态设计师在日常工作中都会有一些依赖的插件。不管你是高手还是菜鸟,下面这7款插件都会让你的功力突飞猛进,来看有哪款适合你的! 1、Trapcode Particulars Trapcode Particular插件是一款粒子系统插件,用户可以用它在AE里创建像烟、雨、云和尘埃等自定义的粒子效果。Particular插件AE自带的Partical World插件...

CSDN_NM$L的博客 2371

AE插件开发示例

after effects插件开发示例:获取并修改曝光值

lucas1018的博客 1195

ae去黑插件_AE插件!八个绝对不能错过的AE插件

插件AE带来了额外的功能,每一个动态设计师在日常工作中都会有一些依赖的插件。不管你是高手还是菜鸟,下面这8款插件都会让你的功力突飞猛进,来看有哪款适合你的!1. Trapcode ParticularsTrapcode Particular插件是一款粒子系统插件,用户可以用它在AE里创建像烟、雨、云和尘埃等自定义的粒子效果。Particular插件AE自带的Partical World插件具有...

weixin_39608063的博客 1523

ae saber插件_2020AE常用插件介绍及中文汉化版AE插件分享(都是目前的新版本)

红巨星Particular粒子插件:简称P粒子插件,属于红巨星Trapcode Suite套装内的一款插件,它能够在AE中创建复杂的3D粒子效果,例如制造火,水,烟,雪等有机物,创建漂亮的运动图形元素。在物理功能上,P粒子插件可以模拟在空气中移动并从表面反弹的粒子,而在最新版本中,P粒子插件可以使用新的Dynamic Fluids物理引擎进行逼真的流体模拟。红巨星Form粒子插件:同样是红巨星Tr...

weixin_39827506的博客 9183

ae插件saber_有哪些值得推荐的AE插件AE那些神级插件们!

经常使用AE的小伙伴,应该或多或少都接触过AE插件们吧,AE插件AE软件的使用中是必不可少的。鉴于AE插件的种类繁多,为了让影视后期爱好者在后续学习AE软件的过程中能少走弯路,特地帮大家整理了常用的插件,以便大家更加针对性地学习,快速掌握AE软件的精髓!以下有每一款插件的详细介绍,大家按需选择自己需要的就好,因为安装插件过多的话,就会导致软件变得臃肿。注:以下插件仅为个人推荐。插件目录E3D插...

weixin_34439193的博客 1529

ae导出json_AE导出SVG,bodymovin插件教程

如果您在寻找一款AE动画导出json插件的话可以来试试Bodymovin最新版,这个插件用于导出web动画的AE扩展,之后您可以在svg,canvas和html上在浏览器中渲染动画,Bodymovin最新版使用简单,功能强大,经常使用AE的朋友一定要常备,欢迎下载! BodyMovin导出的SVG还原AE动效能达到95% 架起了开发与设计师们的一条彩虹桥win版的安装1.首先把压缩包里的文件夹解压...

weixin_39946327的博客 2305

ae灯光插件_AE插件!八个绝对不能错过的AE插件

插件AE带来了额外的功能,每一个动态设计师在日常工作中都会有一些依赖的插件。不管你是高手还是菜鸟,下面这8款插件都会让你的功力突飞猛进,来看有哪款适合你的!1. Trapcode ParticularsTrapcode Particular插件是一款粒子系统插件,用户可以用它在AE里创建像烟、雨、云和尘埃等自定义的粒子效果。Particular插件AE自带的Partical World插件具有...

weixin_39642622的博客 3099

ae导出gif插件_AE超强输出webp/apng格式动画插件

在设计师的每天日常的工作,几乎都会涉及到要跟项目来做一些动效或者一些动效demo来演示方案,市面上关于做动效的软件实在是太多了,但是据我所知,目前功能最强大、能够满足大部分需求的动效软件,非AE这款强大的软件莫属了,确实这款软件用着很舒服,功能也十分强大,今天不聊软件,主要目的是跟大家分享一个关于动效输出格式的插件,十分方便,直接安装在AE目录里面,一键导出webp/apng格式的动画,...

weixin_39559804的博客 1万+

AE插件说明

1. 插件“ColorVibrance”,可以更改特效粒子的整体颜色,比调整 色相饱和度更逼真,颜色更鲜艳,最重要的是,带通道的粒子效果,用这个插件可以 去掉黑底,比叠加模式好。 2. 插件“snap”,如果临时想要视频中某一帧的PNG图片,用这个插件点一下就行,很方便。 3.插件“EFX Chromatic",它能够实现类似抖音icon那种绿色紫色颜色偏移的效果。 4. 插件...

baimei007的博客 2012

AE插件在哪里找?6款AE动效必备插件来了

作为一个专注于AE的小可爱,今日就来跟你分享妥妥的干货!今天分享啥呢?没错儿!就是咱们AE动效设计师最常用的插件。之前给大家介绍过了插件安装的方法,不会的小伙伴们可以点击我的主页查看之前的笔记哦~好嘞!咱今天就是一个废话不多说的大动作给到!开始摆干货! 1.VE 3D Bevel(金属图形动效) VE 3D Bevel可以将图形的边缘轮廓挤压出立体效果,选择贴图类型可以呈现不同的金属材质效果。根据自己的需要,来选择不同的Quality(渲染质量)类型会有不同的渲染速度。(是不是有亿点小厉害 ~)

Mark_Wang1211的博客 4916

AE插件合集|AE Plug-ins Suite 23.16 一键安装AE插件释放创造力提升效率

Adobe After Effects 2022是影视后期制作中不可或缺的工具,而通过使用插件可以进一步提升工作效率和创意表现。为了简化插件选择与安装过程,大飞哥软件自习室推出了一款全面的AE插件合集,支持一键安装,自动识别AE路径,并解决了插件和素材丢失的问题。该合集包含市面上几乎所有常用AE插件,支持中英双语,用户可以自定义选择和单独更新插件,避免冲突。此外,插件合集中还包含了自动化删除旧版插件和防止重复安装的功能,确保安装过程安全无风险。所有文件经过严格的安全测试,并提供永久免费更新和24小时自动发送

owmei的博客 8683
上一篇: react之jsx编译原理
vicki2024
博客等级 码龄9年 171粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值