XeloOw
XeloOw

Reputation: 27

(After Effects) Change text content over the time

I would like to put the title + artist name when the song is playing, but I don't know how to achieve this, because with almost 30-35 songs, it would be long and boring to create a specific text layer for each song. If there is a trick to achieve this quickly.

Upvotes: 0

Views: 2701

Answers (1)

fabianmoronzirfas
fabianmoronzirfas

Reputation: 4121

You can achieve this via scripting. I have these two scripts that should do what you want. I wrote them some time ago. Maybe you need to do some adjustments.

This one adds several text layers from a csv file.

https://github.com/fabiantheblind/after-effects-script-snippets/blob/master/comp_with_text.jsx

This one should add one text layer with the source text set to the content of a csv.

https://github.com/fabiantheblind/after-effects-script-snippets/blob/master/text_to_comp.jsx

This is a minimal example to add a text layer with sourceText

/**
 * main function
 */
var main = function() {
  var txt = ['Hello - World', 'dog -cat', 'foo - bah']; // the text to add
  app.beginUndoGroup('add source text'); // open a undo group
  var curComp = app.project.activeItem; // get the current comp
  // check if the curent active item is a comp
  if (!curComp || !(curComp instanceof CompItem)) {
    alert('noComp');
    return;
    // end if no comp is active
  }
  var txtLayer = curComp.layers.addText('titles'); // add a text layer
  var counter = 0; // the time to add a keyframe to (in seconds)
  // loop the text
  for (var i = 0; i < txt.length; i++) {
    var curFrame = (counter / curComp.frameRate); // calc time for each frame
    $.writeln(curFrame);
    // add a keyframe with the text as value every frame
    txtLayer.text.sourceText.setValueAtTime(curFrame, txt[i]);
    counter++; // increase the time by one
  }
  app.endUndoGroup();
};
main();

Upvotes: 1

Related Questions