Hi All,
I am currently working on a large number of footage items and various compositions..would some kind soul please write a script for the following work..!!
1.i have around 400 quicktime movies..rendered out separately as rgb straight, and alpha movie
after importing them into a project,i need to put them back together as separate comps, one for each set of movies, that is the alpha movie on top as a luma matte for the corresponding rgb mov.
the movie name is say.. movie_01.mov..and the corresponding alpha movie is named..movie_01_alpha.mov ...and so on..movie_09.mov..movie_09_alpha.mov...
Based on this naming pattern or something, i would like separate comps to be created for each set of rgb/alpha qtime movs ,with the alpha movie on top as luma matte for the similarly named rgb movie.
need a script to put together the rgb and alpha movie ...
Moderator: byronnash
Here is a start, perhaps one of the other scripters can help out.
Launch After Effects and then run the script. It will make comps.
This script will scan the folder, make a 2-layer comp with the alpha movie above the diffuse movie.
But I don't know how to set the alpha layer to become a track matte.
Here is the code:
This line:
is where revision needs to occur. For some reason, it does not actually set the layer to ALPHA track matte type. It does not produce an error either. Perhaps someone else can figure this out?
Good luck...
Launch After Effects and then run the script. It will make comps.
This script will scan the folder, make a 2-layer comp with the alpha movie above the diffuse movie.
But I don't know how to set the alpha layer to become a track matte.
Here is the code:
Code: Select all
{
//Functions used by this script.
function processFile (theFile)
{
writeLn("Processing file: " + theFile.name);
try
{
var importOptions = new ImportOptions (theFile); //create a variable containing ImportOptions
importSafeWithError (importOptions);
}
catch( error )
{
// display errors.
writeLn(error);
}
}
function testForSequence (files)
{
var searcher = new RegExp ("[0-9]+");
var movieFileSearcher = new RegExp ("(mov|avi|mpg)$", "i");
var parseResults = new Array;
for (x = 0; (x < files.length) & x < 10; x++)
{
//test that we have a sequence, stop parsing after 10 files
var movieFileResult = movieFileSearcher.exec(files[x].name);
if (! movieFileResult)
{
var currentResult = searcher.exec(files[x].name);
//regular expressions return null if no match was found
//otherwise they return an array with the following information:
//array[0] = the matched string
//array[1..n] = the matched capturing parentheses
if (currentResult)
{ //we have a match - the string contains numbers
//the match of those numbers is stored in the array[1]
//take that number and save it into parseResults
parseResults[parseResults.length] = currentResult[0];
}
else
{
parseResults[parseResults.length] = null;
}
}
else
{
parseResults[parseResults.length] = null;
}
}
//if all the files we just went through have a number in their file names,
//assume they are part of a sequence & return the first file
var result = null;
for (i = 0; i < parseResults.length; ++i)
{
if (parseResults[i])
{
if (! result)
{
result = files[i];
}
}
else
{
//case in which a file name did not contain a number
result = null;
break;
}
}
return result;
}
function importSafeWithError (importOptions)
{
try
{
app.project.importFile (importOptions);
} catch (error)
{
alert(error.toString() + importOptions.file.fsName);
}
}
function processFolder(theFolder)
{
var files = theFolder.getFiles(); //Get an array of files in the target folder
//test whether theFolder contains a sequence
var sequenceStartFile = testForSequence(files);
//if it does contain a sequence, import the sequence
if (sequenceStartFile)
{
try
{
var importOptions = new ImportOptions (sequenceStartFile); //create a variable containing ImportOptions
importOptions.sequence = true;
//importOptions.forceAlphabetical = true; //un-comment this if you want to force alpha order by default
importSafeWithError (importOptions);
}
catch (error)
{
// display errors.
writeLn(error);
}
}
//otherwise, import the files and recurse
for (index in files)
{ //Go through the array and set each element to singleFile, then run the following
if (files[index] instanceof File)
{
if (! sequenceStartFile)
{ //if file is already part of a sequence, don't import it individually
processFile (files[index]); //calls the processFile function above
}
}
if (files[index] instanceof Folder)
{
processFolder (files[index]); // recursion
}
}
}
// create project if necessary
var proj = app.project;
if(!proj) proj = app.newProject();
try
{
//Begin the script by creating an undo group.
app.beginUndoGroup("Process Folder Of Track Mattes");
//Ask the user for a folder whose contents are to be imported
var targetFolder = folderGetDialog("Import Items from Folder..."); //returns a folder or null
if (targetFolder)
{
//Create project if necessary.
var proj = app.project;
if(!proj) proj = app.newProject();
//Import folder items into the project window.
processFolder(targetFolder);
//Take advantage of the fact that after footage is imported, it is selected in the project window.
var projSelection = app.project.selection; //Set selected import items to an array.
var myCount = 1;
//Add footage items from the project window to the composition.
for (i=0; i < projSelection.length; i++)
{ //loop through and add layers to comp
//Create new comp for this footage item.
var compW = 720; // comp width
var compH = 480; // comp height
var compL = 240; // comp length (seconds)
var compRate = 29.97; // comp frame rate
var compBG = [48/255,63/255,84/255] // comp background color
var myItemCollection = app.project.items;
var myCompName = projSelection[i].name; //'my track matte comp'+myCount
var myComp = myItemCollection.addComp(myCompName,compW,compH,1,compL,compRate);
myComp.bgColor = compBG;
//Add to comp
if(projSelection[i] instanceof FootageItem)
{ //test to be sure it's not a comp or folder
var tempCollection = myComp.layers; //variable for collection of layer objects in the comp
thisImageLayer = tempCollection.add(projSelection[i]); //Add diffuse layer.
thisImageLayer.trackMatteType.ALPHA
thisImageLayer = tempCollection.add(projSelection[i+1]); //Add alpha layer, assume it was imported right after the diffuse layer.
}
//Make our loop step by 2 to skip adding the alpha again.
i++;
myCount++;
}
//Blank our folder to prevent a re-run of this script from failing on a browse cancel.
targetFolder = "";
writeLn("Finished folder items.");
}
else
{
writeLn("User cancels import operation.");
}
app.endUndoGroup();
}
catch(error)
{
writeLn ("Select the comp in the project window be fore running this script.");
}
}
Code: Select all
thisImageLayer.trackMatteType.ALPHA
Good luck...
Last edited by Atomic on September 14th, 2007, 2:38 pm, edited 1 time in total.
pixelsarts,
This small change to the script will name them as you request.
I have updated the original post to reflect this change.
If only someone would pop in with the assign as track matte solution...
This small change to the script will name them as you request.
Code: Select all
var myCompName = projSelection[i].name;
var myComp = myItemCollection.addComp (myCompName,compW,compH,1,compL,compRate);
If only someone would pop in with the assign as track matte solution...
-
- Posts: 704
- Joined: June 5th, 2004, 7:59 am
- Location: London, UK
I've made some changes to Atomic's script. It seems to work ok.
Code: Select all
{
//Functions used by this script.
function processFile (theFile)
{
writeLn("Processing file: " + theFile.name);
try
{
var importOptions = new ImportOptions (theFile); //create a variable containing ImportOptions
importSafeWithError (importOptions);
}
catch( error )
{
// display errors.
//writeLn(error);
}
}
function importSafeWithError (importOptions)
{
try
{
app.project.importFile (importOptions);
} catch (error)
{
//alert(error.toString() + importOptions.file.fsName);
}
}
function processFolder(theFolder)
{
var files = theFolder.getFiles(); //Get an array of files in the target folder
for (index in files)
{ //Go through the array and set each element to singleFile, then run the following
if (files[index] instanceof File && files[index].name != ".DS_Store")
{
processFile (files[index]); //calls the processFile function above
} else if (files[index] instanceof Folder)
{
processFolder (files[index]); // recursion
}
}
}
// global variables
var mainLayer, alphaLayer;
var compW, compH, compL, compRate, compBG, compPixelAspect;
var myItemCollection, tempCollection, myCompName, myComp;
//Ask the user for a folder whose contents are to be imported
var targetFolder = folderGetDialog("Import Items from Folder..."); //returns a folder or null
if (targetFolder)
{
//Begin the script by creating an undo group.
app.beginUndoGroup("Process Folder Of Track Mattes");
//Create project if necessary.
var proj = app.project;
if(!proj) proj = app.newProject();
//Import folder items into the project window.
processFolder(targetFolder);
//Take advantage of the fact that after footage is imported, it is selected in the project window.
var projSelection = app.project.selection; //Set selected import items to an array.
var myCount = 1;
//Add footage items from the project window to the composition.
for (i=0; i < projSelection.length; i++)
{ //loop through and add layers to comp
//Create new comp for this footage item.
compW = projSelection[i].width; // comp width
compH = projSelection[i].height; // comp height
compL = projSelection[i].duration; // comp length (seconds)
compRate = projSelection[i].frameRate; // comp frame rate
compBG = [48/255,63/255,84/255] // comp background color
compPixelAspect = projSelection[i].pixelAspect; // pixel aspect ratio
myItemCollection = app.project.items;
myCompName = projSelection[i].name; //'my track matte comp'+myCount
myComp = myItemCollection.addComp(myCompName,compW,compH,compPixelAspect,compL,compRate);
myComp.bgColor = compBG;
//Add to comp
if(projSelection[i] instanceof FootageItem)
{ //test to be sure it's not a comp or folder
tempCollection = myComp.layers; //variable for collection of layer objects in the comp
mainLayer = tempCollection.add(projSelection[i]); //Add diffuse layer.
alphaLayer = tempCollection.add(projSelection[i+1]); //Add alpha layer, assume it was imported right after the diffuse layer.
mainLayer.trackMatteType = TrackMatteType.LUMA;
}
//Make our loop step by 2 to skip adding the alpha again.
i++;
myCount++;
}
app.endUndoGroup();
}
}
I removed this post and put it into a new thread here:
http://www.aenhancers.com/viewtopic.php?p=3144
http://www.aenhancers.com/viewtopic.php?p=3144
Just tried this and it works great on CS4!
I'm looking for a script that does exactly what it already does, but the names would be i.e clip01 and clip01_bg. No alpha. To clip01 an animation preset would be applied that keys the top layer. Would this be hard to do? Also, how would I do to get it to work in CS5?
I'm looking for a script that does exactly what it already does, but the names would be i.e clip01 and clip01_bg. No alpha. To clip01 an animation preset would be applied that keys the top layer. Would this be hard to do? Also, how would I do to get it to work in CS5?
Sorry for all the posts, I got exited of a possible workflow improvement. I managed to add an animation preset.
Is there a lot of work to convert it to work in CS5?
Example script attaced.
Is there a lot of work to convert it to work in CS5?
Example script attaced.
- Attachments
-
- test01.jsx.zip
- (1.56 KiB) Downloaded 1408 times
-
- Posts: 704
- Joined: June 5th, 2004, 7:59 am
- Location: London, UK
I imagine it's just because you're using folderGetDialog which no longer works in CS5. Use Folder.selectDialog instead. Here's a link to the CS5 scripting changes where this is mentioned:
http://blogs.adobe.com/toddkopriva/2010 ... r-eff.html
http://blogs.adobe.com/toddkopriva/2010 ... r-eff.html