Kode berikut berfungsi saat ini untuk saya. Saya harap ini bisa menjadi titik awal bagi Anda. Tolong izinkan saya menambahkan beberapa catatan pada baris tertentu:
1- file adalah folder tempat skrip akan mencari lapisan. Ini harus berupa folder di sebelah proyek .aep Anda (atau ubah baris ini sesuai kebutuhan).
10-46- Menginisialisasi beberapa fungsi yang berguna, misalnya untuk mendapatkan nomor item folder atau comp berdasarkan namanya. Ini ditambahkan jika Anda ingin mengganti nilai hardcode (saya tidak dapat melakukannya karena kurangnya waktu).
Harap perhatikan juga bahwa baris 55, 68, 69 atau 72 memiliki nomor item komposisi/folder yang dikodekan secara keras. Ini berarti skrip ini akan berfungsi selama item pertama proyek after effect Anda adalah comp dan item kedua adalah folder.
Baris 58 meminta untuk memasukkan file txt Anda dengan nama dan posisi layer.
Saya pikir sisanya cukup jelas dari komentar tetapi beri tahu saya jika Anda memiliki pertanyaan lebih lanjut.
var originFolder = "\\files";
var path = app.project.file.path;
var originFolderPath = Folder(path + originFolder);
var originFolderFiles = originFolderPath.getFiles();
var myProject = app.project;
// Functions to handle the importing of files and folders
function processFile(theFile) {
try {
var importOptions = new ImportOptions(theFile);
importSafeWithError(importOptions);
} catch (error) {
}
}
function importSafeWithError(importOptions) {
try {
app.project.importFile(importOptions);
} catch (error) {
alert(error.toString() + importOptions.file.fsName, scriptName);
}
}
function processFolder(folder) {
var filesInFolder = folder.getFiles();
for (index in filesInFolder) {
if (filesInFolder[index] instanceof File) {
processFile(filesInFolder[index]);
}
}
}
function getFolderByName(folderName) { // Given a folder name, returns the item index in the project
for (var i = 1; i <= myProject.numItems; i++) {
if ((myProject.item(i) instanceof FolderItem) && (myProject.item(i).name == folderName)){
return myProject.item(i);
}
}
}
function getCompByName(compName) { // Given a folder name, returns the item index in the project
for (var i = 1; i <= myProject.numItems; i++) {
if ((myProject.item(i) instanceof CompItem) && (myProject.item(i).name == compName)){
return myProject.item(i);
}
}
}
// Fun starts here
processFolder(originFolderPath); // Import the files of the folder originFolder
for (var i = 1; i <= myProject.numItems; i++) { // Put the imported files inside item(2) --> folder
if (myProject.item(i) instanceof FootageItem) {
myProject.item(i).parentFolder = myProject.item(2); // Note that the folder must be item(2)
}
}
var textFile = File.openDialog("Select text file."); // select the text file you want to open
if (textFile != null){
textFile.open("r");
}
var text;
while (!textFile.eof){
text = textFile.readln();
}
var textArr = text.split(', '); // Separate the different values in an array
for (var i = 1; i <= myProject.item(2).numItems; i++){ // Add the layers to the comp
myProject.item(1).layers.add(myProject.item(2).item(i)); // Note that the comp must be item(1)
}
comp = myProject.item(1); // Setting the comp that contains our layers
for (var i = 1; i<= comp.numLayers; i++){ // Flipping the layer order so Layer 1 is the first one
comp.layer(i).moveToBeginning();
}
u = 0;
for (var i = 1; i <= comp.numLayers; i++){ // Setting the position of each layer
u = u+3; // Skipping every 3rd item to ignore the "Layer X" values on the txt file
var posArr = [0,0]; // Create a new array for the position of the layer
origX = parseInt(u-2); // Select the appropiate item of the array, skipping "Layer X"
origY = parseInt(u-1);
posArr[0] = textArr[origX];
posArr[1] = textArr[origY];
layer = comp.layer(i);
layer.property("Position").setValue(posArr); // Applying the new X,Y array to the position value
}
Apakah Anda perlu mempertahankan titik jangkar asli setiap lapisan? Karena akan mudah untuk melakukan hal berikut:
(Photoshop) File > Ekspor > Lapisan ke file...
Dan simpan setiap lapisan ke png berukuran kanvas. Kemudian impor batch ke dalam komposisi dengan skrip After Effects. Masalahnya adalah semua titik jangkar berada di tengah komposisi, yang menurut saya tidak baik untuk Anda.
Alternatif lain adalah dengan langsung mengimpor file PSD di After Effects. Jika Anda mengimpor file PSD sebagai Komposisi, bukan Footage, dan memilih "Pertahankan ukuran Lapisan", Anda akan mendapatkan setiap lapisan PSD dalam lapisan After Effects dan diposisikan dengan benar. Apakah ini bukan pilihan untuk kasus penggunaan Anda?
person
sqr
schedule
20.11.2019