var csvFile = File.openDialog ("Target CSV File","*.csv"); // PROMPT FOR CSV FILE
var csvFile = csvFile.fsName; // FORMAT CSV FILEPATH TO BE FRIENDLY
app.project.createNewSequence("Auto Seq", ""); // PROMPT TO CREATE A NEW SEQUENCE
var infoArray;
var bufferTime = 2; // HOW MUCH TIME (IN SECONDS) BETWEEN CLIPS WHEN PLACED IN TIMELINE
// Following opens the text file and stores it in var CSVFILE. Then splits it by every new line, and COMA into a multi-tiered array, INFOARRAY.
if(csvFile){
var file = File(csvFile) //OPEN, READ, AND CLOSE THE CSV FILE
file.open("r");
var fullText = file.read();
file.close();
infoArray = fullText.split("\n"); // SPLIT THE CSV FILE AT EVERY NEW LINE
for(var a=0;a<infoArray.length;a++){ // LOOP THROUGH EACH LINE, SPLIT THE LINE AT EVERY COMMA
infoArray[a] = infoArray[a].split(",");
}
}
if(infoArray[infoArray.length -1] == ""){ //SOMETIMES WHEN SPLITTING UP THE ARRAY, THE PROCESS CREATES AN EXTRA, EMPTY LINE. tHIS WILL JUST TEST AND REMOVE THAT IF IT HAPPENS
infoArray.splice(infoArray.length-1, 1)
}
app.project.rootItem.createBin("Original Clips"); // CREATE BIN FOR ORGANIZATION
var importBin = findBinIndex(app.project.rootItem,"Original Clips"); // STORE THE INDEX PATH TO THAT BIN
// IMPORTARY TO LOAD FILES. THIS IS WHERE YOU ADJUST FILEPATHS IF YOU NEED TO
var importAry = [];
// LOOP THROUGH INFOARRAY
if (infoArray){
for (var i = 1; i < infoArray.length; i++) { // START WITH i AS 1 BECAUSE THE FIRST LINE OF OUR CSV IS HEADERS
importAry[0] = infoArray[i][3]; // SET importAry ITEM TO THE FILEPATH. fORMAT CORRECTLY HERE
app.project.importFiles(importAry,1,importBin,0); // IMPORT ONE MOVIE AT A TIME INTO THE NEW BIN, SO WE CAN RENAME IT ACCORDINGLY AS IT COMES IN
importCount++;
for (var a = 0; a < importBin.children.numItems; a++){ // LOOP THROUGH THE IMPORT BIN
if( importBin.children[a].name.indexOf(" - ")==-1){
importBin.children[a].name = " "+ importCount + " - " + importBin.children[a].name; // RENAME WITH A THE NUMBER IT WAS IMPORTED, THIS HOLDS THE ORDER OF THE CSV
infoArray[i][infoArray[i].length] = importBin.children[a].nodeId; // STORE THE ITEMS NODEID IN THE CSV ARRAY
}
}
}
}
//~ /* ================================================= END VIDEO 1 ===============================================================*/
app.project.rootItem.createBin("Subclips"); // CREATE BIN FR OUR SUBCLIPS
var moveTo = findBinIndex(app.project.rootItem,"Subclips");
for(a=0;a<app.project.sequences.numSequences;a++){ // LOOP THROUGH ALL SEQS
if(app.project.sequences[a].name=="Auto Seq"){ // FIND OUR CREATED SEQUENCE
app.project.activeSequence = app.project.sequences[a]; // SET THE SEQUENCE TO BE OUR ACTIVE SEQ
}
}
// LOOP THROUGH OUR IMPORTED CLIPS TO CREATE THE EDITED SUBCLIPS.
var numItems = importBin.children.numItems;
for(a=0;a<numItems;a++){
var currentItem = importBin.children[a];
for (var i = 1; i < infoArray.length; i++) { // LOOP THROUGH INFO ARRAY
if(currentItem.type == 1 && currentItem.nodeId == infoArray[ i ][ infoArray[i].length-1 ]){ // CHECK THAT ITEM IS A CLIP, AND THAT THE NODEID'S MATCH WITH OUR CSV LINE.
var subclipStart = (infoArray[i][1]);
var subclipEnd = (infoArray[i][2]);
var newSub = currentItem.createSubClip(infoArray[i][0] , subclipStart , subclipEnd , 0 , 1 , 1 ); // CREATE THE SUBCLIPS ( NAME , IN , OUT , BOUNDARIES (BINARY) , TAKE VIDEO , TAKE AUDIO)
newSub.moveBin(moveTo); // MOVE INTO THE SUBCLIPS BIN
var activeSeq = app.project.activeSequence;
placeClip(activeSeq, newSub , bufferTime); //subCounter++;
}
}
}
/* ================================================= WOOHOO WERE DONE! ===============================================================*/
// FUNCTION LIST
function findBinIndex(currentItem, nameToFind){
if(nameToFind){
for (var j = 0; j < currentItem.children.numItems; j++){
var currentChild = currentItem.children[j];
if (currentChild.type == ProjectItemType.BIN && currentChild.name.toUpperCase() == nameToFind.toUpperCase() ){
globalBind = currentChild;
return currentChild;
}
if (currentChild.type == ProjectItemType.BIN){
findBinIndex(currentChild, nameToFind);
}
}
} else {
alert("No bin was targeted");
}
}
function timecodeToSeconds(arrayObject){ (I avoid this function because I don't want flat number seconds)
var timeCodeArray = [];
timeCodeArray = arrayObject.split(":");
var timeCode = (Number(timeCodeArray[0])*60) + Number((timeCodeArray[1]));
return timeCode;
}
function placeClip(activeSeq , subClip , buffer){
subClip.setScaleToFrameSize();// SET SCALE TO FRAME SIZE
if(activeSeq.videoTracks[0].clips.numItems == 0){ // IF THERE ARE NOT CLIPS IN THE SEQUENCE, PLACE FRIST CLIP AT TIME ZERO
activeSeq.videoTracks[0].insertClip(subClip,0)
//clipCounter++;
} else { // IF THERE ARE CLIPS IN THE SEQUENCE, PLACE AT THE TIMECODE OF END OF THE LAS CLIP + THE BUFFER TIME
var numClips = activeSeq.videoTracks[0].clips.numItems;
var insertTime = activeSeq.videoTracks[0].clips[numClips - 1].end.seconds + buffer;
activeSeq.videoTracks[0].insertClip(subClip,insertTime);
//clipCounter++;
}
}