执笔论坛

 找回密码
 立即注册
搜索
查看: 5|回复: 0

[AE脚本]关键帧批量偏移器 - 同时移动多个属性的关键帧

[复制链接]

72

主题

73

帖子

519

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
519
发表于 昨天 15:46 | 显示全部楼层 |阅读模式
// 关键帧批量偏移器

// 批量移动选中图层的关键帧时间

(function(){
    var win = new Window("dialog", "关键帧偏移");
    win.orientation = "column";
   
    var timeGroup = win.add("group");
    timeGroup.add("statictext", undefined, "偏移秒数:");
    var offsetInput = timeGroup.add("edittext", undefined, "1.0");
    offsetInput.characters = 10;
   
    var directionGroup = win.add("group");
    var forwardBtn = directionGroup.add("button", undefined, "向后偏移");
    var backwardBtn = directionGroup.add("button", undefined, "向前偏移");
   
    function offsetKeyframes(offset) {
        var comp = app.project.activeItem;
        if(!comp || !(comp instanceof CompItem)) {
            alert("请先激活一个合成");
            return;
        }
        
        var selectedLayers = comp.selectedLayers;
        if(selectedLayers.length === 0) {
            alert("请至少选择一个图层");
            return;
        }
        
        app.beginUndoGroup("关键帧偏移");
        
        for(var i=0; i<selectedLayers.length; i++) {
            var layer = selectedLayers[i];
            var properties = layer.selectedProperties;
            
            if(properties.length === 0) {
                // 如果没有选中的属性,则处理该图层所有属性
                properties = [layer.transform.position,
                             layer.transform.scale,
                             layer.transform.rotation,
                             layer.transform.opacity];
            }
            
            for(var j=0; j<properties.length; j++) {
                var prop = properties[j];
                if(prop && prop.numKeys > 0) {
                    for(var k=1; k<=prop.numKeys; k++) {
                        var time = prop.keyTime(k);
                        var value = prop.keyValue(k);
                        prop.setValueAtTime(time + offset, value);
                        prop.removeKey(k);
                    }
                }
            }
        }
        
        app.endUndoGroup();
    }
   
    forwardBtn.onClick = function() {
        var offset = parseFloat(offsetInput.text);
        if(isNaN(offset)) offset = 1.0;
        offsetKeyframes(offset);
        win.close();
    };
   
    backwardBtn.onClick = function() {
        var offset = parseFloat(offsetInput.text);
        if(isNaN(offset)) offset = 1.0;
        offsetKeyframes(-offset);
        win.close();
    };
   
    win.show();
})();
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|执笔论坛

GMT+8, 2026-3-17 06:39 , Processed in 0.144193 second(s), 18 queries .

Powered by 执笔论坛

Copyright © 2022-2026

快速回复 返回顶部 返回列表