<= Article précédent ExtendScript + Expression
Et donc, nous avons une mise en page pour les titres prête. Nous nous dirigeons vers la dernière ligne droite. Nous devons juste ajouter le script, en le complétant avec des méthodes de copie de modèles dans la scène.
Nous entrons dans la méthode createTitres et immédiatement après l'ajout de la scène, nous commençons le cycle en parcourant le tableau avec les données des titres.
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);
}
}
}
Dans la boucle, on essaie d'abord de trouver le titre sur la scène. Pour ce faire, nous nous référons à la propriété layer de la composition et à sa méthode byName . Pourquoi nous faisons cela, nous en discuterons un peu plus tard. Pour l'instant, regardons la situation où la méthode nous renvoie null , ce qui signifie qu'il n'y a pas de couche avec ce nom.
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();
}
Dans la méthode getTitreComp, nous trouvons le modèle de titre et, si nous n'en avons pas trouvé , nous renvoyons null . Si le modèle est trouvé, nous retournons son duplicata. Ensuite, nous renommons le doublon et l'ajoutons à la scène à l'aide de la méthode layer.add , qui nous renvoie le calque avec le duplicata.
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.
, , , . , . , . . , .
Documentation sur l'utilisation des calques dans ExtendScript ici .
Merci pour l'attention. Si ces leçons s'avèrent utiles à quelqu'un, il sera agréable d'en apprendre davantage sur les projets dans lesquels les lecteurs appliquent ces compétences.
<= Article précédent ExtendScript + Expression