AfterEffect插件--常规功能开发--扭曲效果--js脚本开发--AE插件

1.扭曲算法

  AfterEffect(AE)插件是Adobe公司开发的特效制作软件,稳定快速的功能和特效,在视频制作领域使用非常广泛,本文向大家介绍如何在项目里进行扭曲效果功能。效果如下图所示:

在这里插入图片描述

  源代码如下所示:

function mAsO(cmd) {
    if (cmd == undefined) {
        cmd = "l"
    }
    var strScriptName = "扭曲效果";
    var strScriptVersion = "2.0";
    var strTrialUrl = "";
    var privateNum = 209010;
    var supportEmail = "";
    var trialLengthDays = 7;
    var trialLengthLaunches = 7;
    var offerUpgrade = false;
    var paidUpgrade = false;
    var retrieveUrl = "";
    var exchangeUrl = "";
    var betaMode = false;
    var betaExpiration = new Date(2013, 3, 1);
    if ($.os.indexOf("Mac") != -1) {
        var macBase64KeyStr = "";
}

function markBtn_OnClick() {
    app.beginUndoGroup("Mark / Unmark FX");
    myComp = app.project.activeItem;
    myLayer = myComp.selectedLayers[0];
    FX = new Array();
    for (var b = 1; b <= myLayer.Effects.numProperties; b += 1) {
        if (myLayer.Effects.property(b).selected == true) {
            FX.push(b);
        }
    }
    if (FX.length != 0) {
        for (var a = 0; a <= FX.length - 1; a += 1) {
            n = myLayer.Effects.property(FX[a]).name;
            if (n.substring(0, 1) == "(" && n.substring(n.length - 1, n.length) == ")") {
                myLayer.Effects.property(FX[a]).name = n.substring(1, n.length - 1);
            } else {
                myLayer.Effects.property(FX[a]).name = "(" + n + ")";
            }
        }
    } else {
        alert("Please select an Effect");
    }
    app.endUndoGroup();
}

function restoreBtn_OnClick() {
    app.beginUndoGroup("Restore FX");
    myComp = app.project.activeItem;
    myLayer = myComp.selectedLayers[0];
    myFX = myComp.selectedProperties[0];
    if (myFX == undefined || myFX.isEffect == false || myFX.name.substring(0, 12) != "Distortion f") {
        alert("Please select a \"Distortion from mapp\" effect");
    } else {
        num = myFX.name.substring(21, myFX.name.length);
        for (var a = 1; a <= app.project.numItems; a += 1) {
            if (app.project.item(a).name == ("BAO_mapp_" + myLayer.name + "_" + num)) {
                app.project.item(a).remove();
            }
        }
        for (m = myLayer.Masks.numProperties; m >= 1; m--) {
            if (myLayer.Masks.property(m).name.indexOf("Mapp " + num) != -1) {
                myLayer.Masks.property(m).remove();
            }
        }
        for (f = myFX.propertyIndex - 1; f >= 1; f--) {
            myLayer.Effects.property(f).enabled = true;
            if (myLayer.Effects.property(f).name.substring(0, 12) == "Distortion f") {
                f = 1;
            }
        }
        myFX.remove();
        for (fx = myLayer.Effects.numProperties; fx > 0; fx--) {
            if (myLayer.Effects.property(fx).name == ("Softness_" + num)) {
                myLayer.Effects.property(fx).remove();
            }
        }
    }
    app.endUndoGroup();
}

function invertBtn_OnClick() {
    app.beginUndoGroup("Invert Mask / Luma");
    myComp = app.project.activeItem;
    myMask = myComp.selectedProperties[0];
    myLayer = myComp.selectedLayers[0];
    if (myMask == undefined) {
        myLum = myComp.layer("Mapp_" + myLayer.name.substring(5, myLayer.name.length)).source.layer(myLayer.name);
        myLum.Effects.addProperty("ADBE Invert");
        if (myLum.Effects.numProperties == 2) {
            myLum.Effects.property(1).remove();
            myLum.Effects.property(1).remove();
        }
    } else {
        map = myMask.name.substring(5, 6);
        mask = myMask.name.substring(12, 13);
        if (myMask.inverted == true) {
            myMask.inverted = false;
        } else {
            myMask.inverted = true;
        }
        myComp.layer("Mapp_" + myLayer.name + "_" + map).source.layer("Mask").Masks.property("Mapp " + map + " Mask " + mask).inverted = myMask.inverted;
    }
    app.endUndoGroup();
}

function matteBtn_OnClick() {
    app.beginUndoGroup("Show / Hide Matte");
    myComp = app.project.activeItem;
    myLayer = myComp.selectedLayers[0];
    if (myLayer.name.substring(0, 5) == "Luma_" || myLayer.name.substring(0, 5) == "Mapp_") {
        num = myLayer.name.substring(myLayer.name.length - 1, myLayer.name.length);
        for (var l = 1; l <= myComp.numLayers; l += 1) {
            myComp.layer(l).selected = false;
            if (myComp.layer(l).name == myLayer.name.substring(5, myLayer.name.length - 2)) {
                myComp.layer(l).selected = true;
                myComp.layer(l).Effects.property("Distortion from mapp " + num).selected = true;
            }
        }
        myLayer = myComp.selectedLayers[0];
    }
    myFX = myComp.selectedProperties[0];
    if (myFX.isMask == true && myFX.name.substring(0, 5) == "Mapp ") {
        myFX = myLayer.Effects.property("Distortion from mapp " + myFX.name.substring(5, 6));
    }
    if (myFX == undefined || myFX.isEffect == false || myFX.name.substring(0, 12) != "Distortion f") {
        alert("Please select a \"Distortion from mapp\" effect");
    } else {
        num = myFX.name.substring(21, myFX.name.length);
        if (myLayer.enabled == true) {
            myLayer.enabled = false;
            myComp.layer("Mapp_" + myLayer.name + "_" + num).enabled = true;
            comp = myComp.layer("Mapp_" + myLayer.name + "_" + num).source;
            comp.layer("Luma_" + myLayer.name + "_" + num).enabled = true;
            comp.layer("Mask").enabled = false;
            comp.layer("Mask").enabled = false;
            comp.layer("Luma_" + myLayer.name + "_" + num).trackMatteType = TrackMatteType.ALPHA_INVERTED;
            black = comp.layers.addSolid([0, 0, 0], "Black", myLayer.width, myLayer.height, comp.pixelAspect, comp.duration);
            black.moveAfter(comp.layer("Luma_" + myLayer.name + "_" + num));
        } else {
            myLayer.enabled = true;
            myComp.layer("Mapp_" + myLayer.name + "_" + num).enabled = false;
            comp = myComp.layer("Mapp_" + myLayer.name + "_" + num).source;
            comp.layer("Luma_" + myLayer.name + "_" + num).enabled = false;
            comp.layer("Mask").enabled = true;
            comp.layer("Mask").enabled = true;
            comp.layer("Luma_" + myLayer.name + "_" + num).trackMatteType = TrackMatteType.NO_TRACK_MATTE;
            black = comp.layer("Black").remove();
        }
    }
    app.endUndoGroup();
}
var userinterface = buildUI(this);
if (userinterface != null && userinterface instanceof Window) {
    userinterface.show()
}
}

2.作者答疑

  代码长度过长,如需全部项目,请留言。


提示: 作者知了-联系方式1
提示: 作者知了-联系方式2

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容