För att följa med vår senaste handledning om skriptutvecklings arbetsflöde kommer vi att gå över de grundläggande begreppen och goda rutiner som krävs för att börja skriva After Effects-skript. Vi kommer att gå över vanliga effekter efter aktiviteter som: skapa ett projekt, skapa en komposition, skapa ett lager, skapa former, lägga till effekter, ändra värden och uttryck, använda text och teckensnitt, lägga till nyckelbilder, använda funktioner etc.
Om du letar efter en snabb lösning med ett After Effects-skript finns det en bra samling över VideoHive. Eller du kan överväga att ansöka om att skicka in egna skript som författare!
Såsom anges i After Effects Sublime Text-byggpaketinstallationen och användarhandledningen är skript filer som använder Adobe ExtendScript-språket. ExtendScript är en utökad form av JavaScript som används av flera Adobe-applikationer som Photoshop, Illustratör, och InDesign. ExtendScript är ett bra och effektivt sätt att uppnå allt du vill ha i After Effects.
Skript använder Adobe ExtendScript-språket, vilket är en utökad form av JavaScript som används av flera Adobe-applikationer som Photoshop, Illustrator och InDesign
Denna handledning kommer att gå över de grundläggande begreppen och goda rutiner som krävs för att börja skriva After Effects-skript.
Vi börjar med att använda
nytt projekt()
metod för
app
objekt och omsluta det mellan lockiga fästen.
// Skapa projekt app.newProject ();
De
app
objektet är roten till nästan allt som ses på detta schema:
Detta schema finns i Adobe After Effects CS6 Scripting Guide som det mesta av vad jag kommer att förklara i denna handledning.
Vi skapar nu vår komposition genom att använda
app
objektets underobjekt
projekt
som innehåller projektet skapat i första raden och
objekt
delobjekt som ger dig tillgång till de mappar och kompositioner du ser i ditt projektfönster i After Effects.
// Skapa projekt app.newProject (); // Skapa comp app.project.items.addComp ("Demo", 1280, 720, 1, 10, 24);
Att skriva ren och underhållbar kod är verkligen viktigt. Vi skriver inte snabba och smutsiga uttryck längre. Eftersom vi vill att våra skript ska vara lätt skalbara måste vi omfamna Javascript-communityens konventioner.
Så vi ska isolera nyckeldata i variabler och namnge dem i enlighet med deras innehåll. Vi kommer också att ställa villkor om det redan skulle finnas ett projekt eller en komposition i vår After Effects-fil.
// Skapa projekt var currentProject = (app.project)? app.project: app.newProject (); // Skapa comp var compSettings = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Demo"; var currentComp = (currentProject.activeItem)? currentProject.activeItem: currentProject.items.addComp (defaultCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer ();
De
var
nyckelordet indikerar att följande variabel är en ny variabel. Det är därför, på rad 9, använder vi inte
var
sökord längre eftersom vi vill använda
currentComp
s värde (vilket är det komplement vi just har skapat).
Här är linjen för rad, vad vi gjorde på vanlig engelska:
Rad 3: Skapa ny variabel
nuvarande projekt
vilket kommer att vara lika med
app.project
om
app.project
är inte odefinierad och kommer annars att motsvara
app.newProject ()
.
Rad 6: Skapa nya variabler
compSettings
och
cs
som båda motsvarar en ny uppsättning värden.
Linje 7: Skapa ny variabel
defaultCompName
som innehåller namnet vi kommer att ge till vår komp.
currentComp
vilket kommer att vara lika med
activeItem
egendom av vår
nuvarande projekt
objekt. Om det inte är odefinierat och annars kommer det att motsvara resultatet av
addComp
metod för
objekt
delobjekt av
nuvarande projekt
till vem vi ska skicka en rad argument som innehåller:
Rad 9: Använd
currentComp
metod
openInViewer
som öppnar tidslinjen för denna komposition.
Ja, det är många metoder och egenskaper. Återigen måste du titta en gång till Adobe After Effects CS6 Scripting Guide för att lära dig mer om objekten och deras tillgängliga metoder och egenskaper. Guiden är verkligen välskriven och en snabb sökning efter Projektobjekt kommer omedelbart ta dig till rätt information.
var myVar = "Strängvärde";
var myVar = 2;
var myVar = array ("value1", "value2", 3);
var myVar = ["värde1", "värde2", 3];
funktion myFunction (argument) // Gör något
myObject.myProperty = "Value"
myObject.myMethod (argument)
Eftersom många operationer kommer att hända under ditt exekvering av manus, vill du bestämma vad som händer när du slår
en???? + Z
/
CTRL + Z
Om vi gör det ganska lätt, har vi bara paketerat vår kod mellan
beginUndoGroup ()
och
endUndoGroup ()
metoder för
app
objekt. Denna metod tar ett argument som är namnet som kommer att visas i After Effects
Redigera> Historia
meny.
app.beginUndoGroup ("Demo Script"); // Skapa projekt var currentProject = (app.project)? app.project: app.newProject (); // Skapa comp var compSettings = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Demo" var currentComp = (currentProject.activeItem)? currentProject.activeItem: currentProject.items.addComp (defaultCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); app.endUndoGroup ();
För att skapa vårt bakgrundslag använder vi
skikten
delobjekt av vår
currentComp
. Ring
addSolid ()
metod och skicka det till dessa argument:
app.beginUndoGroup ("Demo Script"); // Skapa projekt var currentProject = (app.project)? app.project: app.newProject (); // Skapa comp var compSettings = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Demo" var currentComp = (currentProject.activeItem)? currentProject.activeItem: currentProject.items.addComp (defaultCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); // Skapa bakgrundsskikt var backgroundLayer = currentComp.layers.addSolid ([93, 5, 2], "Bakgrund", cs [0], cs [1], cs [2]); app.endUndoGroup ();
Det bästa sättet att skapa vårt centrerade kors är att använda Grid-effekten på vårt bakgrundsskikt. För att göra så använder vi vår
backgroundLayer
variabel som refererar till
currentComp.layers.byName ( "backgroundLayer")
och vi kommer att använda dess
effekter
fast egendom.
// Lägga till nätverkseffekten bakgrundslayer.Effects.addProperty ("Grid"); backgroundLayer.property ( "effekter") egendom ( "Grid") egendom ( "Anchor") setValue ([0,0])...; backgroundLayer.property ("Effects"). egendom ("Grid"). egendom ("Corner"). expression = "[bredd / 2, höjd / 2]"; backgroundLayer.property ( "effekter") egendom ( "Grid") egendom ( "färg") setValue ([0,0,0])...; backgroundLayer.property ("Effects"). Egenskap ("Grid"). Egenskap ("Blandningsläge"). setValue (2);
Det finns några saker du bör märka här. Först, det
fast egendom()
Metoden är kedjbar vilket innebär att du kan ringa det flera gånger för att nå den delfastighet du vill få.
backgroundLayer.property ( "Opacitet")
: Skiktets opacitet.
backgroundLayer.property ( "Effekter"). egendom ( "Grid"). egendom ( "opacitet")
: Grid-effektens opacitet.
För det andra använder vi metoden
satt värde()
när vi vill ange ett värde men inte när vi vill uttrycka ett uttryck.
För att lägga till torkningseffekten skapar vi ett nytt lager och använder Radial Wipe-effekten.
// Skapa torkningsskiktet var wipeLayer = currentComp.layers.addSolid ([0,1, 0,1, 0,1], "Torka", cs [0], cs [1], cs [2]); wipeLayer.Effects.addProperty ("Radial Wipe"); wipeLayer.property ("Effects"). Egenskap ("Radial Wipe"). Egenskap ("Torka"). setValue (2); // WiperLayer.property ("Opacity"). SetValue (50); // Inställning av WipeLayer.property ("Effects"). Egenskap ("Radial Wipe"). Egenskap ("Övergångsavslutning"). SetValueAtTime (0, 100); wipeLayer.property ("Effects"). egendom ("Radial Wipe"). Egenskap ("Övergångsförlängning"). setValueAtTime (1, 0); wipeLayer.property ("Effects"). egendom ("Radial Wipe"). egendom ("Övergångsförlängning"). expression = "loopOut ('Cycle')";
Vi använde metoden
setValueAtTime ()
att ställa in nyckelbilder och a
Loopout ( "Cycle")
för att göra animationsslingan (meningsfullt rätt?).
Att spela med text är lite annorlunda eftersom du måste ändra egenskaperna för källtextvärdet direkt.
// Lägga till textlag var textLayer = currentComp.layers.addText ("Countdown"); var textProperty = textLayer.property ("Source Text"); var textPropertyValue = textProperty.value; // Ändra källtextinställningar textPropertyValue.resetCharStyle (); textPropertyValue.fontSize = 200; textPropertyValue.fillColor = [0, 0, 0]; textPropertyValue.justification = ParagraphJustification.CENTER_JUSTIFY; textProperty.setValue (textPropertyValue); // Lägger till uttryck för källtext textProperty.expression = "Math.floor (10-tiden)"; // Justering av textlagrets ankarpunkt var textLayerHeight = textLayer.sourceRectAtTime (0, false); textLayer.property ("Anchor Point"). setValue ([0, textLayerHeight.height / 2 * -1]);
Vi har ändrat våra textvärdesegenskaper och används
satt värde()
att skicka det till vårt textlag. Vi använde också ett enkelt uttryck för att göra nedräkningen.
Math.floor ()
är en Javascript-funktion som tar bort decimaldelen av ett nummer. Därefter centrerar vi ankarpunkten med hjälp av
sourceRectAtTime ()
metod.
För att lägga till ellipserna använder vi
addShape ()
metod och ge den en vektorgrupp och en vektorform. Vi gör också en liten funktion för att undvika kodrepetition.
// Lägga till formlag för cirklarna var shapeLayer = currentComp.layers.addShape (); // Lägga till cirkelformer grupp var shapeGroup = shapeLayer.property ("Innehåll"). AddProperty ("ADBE Vector Group"); // Lägga till cirkelformer skapaEllipse (shapeGroup, 200); createEllipse (shapeGroup, 400); // Lägga till svart slag till formerna var stroke = shapeGroup.property ("Innehåll") .addProperty ("ADBE Vector Graphic - Stroke") .property ("Color"). SetValue ([0, 0, 0]); funktion createEllipse (shapeGroup, storlek) var ellipse = shapeGroup.property ("Innehåll"). addProperty ("ADBE Vector Shape - Ellipse"); var ellipseSize = ellipse.property ("Size"). setValue ([storlek, storlek]);
Linje 5 är verkligen viktigt eftersom du inte kommer att kunna hitta
Innehåll
egendom i varken dokumentationen eller i ditt After Effects-gränssnitt för tillfället, tack vare Dan Ebbert för hans hjälp (http://forums.creativecow.net/thread/227/22280).
Vi använde en anpassad liten funktion istället för att duplicera ellipse skapelsen. Du kan använda funktioner som du önskar.
Grundregeln: Om du kodar kodpapper, överväg att använda en funktion.
För resten har vi just ändrat formens egenskaper. Du kanske vill referera till Adobe After Effects CS6 Scripting Guide för att se dem listade.
Du kanske har märkt det
var stroke
Linjen ser lite annorlunda ut än vad vi har skrivit än. Javascript stöder kedja över flera rader. Resultatet kommer att vara detsamma och det finns inte ett bra eller dåligt sätt, det är ett personligt kodande stilval som du kanske eller kanske inte vill anta.
Skriftens möjligheter är oändliga och kan göra ett riktigt kraftfullt verktyg som en gång mästar. Här är lite mer dokumentation om scripting och Javascript: