After Effects

Expressions

Lower thirds "data merge" technique using Google Sheets

  1. Prepare your data (name & titles) in Google Sheets with formulas to convert them into arrays (see example)

  2. Use the arrays from above with the following expressions for the respective text layers in your AE comp. Your comp name should be named "1"

  3. Duplicate the composition, and it should rename itself numerically in ascending order

  4. This will trigger the array to be used in the text layers based on com

// Array setup
var arrayName = [name 1,name 2,name 3]
var arrayTitle = [title 1,title 2,title 3]
// put expression textlayer.sourceText for Names
arrayName[thisComp.name]
// put expression textlayer.sourceText for Title
arrayTitle(thisComp.name)
//Create a null layer at the top named "Start Tiles" with a Slider effect "Columns",
//and one at the bottom named "End Tiles"
// For Position:
var controlLayer = thisComp.layer("Start Tiles");
var numColumns = Math.floor(thisComp.layer("Start Tiles").effect("Columns")("Slider").value); var tileIndex = index - controlLayer.index-1; var columnIndex = tileIndex%numColumns;
var rowIndex = Math.floor(tileIndex/numColumns);
var columnWidth = thisComp.width/numColumns;
var firstTile = thisComp.layer(controlLayer.index+1);
var rowHeight = firstTile.height/firstTile.width*columnWidth;
var xPos = columnWidth*(columnIndex+.5);
var yPos = rowHeight*(rowIndex+.5); [xPos, yPos];
// For Scale:
var controlLayer = thisComp.layer("Start Tiles");
var numColumns = Math.floor(thisComp.layer("Start Tiles").effect("Columns")("Slider").value);
var columnWidth = thisComp.width/numColumns;
var firstTile = thisComp.layer(controlLayer.index+1);
var rowHeight = firstTile.width/firstTile.height*columnWidth;
var xyScale = columnWidth/width*100; [xyScale, xyScale]

Five Expression that will change your life — Beaver

Source: http://mograph.net/board/index.php?/topic/13954-5-expressions-that-will-change-your-life/

  • Jumpy Wiggle 1 makes wiggle skip and hold rather than move fluidly.

  • Jumpy Wiggle 2 is similar to 1, but works at a defined FPS so your "jump" will happen at a regular pace.

  • Inertial Bounce is like making your moves "rubbery." Layers will overextend, then settle into place on position and rotation keyframes.

  • Throw — Sometimes you just want something to move constantly without keyframing it.

  • Same as throw, but for rotation.

// Jumpy Wiggle 1 (moves at a random FPS)
v=wiggle(5,50);
if(v < 50)v=0;
if(v > 50)v=100;
v
// Jumpy Wiggle 2 (moves at a defined FPS)
fps=5; //frequency
amount=50; //amplitude
wiggle(fps,amount,octaves = 1, amp_mult = 0.5,(Math.round(time*fps))/fps);
// Inertial Bounce (moves settle into place after bouncing around a little)
n = 0;
if (numKeys > 0){
n = nearestKey(time).index;
if (key(n).time > time){
n--;
}
}
if (n == 0){
t = 0;
}else{
t = time - key(n).time;
}
if (n > 0){
v = velocityAtTime(key(n).time - thisComp.frameDuration/10);
amp = .05;
freq = 4.0;
decay = 2.0;
value + v*amp*Math.sin(freq*t*2*Math.PI)/Math.exp(decay*t);
}else{
value;
}
// Throw (move at a constant speed without keyframes)
veloc = -10; //horizontal velocity (pixels per second)
x = position[0] + (time - inPoint) *veloc;
y = position[1];
[x,y]
// Spin (rotate at a constant speed without keyframes)
veloc = 360; //rotational velocity (degrees per second)
r = rotation + (time - inPoint) *veloc;
[r]