Skip to main content
Inspiring
July 29, 2022
Answered

A script to link a value on one layer to different ranges of frames from multiple layers?

  • July 29, 2022
  • 1 reply
  • 1734 views

Greetings,

 

Could anyone provide a script to link a value like Scale on Layer3 to the Scale values of Layer1 for frames 1 to 48 and then link the Layer3 Scale values to frames 49 to 96 of Layer2?

 

Thanks for any help on this 🙂

This topic has been closed for replies.
Correct answer Dan Ebberts

Nothing jumps out at me, but I think I'd probably set it up more like this (I haven't tested this at all, so it's probably not exactly right):

frames = [102770,102796,102865,102968,103018,103188,103208,103318,103411,103457,103486,103572,103608,103666,103751,103780,103809,103846,104039];
tracks  = ["01",    "01b",   "02",     "03",    "04",     "05",    "06",     "07",    "08",    "09",     "10",    "11",     "12",    "13",    "14",     "15",    "16",    "17",     "18"];
val = value;
f = timeToFrames(time);
for (i = 0; i < frames.length; i++){
  if (f < frames[i]){
    val = thisComp.layer("track" + tracks[i]).effect("Mocha Pro")("Center");
    break;
  }
}
val

1 reply

Dan Ebberts
Community Expert
July 29, 2022

It will probably be something like this, depending on what you want to happen after frame 96:

if (time < framesToTime(48)){
  thisComp.layer("Layer1").scale;
}else if (time < framesToTime(96)){
  thisComp.layer("Layer2").scale;
}else{
  value;
}
persystAuthor
Inspiring
July 30, 2022

Hi Dan this is the script I wrote based on what you showed, but it seems to not be working past the track01 values. AE didn't return any errors, it just doesnt' change the value of "Center" beyond frame 102770. Any more help on this will be much appreciated, thanks again.

 

var b=102770 
var c=102796 
var d=102865
var e=102968
var f=103018
var g=103188
var h=103208
var k=103318
var m=103411
var n=103457
var p=103486
var q=103572
var r=103608
var s=103666
var t=103751
var u=103780
var v=103809
var w=103846
var x=104039

if (time < framesToTime(b)){
  thisComp.layer("track01").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(b) && time < framesToTime(c)){
  thisComp.layer("track01b").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(c) && time < framesToTime(d)){
  thisComp.layer("track02").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(d) && time < framesToTime(e)){
  thisComp.layer("track03").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(e) && time < framesToTime(f)){
  thisComp.layer("track04").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(f) && time < framesToTime(g)){
  thisComp.layer("track05").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(g) && time < framesToTime(h)){
  thisComp.layer("track06").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(h) && time < framesToTime(k)){
  thisComp.layer("track07").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(k) && time < framesToTime(m)){
  thisComp.layer("track08").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(m) && time < framesToTime(n)){
  thisComp.layer("track09").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(n) && time < framesToTime(p)){
  thisComp.layer("track10").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(p) && time < framesToTime(q)){
  thisComp.layer("track11").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(q) && time < framesToTime(r)){
  thisComp.layer("track12").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(r) && time < framesToTime(s)){
  thisComp.layer("track13").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(s) && time < framesToTime(t)){
  thisComp.layer("track14").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(t) && time < framesToTime(u)){
  thisComp.layer("track15").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(u) && time < framesToTime(v)){
  thisComp.layer("track16").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(v) && time < framesToTime(w)){
  thisComp.layer("track17").effect("Mocha Pro")("Center");
}else if (time >=framesToTime(w) && time < framesToTime(x)){
  thisComp.layer("track18").effect("Mocha Pro")("Center");
}else{
  value;
}

 

ShiveringCactus
Community Expert
August 1, 2022

Thanks for the info Dan. I'll give this version a try and follow up with the results. Could you please let me know what these do or mean?

i =0

i++
track[i]

 

Thanks again!

 


i is an integer.  The line:

for (i = 0; i < frames.length; i++){

is telling After Effects that starting at 0 (i=0), while i is less then the number of items in "frame" (frames.length)  run through everything in the braces ( { )  for i being 0, 1, 2, 3 etc... (that what the i++ means - add 1 to i).

 

With track[i] inside the braces, that means that AE will use the number i to pick the item in the track array:L

 

  • When i = 0, track[i] = "01"
  • i = 1, track[i] = "01b"
  • etc...