Skip to main content
Participating Frequently
April 27, 2020
Answered

Mogrt getValue returns JSON in Extendscript

  • April 27, 2020
  • 5 replies
  • 5963 views

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 has been closed for replies.
Correct answer Bruce Bullis

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


5 replies

Known Participant
September 22, 2021

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

Bruce Bullis
Community Manager
Community Manager
September 22, 2021

No such behavior changes have yet been scheduled.

Participant
February 12, 2023

Any update on this please?

Known Participant
September 22, 2021

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?

 

 

Bruce Bullis
Community Manager
Bruce BullisCommunity ManagerCorrect answer
Community Manager
September 22, 2021

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


andymees@aje
Legend
May 16, 2020

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.

 

 

Bruce Bullis
Community Manager
Community Manager
May 16, 2020

Specifically, what method fails in New World? 

 

 

andymees@aje
Legend
May 16, 2020

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 
 
 
olympica81539219
Inspiring
April 27, 2020

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

Participating Frequently
April 28, 2020

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.

Participating Frequently
April 28, 2020

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);
Bruce Bullis
Community Manager
Community Manager
April 27, 2020

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.

 

 

Participating Frequently
April 28, 2020

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