Page 1 of 1

function time reverse keyframes

Posted: November 19th, 2013, 3:11 am
by bkan
Hello,
I would want to make a function which reverse the keyframes of the selected properties, but I don't know how to call this "reverseKeyframes" : I don't even know if it exists!
Any idea?

Re: function time reverse keyframes

Posted: November 19th, 2013, 7:25 am
by beginUndoGroup
Such a built-in function does not exist.
To do this, you need to STORE all key frames along with all of their properties (time, value, interpolation type, keyFrameEase values, etc), delete the keyframes, and "paste",
where "paste" is not simply .paste() (doesnt exist) but the reverse process of storing: .setValueAtTime(newTime, value) for all keys, and rewrite interpolations, replacing inInterpolation by outInterpolations and vice-versa.
Since they is no Key object in the AE Object Model, you must make your own... long but once you have done you find it.. very instructive;)

If you know that all the keyframes are linear, you don't need to copy every single property though, time and value is enough.
On the other hand if you want to reverse a subset of a set of roving keys it can be a little bit cumbersome ;)

Re: function time reverse keyframes

Posted: November 19th, 2013, 8:27 am
by bkan
Ok, thank you! I success to do that, because my script need only work with 2 keyframes :

app.beginUndoGroup("Inversion script");
//ajoute un parametre case lorsqu'on coche l'échelle devient moins en X
var inversion = app.project.activeItem.selectedLayers[0].Effects.addProperty("ADBE Checkbox Control");
inversion.name = "Inversion";
inversion(1).setValue(1);
app.project.activeItem.selectedLayers[0].scale.expression = "inversion = effect(\"" + inversion.name+ "\")(1);\n" +
"if(inversion==1){[-value[0],value[1]];}else{[value[0],value[1]];}";
//alert(app.project.activeItem.selectedLayers[0].scale.name);

//inverse les 2 keyframes de position
var raccourci = app.project.activeItem.selectedLayers[0].position;
var keyValueOne = new Array();
var keyValueTwo = new Array();
var keyTimeOne;
var keyTimeTwo;

keyValueOne = raccourci.keyValue(1);
keyValueTwo = raccourci.keyValue(2);
keyTimeOne = raccourci.keyTime(1);
keyTimeTwo = raccourci.keyTime(2);

app.project.activeItem.selectedLayers[0].property("Position").setValueAtTime(keyTimeOne,[keyValueTwo[0],keyValueTwo[1]]);
app.project.activeItem.selectedLayers[0].property("Position").setValueAtTime(keyTimeTwo,[keyValueOne[0],keyValueOne[1]]);

app.endUndoGroup();

Re: function time reverse keyframes

Posted: November 19th, 2013, 8:28 am
by bkan
But I would just want to know if it's possible to highlight and select the position property in after effects when the script finish?

Re: function time reverse keyframes

Posted: November 19th, 2013, 12:12 pm
by beginUndoGroup
off topic: Why not give a variable name to the layer instead of app.project.activeItem.selectedLayers[0] on every single line ??

For your question: layer.property("Position").selected = true;
Can't remember if it selects all keys along. If not: for (k=1; k<=prop.numKeys; k++) prop.setSelectedAtKey(k, true);
selects all the keys of 'prop' (any keyframable property);

All this is in the scripting guide...

Xavier.

Re: function time reverse keyframes

Posted: November 20th, 2013, 7:12 am
by bkan
beginUndoGroup wrote:off topic: Why not give a variable name to the layer instead of app.project.activeItem.selectedLayers[0] on every single line ??

For your question: layer.property("Position").selected = true;
Can't remember if it selects all keys along. If not: for (k=1; k<=prop.numKeys; k++) prop.setSelectedAtKey(k, true);
selects all the keys of 'prop' (any keyframable property);

All this is in the scripting guide...

Xavier.
OK, thank you very much! And yes, I created a variable, it was my old script I wrote here!
For the layer.property("Position").selected = true; => That was not what I wanted to do (but I don't know if it's possible?) : I wanted that the position property was selected AND that it's highlighted in after effects (like when you press "P" to make the property visible). ANy idea?

Re: function time reverse keyframes

Posted: November 21st, 2013, 1:53 am
by beginUndoGroup
prop.selected = true; does highlight the property and all of its keyframes.

Now if you want to isolate that property, as when you press M, MM, P, etc... : not possible.