Creative Communities of the World Forums

The peer to peer support community for media production professionals.

Activity Forums Adobe After Effects [solved] Script to duplicate a layer and insert it at the time of a keyframe value output

  • [solved] Script to duplicate a layer and insert it at the time of a keyframe value output

    Posted by Dmitry Klingensmith on April 12, 2017 at 4:23 pm

    I have a layer that has a radiowaves effect. I want that layer to do its effect at every point in time of a frequency output from soundkeys. I don’t want to have to duplicate the layer and position it in the timeline manually at every keyframe of the soundkeys output expression value. How can i do this automatically with a script? I created one to show how to do this

    Edit: I started creating the script. So far it just grabs keyframes and finds at what time the ones who’s value is greater than a certain value. Duplicating and setting layers at those time values aren’t finished yet. I had to copy the soundkeys output keyframes to a new layer’s opacity property as i don’t know how to grab the property called “Output 1”.

    Edit2: this is complete and i will be creating a UI for this with minor tweaks.

    ar proj = app.project; // The Application Object is at the top level followed by the Project Object
    var comp = proj.activeItem; // Set the comp variable to the active composition
    var layer = comp.layer(1); // Set the layer variable to the first layer of the composition object
    var Opacity = layer.Opacity; // Set the Opacity variable to the opacity property of the layer object
    var numKeys = Opacity.numKeys; // Get the number of keyframes on the opacity property through the numKeys attribute
    var Keyframe =[], KeyframeTime =[], KeyframeValue=[]; // Set empty variables for later assignment
    var KeyCount = 0; //Count of keyframes over specific value

    var KeyframeMin=[];
    for(i=1; i<=numKeys; i++){ //keyframe index loop for the number of keyframe Keyframe[i] = i; //indexes the number of keyframes //alert ('keyframe ' + Keyframe[i] + ' done'); // Alert debug } if (numKeys > 0) {
    for(i=1; i<=numKeys; i++){ KeyframeTime[i] = Opacity.keyTime(Keyframe[i]).toString(); // Get the keyframe time of Keyframe in seconds KeyframeValue[i] = Opacity.keyValue(i).toString(); // Get the keyframe value of Keyframe //alert('Keyframe of ' +Keyframe[i]+ ' is at time ' +KeyframeTime[i]+ ' and has a value of ' +KeyframeValue[i]); // Alert for debug } alert ('There are ' + numKeys + ' Keyframes'); // Alert for debug } else { alert ('There are no keyframes on this layer.'); // If there aren't any keyframes on the property of the layer then alert the user } var Min=1; //index start for select keframes once compared for(i=1; i<=numKeys; i++){ //loops through number of keyframes var MinkeyValue = 40; // key value to set as minimum if(KeyframeValue[i] > MinkeyValue) { //if the value of the keyframe is less than 15
    KeyframeMin[Min]=KeyframeTime[i]; //set that keyframe time to KeyframeMin array
    KeyCount++; //counter for number of keyframes above minimum value
    // alert('Keyframe ' +Keyframe[i] + ' found with time ' +KeyframeMin[Min]); //alert what keyframe # with it's value greater than 15
    Min++; // increment index so it doesnt overwrite previous index value
    }
    }
    alert('There are ' + KeyCount + ' keyframes greator than ' + MinkeyValue);
    app.beginUndoGroup("Duplicated layers"); // Start of undo for duplication of layers
    for(i=1; i<=KeyCount; i++){ // loops through the amount of keys above the min value var index = (1+i); //index safegaurd to only copy the main layer comp.layer(index).duplicate().startTime = KeyframeMin[i]; //duplicates layer and places it at the value of the array on the timeline } app.endUndoGroup(); // End of undo for duplication of layers

    Dmitry Klingensmith replied 9 years, 3 months ago 1 Member · 0 Replies
  • 0 Replies

Sorry, there were no replies found.

We use anonymous cookies to give you the best experience we can.
Our Privacy policy | GDPR Policy