AfterEffects: Difference between revisions
MattEstela (talk | contribs) |
MattEstela (talk | contribs) |
||
Line 7: | Line 7: | ||
== Scripting == | == Scripting == | ||
Several tutorial sites mention a scripting interface, but I couldn't find it. Turns out its hidden, this page gave clues to where it is: | <s>Several tutorial sites mention a scripting interface, but I couldn't find it. Turns out its hidden, this page gave clues to where it is: | ||
https://www.codeandmotion.com/blog/after-effects-absolute-beginners | https://www.codeandmotion.com/blog/after-effects-absolute-beginners | ||
Line 15: | Line 15: | ||
That same web page says to set After Effects as the target, this is done from the first dropdown in the top left, where it says 'ExtendScript Toolkit CC', change that to 'Adobe After Effects 2022'. | That same web page says to set After Effects as the target, this is done from the first dropdown in the top left, where it says 'ExtendScript Toolkit CC', change that to 'Adobe After Effects 2022'. | ||
There's also a way to link directly to VSCode, but last time I tried it refused to work. Will try again one day, using this link as a guide: https://medium.com/adobetech/extendscript-debugger-for-visual-studio-code-public-release-a2ff6161fa01 | There's also a way to link directly to VSCode, but last time I tried it refused to work. Will try again one day, using this link as a guide: https://medium.com/adobetech/extendscript-debugger-for-visual-studio-code-public-release-a2ff6161fa01</s> | ||
The older Extendscript editor works, but its, well, old. The newer VSCode stuff is much better. I had trouble getting it going the first time, but watching [https://www.youtube.com/watch?v=DTBtfFiyjNU this video] clarified. Basically, install 2 VSCode extensions: | |||
* '''Extendscript Debugger''' | |||
* '''Adobe Script Runner''' | |||
With those in place, you can create a jsx file, at any time hit F1, find 'Adobe After Effects', the script will be saved and run within AE. | |||
David Torno helpfully shared links to his pretty extensive free training series too, cool stuff: | David Torno helpfully shared links to his pretty extensive free training series too, cool stuff: |
Revision as of 17:25, 18 July 2022
Open multiple After Effects sessions
Hit the windows key and R at the same time, type
afterfx -m
Scripting
Several tutorial sites mention a scripting interface, but I couldn't find it. Turns out its hidden, this page gave clues to where it is:
https://www.codeandmotion.com/blog/after-effects-absolute-beginners
Go to creative cloud, prefs, turn on 'show older apps'. Restart creative cloud, you'll find Extendscript Toolkit CC. Amusingly you can't launch it from the creative cloud launcher, but it should be available from your Windows start menu.
That same web page says to set After Effects as the target, this is done from the first dropdown in the top left, where it says 'ExtendScript Toolkit CC', change that to 'Adobe After Effects 2022'.
There's also a way to link directly to VSCode, but last time I tried it refused to work. Will try again one day, using this link as a guide: https://medium.com/adobetech/extendscript-debugger-for-visual-studio-code-public-release-a2ff6161fa01
The older Extendscript editor works, but its, well, old. The newer VSCode stuff is much better. I had trouble getting it going the first time, but watching this video clarified. Basically, install 2 VSCode extensions:
- Extendscript Debugger
- Adobe Script Runner
With those in place, you can create a jsx file, at any time hit F1, find 'Adobe After Effects', the script will be saved and run within AE.
David Torno helpfully shared links to his pretty extensive free training series too, cool stuff:
- https://fendrafx.com/tutorial/free-function-friday-complete-series/
- https://fendrafx.com/tutorial/after-effects-extendscript-training-complete-series/
Quick things:
- F5 - run the script ( like ctrl-enter in a wrangle)
- ctrl-shift-c - clear the console
- $.writeln('foo'); - print something to the internal console in the extendscript editor
- writeLn('foo'); - print something to the info panel within AE itself (make sure the panel is expanded first)
- alert('foo'); - bring up an alert box
Find comp by name: https://gist.github.com/dokluch/1ca33a65dc67d4a3047f
Good overview of how to get scripting going in 2022, especially with vscode instead of the extendscript editor: https://www.youtube.com/watch?v=DTBtfFiyjNU
Handy guide which is sorta kept more up to date than adobe's internal docs which for some reason are riddled with dead links: https://ae-scripting.docsforadobe.dev/
Shapes
Get vertices from a shape layer path:
var myLayer = myComp.layer("Shape Layer 1");
points = myLayer.property("Contents").property("Path 2").property("ADBE Vector Shape").value.vertices;
Create a new shape, insert it into an existing shape path:
// make a shape
var myShape = new Shape();
myShape.vertices = [[0,0], [0,100], [100,100], [100,0]];
myShape.closed = true;
// find the existing shape in the comp, set the new shape
theshape = myLayer.property("Contents").property("Path 2").property("ADBE Vector Shape");
theshape.setValue(myShape );
Set Text Layers
Less fiddly than shapes. Which is nice. I also included how to get the comp, which is a modified version of a script linked further up, without all that pesky type checking and correct coding. :)
findItemByName=function(_name){
for(var i=1;i<=app.project.numItems;i++)
{
var curItem=app.project.item(i);
if (curItem.name==_name ) return curItem;
}
return null;
}
var myComp = findItemByName ("MAIN_COMP");
myComp.layer("text1").property("Text").property("Source Text").setValue("my amazing new text");
paths on disk
Uses forward slashes, windows drive locations are gitbash style so /c/foo/bar:
var csvFile = File("/d/projects/myproj/data.csv");
includes
Same pathing as above, can set includepath and include:
#includepath "/d/ae/libs/LST"
#include 'LST.js'
toComp and fromComp in scripting
You can't, its an expression thing only, arrgh. Luckily someone has written their own module to do space transformation, LST:
https://github.com/rendertom/LST
Nexrender
Handy command line interface to after effects that can control rendering, ffmpeg output, but most importantly allow for you to control AE, so its easy(ish) to swap layers, text, properties, you name it.
https://github.com/inlife/nexrender
The docs above are pretty good, some extra tips cos I keep losing them in that big list:
- layer searches are wildcarded across all comps by default, so if 'herovideo' is a layer in 6 comps, it will be replaced in all 6.
- external jsx scripts can be called directly as part of the assets block in json:
{
"src": "file:///y:/worktemp/show_it_to_me_update_shapes_v03.jsx",
"type": "script"
}
- text is replaced via a layer and property call, this is also wildcarded across all comps by default:
{
"type": "data",
"layerName": "video_title",
"property": "Source Text",
"value": "this is the new text"
},
Expressions
Annoyingly while it seems its full javascript, its not. It's more like hscript/python expressions in that you can read from anywhere, but ony write to yourself (ie whatever the property/parameter it is that you're writing the expression in).
Debugging is also frustrating, as there's no console. You can print stuff kindasorta by forcing a fake expression with throw, eg
throw myvar;
You'll get an error, when you click in the expression field, the error (ie the thing you want) will be shown in a tooltip. This can't be copypasted though, so if you need to access these values, you need to create a text layer, and have the text expression fetch the thing you want. Frustrating.
Set shape via expression and csv
Similar but different to the jsx version:
let pts = []
data = footage("data.csv")
ptslength = thisComp.layer("data")("Data")("Number of Rows")
for (let i = 0; i < ptslength; i++) {
pts[i] = [data.dataValue([0,i])*200-800,data.dataValue([2,i])*.1-2500];
}
createPath(pts, [], [], false);