-
-
【PR脚本】添加到AME渲染
来源 NT油管教程 知识点 1.文件路径要用/或者\ 2.渲染参数中的文件要用字符串 3.可以先判断文件是否存在,file.exists 4.AME的预设文件在C:\Users\你的用户名\Documents\Adobe\Adobe Media Encoder\14.0\Presets\ 里 源码 var sequence = app.project.activeSequence; // 活动序列 app.encoder.launchEncoder(); // 启动AME // var video = File("C:\\Users\\YL\\Desktop\\test.mp4") // var preset = File("C:\\Users\\YL\\Documents\\Adobe\\Adobe Media Encoder\\14.0\\Presets\\IG.epr") // 添加文件到渲染队列 // app.encoder.encodeFile(video.fsNmae, preset.fsNmae, 0, true); // 添加系列到渲染队列 app.encoder.encodeSequence(sequence, "C:\\Users\\YL\\Desktop\\test.mp4", "C:\\Users\\YL\\Documents\\Adobe\\Adobe Media Encoder\\14.0\\Presets\\MY Preset.epr", 0, true); app.encoder.startBatch(); // 开始渲染- 0
- 0
- 363
-
[AE脚本开发]ScriptUI实现在非法输入时还原上次数值
// ScriptUI实现在非法输入时还原上次数值 v1.0.0 2022-02-24 // Raymond Yan 2022 (RaymondClr@outlook.com / QQ: 1107677019) var mainWindow = new Window("palette", "主界面"); var initialValue = 0; var inputControl = mainWindow.add("edittext", [0, 0, 100, 25], initialValue); inputControl.valueCache = initialValue; inputControl.onChange = function () { if (!/\d+/.test(this.text)) return (this.text = this.valueCache); this.valueCache = Number(this.text); }; mainWindow.show();- 0
- 0
- 149
-
【脚本问答】怎么给脚本加注册码 | 加密 验证
/@草哥 只说关键几步,具体需要自己写 //1.获取电脑的mac地址 //苹果机 var info=system.callSystem("ifconfig"); var patt = /[0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}/ig; info = patt.exec(info); newMacArr = info[0].replace (/[:]/g, ""); //PC机 var info=system.callSystem("wmic nicconfig get macaddress"); var patt = /[0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}:[0-9A-Z]{2}/ig; info = patt.exec(info); newMacArr = info[0].replace (/[:]/g, ""); // 2.对mac地址加密,变成注册码 //自己随便编个算法 var macAddress; var output=(macAddress*123/36+2-19)*3.14;//类似于这样 // 3.对比脚本算出来的和输入框里面的注册码是不是一样,一样的话脚本按钮才起作用 var code = "ef783vg3999bhs6" if(output === code){alert("Do something!")} // 4.如何把用户输入的注册码存起来? //看看getSetting()方法和saveSetting()方法- 0
- 0
- 262
-
【PS脚本】设置图层标记颜色
function setLayerColor(color) { var refer = new ActionReference(); refer.putEnumerated(charIDToTypeID(Lyr ), charIDToTypeID(Ordn), charIDToTypeID(Trgt)); var desc = new ActionDescriptor(); desc.putEnumerated(charIDToTypeID(Clr ), charIDToTypeID(Clr ), stringIDToTypeID(color)); var desc2 = new ActionDescriptor(); desc2.putObject(charIDToTypeID(T ), charIDToTypeID(Lyr ), desc); desc2.putReference(charIDToTypeID(null), refer); executeAction(charIDToTypeID(setd), desc2, DialogModes.NO); } setLayerColor('green')- 0
- 0
- 219
-
【AE脚本】检测是否勾选"允许写入文件和访问网络"
function writingFilesEnabled() { var errStrings = { errLineOne: localize("运行此脚本需要设置首选项。"), errLineTwoStart: localize("请转至"), errLineTwoEnd: localize("部分,并确保已经勾选了“允许脚本写入文件和访问网络”。"), sectionGeneral: localize("应用程序首选项中的“常规”"), sectionScripting: localize("“脚本和表达式”") } var version12Check = ( parseFloat( app.version ) > 12.0 || ( parseFloat( app.version ) === 12.0 && app.buildNumber >= 264 ) || app.version.substring( 0, 5 ) !== "12.0x" ); var mainSectionStr = ( version12Check ) ? "Main Pref Section v2" : "Main Pref Section"; var version16Check = ( parseFloat( app.version ) > 16.0 ); var securitySetting = app.preferences.getPrefAsLong( mainSectionStr, "Pref_SCRIPTING_FILE_NETWORK_SECURITY" ); var errSecuritySetting = [ errStrings.errLineOne, [ errStrings.errLineTwoStart, ( version16Check ) ? errStrings.sectionScripting : errStrings.sectionGeneral, errStrings.errLineTwoEnd ].join( " " ) ].join( "\n" ) if ( securitySetting === 0 ) { alert( errSecuritySetting ); ( version16Check ) ? app.executeCommand( 3131 ): app.executeCommand( 2359 ); } return ( securitySetting === 1 ); }- 0
- 0
- 380
-
[AE脚本开发]ScriptUI在面板中增减控件
// ScriptUI在面板中增减控件 v1.0.0 2022-02-16 // Raymond Yan 2022 (RaymondClr@outlook.com / QQ: 1107677019) var mainWindow = new Window("palette", "主界面"); var group1 = mainWindow.add("group"); var group2 = mainWindow.add("group"); group2.orientation = "column"; var button1 = group1.add("button", undefined, "添加按钮"); var button2 = group1.add("button", undefined, "移除按钮"); var count = 1; button1.onClick = function () { group2.add("button", undefined, "按钮" + count++); mainWindow.layout.layout(true); }; button2.onClick = function () { count--; if (count <= 0) count = 1; group2.remove(group2.children.length - 1); mainWindow.layout.layout(true); }; mainWindow.show();- 0
- 0
- 194
-
【PR脚本】示例:移动后面剪辑到前面的末尾
本来想用clip.start。表面上可以读写,但是会报错!! 所以要用try,这样会生效,再忽视错误即可 以下脚本为:移动视频第2轨的 第2个剪辑片段 对齐到 第1个剪辑片段的后面 // Move Next Clip To Previous End var sequence = app.project.activeSequence; // active sequence var clip1 = sequence.videoTracks[1].clips[0] // first clip var clip2 = sequence.videoTracks[1].clips[1] // second clip var new_end_time = clip2.end.seconds - clip2.start.seconds + clip1.end.seconds // second clip new end time , this way, dont change the clip duration // use "clip.start" or "clip.end" will throw an error. I dont know why. try { clip2.start = clip1.end.seconds } catch (error) { try { clip2.end = new_end_time } catch (error) { } }- 0
- 0
- 316
-
【AE脚本】获取时间相关信息
其他的,请自行搜索JS 时间 脚本获取当前系统时间 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当前星期X(0-6,0代表星期天) myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) myDate.getHours(); //获取当前小时数(0-23) myDate.getMinutes(); //获取当前分钟数(0-59) myDate.getSeconds(); //获取当前秒数(0-59) myDate.getMilliseconds(); //获取当前毫秒数(0-999) myDate.toLocaleDateString(); //获取当前日期 var mytime=myDate.toLocaleTimeString(); //获取当前时间 myDate.toLocaleString( ); //获取日期与时间- 0
- 0
- 119
-
【脚本开发】AE菜单命令
https://hyperbrew.co/blog/after-effects-command-ids 在After Effects中构建脚本或扩展时,有些无法通过API实现的,如撤销/重做、视口控制等。 Command IDs(菜单ID)这时就有了作业,本质上是模仿用户点击一个按钮的行为,或者触发特定功能的热键。 在API中,你总是可以尝试用名字来搜索你想要的命令。 var cmdId = app.findMenuCommandId('Redo'); // Result: 2371 获取菜单(撤销)的ID:2371 app.executeCommand(cmdId); // Execute Redo 执行它 问题是,这种方法相当繁琐,除非提前知道菜单名称。不同语言不同版本还不一样! 解决方案 https://hyperbrew.github.io/after-effects-command-ids 由于Adobe没有提供官方的命令ID列表,我们在React中建立了一个简单的查看器来快速搜索命令,并找到每个版本的After Effects的命令ID。 要使用一个命令,只需找到它的命令ID号,然后用以下方法执行它。 app.executeCommand(2035); 查看器从我们为每个版本的After Effects生成的一系列JSON文件中提取数据。(见下文) 它是如何工作的 没有文档,如何得出清单?幸运的是,它们在应用程序字典文件中。 所在地(中文为例):Adobe After Effects 2020\Support Files\Dictionaries\zh_CN\after_effects_zh_CN.dat "$$$/AE/MenuID/0003/Duplicate_2080=重复(&D)" 然后通过解析器运行该文件,将名称与命令ID分开。下面是我们写的一个解析器,是为了和Node.js脚本一起运行的,欢迎大家试一试。 const fs = require("fs"); const path = require("path"); const stream = require("stream"); const readline = require("readline"); const getCmdIds = (datFile) => { return new Promise((resolve) => { const instream = fs.createReadStream(datFile, "utf8"); const outstream = new stream(); const rl = readline.createInterface(instream, outstream); let menuIDs = {}; rl.on("line", (line) => { if (line.match(/\$\$\$\/AE\/MenuID/)) { line = line.substring(line.lastIndexOf("/") + 1); const data = line.match(/[a-z|A-Z|0-9]*\_[0-9]*/); if (data) { const name = data[0].match(/[a-z|A-Z|0-9]*\_/)[0].slice(0, -1); const number = data[0].match(/\_[0-9]*/)[0].substr(1); if (number && name) { menuIDs[number] = name; } } } }); rl.on("close", () => resolve(menuIDs)); }); }; const version = 2022; const datFile = C:/Program Files/Adobe/Adobe After Effects ${version}/Support Files/Dictionaries/es_ES/after_effects_es_ES.dat; getCmdIds(datFile).then((res) => { console.log(${Object.keys(res).length} Command IDs Found); const txt = JSON.stringify(res, null, "\t"); const outFile = path.join(__dirname, ${version}.json); fs.writeFileSync(outFile, txt, { encoding: "utf-8", }); console.log(File written to: ${outFile}); }); 解析器识别所有的命令ID及其相应的名称,然后将数据保存到一个JSON文件中。我们已经为每个版本的After Effects生成了JSON文件,从After Effects CC 2015到最新的After Effects CC 2022。 这些文件也可以在你自己的脚本或扩展中参考,你可以在下面下载它们。- 0
- 0
- 812
-
[AE脚本]给ui快速添加右键菜单
粗略演示 这是代码 function ringhtClickMenu(container, window) { if (container.orientation === stack) { window.addEventListener(blur, function (event) { window.hide(); }); container.addEventListener(mouseup, function (event) { if (event.button === 2 && event.detail === 1) { window.frameLocation = [event.screenX, event.screenY]; window.show(); } }); } else if (container.orientation === row || undefined) { container.orientation = stack; ringhtClickMenu(container, window); } else { return alert(已设置orientation,请单独打组,再把orientation设置为stack, + \n + 再监听组.); } } function myMenu() { var $win = new Window(palette, undefined, undefined, { borderless: true }); var button1 = $win.add(button, undefined, 1); var button2 = $win.add(button, undefined, 2); var button3 = $win.add(button, undefined, 3); var button4 = $win.add(button, undefined, 4); button1.onClick = function () { $win.hide(); alert(1); }; button2.onClick = function () { $win.hide(); alert(2); }; button3.onClick = function () { $win.hide(); alert(3); }; button4.onClick = function () { $win.hide(); alert(4); }; return $win; } var win = new Window(palette); var group = win.add(group); group.size = [360, 240]; group.graphics.backgroundColor = group.graphics.newBrush(group.graphics.BrushType.SOLID_COLOR, [1, 0, 1]); ringhtClickMenu(group, myMenu()); win.show();- 0
- 4
- 215
-
一键RGB分离
效果展示 功能 选择一个图层,使用脚本。会基于当前图层,分离RGB,变成3个图层 知识点 撤销组 图层选择 图层复制 图层重命名 混合模式 图层添加属性 更改属性 源代码 /* AR_AddChromaticAberration Author: Arttu Rautio (aturtur) Website: http://aturtur.com/ Name-US: AR_AddChromaticAberration Description-US: Creates Chromatic aberration setup from selected comp item. Selected item should be a pre-comp or a layer that does not have any effects. github: https://github.com/aturtur/after-effects-scripts/blob/master/ Written for Adobe After Effects CC 2019 (Version 16.0.1 Build 48) */ //@target aftereffects // 这个函数没用到 不知道干嘛的 function rangeMap(value, minInput, maxInput, minOutput, maxOutput) { var remapped = (value - minInput) * (maxOutput - minOutput) / (maxInput - minInput) + minOutput return remapped } function ChromaticAberration() { // 创建撤销组 app.beginUndoGroup("AR_AddChromaticAberration"); // 选择一个图层 var comp = app.project.activeItem; var selectedLayer = comp.selectedLayers[0]; // 复制2个图层 var red = selectedLayer; var blue = selectedLayer.duplicate(); var green = selectedLayer.duplicate(); // 重命名为红绿蓝 red.name = "Red"; green.name = "Green"; blue.name = "Blue"; // 设置后2层的混合模式 green.blendingMode = BlendingMode.ADD; blue.blendingMode = BlendingMode.ADD; // 分别为R/G/B图层添加属性 var rchan = red.Effects.addProperty("Set Channels"); rchan.property("Set Red To Source 1’s").setValue(1); // 设置 red channel 为'Red' rchan.property("Set Green To Source 2’s").setValue(10); // 设置 green channel 为 'Off' rchan.property("Set Blue To Source 3’s").setValue(10); // 设置 blue channel 为 'Off' var gchan = green.Effects.addProperty("Set Channels"); gchan.property("Set Red To Source 1’s").setValue(10); // 设置 red channel 为 'Off' gchan.property("Set Green To Source 2’s").setValue(2);…- 0
- 0
- 239
-
[AE脚本] 储存效果/图层样式 等等
使用方法 只需将storeStyleLayer 传入顶级需要保存的属性组名称即可, 因为原本只想储存图层样式的, 懒得改函数名了 typescript版本 import { activeLayer } from 'base/variables'; class PropertyItem { script: string; constructor(prop: Property, parent: PropertyCollection) { let tmpScript = ''; const propertyMatchName = prop.matchName; const propertyValue = prop.value; const propertyString = parent.name + '.property("' + propertyMatchName + '")'; // 储存值 if (prop.expressionEnabled) { try { const expressionValue = prop.expression; tmpScript += propertyString + '.expression="' + expressionValue + '";\n'; tmpScript += propertyString + '.expressionEnabled=true;\n'; } catch (error) {} } else { // 没有表达式 直接复制值 tmpScript += propertyString + '.setValue(' + propertyValue + ');\n'; } // TODO 储存关键帧 if (prop.numKeys > 0) { } this.script = tmpScript; } parse(): string { return this.script; } } class PropertyCollection { name: string = ''; // 当前层级属性的脚本名称 props: (PropertyItem | PropertyCollection)[] = []; // 储存的属性与属性组 constructor(name: string) { this.name = name; } parse(): string { let tmpScript = ''; for (const prop of this.props) { tmpScript += prop.parse(); } return tmpScript; } add(prop: PropertyItem | PropertyCollection) { this.props.push(prop); } } function storeStyleLayer(layer: Layer, groupName = 'ADBE Layer Styles') { const styles = layer.property(groupName); const rootPropertyCollection = new PropertyCollection(`.property('${groupName}')`); loopPropertyClass(styles, rootPropertyCollection); let tmpScript = rootPropertyCollection.parse(); alert(tmpScript); } function loopPropertyClass(px: _PropertyClasses, parent: PropertyCollection) { // 判断是不是属性 if (px.propertyType === PropertyType.PROPERTY) {…- 0
- 0
- 101
-
AE内置效果预览包v1.0
https://www.bilibili.com/video/BV1rM4y1N7pD/ 使用AEViewer,进行AE内置效果预览及运用 能力一般,水平有限 加上时间原因,以下几类效果未做成预览(期待有想法的同学一起完善) Audio - 音频 Channel - 通道 Color Correction - 颜色校正 Immersive Video - 沉浸式视频 Obsolete - 过时 Utility - 实用工具 *本效果整合包大部分效果为 次元饺子(B站)制作 *小部分效果以及脚本整合为 JimWho (B站)制作 *(效果包本人测试版本AE2020,使用效果有问题及时联系我)- 0
- 0
- 963
-
【AE脚本案例】洋葱皮
介绍 skins:之前/之后的洋葱皮数量。4将在之前和之后创建4个皮肤。 opacity:起始不透明度,每个洋葱皮的不透明度逐渐降低。 skin every x freames:皮肤每X帧是皮肤之间交错的帧数。 make:制作洋葱皮 remove:移除洋葱皮 refresh:更新设置 单击一个图层,使用本脚本即可 这个帖子来自一个帖子早期前保罗·塔斯利上www.aenhancers.com,非常感谢您的帖子。 其他 来源:https://github.com/scottjwood/AE_OnionSkinBuddy 源码 // https://github.com/scottjwood/AE_OnionSkinBuddy { function scottPanel(thisObj) { var onionArray = []; // array to hold created layers var frameTime = .04; // float for a single frame var skinInput; // how many skins on each side var opacityInput; // starting opacity for skins var skinFrameInput; // stagger skins every x frames var onionBefore = true; var onionAfter = true; var colorBefore = [0, .93, .99]; // blue var colorAfter = [.98, 0, .99]; // purple function scottPanel_buildUI(thisObj) { var onionSkinnerPanel = (thisObj instanceof Panel) ? thisObj : new Window("palette", "Onion Skin Buddy", [100, 100, 300, 280]);// // add buttons var skinText = onionSkinnerPanel.add("statictext", [10,10,110,30], "# of skins"); skinInput = onionSkinnerPanel.add("edittext", [70,10,110,30], "4"); var opacityText = onionSkinnerPanel.add("statictext", [10,40,110,60], "Opacity of skins"); opacityInput = onionSkinnerPanel.add("edittext", [100,40,130,60], "50"); var skinFrameText = onionSkinnerPanel.add("statictext", [10,65,110,85], "Skin every x frames"); skinFrameInput = onionSkinnerPanel.add("edittext", [120,65,150,85], "2"); var buttonMakeOnion = onionSkinnerPanel.add("button", [10,90,180,110], "Make Onion"); var buttonRemoveOnion = onionSkinnerPanel.add("button", [10,115,180,135], "Remove Onions"); var buttonRefreshOnion = onionSkinnerPanel.add("button", [10,140,180,160], "Refresh Onions"); buttonMakeOnion.onClick = makeOnionSkin; buttonRemoveOnion.onClick = removeOnionSkin; buttonRefreshOnion.onClick = refreshOnionSkin; return onionSkinnerPanel; } // End of panel creation function makeOnionSkin() { var activeItem = app.project.activeItem; // make…- 0
- 0
- 417
-
[AE脚本]使用可执行文件给脚本源码加密
ae脚本源码基本上就是jsx 或者jsxbin, 但是现在很多破解工具, 源码基本上裸奔... 可以通过ae脚本执行exe文件, 其中源码包含在exe文件内部, 再通过exe与ae通信执行脚本, 可以一定程度提高脚本破解难度 大致流程 AE->运行脚本->调用exe->执行真正脚本内容->发送给ae 其中调用exe可以使用cnd直接调用 exe发送给ae 可以使用 cmd AfterFX-脚本- 0
- 0
- 46
-
【AE脚本】无限制视图缩放
描述 AE自带的缩放除了自适应,只有33%,50%,100%。想取中间值非常费劲 源码 //视图无级缩放 v1.0.0 2021-08-06 //Raymond Yan 2021 (RaymondClr@outlook.com / QQ: 1107677019) var win = new Window( "palette { margins: 5, spacing: 5, orientation: 'row', \ A: Button { size: [25, 25] text: '小' }, \ B: Slider { size: [150, 25], minvalue: 1, maxvalue: 100 }, \ C: Button { size: [25, 25] text: '大' },\ }" ); win.show(); var btn_zoomIn = win.A; var sld_zoomRatio = win.B; var btn_zoomOut = win.C; var g_zoomScaleStep = 5; var g_magnification = 50; (function initViewZoom() { var zoomScale = app.activeViewer ? app.activeViewer.views['0'].options.zoom : g_magnification / 100; g_magnification = sld_zoomRatio.value = zoomScale > 1 ? 100 : zoomScale * 100; })(); btn_zoomIn.onClick = zoomCompView(0, sld_zoomRatio, g_zoomScaleStep); btn_zoomOut.onClick = zoomCompView(1, sld_zoomRatio, g_zoomScaleStep); sld_zoomRatio.onChange = sld_zoomRatio.onChanging = zoomCompView(2, sld_zoomRatio); function zoomCompView(modeIndex, scriptUiSliderControl, step) { var zoomStrategies = [ function (value, step) { var scale = Math.ceil(Math.ceil(value) / step) * step - step; return scale < 1 ? 1 : scale; }, function (value, step) { var scale = Math.floor(Math.floor(value) / step) * step + step; return scale > 100 ? 100 : scale; }, function (value) { return Math.floor(value * 100) / 100; }, ][modeIndex]; return function () { if (!app.activeViewer) return (scriptUiSliderControl.value = g_magnification);…- 0
- 0
- 400
-
ColorPicker颜色选取器
//////////////////////////////////////////////////////////////////////////// // ADOBE SYSTEMS INCORPORATED // Copyright 2007 Adobe Systems Incorporated // All Rights Reserved // // NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the // terms of the Adobe license agreement accompanying it. If you have received this file from a // source other than Adobe, then your use, modification, or distribution of it requires the prior // written permission of Adobe. ///////////////////////////////////////////////////////////////////////////// /** @fileoverview Shows how to use graphic objects to customize the drawing of ScriptUI elements. @class Shows how to use graphic objects to customize the drawing of ScriptUI elements. <h4>Usage</h4> <ol> <li>Open this file and run it in the ExtendScript Toolkit. You can choose as the target any application that supports ScriptUI</li> <li>Move the sliders up and down to change the color of the panels</li> <li>Click the large swatch to pop an alert with the current RGB settings</li> </ol> <h4>Description</h4> This script creates an example Color Picker floating palette to show how to use some of the ScriptUI graphics properties and methods. Specifically, it demonstrates: <ul> <li>Defining a ScriptUIFont object and using it to set an element's graphics.font property.</li> <li>Defining a ScriptUIBrush object and using it to set an…- 0
- 0
- 257
-
【AE脚本开发】颜色转换
[sc name="zhuanzai" author="jonathantneal" link="https://github.com/jonathantneal/convert-colors/tree/master/src" ][/sc] HEX and RGB @无名 正则hex转rgb function hexToRgb(hex) { var result; hex = hex.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/gi, '$1$1$2$2$3$3'); hex.replace(/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/gi, function (match, $1, $2, $3) { result = [parseInt($1, 16), parseInt($2, 16), parseInt($3, 16)]; }); return result; } function hex2rgb(hex) { // #<hex-color>{3,4,6,8} const hexColorMatch = /^#?(?:([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?|([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?)$/i; const [, r, g, b, a, rr, gg, bb, aa] = hex.match(hexColorMatch) || []; if (rr !== undefined || r !== undefined) { const red = rr !== undefined ? parseInt(rr, 16) : parseInt(r + r, 16); const green = gg !== undefined ? parseInt(gg, 16) : parseInt(g + g, 16); const blue = bb !== undefined ? parseInt(bb, 16) : parseInt(b + b, 16); const alpha = aa !== undefined ? parseInt(aa, 16) : a !== undefined ? parseInt(a + a, 16) : 255; return [red, green, blue, alpha].map(c => c * 100 / 255); } return undefined; } export function rgb2hex(rgbR, rgbG, rgbB) { return `#${((1 << 24) + (Math.round(rgbR * 255 / 100) << 16) + (Math.round(rgbG * 255 / 100) << 8) + Math.round(rgbB * 255 / 100)).toString(16).slice(1)}`; } HSL and hsv function hsl2hsv(hslH, hslS, hslL) { const hsv1 = hslS * (hslL < 50 ? hslL…- 0
- 0
- 672
-
【AE脚本】读写首选项
function ReadPreferences() { //此函数目的是读AE首选项中的内容 //例子中主要解决了读取标签中的颜色和名称 var textArray = []; var win = 0; var colors = []; var names = []; if ($.os.indexOf("Windows") != -1) { win = 1; } userData = Folder.userData;//获取首选项所在文件夹 version = app.version.substring(0, 4);//获取版本号 prefixName = ""; lang = app.isoLanguage; //判断AE的语言 一般CN和US就够用了 if (lang == "zh_CN") { prefName = " 设置-indep-general"; } if (lang == "en_US") { prefName = " Prefs-indep-general"; } if (lang == "de_DE") { prefName = " Einstellungen-indep-general"; } if (lang == "es_ES") { prefixName = "Preferencias "; prefName = "-indep-general"; } if (lang == "fr_FR") { prefName = " Préfs-indep-general"; } if (lang == "it_IT") { prefixName = "Preferenze di "; prefName = "-indep-general"; } if (lang == "ja_JP") { prefName = " Prefs-indep-general"; } if (lang == "ko_KR") { prefName = " Prefs-indep-general"; } if (lang == "pt_BR") { prefixName = "Preferências do "; prefName = "-indep-general"; } //判断用户系统是win还是mac if (win == 1) { prefFilePath = userData.toString() + "/Adobe/After Effects/" + version + "/" + prefixName + "Adobe After Effects " + version + prefName + ".txt"; } else { macPath1 = userData.toString(); macPath = macPath1.substring(0, macPath1.lastIndexOf("/") + 1); prefFilePath = macPath + "Preferences/Adobe/After Effects/" + version + "/" + prefixName +…- 0
- 0
- 471
-
ScriptUI点击控件弹出设置界面示例
// ScriptUI点击控件弹出设置界面示例 v1.0.0 2022-01-16 // Raymond Yan 2022 (RaymondClr@outlook.com / QQ: 1107677019) var mainWindow = new Window("palette", "主界面"); var getWindow1 = new SingletonWindow("palette", "设置面板一"); var getWindow2 = new SingletonWindow("palette", "设置面板二"); var button = mainWindow.add("button", undefined, "设置"); button.onClick = function () { var settingWindow1 = getWindow1(); var checkBox = settingWindow1.add("checkBox", undefined, "一个复选框"); settingWindow1.show(); checkBox.onClick = function () { alert(this.text); }; var settingWindow2 = getWindow2(); var button = settingWindow2.add("button", undefined, "一个按钮"); settingWindow2.show(); button.onClick = function () { alert(this.text); }; }; function SingletonWindow(type, name) { var container = null; return function () { if (container === null || !container.visible) container = new Window(type, name); return container; }; } mainWindow.show();- 0
- 0
- 240
-
【AE脚本示例】颜色转换函数 AE颜色 RGB HSL HEX
//SOURCE:https://github.com/VinhSonNguyen/AfterEffects-ExtendScript-Extensions/blob/master/colorConversion.jsx //将十六进制字符串转换为 AE的 0-1 十进制格式 function hexToAEColor(hexString){ var bigInt = parseInt(hexString.replace("#",""), 16); var r = (bigInt >> 16) & 255; var g = (bigInt >> 8) & 255; var b = bigInt & 255; return [r/255,g/255,b/255]; } //把AE颜色转为hex字符串 function aeColorToHex(aeColor){ var r = aeColor[0] * 255; var g = aeColor[1] * 255; var b = aeColor[2] * 255; function componentToHex(c) { var hex = c.toString(16); return hex.length == 1 ? "0" + hex : hex; } return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); } //将AE颜色数组转换为普通的RGB数组 function aeColorToRGB(aeColorArray){ var r = aeColorArray[0]; var g = aeColorArray[1]; var b = aeColorArray[2]; return [r*255,g*255,b*255]; } //将AE颜色数组转换为普通的RGB数组` // Converts RGB array to AE color format. Returns array in AE color format function rgbToAEColor(rgbArray){ var r = rgbArray[0]; var g = rgbArray[1]; var b = rgbArray[2]; return [r/255,g/255,b/255]; } // End rgbToAEColor() function // RGB转HSL function rgbToHSL(rgbArray){ var r = rgbArray[0] / 255; var g = rgbArray[1] / 255; var b = rgbArray[2] / 255; var max = Math.max(r, g, b), min = Math.min(r, g, b); var h, s, l = (max + min) / 2; if(max == min){ h = s = 0; // achromatic } else { var d = max -…- 0
- 0
- 276
-
【AE脚本】相册样式排列 | 免费
介绍 创建齿轮 来源 https://www.motionboutique.com 用法 选择一些图层。 单击创建。(可选,指定每个图层周围的边框,并决定合成尺寸是否应与拼贴尺寸匹配。)- 0
- 0
- 306
-
【AE脚本】深度遍历文件并删除(用于清理磁盘缓存)
//取得缓存文件夹的位置(使用预设函数) var CacheFilePath = app.preferences.getPrefAsString("Disk Cache Controls", "Folder 7")+"\\Adobe"; //将单斜杠转为双斜杠 var FullCacheFilePath = CacheFilePath.split('\\').join("\\\\"); removeFolder(FullCacheFilePath); function removeFolder(path) { var folder = new Folder(path); var files = folder.getFiles(); for (var i = 0; i < files.length; i++) { var f = files[i]; //如果该数组位置指向的类型是文件就移除 if (f instanceof File) { f.remove(); } //如果该数组位置指向的类型是文件夹就进入文件夹判断 else if (f instanceof Folder) { removeFolder(f.fullName, true); } } } //感谢熊喵、萝莉还有无名的帮助,我的代码真的太菜了 //基本靠着大家哄孩子式细微的帮助才写了这么一段- 0
- 0
- 640
-
【AE脚本开发】调用ae自带颜色拾取
Github link=https://github.com/Belonit/AEColorPicker 方法一 外部插件 安装 Windows: 将 AEColorPicker.aex 复制到文件夹 Adobe After Effects 安装目录\Support Files\Plug-ins Mac: 将 AEColorPicker.plugin 复制到文件夹 Applications/Adobe After Effects [version]/Plug-ins 调用 var externalLibrary = new ExternalObject('lib:C:\\AEColorPicker.aex'); var oldColor = 0x20F186; var newColor = externalLibrary.colorPicker(oldColor, dialog_title); if(newColor == -1){ //Returns -1 if user clicked on cancel newColor = oldColor; } 方法二 脚本生成 或者你可以通过一些小技巧使用脚本完成 // https://community.adobe.com/t5/after-effects-discussions/calling-the-after-effects-color-picker-through-script/td-p/11954317 function ColorPicker(startValue) { // find the active comp var crntComp = app.project.activeItem; if (!crntComp || !(crntComp instanceof CompItem)) { alert('Please open a comp first'); return []; } // add a temp null; var newNull = crntComp.layers.addNull(); var newColorControl = newNull('ADBE Effect Parade').addProperty('ADBE Color Control'); var theColorProp = newColorControl('ADBE Color Control-0001'); // set the value given by the function arguments if (startValue && startValue.length == 3) { theColorProp.setValue(startValue); } // prepare to execute var editValueID = 2240; // or app.findMenuCommandId("Edit Value..."); theColorProp.selected = true; app.executeCommand(editValueID); // harvest the result var result = theColorProp.value; // remove the null if (newNull) { newNull.remove(); } return result; } alert(ColorPicker([1, 1, 1]));- 0
- 0
- 530