0
Issue with Collecting Keyframe Text in After Effects Script
New Here
,
/t5/after-effects-discussions/issue-with-collecting-keyframe-text-in-after-effects-script/td-p/14707600
Jun 28, 2024
Jun 28, 2024
Copy link to clipboard
Copied
Hello Everyone,
I'm new to After Effects scripting with JavaScript.
I've written a script to collect text layer properties (inTime, outTime, fontName, fontSize). Additionally, if the layer has keyframes, I need to gather the keyTime and text from those keyframes. While the script correctly collects the text properties, it doesn't accurately retrieve the text for each keyframe, instead, it returns the same text (from the first keyframe) for all keyframes.
Could anyone help me resolve this issue? Below is the script I've written.
Thank you!
getTextLayerInfo();
function getTextLayerInfo() {
var myTxtInfo_Ary = [];
var myProj = app.project;
var myComp = myProj.activeItem;
var myLayers = myComp.layers;
for (var i = 1; i <= myLayers.length; i++) {
var myLayer = myLayers[i];
if (myLayer instanceof TextLayer && myLayer.enabled) {
var myTxtProps = myLayer.property("Text");
for (var j = 1; j <= myTxtProps.numProperties; j++) {
var myTxtProp = myTxtProps.property(j);
if (myTxtProp.matchName === "ADBE Text Document") {
var myTxtDoc = myTxtProp.value;
var myCopy = myTxtDoc.text.replace("\r", " ", "gi");
var myStrtTme = timeToCurrentFormat(myLayer.inPoint, myComp.frameRate);
var myEndTme = timeToCurrentFormat(myLayer.outPoint, myComp.frameRate);
var myFntNm = myTxtDoc.fontFamily;
var myFntSz = myTxtDoc.fontSize;
var textInfo = {
text: myCopy,
inTime: myStrtTme,
outTime: myEndTme,
fontName: myFntNm,
fontSize: myFntSz,
keyframes: []
};
// Check for keyframes on the "Source Text" property
var sourceTextProp = myLayer.property("Source Text");
if (sourceTextProp.numKeys > 0) {
for (var k = 1; k <= sourceTextProp.numKeys; k++) {
var keyTime = timeToCurrentFormat(sourceTextProp.keyTime(k), myComp.frameRate);
var keyValue = sourceTextProp.keyValue(k).text.replace("\r", " ", "gi");
textInfo.keyframes.push({ time: keyTime, text: keyValue });
}
}
myTxtInfo_Ary.push(textInfo);
}
}
}
}
for (var i = 0; i < myTxtInfo_Ary.length; i++) {
$.writeln("Text: " + myTxtInfo_Ary[i].text);
$.writeln("In Time: " + myTxtInfo_Ary[i].inTime);
$.writeln("Out Time: " + myTxtInfo_Ary[i].outTime);
$.writeln("Font Name: " + myTxtInfo_Ary[i].fontName);
$.writeln("Font Size: " + myTxtInfo_Ary[i].fontSize);
if (myTxtInfo_Ary[i].keyframes.length > 0) {
$.writeln("Keyframes:");
for (var j = 0; j < myTxtInfo_Ary[i].keyframes.length; j++) {
$.writeln("- Time: " + myTxtInfo_Ary[i].keyframes[j].time + ", Text: " + myTxtInfo_Ary[i].keyframes[j].text);
}
}
$.writeln("------");
}
}
TOPICS
Scripting
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting.
Learn more
Have something to add?
Join the conversation

