SuperRender_BuildUI: 模板复制和导入合成脚本 (MacOS版本)
//=========================================Build UI========================================= SuperRender_BuildUI(this);
function SuperRender_BuildUI(thisObj) {
//==============================Set MainPaletteUI=========================================================
var pal = (thisObj instanceof Panel) ? thisObj : new Window('palette', 'Template', undefined, { resizable: true });
if (pal != null) {
var res =
'group { \n orientation:'column', alignment:['center','top'], \n copyGrp: Panel { text: '模板复制', orientation: 'column', \n tempGrp: Group {orientation: 'row', \n alignment: ['left','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n label: StaticText { text:'模板名:' }, \n edit: EditText { text:'制作模板', preferredSize:[175,17] }, \n }, \n itemGrp: Group {orientation: 'row', \n alignment: ['left','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n label: StaticText { text:'文件名:' }, \n edit: EditText { text:'sp_X02_', preferredSize:[175,17] }, \n }, \n countGrp: Group {orientation: 'row', \n alignment: ['left','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n label: StaticText { text:'计算名:' }, \n edit: EditText { text:'js_X02_', preferredSize:[175,17] }, \n }, \n fpsGrp: Group {orientation: 'row', \n alignment: ['left','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n label: StaticText { text:'帧 率:' }, \n edit: EditText { text:'30', preferredSize:[55,17] }, \n check1: Checkbox {text:'跟踪'}, \n check2: Checkbox {text:'自动保存'}, \n }, \n controlGrp: Group {orientation: 'row', \n alignment: ['right','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n check0: Checkbox {text:'报错'}, \n check1: Checkbox {text:'视窗'}, \n createBtn: Button { text:'开始复制',justify:'center', alignment:['right','top']}, \n }, \n }, \n makeGrp: Panel { text: '导入合成', orientation: 'column', \n getPathGrp: Group {orientation: 'row', \n alignment: ['left','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n importBtn: Button { text:'导 入', alignment:['left','top'], preferredSize:[49,20] }, \n getPathEdit: EditText { text:'输入路径', preferredSize:[175,17] }, \n }, \n itemGrp: Group {orientation: 'row', \n alignment: ['left','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n label1: StaticText { text:'文件名:' }, \n edit1: EditText { text:'zq_', preferredSize:[55,17] }, \n label2: StaticText { text:' 计算名:' }, \n edit2: EditText { text:'js_', preferredSize:[55,17] }, \n }, \n alphaGrp: Group {orientation: 'row', \n alignment: ['left','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n label1: StaticText { text:'通道名:' }, \n edit1: EditText { text:'af_', preferredSize:[55,17] }, \n label2: StaticText { text:' 透明值:' }, \n edit2: EditText { text:'40', preferredSize:[55,17] }, \n }, \n controlGrp: Group {orientation: 'row', \n alignment: ['right','center'], \n spacing: 2,\n alignChildren:['fill','center'],\n makeBtn: Button { text:'开始合成',justify:'center', alignment:['right','top']}, \n }, \n }, \n '};
pal.grp = pal.add(res);
//------------------------------------------------------------Set PalProperty---------------------------------------------------------------------------
var winGfx = pal.graphics;
var darkColorBrush = winGfx.newPen(winGfx.BrushType.SOLID_COLOR, [0, 0, 0], 1);
pal.grp.makeGrp.controlGrp.makeBtn.preferredSize.width =
pal.grp.copyGrp.controlGrp.createBtn.preferredSize.width = 80;
pal.grp.makeGrp.controlGrp.makeBtn.preferredSize.height =
pal.grp.copyGrp.controlGrp.createBtn.preferredSize.height = 30;
//pal.grp.renderGrp.controlGrp.margins.top += 5;
pal.layout.layout(true);
pal.grp.minimumSize = pal.grp.size;
pal.layout.resize();
pal.onResizing = pal.onResize = function () { this.layout.resize(); }
pal.grp.copyGrp.controlGrp.check0.value = true;
pal.grp.copyGrp.controlGrp.check1.value = true;
pal.grp.copyGrp.controlGrp.createBtn.onClick = function () {
var isErro = this.parent.check0.value;
var erro = String($.line);
try {
var compFolder = 'CompFolder';
//var sizeW = Number(pal.grp.copyGrp.sizeGrp.editW.text);
//var sizeH = Number(pal.grp.copyGrp.sizeGrp.editH.text);
var tempName = pal.grp.copyGrp.tempGrp.edit.text;
erro = String($.line);
var itemName = pal.grp.copyGrp.itemGrp.edit.text;
var countName = pal.grp.copyGrp.countGrp.edit.text;
var fps = Number(pal.grp.copyGrp.fpsGrp.edit.text);
erro = String($.line);
if (NoItem(compFolder, FolderItem)) {
app.project.items.addFolder(compFolder);
}
var tempComp = FindItem(tempName, CompItem);
erro = String($.line);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var selectedItems = app.project.selection;
if (selectedItems.length != 0 && tempComp) {
for (var i = 0; i < selectedItems.length; i++) {
var item = selectedItems[i];
if (item instanceof FootageItem && item.name.match(itemName)) {
erro = String($.line);
var n = item.name; var w = item.width; var h = item.height;
var p = item.pixelAspect; var d = item.duration;
//var f = item.mainSource.conformFrameRate;
//var f = item.frameRate;
erro = String($.line);
try { item.mainSource.conformFrameRate = fps; }
catch (err) { n = item.name.substring(0, item.name.length - 4); }
var itemId = n.replace(itemName, '');
var countItem = FindItem(countName + itemId, FootageItem);
var compName = n.replace('.mov', '');
compName = compName.replace('.mp4', '');
compName += '_Comp';
erro = String($.line);
RemoveComp(compName);
var itemComp = app.project.items.addComp(compName, w, h, p, d, fps);
erro = String($.line);
itemComp.parentFolder = FindItem(compFolder, FolderItem);
//itemComp.bgColor = bg;
itemComp.duration = d;
for (var j = tempComp.layers.length; j > 0; j--) {
if (!tempComp.layers[j].name.match(itemName) && !tempComp.layers[j].name.match(countName)) {
tempComp.layers[j].copyToComp(itemComp);
}
else {
if (tempComp.layers[j].name.match(itemName)) {
itemComp.layers.add(item);
}
if (tempComp.layers[j].name.match(countName)) {
var countLayer = itemComp.layers.add(countItem);
EffectInnerKey(countLayer, isErro);
EffectLeves(countLayer, isErro);
EffectRSMB(countLayer, isErro);
EffectNoise(countLayer, isErro);
countLayer.trackMatteType = TrackMatteType.ALPHA;
}
}
}// for(var j = 1; j <= tempComp.length; j++){
erro = String($.line);
var layerHide = itemComp.layers.add(item);
layerHide.enabled = false;
if (this.parent.check1.value) {
try { itemComp.openInViewer(); }
catch (err) { }
}
}// if (item instanceof FootageItem && item.name.match (itemName)){ }// for (var i = 0; i < selectedItems.length; i++){ }// if (selectedItems.length != 0 && tempComp){ } catch (e) { if (isErro) { alert(erro); } } }// pal.grp.copyGrp.controlGrp.createBtn.onClick = function (){ var lastImportPath = ReadlnToText('/EffectBackup/LastImportPath.txt')[0]; if (lastImportPath) { pal.grp.makeGrp.getPathGrp.getPathEdit.text = lastImportPath; } pal.grp.makeGrp.getPathGrp.importBtn.onClick = function () {
var fps = Number(pal.grp.copyGrp.fpsGrp.edit.text);
var defaultFolder = this.parent.getPathEdit.text;
if (!Folder('/EffectBackup').exists) { CreateFolder('/EffectBackup'); }
WriteReport('/EffectBackup/LastImportPath.txt', defaultFolder);
var baseFolder = ImportFiles(defaultFolder, fps);
var baseFolders = WriteFolderName(defaultFolder, true);
for (var i = 0; i < baseFolders.length; i++) {
ImportFiles(defaultFolder + '/' + baseFolders[i], fps).parentFolder = baseFolder;
}
}// pal.grp.r5.outFolderPath.onClick = function ()
pal.grp.makeGrp.controlGrp.makeBtn.onClick = function () {
var isErro = pal.grp.copyGrp.controlGrp.check0.value;
var erro = String($.line);
try {
var compFolder = 'CompFolder';
var itemName = pal.grp.makeGrp.itemGrp.edit1.text;
var countName = pal.grp.makeGrp.itemGrp.edit2.text;
var alphaName = pal.grp.makeGrp.alphaGrp.edit1.text;
var opa = Number(pal.grp.makeGrp.alphaGrp.edit2.text);
var fps = Number(pal.grp.copyGrp.fpsGrp.edit.text);
erro = String($.line);
if (NoItem(compFolder, FolderItem)) {
app.project.items.addFolder(compFolder);
}
erro = String($.line);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var selectedItems = app.project.selection;
if (selectedItems.length != 0) {
for (var i = 0; i < selectedItems.length; i++) {
var item = selectedItems[i];
if (item instanceof FootageItem && item.name.match(itemName)) {
erro = String($.line);
var n = item.name; var w = item.width; var h = item.height;
var p = item.pixelAspect; var d = item.duration;
//var f = item.mainSource.conformFrameRate;
//var f = item.frameRate;
erro = String($.line);
try { item.mainSource.conformFrameRate = fps; }
catch (err) { n = item.name.substring(0, item.name.length - 4); }
var itemId = n.replace(itemName, '');
var countItem = FindItem(countName + itemId, FootageItem);
var alphaItem = FindItem(alphaName + itemId, FootageItem);
var compName = n.replace('.mov', '');
compName = compName.replace('.mp4', '');
compName += '_Comp';
erro = String($.line);
RemoveComp(compName);
var itemComp = app.project.items.addComp(compName, w, h, p, d, fps);
erro = String($.line);
itemComp.parentFolder = FindItem(compFolder, FolderItem);
//itemComp.bgColor = bg;
itemComp.duration = d;
erro = String($.line);
var layerItem = itemComp.layers.add(item);
var layerAlp1 = itemComp.layers.add(alphaItem);
var layerCount = itemComp.layers.add(countItem);
var layerAlp2 = itemComp.layers.add(alphaItem);
layerItem.trackMatteType = TrackMatteType.LUMA;
layerCount.trackMatteType = TrackMatteType.LUMA;
layerCount.transform.opacity.setValue(opa);
//layerHide.enabled = false;
if (pal.grp.copyGrp.controlGrp.check1.value) {
try { itemComp.openInViewer(); }
catch (err) { }
}
}// if (item instanceof FootageItem && item.name.match (itemName)){ }// for (var i = 0; i < selectedItems.length; i++){ }// if (selectedItems.length != 0 && tempComp){ } catch (e) { if (isErro) { alert(erro); } } }// pal.grp.copyGrp.controlGrp.createBtn.onClick = function (){ }
return pal;
}
function ImportFiles(defaultFolder, fps) {
var folderNames = defaultFolder.split('/');
var folderName = folderNames[folderNames.length - 1];
var baseFolder = FindItem(folderName, FolderItem);
if (!baseFolder) { baseFolder = app.project.items.addFolder(folderName); }
var baseFiles = WriteFolderName(defaultFolder, false);
var baseSqFiles = [];
for (var i = 0; i < baseFiles.length; i++) {
if (baseFiles[i].match('0001.png') || baseFiles[i].match('0001.jpg')) { baseSqFiles.push(baseFiles[i]); }
}
for (var i = 0; i < baseSqFiles.length; i++) {
var baseFilePath = defaultFolder + '/' + baseSqFiles[i];
//var fileItemStr = folderName + '/' + baseSqFiles[i] + ','
var isImport = true;
for (var j = 1; j <= app.project.numItems; j++) {
var item = app.project.item(j);
if (item instanceof FootageItem && baseSqFiles[i].match(item.name)) {
isImport = false;
}
}
if (isImport) { ImportTexture(baseFilePath, fps).parentFolder = baseFolder; }
}
return baseFolder;
}
function SetBlendingMode(modeID) { var blendingMode = BlendingMode.ADD; if (modeID == 0) { blendingMode = BlendingMode.NORMAL; } else if (modeID == 1) { blendingMode = BlendingMode.ADD; } else if (modeID == 2) { blendingMode = BlendingMode.SCREEN; } else if (modeID == 3) { blendingMode = BlendingMode.OVERLAY; } else if (modeID == 4) { blendingMode = BlendingMode.MULTIPLY; }
return blendingMode;
}
function MatchItem(name, type) { for (var i = 1; i <= app.project.numItems; i++) { var item = app.project.item(i); if (name.match(item.name) && item instanceof type) { return true; } } return false; }
function NoItem(name, type) { for (var i = 1; i <= app.project.numItems; i++) { var item = app.project.item(i); if (item.name == name && item instanceof type) { return false; } } return true; }
function FindItem(name, type) { for (var i = 1; i <= app.project.numItems; i++) { var item = app.project.item(i); if (item.name == name && item instanceof type) { return item; } } return null; }
function RemoveEmptyComp() { var emptyComp = []; for (var i = 1; i <= app.project.numItems; i++) { var item = app.project.item(i); if (item instanceof CompItem) { if (item.layers.length == 0) { emptyComp.push(item.name); } else { var isHide = true; for (var j = 1; j <= item.layers.length; j++) { if (item.layers[j].enabled) { isHide = false; } } if (isHide) { emptyComp.push(item.name); } } } } for (var i = 0; i < emptyComp.length; i++) { var item = FindItem(emptyComp[i], CompItem); if (item) { item.remove() } } }
function RemoveComp(name) { var item = FindItem(name, CompItem); if (item) { item.remove(); } }
function EffectInnerKey(layer, isErro) { var erro = String($.line); try { var effect = layer.effect.addProperty('Inner/Outer Key'); } catch (e) { if (isErro) { alert('滤镜报错nner/Outer Key! ' + erro); } } }
function EffectLeves(layer, isErro) { var erro = String($.line); try { var effect = layer.effect.addProperty('Levels'); } catch (e) { if (isErro) { alert('滤镜报错Levels! ' + erro); } } }
function EffectRSMB(layer, isErro) { var erro = String($.line); try { var effect = layer.effect.addProperty('RSMB Pro'); } catch (e) { if (isErro) { alert('滤镜报错RSMB Pro! ' + erro); } } }
function EffectNoise(layer, isErro) { var erro = String($.line); try { var effect = layer.effect.addProperty('Noise'); } catch (e) { if (isErro) { alert('滤镜报错Noise! ' + erro); } } }
function ImportTexture(filePath, f) { var io = new ImportOptions(File(filePath)); io.sequence = true; var mySeq = app.project.importFile(io); mySeq.mainSource.alphaMode = AlphaMode.STRAIGHT; try { mySeq.mainSource.conformFrameRate = f; } catch (err) { } var name = mySeq.name; name = name.split('.[')[0]; name = name.split('_')[0]; name = name.split('[')[0]; mySeq.name = name; return mySeq; }
function WriteFolderName(path, isFolder) { var effectPath = '/EffectBackup/ListTxt' + path.replace(Folder(path).parent.fsName, '') + '/'; if (!Folder(effectPath).exists) { CreateFolder(effectPath); } var pathText = effectPath + (isFolder ? 'folderList' : 'fileList') + '.txt'; var cmd = 'ls -l ' + ''' + path + ''' + (isFolder ? '/ | grep '^d' >' : '/ | grep -v '^d' >') + ''' + pathText + '''; system.callSystem('bash -c '' + cmd + '''); var texts = ReadlnToText(pathText); return texts; }
function WriteReport(path, poss) { var reportFile = new File(path); if (reportFile.exists) { reportFile.open('W'); reportFile.write(poss); reportFile.close(); } else { var RCF_file = new File(reportFile); RCF_file.open('w'); RCF_file.write(poss); RCF_file.close(); } }
function ReadlnToText(path) { var myFile = new File(path); var texts = []; if (myFile != null) { var fileOK = myFile.open('r'); if (fileOK) { while (!myFile.eof) { var text = myFile.readln(); texts.push(text); } } myFile.close(); } return texts; }
function CreateFolder(path) { var cmd = 'mkdir -p ' + path; system.callSystem('bash -c '' + cmd + '''); }
原文地址: https://www.cveoy.top/t/topic/YOl 著作权归作者所有。请勿转载和采集!