// aux function to find 1st and last key times on a layer
// group: a property group
// keyTimes : [current first key time, current last key time]
function refineKeyTimes(group, keyTimes){
var n, N=group.numProperties, p;
for (n=1; n<=N; n++){
p=group.property(n);
if (p instanceof Property){
if (p.numKeys>0){
keyTimes[0] = Math.min(keyTimes[0], p.keyTime(1));
keyTimes[1] = Math.max(keyTimes[1], p.keyTime(p.numKeys));
};
}
else{
refineKeyTimes(p, keyTimes);
};
};
return;
};
// main function
function f(){
var comp = app.project.activeItem;
if (comp==null || comp.typeName!=="Composition" || comp.selectedLayers.length===0) return; // wrong selection
var sel = comp.selectedLayers;
var n, N=sel.length, layer;
var keyTimes;
for (n=0; n<N; n++){
// start with times that will be overwritten for sure when a key is found
layer = sel;
keyTimes= [+1000000, -1000000];
refineKeyTimes(layer, keyTimes);
// trim if a key was found
if (keyTimes[1]>-1000000){
// found a key
if (keyTimes[1]<layer.outPoint){
// trim
layer.outPoint = keyTimes[1] + comp.frameDuration;
};
};
};
return;
};
f();