can someone modify this script?

CDM wrote on 6/9/2010, 11:54 AM
I need this script to render markers when it renders all the regions in a project. Is this possible?

thanks in advance:


import System;
import System.Collections;
import System.Text;
import System.IO;
import System.Drawing;
import System.Windows.Forms;
import Sony.Vegas;

// set this to true if you want to allow files to be overwritten
var overwriteExistingFiles = true;

try {

// here are some default variables for the GUI.
var defaultBasePath : String = Vegas.Project.FilePath;
if ((null == defaultBasePath) || (0 == defaultBasePath.length)) {
defaultBasePath = "E:\\JHM_";
} else {
var dir = Path.GetDirectoryName(defaultBasePath);
var fileName = Path.GetFileNameWithoutExtension(defaultBasePath);
defaultBasePath = dir + Path.DirectorySeparatorChar + fileName + "_";
}

var dlog = new BatchRenderDialog();
if (DialogResult.OK == dlog.ShowDialog()) {
var selectedTemplates = dlog.GetCheckedTemplates();
// inform the user of some special failure cases
if (0 == selectedTemplates.Count)
throw "no render templates selected";
var outputFilePath = dlog.fileNameBox.Text;
var renderMode = RenderMode.Project;
if (dlog.renderRegions.Checked) {
renderMode = RenderMode.Regions;
} else if (dlog.renderSelection.Checked) {
renderMode = RenderMode.Selection;
}
var renderSelection = dlog.renderSelection.Checked;
DoBatchRender(selectedTemplates, outputFilePath, renderMode);
}
} catch (e) {
if (!e.skipMessageBox)
MessageBox.Show(e);
}

enum RenderMode {
Project = 0,
Selection,
Regions,
}

function DoBatchRender(selectedTemplates : ArrayList,
basePath : String,
renderMode : RenderMode)
{
var outputDirectory = Path.GetDirectoryName(basePath);
var baseFileName = Path.GetFileName(basePath);

// make sure the output directory exists
if (!Directory.Exists(outputDirectory))
{
var msg = new StringBuilder("The output directory (");
msg.Append(outputDirectory);
msg.Append(") does not exist.\n");
msg.Append("Please specify directory and base file name using the Browse button.");
throw msg;
}

var zero : int = 0;
var zeroTime = new Timecode();
var renderStart, renderLength;

var templateFound = false;

// enumerate through each selected render template
var selections = new Enumerator(selectedTemplates);
while (!selections.atEnd()) {
var tag = selections.item();
var renderer = tag.renderer;
var renderTemplate = tag.template;

// construct the file name (most of it)
var filename = new StringBuilder(outputDirectory);
filename.Append(Path.DirectorySeparatorChar);
filename.Append(FixFileName(baseFileName));

if (renderMode == RenderMode.Regions) {
var regions = new Enumerator(Vegas.Project.Regions);
var regionIndex = zero;
while (!regions.atEnd()) {
var region = regions.item();
var regionFilename = new StringBuilder(filename);

// Pad index number with leading zeros
regionIndex = ( regionIndex < 10 ) ? "0" + regionIndex : regionIndex;
//regionFilename.Append(regionIndex);
//regionFilename.Append("_");
regionFilename.Append(region.Label);

// need to strip off the extension's leading "*"
regionFilename.Append(renderer.FileExtension.substring(1));

// Render the region
renderStart = region.Position;
renderLength = region.Length
DoRender(regionFilename.ToString(), renderer, renderTemplate, renderStart, renderLength);
regionIndex++;
regions.moveNext();
}
} else {
// need to strip off the extension's leading "*"
filename.Append(renderer.FileExtension.substring(1));

if (renderMode == RenderMode.Selection) {
renderStart = Vegas.SelectionStart;
renderLength = Vegas.SelectionLength;
} else {
renderStart = new Timecode();
renderLength = Vegas.Project.Length;
}

DoRender(filename.ToString(), renderer, renderTemplate, renderStart, renderLength);
}
selections.moveNext();
}
}

/**
* Perform the render. The Render method returns a member of the
* RenderStatus enumeration. If it is anything other than OK, exit
* the loops. This will throw an error message string if the render
* does not complete successfully.
**/

function DoRender(fileName, rndr, rndrTemplate, start, length) {
ValidateFileName(fileName);

// make sure the file does not already exist
if (!overwriteExistingFiles && File.Exists(fileName)) {
throw "File already exists: " + fileName;
}

// perform the render. The Render method returns
// a member of the RenderStatus enumeration. If
// it is anything other than OK, exit the loops.

var status = Vegas.Render(fileName, rndrTemplate, start, length);

// if the render completed successfully, just return
if (status == RenderStatus.Complete)
return;

// if the user canceled, throw out a special message that won't be
// displayed.
if (status == RenderStatus.Canceled) {
var cancelMsg = new String("User canceled");
cancelMsg.skipMessageBox = true;
throw cancelMsg;
}

// if the render failed, throw out a detailed error message.
var msg : StringBuilder = new StringBuilder("Render failed:\n");
msg.Append("\n file name: ");
msg.Append(fileName);
msg.Append("\n Renderer: ");
msg.Append(rndr.FileTypeName);
msg.Append("\n Template: ");
msg.Append(rndrTemplate.Name);
msg.Append("\n Start Time: ");
msg.Append(start.ToString());
msg.Append("\n Length: ");
msg.Append(length.ToString());
throw msg;
}

