Copy link to clipboard
Copied
I want to extract frame count using JSX script?
I have used following code. But it seems not sharp as expected (In case of decimal point of seconds it seems not good)
function getTimelineLength() {
var ref = new ActionReference();
ref.putProperty(charIDToTypeID('Prpr'), stringIDToTypeID('duration'));
ref.putClass(stringIDToTypeID('timeline'));
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID('null'), ref);
var TC = executeAction(charIDToTypeID('getd'), desc, DialogModes.NO);
TC = TC.getObjectValue(stringIDToTypeID('duration'));
var M = 0;
try { M = TC.getInteger(stringIDToTypeID('minutes')); } catch (e) { }
var S = 0;
try { S = TC.getInteger(stringIDToTypeID('seconds')); } catch (e) { }
var F = TC.getInteger(stringIDToTypeID('frame'));
var FR = TC.getInteger(stringIDToTypeID('frameRate'));
var A = new Array();
A.push([[M], [S], [F], [FR]]);
return A;
}
//option 1
var frameCount = timeLineInfo[0][2] ( But this returns "0" value with newly opened document)
//option 2
var timeLineInfo = getTimelineLength()
var frameCount = timeLineInfo[0][1] * timeLineInfo[0][3] ( This is not returns correct value with decimal value of seconds )
Anyone have a better solution?
var r = new ActionReference();
r.putProperty(charIDToTypeID('Prpr'), stringIDToTypeID('frameCount'));
r.putClass(stringIDToTypeID('timeline'));
var ret = executeActionGet(r);
alert( ret.getInteger(stringIDToTypeID('frameCount')) );
//
Copy link to clipboard
Copied
// determine durations in a frame animation;
// 2024, use it at your own risk;
if (app.documents.length > 0) {
var myDocument = app.activeDocument;
var theNumbers = new Array;
var theCounter = 1;
var theCheck = selectFrame (theCounter);
//var theFrameCount = GetFrameCount();
while (theCheck != false) {
var theDur = getFrameDelay(theCounter);
theCounter++;
theNumbers.push(theDur);
var theCheck = selectFrame (theCounter);
};
alert ("durations\n"+theNumbers.join("\n"))
};
////////////////////////////////////
////// get frame delay //////
function getFrameDelay (theIndex) {
try {
var ref = new ActionReference();
ref.putProperty(charIDToTypeID('Prpr'), stringIDToTypeID('animationFrameDelay'));
ref.putIndex(stringIDToTypeID('animationFrameClass'), theIndex);
var desc = new ActionDescriptor();
desc.putReference(charIDToTypeID('null'), ref);
var aaa = executeAction(charIDToTypeID('getd'), desc, DialogModes.NO);
return aaa.getDouble(stringIDToTypeID('animationFrameDelay'))
} catch (e) {return false}
};
////// select frame //////
function selectFrame (theIndex) {
try {
var desc18 = new ActionDescriptor();
var ref10 = new ActionReference();
ref10.putIndex( stringIDToTypeID( "animationFrameClass" ), theIndex );
desc18.putReference( charIDToTypeID( "null" ), ref10 );
executeAction( charIDToTypeID( "slct" ), desc18, DialogModes.NO );
return true
} catch (e) {return false}
};
Copy link to clipboard
Copied
This panel works for frame animation, not the video style method. As @c.pfaffenbichler states, an simple example file would help pinpoint possible issue