Skip navigation
AllysonSouza
Currently Being Moderated

How can I access the layer keyframes?

Aug 1, 2012 9:54 AM

Tags: #layer #keyframes

I'm beginning in After Effects Scripting, and I want to know how to have access to layer properties keyframes. I want to make a script that modifies the position of selected keyframes.

 
Replies
  • Currently Being Moderated
    Calculating status...
    Aug 8, 2012 9:50 PM   in reply to AllysonSouza

    One of these two free scripts might do what you want:

     

    http://www.redefinery.com/ae/view.php?item=rd_Scooter

    http://www.redefinery.com/ae/view.php?item=rd_Shifter

     

    If they don't work out for you, you can always look at their source code and possibly tweak it to do what you want it to.

     

    These scripts also deal with looping through keyframes to accomplish certain tasks:

     

    http://www.redefinery.com/ae/view.php?item=rd_RemoveKeys

    http://www.redefinery.com/ae/view.php?item=rd_KeyMarkers

     

    Studying other quality scripts is one of the best ways to learn scripting.

     

    For a quick example on how to access the time and value of a single keyframe, create a comp, add a solid, set one keyframe on the position property and then run this script:

    {
        var 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 position = layer.position; // Set the position variable to the position property of the layer object
        var numKeys = position.numKeys; // Get the number of keyframes on the position property through the numKeys attribute
        var myKeyframe, myKeyframeTime, myKeyframeValue; // Set empty variables for later assignment
        
        if (numKeys > 0) {
            myKeyframe = 1; // Set the variable to the number one to represent the first keyframe on the property
            myKeyframeTime = position.keyTime(myKeyframe).toString(); // Get the keyframe time of myKeyframe in seconds
            myKeyframeValue = position.keyValue(1).toString(); // Get the keyframe value of myKeyframe represented as an array [x,y,z]
            alert ('The first keyframe on layer 1 is at ' + myKeyframeTime + ' seconds and the value is [' + myKeyframeValue + ']'); // Send an alert to AE with the information
        } else {
            alert ('There are no keyframes on layer 1.'); // If there aren't any keyframes on the position property of the first layer then alert the user
        }
    }
    

     

    Beyond that it gets complicated by looping through keyframes backwards, collecting values, times, keyInInterpolationTypes, keyOutInterpolationTypes, keyInSpatialTangents, keyOutSpatialTangents, etc. then removing them only to create new keyframes with the same information at offset times or values.  It's important to keep in mind that scripting cannot get or set values for Custom Value keyframes (such as curves and levels).  Unfortunately, there are limitations to scripting.

     
    |
    Mark as:

More Like This

  • Retrieving data ...

Bookmarked By (0)

Answers + Points = Status

  • 10 points awarded for Correct Answers
  • 5 points awarded for Helpful Answers
  • 10,000+ points
  • 1,001-10,000 points
  • 501-1,000 points
  • 5-500 points