function FixFileName(name : System.String) : System.String
{
var replacementChar : System.Char = '-';
var colon : System.Char = ':';
name = name.Replace(Path.DirectorySeparatorChar, replacementChar);
name = name.Replace(colon, replacementChar);
// var illegalCharCount = Path.InvalidPathChars.Length;
var illegalCharCount = Path.GetInvalidPathChars().Length;
var i = 0;
while (i < illegalCharCount) {
// name = name.Replace(Path.InvalidPathChars[i], replacementChar);
name = name.Replace(Path.GetInvalidPathChars()[i], replacementChar);
i++;
}
return name;
}

function ValidateFileName(fileName : System.String) {
if (fileName.length > 260)
throw "file name too long: " + fileName;
// var illegalCharCount = Path.InvalidPathChars.Length;
var illegalCharCount = Path.GetInvalidPathChars().Length;
var i = 0;
while (i < illegalCharCount) {
// if (0 <= fileName.IndexOf(Path.InvalidPathChars[i])) {
if (0 <= fileName.IndexOf(Path.GetInvalidPathChars()[i])) {
throw "invalid file name: " + fileName;
}
i++;
}
}

class BatchRenderDialog extends Form {
var browseButton : BrowseButton;
var fileNameBox : TextBox;
var templateTree : TemplateTreeView;
var renderProject : RadioButton;
var renderRegions : RadioButton;
var renderSelection : RadioButton;

function BatchRenderDialog() {
this.Text = "Batch Render";
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.StartPosition = FormStartPosition.CenterScreen;
this.Width = 600;

var titleBarHeight = this.Height - this.ClientSize.Height;
var buttonWidth = 80;

fileNameBox = addTextControl("Base File Name", titleBarHeight + 6, 460, 10, defaultBasePath);

browseButton = new BrowseButton(fileNameBox);
browseButton.Left = fileNameBox.Right + 4;
browseButton.Top = fileNameBox.Top - 2;
browseButton.Width = buttonWidth;
browseButton.Height = browseButton.Font.Height + 12;
browseButton.Text = "Browse...";
Controls.Add(browseButton);

templateTree = new TemplateTreeView();
templateTree.Left = 10;
templateTree.Width = this.Width - 20;
templateTree.Top = browseButton.Bottom + 10;
templateTree.Height = 300;
templateTree.CheckBoxes = true;
Controls.Add(templateTree);
FillTemplateTree();

var buttonTop = templateTree.Bottom + 16;
var buttonsLeft = this.Width - (2*(buttonWidth+10));

renderProject = addRadioControl("Render Project", 6, buttonTop);
renderSelection = addRadioControl("Render Selection", renderProject.Right, buttonTop);
renderRegions = addRadioControl("Render Regions", renderSelection.Right, buttonTop);

// New code added here to correctly identify whether to render selection, project, or region
var dSelStart = Vegas.SelectionStart.ToMilliseconds();
var dSelEnd = Vegas.SelectionStart.ToMilliseconds() + Vegas.SelectionLength.ToMilliseconds();
var dCursor = Vegas.Cursor.ToMilliseconds();

if (dSelStart == dCursor || dSelEnd == dCursor) {
renderSelection.Checked = true;
} else {
renderProject.Checked = true;
}

var okButton = new Button();
okButton.Text = "OK";
okButton.Left = this.Width - (2*(buttonWidth+10));
okButton.Top = buttonTop;
okButton.Width = buttonWidth;
okButton.Height = okButton.Font.Height + 12;
okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
AcceptButton = okButton;
Controls.Add(okButton);

var cancelButton = new Button();
cancelButton.Text = "Cancel";
cancelButton.Left = this.Width - (1*(buttonWidth+10));
cancelButton.Top = buttonTop;
cancelButton.Height = cancelButton.Font.Height + 12;
cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
CancelButton = cancelButton;
Controls.Add(cancelButton);

this.Height = titleBarHeight + okButton.Bottom + 8;

}

function addTextControl(labelName, left, width, top, defaultValue) {
var label = new Label();
label.AutoSize = true;
label.Text = labelName + ":";
label.Left = left;
label.Top = top + 4;
Controls.Add(label);

var textbox = new TextBox();
textbox.Multiline = false;
textbox.Left = label.Right;
textbox.Top = top;
textbox.Width = width - (label.Width);
textbox.Text = defaultValue;
Controls.Add(textbox);

return textbox;
}

function addRadioControl(labelName, left, top) {
var label = new Label();
label.AutoSize = true;
label.Text = labelName;
label.Left = left;
label.Top = top + 4;
Controls.Add(label);

var radiobutton = new RadioButton();
radiobutton.Left = label.Right;
radiobutton.Width = 36;
radiobutton.Top = top;
Controls.Add(radiobutton);

return radiobutton;
}

function FillTemplateTree() {
var renderers = new Enumerator(Vegas.Renderers);
while (!renderers.atEnd()) {
var renderer = renderers.item();
var rendererNode = new TreeNode(renderer.FileTypeName);
rendererNode.Tag = renderer;
templateTree.Nodes.Add(rendererNode);
var templates = new Enumerator(renderer.Templates);
while (!templates.atEnd()) {
try {
var template = templates.item();
var templateNode = new TreeNode(template.Name);
var tag = new Object();
tag.renderer = renderer;
tag.template = template;
templateNode.Tag = tag;
rendererNode.Nodes.Add(templateNode);
templates.moveNext();
} catch (e) {
templates.moveNext();
}
}
renderers.moveNext();
}
}

function GetCheckedTemplates() {
var checkedTemplates = new ArrayList();
var rendererNodes = new Enumerator(templateTree.Nodes);
while (!rendererNodes.atEnd()) {
var rendererNode = rendererNodes.item();
GetCheckedTemplatesHelper(checkedTemplates, new Enumerator(rendererNode.Nodes));
rendererNodes.moveNext();
}
return checkedTemplates;
}

function GetCheckedTemplatesHelper(checkedTemplates, templateNodes) {
if (templateNodes.atEnd()) return;
var templateNode = templateNodes.item();

if (templateNode.Checked) {
checkedTemplates.Add(templateNode.Tag);
}
templateNodes.moveNext();
GetCheckedTemplatesHelper(checkedTemplates, templateNodes);
}
}

