如何将JSON文件与After Effects关联渲染动态视频?含网页场景
嘿,这个需求其实挺常见的,尤其是批量生成个性化视频的时候。我分两部分给你拆解——先讲本地JSON怎么和AE联动生成视频,再说说网页表单场景下的动态方案。
一、基础流程:本地JSON与AE联动生成视频
1. 制作AE基础模板
- 打开After Effects,新建一个合成(比如设置为1080p分辨率、3秒时长、25帧/秒)
- 添加一个文本层,输入占位符(比如
{{name}}),调整好字体、大小、位置等样式;如果需要动画,给文本层加个淡入淡出或者简单的位移动画都可以 - 记得给这个文本层起个好认的名字(比如“姓名文本”),后面脚本要用到
2. 用脚本读取JSON并批量替换内容
AE支持用JavaScript脚本(.jsx格式)操作项目,这里有两种实用方式:
方式一:直接读取本地JSON文件
写一段简单的脚本,保存为render-names.jsx,然后在AE里通过文件>脚本>运行脚本文件执行:
// 读取本地JSON文件(替换成你的JSON文件实际路径) var jsonFile = new File("C:/Users/xxx/Documents/names.json"); jsonFile.open("r"); var jsonData = JSON.parse(jsonFile.read()); jsonFile.close(); // 选中你的模板合成(也可以用app.project.item("合成名称")指定) var targetComp = app.project.activeItem; // 遍历每个姓名,生成对应视频 for (var i = 0; i < jsonData.length; i++) { var currentName = jsonData[i].name; // 替换文本层内容 var textLayer = targetComp.layers("姓名文本"); textLayer.property("Source Text").setValue(currentName); // 添加到渲染队列 var renderItem = app.project.renderQueue.items.add(targetComp); var outputModule = renderItem.outputModule(1); // 应用H.264预设(生成MP4) outputModule.applyTemplate("H.264"); // 设置输出路径和文件名(每个姓名对应单独文件) outputModule.file = new File("C:/Users/xxx/Output/" + currentName + ".mp4"); } // 启动批量渲染(取消注释即可自动执行) // app.project.renderQueue.render();
方式二:用AE可视化的“数据驱动动画”绑定
- 打开
窗口>数据驱动动画面板,点击创建新数据源,选择你的JSON文件,AE会自动识别name字段 - 选中文本层的
Source Text属性,拖到面板里的name字段上,完成绑定 - 之后还是用类似上面的脚本,遍历JSON数据切换数据源并添加渲染任务,操作更直观
3. 执行渲染
运行脚本后,AE的渲染队列会自动添加所有姓名对应的任务,确认输出路径和格式无误后,点击渲染按钮就能批量生成MP4了。
二、网页表单场景:让AE从URL动态读取JSON
如果你的表单提交后,JSON数据是通过后端接口暴露的(比如https://your-server.com/api/submitted-names返回目标数组),可以修改脚本让AE直接从网络拉取数据,甚至实现表单提交后自动触发渲染。
1. 后端准备工作
- 表单提交后,后端把用户输入的姓名存储起来,提供一个GET接口返回格式正确的JSON数组
- 注意要配置CORS允许AE所在的机器访问,或者如果AE和后端在同一局域网/服务器,直接用IP地址访问接口即可
2. 修改脚本从URL读取JSON
把之前的本地文件读取逻辑换成网络请求,脚本示例:
// 从后端接口读取JSON(替换成你的实际接口URL) var xhr = new XMLHttpRequest(); xhr.open("GET", "https://your-server.com/api/submitted-names", false); // 同步请求确保数据加载完成 xhr.send(); var jsonData = JSON.parse(xhr.responseText); // 后续的渲染逻辑和本地版本完全一致 var targetComp = app.project.activeItem; for (var i = 0; i < jsonData.length; i++) { var currentName = jsonData[i].name; var textLayer = targetComp.layers("姓名文本"); textLayer.property("Source Text").setValue(currentName); var renderItem = app.project.renderQueue.items.add(targetComp); var outputModule = renderItem.outputModule(1); outputModule.applyTemplate("H.264"); outputModule.file = new File("C:/Users/xxx/Output/" + currentName + ".mp4"); } // 自动启动渲染 app.project.renderQueue.render();
3. 实现表单提交后自动触发渲染(可选)
如果想让流程完全自动化,可以用AE自带的aerender命令行工具,让后端在表单提交完成后调用这个命令启动渲染:
aerender的路径一般是Adobe After Effects 20XX\Support Files\aerender.exe(Windows)或/Applications/Adobe After Effects 20XX/aerender(Mac)- 命令示例:
aerender -project "D:/Projects/NameVideoTemplate.aep" -comp "姓名合成" -script "D:/Scripts/render-names.jsx"
后端可以在收到表单提交的回调里执行这个命令,AE就会自动读取最新的JSON数据并生成视频。
内容的提问来源于stack exchange,提问作者user3348410
相关产品推荐
相关产品推荐

