1. 程式人生 > >After Effects 自動匯入素材和分類的指令碼

After Effects 自動匯入素材和分類的指令碼

最近一個遊戲專案需要用到AE做合成,可是渲出來的素材有那麼多曾,藝術家自己一個一個往裡導確實很費時間,於是給他們寫了個自動匯入素材的工具,並且根據背景和角色層自動打好組,建立資料夾,還建立了comp,將素材放進去,根據序列的長度來設定comp的長度,還能根據檔案的名字給裡面的comp命名,將檔案命名規範,最後又加了個為藝術家自動設定輸出路徑和視訊名字的功能。 工具的介面如下: 在這裡插入圖片描述

碼如下:

{
    function importFile(file){
        try{
            var importOptions = new ImportOptions(file);
            app.
project.importFile(importOptions); } catch(error){} } function detectForSequence(files){ var searcher = new RegExp("[0-9]+"); var imageFileSearcher = new RegExp("(mov|avi|mpg)$", "i"); var parseResults = new Array; var parseNum = new Array; for
(var i=0; i < files.length; i++){ var imageFileResult = imageFileSearcher.exec(files[i].name); if (!imageFileResult){ var currentResult = searcher.exec(files[i].name); parseNum.push(currentResult); if (currentResult){ parseResults[
parseResults.length] = currentResult[0]; } else{ parseResults[parseResults.length] = null; } }else{ parseResults[parseResults.length] = null; } } parseNum.sort(); difference = parseNum[parseNum.length - 1] - parseNum[0] + 1 if (difference == parseNum.length & parseNum.length > 1){ return files[0]; }else{ return null; } // var result = null; // for (var i=0; i < parseResults.length; ++i){ // if (parseResults[i]){ // if (!result){ // result = files[i]; // } // } // else{ // result = null; // break; // } // } // return parseNum; // return result; } function processFolder(folderPath, value){ var files = folderPath.getFiles(); var sequenceStartFile = detectForSequence(files); value.push(files.length); if (sequenceStartFile){ try{ var importOptions = new ImportOptions(sequenceStartFile); importOptions.sequence = true; var importImg = app.project.importFile(importOptions); importImg.conformFrameRate = 24; } catch (error){ /*alert(error.line.toString() + "v" + error.toString())*/ } } for (var i = 0; i < files.length; i++) { if (files[i] instanceof File){ if (!sequenceStartFile){ importFile(files[i]); } } if (files[i] instanceof Folder){ processFolder(files[i], value); } } } function findItemIndexFromSelection(){ var index = null; selected = app.project.selection; if (!selected){ alert("Please select one item at least") } firstSelectedName = selected[0].name; allItems = app.project.items; for (var i = 1; i < allItems.length; i++) { itemName = allItems[i].name; if (itemName == firstSelectedName){ index = i; break; } } return index; } function getItemSize(index){ var itemWidth = app.project.item(index).width; var itemHeight = app.project.item(index).height; return [itemWidth, itemHeight]; } function getItemDuration(index){ var duration = app.project.item(index).duration; var frameRate = app.project.item(index).frameRate; var length = duration * frameRate; if (length == 0) return 150; else return length; } function getItemByName(name){ for (var i=1; i<app.project.numItems; i++){ if (app.project.item(i).name == name){ return app.project.item(i); } } } function deleteItemByName(name){ try{ var item = getItemByName(name); item.remove(); } catch(error){} } function createComp(compName, compParent, compSize, compLength){ var comp = app.project.items.addComp(compName, compSize[0], compSize[1], 1, compLength/24, 24); comp.parentFolder = compParent; var selected_num = app.project.selection.length; var seledcted_items = app.project.selection; for (var i = 0; i < selected_num; i++) { item = seledcted_items[i]; comp.layers.add(item); item.parentFolder = compParent; item.selected = false; } return comp; } function createFolderForCG(path){ var folder_path = Folder(path); var files = folder_path.getFiles() var result = new Array; var parent = getItemByName("02)CG"); for (var i = 0; i < files.length; i++) { var folder_name = "CHR_" + files[i].name; var folder_item = app.project.items.addFolder(folder_name); folder_item.parentFolder = parent; var path_comp_grp = [folder_name, files[i]]; result.push(path_comp_grp); } // alert(result); return result; } function processBG(path){ app.beginUndoGroup("Process BG"); deleteItemByName('BG_00_015') var num_value = new Array; processFolder(Folder(path), num_value); var index = findItemIndexFromSelection(); var widthHeight = getItemSize(index); var length = getItemDuration(index); var project_name = app.project["file"].name; var first = project_name.indexOf("_"); var last = project_name.lastIndexOf("_"); var valid_part = project_name.substring(first, last - 2); var BG_comp_name = "BG" + valid_part.substr(0, valid_part.length - 1) BGFolder = getItemByName("BG"); createComp(BG_comp_name, BGFolder, widthHeight, length) app.endUndoGroup(); } function processCG(path){ app.beginUndoGroup("Process CG"); deleteItemByName('CHR_XXX'); character_folder_path = createFolderForCG(path); for (var i = 0; i < character_folder_path.length; i++) { var folder_path = character_folder_path[i]; var num_value = new Array; processFolder(Folder(folder_path[1]), num_value); length = num_value[num_value.length - 1]; var CGFolder = getItemByName(folder_path[0]) var index = findItemIndexFromSelection(); var widthHeight = getItemSize(index); // var length = getItemDuration(index); var CH_name = folder_path[0] createComp(CH_name, CGFolder, widthHeight, length) } app.endUndoGroup(); } function alterCompName(){ app.beginUndoGroup("Alter Comp Name"); var comp_item = getItemByName("KGA_00_000_L1_01"); var project_name = app.project["file"].name; var dot_index = project_name.indexOf("."); var main_comp = project_name.substr(0, dot_index) comp_item.name = main_comp; app.endUndoGroup(); } function alterOutputCompName(){ app.beginUndoGroup("Alter Output CompName"); var comp_item = getItemByName("KGA_00_000_L1"); var project_name = app.project["file"].name; var last = project_name.lastIndexOf("_"); var output_comp_name = project_name.substr(0, last); comp_item.name = output_comp_name; app.endUndoGroup(); } function importResourses(){ var folder_path = Folder.selectDialog ("Choose a source folder."); if (folder_path != null){ if (!app.project){ app.newProject(); } var files = folder_path.getFiles(); for (index in files){ if (files[index].name == "BG"){ processBG(files[index]); } if (files[index].name == "CH"){ processCG(files[index]); } } alert("Finish importing"); } alterCompName(); alterOutputCompName(); } function createRenderQueue(){ app.beginUndoGroup("Create Render Queue"); var qtemplate = "H.264"; var project_path = app.project["file"].path; var project_name = app.project["file"].name; var output_path = project_path + "/" + project_name.replace('aep', 'mp4'); var activeItem = app.project.activeItem; if(activeItem != null && activeItem instanceof CompItem){ var theRender = app.project.renderQueue.items.add(activeItem); theRender.outputModules[1].applyTemplate(qtemplate); if (theRender.status == RQItemStatus.QUEUED){ for (j = 1; j <= theRender.numOutputModules; ++j) { var curOM = theRender.outputModule(j); curOM.file = new File(output_path); } } } app.endUndoGroup(); } function initUI(thisObj){ UIunit=5; UIwidth=175; UIheight=UIunit*18; var pal = (thisObj instanceof Panel) ? thisObj : new Window("palette", "Create Comp", [0, 0, UIwidth, UIheight]); // UI.main = new Window("palette", "Create Comp", undefined, {resizeable:true}); //[0, 0, UIwidth, UIheight]{resizeable:true} var createCompButton = pal.add("button", [UIunit,UIunit*1,UIwidth-UIunit,UIunit*8.5], "Import Resources"); var createRenderQueueButton = pal.add("button", [UIunit, UIunit*10, UIwidth-UIunit,UIunit*17], "Create Render Queue"); if (pal instanceof Window) { pal.center(); pal.show(); } else { pal.layout.layout(true); } // UI.main.center(); // UI.main.show(); createCompButton.onClick = importResourses; createRenderQueueButton.onClick = createRenderQueue; } // var UI = new Object(); initUI(this); }