Skip to main content
Participating Frequently
Apr 27, 2020 10:40 PM UTC
Answered

Mogrt getValue returns JSON in Extendscript

Premier Pro V 12.1

I made a simple mogrt in Premier Pro and then saved it as a mogrt template and inserted it on the timeline.

It just contains a text field with a rectangle background. 

 

I want to change the text of the  mogrt by extendscript.

However when I try to do that in Extendscript using

 

seq.videoTracks[0].clips[0].components[2].properties.getParamForDisplayName("Source Text").setValue("Test Text");

 

the mogrt on the timeline just loses its existing text. I mean the text just vanished only the background stays.

To debug the issue I tried reading the value of the mogrt using

 

var obj = seq.videoTracks[0].clips[0].components[2].properties.getParamForDisplayName("Source Text").getValue();

however here I get some kind of json value when I look at obj using

 

$.writeln(JSON.stringify(obj));

 

The printed output is like this for 

"ऒ\u0000\u0000\u0000{\"mTextParam\":{\"mAlignment\":0,\"mDefaultRun\":[],\"mHeight\":0,\"mHindiDigits\":true,\"mIndic\":true,\"mIsVerticalText\":false,\"mLeading\":0,\"mLigatures\":true,\"mRTL\":false,\"mShadowAngle\":135,\"mShadowBlur\":40,\"mShadowColor\":4144959,\"mShadowOffset\":7,\"mShadowOpacity\":75,\"mShadowSize\":0,\"mShadowVisible\":false,\"mStyleSheet\":{\"mBaselineOption\":{\"mParamValues\":[[0,0]]},\"mBaselineShift\":{\"mParamValues\":[[0,0]]},\"mCapsOption\":{\"mParamValues\":[[0,0]]},\"mFauxBold\":{\"mParamValues\":[[0,false]]},\"mFauxItalic\":{\"mParamValues\":[[0,false]]},\"mFillColor\":{\"mParamValues\":[[0,16777215],[10,16745993],[11,16745993],[12,16745993],[13,16745993],[14,16745993],[15,16745993],[16,16777215]]},\"mFillOverStroke\":{\"mParamValues\":[[0,true]]},\"mFillVisible\":{\"mParamValues\":[[0,true]]},\"mFontName\":{\"mParamValues\":[[0,\"Assistant-SemiBold\"]]},\"mFontSize\":{\"mParamValues\":[[0,140]]},\"mKerning\":{\"mParamValues\":[[0,0]]},\"mStrokeColor\":{\"mParamValues\":[[0,16777215]]},\"mStrokeVisible\":{\"mParamValues\":[[0,false]]},\"mStrokeWidth\":{\"mParamValues\":[[0,1]]},\"mText\":\"This is a sample text\",\"mTracking\":{\"mParamValues\":[[0,0]]},\"mTsumi\":{\"mParamValues\":[[0,0]]}},\"mTabWidth\":400,\"mWidth\":0},\"mVersion\":1}"

I don't understand what are those extra characters at the start of the json, it has some indic character and 3 Nul characters, due to which JSON.parse() throws an exception.

 

Can we use this JSON and modify the text string of the mogrt? Or is there any other way to achieve this?

This topic is closed to new replies. Start a new post to keep the conversation going.
Bruce Bullis
Bruce BullisCorrect answer
Legend
Sep 22, 2021 2:51 PM UTC

The JSON object is not part of PPro's ExtendScript API; it's only available if the CC Libraries panel is open. 

 

To make sure your JSON works even when the Libraries panel is not open, we recommend Douglas Crockford's json2.js.

https://github.com/douglascrockford/JSON-js


23 replies

Known Participant
Sep 22, 2021 6:36 PM UTC

Any update regarding the possibility to change the text value in Mogrts created in Premiere Pro 2021?

Translate
Bruce Bullis
Legend
Sep 22, 2021 6:40 PM UTC

No such behavior changes have yet been scheduled.

Translate
Participant
Feb 12, 2023 11:25 AM UTC

Any update on this please?

Translate
Known Participant
Sep 22, 2021 10:56 AM UTC

