Скрипт замены футажей - replace()

rungun3

New Member
Привет всем! Уважаемые знатоки!
Прочёл в документации что можно реплейсит исходники http://aeclub.net/forums/index.php?showtopic=6838&st=0&p=64305&#entry64305


function replace()
{
var myFile = new File('C:\Users\Public\Pictures\Sample Pictures\2.jpg');
app.project.item(2).replace(myFile);// ошибка
}
replace ();

Скажите почему не работает?
у меня есть проект с фотками около 45 шт они анимированы
1 слой: фотка
2 слой: аджасмент
3 слой: та же фотка в качестве фона блюреная растянутая

уходит много времени реплейсит через alt
зарание сспасибо!
 

Rey

New Member
У тебя слеши обратные "\" в пути, а в JS должны быть прямые - "/".
 

vasilyis

New Member
rungun3, поменяй слеши на прямые, а индекс item на 1, так как индексы для футажей имеют больший приоритет относительно композиций. И все заработает Однако твой пример применим для одного футажа и не имеет проверок на валидность элемента типа Футаж.
 

rungun3

New Member
Спасибо! заработало! дальше сделаю цикл а вот как проверить на футаж? ==Footage?
 

rungun3

New Member
Rey сказал(а):
if (app.project.item(2) instanceof footageItem) { }
function replace()
{
var items = app.project.items;
for (var i = items.length; i >= 1; i--)
{
if (app.project.item(i) instanceof FootageItem) -надо писать с большой буквы
var myFile = new File("C:/2.jpg")
app.project.item(i).replace(myFile);-- ошибка

}
alert ("Всё готово ");
}
replace ();


короче как только скрипт натыкается на comp или папку он не срабатывает значит неправеряется условие, если есть одни фотки то всё работает
 

Rey

New Member
if (app.project.item(i) instanceof FootageItem) { -надо писать с большой буквы
var myFile = new File("C:/2.jpg");
app.project.item(i).replace(myFile);-- ошибка
 

rungun3

New Member
Rey сказал(а):
if (app.project.item(i) instanceof FootageItem) { -надо писать с большой буквы
var myFile = new File("C:/2.jpg");
app.project.item(i).replace(myFile);-- ошибка
var myFile = new File("C:/2.jpg");- не нужно ставить точку с запятой ;

function replace()
{
var items = app.project.items;
for (var i = items.length; i >= 1; i--)
{
if (app.project.item(i) instanceof FootageItem)
{
var myFile = new File("C:/2.jpg")
app.project.item(i).replace(myFile);
}

// items.replace(myFile);
// tems.remove();
}
alert ("Всё готово ");
}
replace ();
РАБОТАЕТ!!!!!

БЛИН а в папке Solids солиды тоже меняет на фото!!!!!!! :help:
теперь нужна проверка на солиды
 

Rey

New Member
По точке с запятой спорный вопрос. По спецификации она ставится в конце каждого оператора, не ставится только после закрывающей фигурной скобки. Лучше сразу писать правильный код не нарываясь на ошибки парсинга.

По твоей задаче. Я бы все JPG для замены положил папку (Image_Replace), а в коде сделал такую проверку:

if (app.project.item(i) instanceof FootageItem && app.project.item(i).parentFolder.name == "Image_Replace")


Вот только я не пойму зачем 45 фоток менять на одну "C:/2.jpg", может надо было и использовать одну?
 

rungun3

New Member
45 фоток будут меняться на разные конечно
я думаю фотки переименовать 1,2,3 а потом в цикле подставлять var myFile = new File("C:/"+i+".jpg") как то так
а вообще было бы красиво показать папку с файлами и скрипт начал бы работать,
это реально сделать?

if (app.project.item(i) instanceof FootageItem && app.project.item(i).parentFolder.name == "Image_Replace") получается что замена будет только в этой папке - это выход из ситуации
 

dragonbook

New Member
Здравствуйте всем!

Дабы не плодить темы, сталкиваюсь с подобной задачей. Выдает ошибку "Файл не имеет конструктора". Я, если честно, новичок в js, но разве File - это не стандартный класс? И где правильно прописывать скрипт, прям в слое с картинкой где "опорная точка"? Спасибо
 
Верх