【AE脚本】获取本工程所有效果,并发送到剪切板

代码

/**
 * @description : 获取本工程所有效果,并复制到剪切板
 * @link: https://www.yuelili.com/?p=18805
 */

var previousComps;
var effect_list = [];

function folder_recursive(folderGroup) {
    for (var i = 1; i <= folderGroup.numItems; i++) {
        var items = folderGroup.item(i);
        num += 1;
        // 判断当前属性是否为文件夹,如果是,则继续遍历
        if (items instanceof FolderItem) {
            //对每个文件夹逐个操作 比如判断名称
            folder_recursive(items);
            continue;
        }
        if (items instanceof CompItem) {
            previousComps = [];
            comp_recursive(items);
        }
    }
}

folder_recursive(app.project.rootFolder);
send_to_clipboard(uniqueArray(effect_list))

function effect_recursive(layer) {
    var eff = layer.property("ADBE Effect Parade");
    for (var i = 1, l = eff.numProperties; i <= l; i++) {
        effect_list.push(eff(i).name); // 对每个效果进行操作
        // effectMissing(eff(i).matchName) // 如果你想的话,这里可以获取缺失效果
    }
}

function send_to_clipboard(info) {
    var cmd, isWindows;

    // 判断是不是字符串
    info = typeof info === "string" ? info : info.toString();
    isWindows = $.os.indexOf("Windows") !== -1;

    //OS的命令
    cmd = 'echo "' + info + '" | pbcopy';
    //windows的cmd命令
    if (isWindows) {
        cmd = 'cmd.exe /c cmd.exe /c "echo ' + info + ' | clip"';
    }

    system.callSystem(cmd);
}

function uniqueArray(arr) {
    return arr.filter(function (item, pos) {
        return arr.indexOf(item) == pos;
    });
}

function comp_recursive(comp) {
    // 循环合成内的图层与子合成
    for (var i = 1; i <= comp.numLayers; i++) {
        var layer = comp.layer(i);
        // 检查图层是否有源 并且类型为合成
        if (layer.source && layer.source instanceof CompItem) {
            // 检查是否遍历过该合成
            check = checkPreviousComps(layer.source.id);
            if (check == null) {
                // 存储原合成id 用于校对
                var sourceID = layer.source.id;

                // 再次遍历
                comp_recursive(layer.source);
                // 存储新合成id 用于校正
                var destID = layer.source.id;
                // 添加校正id到数组
                previousComps[sourceID] = destID;
            } else {
            }
        }
        effect_recursive(layer);
    }
    // 为了递归,返回复制后的合成
    return comp;
}

// 检查以前的复制,确保一个合成不会复制两次
function checkPreviousComps(checkID) {
    if (previousComps[checkID]) {
        return getItemWithID(previousComps[checkID]);
    }
    return null;
}

// 返回具有指定 ID 的项目
function getItemWithID(id) {
    for (x = 1; x <= app.project.numItems; x++) {
        if (app.project.item(x).id == id) {
            return app.project.item(x);
        }
    }
    return null;
}

/**
     * @description:检查效果是否缺失
     * @param {*} eff 效果匹配名
     * @returns 没有就返回true
     */

    function effectMissing(eff) {
        var installedEffects = getInstalledEffects();
        if (is_in_array(installedEffects, eff)) {
            return false;
        } else {
            return true; // Missing
        }
        function getInstalledEffects() {
            var installedEffects = [];
            var EFFECTS = app.effects;
            for (var i = 0, il = EFFECTS.length; i < il; i++) {
                installedEffects.push(EFFECTS[i].matchName);
            }

            return installedEffects;
        }

        function is_in_array(arr, v) {
            for (var i = 0; i < arr.length; i++) {
                if (v === arr[i]) {
                    return true;
                }
            }
            return false;
        }
    }

 

给TA充电
共{{data.count}}人
人已充电
AEAE开发AE插件/脚本脚本开发

【AE脚本】PropDrive 属性效果管理器 | 免费

2021-12-13 0:29:41

AE开发脚本开发

【脚本相关】使用脚本来半自动化保存预设

2021-12-19 22:46:08

2 条回复 A文章作者 M管理员
  1. 新用户

    这篇的颜色咋是这种呢?

个人中心
今日签到
搜索