// Button subclass that shows a save file dialog when clicked
class BrowseButton extends Button {
var myResultBox = null;

function BrowseButton(resultBox) {
myResultBox = resultBox;
}

protected override function OnClick(e : EventArgs) {
var saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "All Files (*.*)|*.*";
saveFileDialog.CheckPathExists = true;
saveFileDialog.AddExtension = false;
if (null != myResultBox) {
var filename = myResultBox.Text;
var initialDir = Path.GetDirectoryName(filename);
if (Directory.Exists(initialDir)) {
saveFileDialog.InitialDirectory = initialDir;
}
saveFileDialog.DefaultExt = Path.GetExtension(filename);
saveFileDialog.FileName = Path.GetFileNameWithoutExtension(filename);
}
if (System.Windows.Forms.DialogResult.OK == saveFileDialog.ShowDialog()) {
if (null != myResultBox) {
myResultBox.Text = Path.GetFullPath(saveFileDialog.FileName);
}
}
}
}

class TemplateTreeView extends TreeView {

protected function OnAfterCheck(e : TreeViewEventArgs) {
super.OnAfterCheck(e);
if (e.Node.Checked) {
if (0 != e.Node.Nodes.Count) {
if ((e.Action == TreeViewAction.ByKeyboard) || (e.Action == TreeViewAction.ByMouse)) {
SetChildrenChecked(new Enumerator(e.Node.Nodes), true);
}
} else if (!e.Node.Parent.Checked) {
e.Node.Parent.Checked = true;
}
} else {
if (0 != e.Node.Nodes.Count) {
if ((e.Action == TreeViewAction.ByKeyboard) || (e.Action == TreeViewAction.ByMouse)) {
SetChildrenChecked(new Enumerator(e.Node.Nodes), false);
}
} else if (e.Node.Parent.Checked) {
if (!AnyChildrenChecked(new Enumerator(e.Node.Parent.Nodes))) {
e.Node.Parent.Checked = false;
}
}
}
}

protected function SetChildrenChecked(kidz, checked) {
if (kidz.atEnd()) return;
var kid = kidz.item();
if (kid.Checked != checked)
kid.Checked = checked;
kidz.moveNext();
SetChildrenChecked(kidz, checked);
}

protected function AnyChildrenChecked(kidz) : boolean {
if (kidz.atEnd()) return false;
var kid = kidz.item();
if (kid.Checked)
return true;
kidz.moveNext();
return AnyChildrenChecked(kidz);
}
}

Comments

jetdv wrote on 6/10/2010, 8:55 AM
You have to change this line:

var status = Vegas.Render(fileName, rndrTemplate, start, length);


To something like:

var args = new RenderArgs();
args.OutputFile = fileName;
args.RenderTemplate = rndrTemplate;
args.Start = start;
args.Length = length;
args.StretchToFill = false;
args.IncludeMarkers = true;

var status = Vegas.Render(args);
CDM wrote on 7/7/2010, 11:58 AM
thanks Jed!
when I run that, it says "Variable False has not been declared"

what do I do about that?
JohnnyRoy wrote on 7/7/2010, 7:49 PM
> when I run that, it says "Variable False has not been declared"

That's because false should be lowercase. try:

args.StretchToFill = false;


~jr
jetdv wrote on 7/8/2010, 7:44 AM
Wonder how that got uppercase???

Sometimes fingers do funny things.