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