ExtendScript: trabajar con capas

<= Artículo anterior ExtendScript + Expresión





Y así, tenemos un diseño para títulos listo. Avanzamos hacia la recta final. Solo tenemos que agregar el guión, completándolo con métodos de copia de modelos a la escena. 





Entramos en el método createTitres e inmediatamente después de agregar la escena, comenzamos el ciclo, atravesando la matriz con los datos de los títulos.





function createTitres(data) {
   var scenesData = getScenesData();

   for(var i = 0; i < scenesData.length; i++) {
       var scene = getScene(scenesData[i]);

       for (var j = 0; j < data.length; j++) {
           var titreName = 'titre-' + j + '-' + scenesData[i].type;
           var layer = scene.layers.byName(titreName);
       }
   }
}
      
      



En el bucle, primero intentamos encontrar el título en el escenario. Para ello, nos referimos a la propiedad de capas de la composición y su método byName . Por qué estamos haciendo esto, lo discutiremos un poco más adelante. Por ahora, veamos la situación en la que el método nos devuelve un valor nulo , lo que significa que no hay una capa con ese nombre.





if (!layer) {
      var modelName = 'ModelTitre_' + data[j].type + '_' + scenesData[i].type;
      var item = getTitreComp(modelName);
   }

//………………………………………………………………………………………//

function getTitreComp(modelName) {
   var item = getItem(modelName, CompItem);

   if (!item) {
       alert('  ' + modelName);
       return null;
   }

   return item.duplicate();
}
      
      



En el método getTitreComp, encontramos el modelo de título y, si no hemos encontrado uno, devolvemos null . Si se encuentra el modelo, devolvemos su duplicado. A continuación, cambiamos el nombre del duplicado y lo agregamos a la escena usando el método layer.add , que nos devuelve la capa con el duplicado.





if (item) {
   item.name = titreName;
   layer = scene.layers.add(item);
}
      
      



. editLayer, , ( ) ModelScene,





, startTime ,





var scene = getScene(scenesData[i]);
var startTime = 0;
      
      



editLayer





, getScenesData , layers, .





data.push({
   type: item.name.split('_')[1],
   width: item.width,
   height: item.height,
   frameRate: item.frameRate,
   duration: item.duration,
   layers: item.layers
});
      
      



createTitres . editLayer





if (item) {
   item.name = titreName;
   layer = scene.layers.add(item);
   var modelLayer = scenesData[i].layers.byName(modelName);
   startTime = editLayer(layer, startTime, modelLayer);
}
      
      



editLayer





function editLayer(layer, startTime, modelLayer) {
   if (modelLayer) {
       //   -
   } else {
      //   
   }
}
      
      



, - , . , .





layer.startTime = startTime;
layer.outPoint = startTime + 5;
      
      



, .





,





layer.label = modelLayer.label;
layer.startTime = startTime;
var layerDuration = modelLayer.outPoint - modelLayer.startTime;
layer.outPoint = startTime + layerDuration;
      
      



, . , . , , . startTime, layer.outPoint, . 









function editLayer(layer, startTime, modelLayer) {
   layer.startTime = startTime;

   if (modelLayer) {
       layer.label = modelLayer.label;
       var layerDuration = modelLayer.outPoint - modelLayer.startTime;
       layer.outPoint = startTime + layerDuration;
   } else {
       layer.outPoint = startTime + 5;
   }

   return layer.outPoint;
}
      
      



createTitres. Expressions . , ModelScene_1x1. scene-1x1





startTime = editLayer(layer, startTime, modelLayer);
changeExpression(
   item,
   'ModelScene_' + scenesData[i].type,
   'scene-' + scenesData[i].type
);

//................................................................

function changeExpression(comp, search, replacement) {
   for (var i = 1; i <= comp.numLayers; i++) {
       var layer = comp.layer(i);
       var propGroup = layer.property('ADBE Transform Group');

       for (var j = 1; j <= propGroup.numProperties; j++) {
           var prop = propGroup.property(j);
           if (prop.expression) {
               prop.expression = prop.expression.replace(
                   new RegExp(search, 'g'),
                   replacement
               )
           }
       }
   }
}
      
      



changeExpression , . . numLayers. . ADBE Transform Group ( After Effects   ).  , numProperties. , ModelScene_1x1 titre-1x1.





. , , .





changeExpression(
   item,
   'ModelScene_' + scenesData[i].type,
   'scene-' + scenesData[i].type
);
setText(item.layers.byName('reference_text'), data[j].text)

//................................................................

function setText(layer, text) {
   if (layer) {
      var property = layer.text.property("Source Text");
      var value = property.value;
      value.text = text;
      property.setValue(value);
   }
}
      
      



setText reference_text, , .





setText SourceText, text, , , .





. , .





for (var j = 0; j < data.length; j++) {
   var titreName = 'titre-' + j + '-' + scenesData[i].type;
   var layer = scene.layers.byName(titreName);

   if (!layer) {
       var modelName = //....
       //....
   } else {
       setText(
           layer.source.layers.byName('reference_text'),
           data[j].text
       );
   }
}
      
      



. source, , .





. .





#simple   
   simple

#simple  simple      

#double   
   double
      
      



.





, . 





.





, refernce_text.





, , , . , . , . . , .









Documentación sobre cómo trabajar con capas en ExtendScript aquí .





Gracias por la atención. Si estas lecciones le resultan útiles a alguien, será bueno saber sobre proyectos en los que los lectores apliquen estas habilidades.





<= Artículo anterior ExtendScript + Expresión








All Articles