Hi
Anyone have an idea for how to make script that at a random time interval will do fixed animation to selected layer(s)?
Something like this:
random_min_time: 5 sec
random_max_time: 10 sec
// there will be between 5 to 10 sec. between the fixed animations first key frames.
fixed animation:
time(T):opacity=0
time(T+2frames):opacity=100
time(T+5frames):opacity=100
time(T+20frames):opacity=0
Script generated key frames will be added to/mixed with existing key frames on the timeline if any are present.
Any help appreciated
>kenneth
Fixed animation at random time
Moderator: Paul Tuersley
This is sort of an old post by now, but I went ahead and wrote a script that does what you're looking for. If you've already solved this, then at the very least I was able to get some good practice out of it. 

Code: Select all
/*
Opacity_Animator.jsx
Performs a pre-determined opacity animation on selected layers in the comp at random intervals between 5 and 10 seconds apart.
Per request from AEnhancers user kennethbonde: http://aenhancers.com/viewtopic.php?f=11&t=2195
Script written by Robert Headrick (robertheadrick.com), August 1, 2013.
*/
app.beginUndoGroup("Opacity Animator");
//initialize variables
var selectedLayers = app.project.activeItem.selectedLayers;
var fps = app.project.activeItem.frameDuration;
var minTime = 5 //measured in seconds
var maxTime = 10 //measured in seconds
//create functions
function placeAnimation (layerIndex,keyTime) {
var layerOpacity = selectedLayers[layerIndex].property("Opacity");
layerOpacity.setValueAtTime(keyTime,0);
layerOpacity.setValueAtTime(keyTime + (fps*2),100);
layerOpacity.setValueAtTime(keyTime + (fps*5),100);
layerOpacity.setValueAtTime(keyTime + (fps*20),0);
}
function randomFromInterval(from,to) {
return Math.floor(Math.random()*(to-from+1)+from);
}
function incrementByRandom(incrementer) {
var incrementValue = randomFromInterval(minTime/fps,maxTime/fps); //dividing by fps returns value in frames
var returnValue = incrementer + (incrementValue*fps); //multiplying by fps returns value in time units
return returnValue;
}
//perform actions for each selected layer
if (selectedLayers.length > 0) {
for (var i = 0; i < selectedLayers.length; i++) {
var layerInPoint = selectedLayers[i].inPoint;
var layerOutPoint = selectedLayers[i].outPoint;
var currentLayerIndex = i;
//create keyframes at intervals until end of layer is reached
for (var j = incrementByRandom(layerInPoint); j <= layerOutPoint; j = incrementByRandom(j)) {
placeAnimation(currentLayerIndex,j);
}
}
} else {
alert("You have no layers selected!");
}
app.endUndoGroup();