【AE脚本】自动全景变焦 PAN & ZOOM | 免费

来源

https://www.motionboutique.com

用法

执行脚本,然后在电脑上选择一个图像文件夹。还是可以研究下源码的

【AE脚本】自动全景变焦 PAN & ZOOM | 免费

源码

// PanZoom.jsx
// Copyright (c) 2011 Motion Boutique

function createPanZoom(comp, layer) {
    var rulesOfThirdsPoints = [[1 / 3, 1 / 3], [2 / 3, 1 / 3], [1 / 3, 2 / 3], [2 / 3, 2 / 3]]; // points of interest in image
    var zoomModes = ["IN", "OUT"];

    var rdIdx = Math.floor(Math.random() * rulesOfThirdsPoints.length);
    var f = rulesOfThirdsPoints[rdIdx];
    var deltaZoomPoint = [f[0] * comp.width, f[1] * comp.height] - [comp.width / 2, comp.height / 2];

    var rdIdx = Math.floor(Math.random() * zoomModes.length);
    var zoomMode = zoomModes[rdIdx];

    var keyTimes = [panZoomStart, panZoomEnd];
    var keyValues;

    switch (zoomMode) {
        case "IN":
            keyValues = [[100, 100], [150, 150]];
            break;
        case "OUT":
            keyValues = [[150, 150], [100, 100]];
            break;
        default:
            break;
    }

    var nullL = comp.layers.addNull();
    layer.scale.expression =
        "sx = 100 * thisComp.width / width; \r" +
        "sy = 100 * thisComp.height / height; \r" +
        "s = Math.max(sx,sy); \r" +
        "[s,s];";

    layer.parent = nullL;

    nullL.anchorPoint.setValue(nullL.anchorPoint.value + deltaZoomPoint);
    nullL.position.setValue(nullL.position.value + deltaZoomPoint);
    nullL.scale.setValuesAtTimes(keyTimes, keyValues);
}

function isInArray(array, element) {
    var found = false;
    for (var i = 0; !found && i < array.length; i++) {
        if (array[i] == element) found = true;
    }
    return found;
}

function isImageFile(fileName) {
    var ext = fileName.split(".").pop().toUpperCase();
    var imageFormats = ["BMP", "CIN", "IIF", "EXR", "GIF", "JPG", "JPEG", "PCX", "PCT", "PNG", "PSD", "PXR", "HDR", "SGI", "TIF", "TGA", "MP4"];
    return isInArray(imageFormats, ext);
}

function run() {
    var imagesFolder = defaultFolder.selectDlg("Select images folder:");
    if (imagesFolder) {
        defaultFolder = imagesFolder;
        app.beginUndoGroup("PanZoom.jsx");

        var assetFolder = app.project.items.addFolder("PanZoom Assets  - " + File.decode(imagesFolder.name));
        var comps = [];
        var files = imagesFolder.getFiles();

        clearOutput();

        for (var i = 0; i < files.length; i++) {
            if (isImageFile(files[i].fsName)) {
                clearOutput();

                var io = new ImportOptions();
                var item;
                try {
                    io.file = files[i];
                    if (io.canImportAs(ImportAsType.FOOTAGE)) {
                        io.importAs = ImportAsType.FOOTAGE;
                    }
                    item = app.project.importFile(io);
                }
                catch (e) {
                    //alert("File cannot be imported: " + files[i].fsName + ". It will replaced with a placeholder.");
                    item = app.project.importPlaceholder(files[i].name, 1920, 1080, 25, 3600);
                }

                if (item) {
                    item.selected = false;

                    var comp = app.project.items.addComp(item.name, item.width, item.height, item.pixelAspect, panZoomEnd - panZoomStart, 25);
                    var layer = comp.layers.add(item);
                    createPanZoom(comp, layer);

                    item.parentFolder = assetFolder;
                    comp.parentFolder = assetFolder;
                    comps.push(comp);
                }

            }
        }

        // create final comp
        if (comps.length > 0) {
            var finalComp = app.project.items.addComp("Final - " + File.decode(imagesFolder.name), 1280, 720, 1, 1000, 25);

            for (var i = 0; i < comps.length; i++) {
                var layer = finalComp.layers.add(comps[i]);
                layer.scale.expression =
                    "sx = 100 * thisComp.width / width; \r" +
                    "sy = 100 * thisComp.height / height; \r" +
                    "s = Math.max(sx,sy); \r" +
                    "[s,s];";

                layer.startTime = i * (panZoomEnd - panZoomStart);

                var keyTimes = [i * (panZoomEnd - panZoomStart), i * (panZoomEnd - panZoomStart) + 0.5,
                (i + 1) * (panZoomEnd - panZoomStart) - 0.5, (i + 1) * (panZoomEnd - panZoomStart)];
                var keyValues = [0, 100, 100, 0];
                layer.opacity.setValuesAtTimes(keyTimes, keyValues);
            }

            finalComp.workAreaDuration = Math.max(finalComp.frameDuration, i * (panZoomEnd - panZoomStart));
        }

        if (assetFolder.numItems < 1)
            assetFolder.remove();

        app.endUndoGroup();

    }
}

var panZoomStart = 0; // in seconds
var panZoomEnd = 3;

var defaultFolder;
if (defaultFolder == null) {
    defaultFolder = Folder.current;
}

run();

 

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

【AE脚本】照片墙 IMAGES WALL | 免费

2021-10-22 13:40:45

AE开发PS/PR/AI脚本脚本开发

【PR脚本】遍历动态图形的属性

2021-10-27 11:55:51

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索