I'm trying to deal with the same issue, and I would like the solution you are proposing.

my code is the folowing:

 

var obj = sequence.videoTracks[0].clips[0].components[3].properties[0].getValue();
$.writeln(JSON.stringify(obj));

 

 

However, the VSCODE returns me the following error:

 

Runtime Error: Error Code# 2: JSON is undefined @ file '/c/premieretesti/TESTI.jsx' [line:227, col:1]
 
It seems like JSON is unabled....
 
could you please help me enabling it?

 

 

Translate
Bruce Bullis
Bruce BullisCorrect answer
Legend
Sep 22, 2021 2:51 PM UTC

The JSON object is not part of PPro's ExtendScript API; it's only available if the CC Libraries panel is open. 

 

To make sure your JSON works even when the Libraries panel is not open, we recommend Douglas Crockford's json2.js.

https://github.com/douglascrockford/JSON-js


Translate
andymees@aje
Legend
May 16, 2020 10:53 AM UTC

Just FYI for anyone who might stumble across this topic (like myself)... a quick test seems to suggest that this method is no longer possible with 'NewWorld' scripting enabled. Works well otherwise tho.

 

 

Translate
Bruce Bullis
Legend
May 16, 2020 12:39 PM UTC

Specifically, what method fails in New World? 

 

 

Translate
andymees@aje
Legend
May 16, 2020 1:09 PM UTC

Hey Bruce, I'm refering to the unsupported method, detailed above, for accessing the Source Text (object) of a basic Premiere Pro authored Text Item ie MOGRT clip instance, using:

JSON.stringify(app.project.activeSequence.videoTracks[track].clips[clip].components[3].properties[0].getValue());
 
In 'OldWorld' that call returns a string that contains the Source Text object (which can be succesfully manipulated as directed above).
In NewWorld it seems to return just a single character 
 
 
Translate
olympica81539219
Inspiring
Apr 27, 2020 11:47 PM UTC

From my experience with it, you can actullay create an object if you remove that first 3 object - while storing it in temp var.

Then modify the valuse in the jsoned object. 

When u done jest set the value of the fx to be the temp var + the modifyed json obj. 

 

I did managed to do so, and it is possible even if its "unsupported".

 

this form post might help, its not directly about it but yea.. https://community.adobe.com/t5/premiere-pro/timevarying-for-text-source/m-p/10521326?page=1#M218212

Translate
Participating Frequently
Apr 28, 2020 7:01 AM UTC

Thanks for the reply I tried doing something on this lines on what you suggested,

 

 

var obj = seq.videoTracks[0].clips[0].components[2].properties.getParamForDisplayName("Source Text").getValue()
var objStr = JSON.stringify(obj);
objStr = objStr.replace("ऒ\\u0000\\u0000\\u0000");
var jObj = JSON.parse(objStr);

 

If I remember correctly I got some wierd results in "jObj" I will look into that link what you suggested, and see how to move ahead.

Translate
olympica81539219
Inspiring
Apr 28, 2020 8:54 AM UTC

Just tried out something that seems to WORK!

 

var jsonVal = seq.videoTracks[0].clips[0].components[2].properties.getParamForDisplayName("Source Text").getValue();
var jsonObjPart = jsonVal.substring(0, 4);
var jsonObj = JSON.parse(jsonVal.substring(4));
jsonObj.mTextParam.mStyleSheet.mText = "This is a new text";
var jsonOutstr = JSON.stringify(jsonObj);
var jsonOutstr = jsonObjPart + jsonOutstr;
seq.videoTracks[0].clips[0].components[2].properties.getParamForDisplayName("Source Text").setValue(jsonOutstr, true);

Cheers!

Happy to help 🙂 

Translate
Bruce Bullis
Legend
Apr 27, 2020 10:47 PM UTC

The API was designed to support .mogrts created in After Effects; we do hope to eventually support PPro-created .mogrts, but currently no, they won't work.

 

 

Translate
Participating Frequently
Apr 28, 2020 7:05 AM UTC

Thanks for the information, I'll try some workaround's as suggested by "olympica"

Translate