RenderOnMarkers Script - Broke?

RNLVideo wrote on 12/4/2005, 8:30 PM
I've used a variation of the RenderOnMarkers script for a long time (years?) (thanks, Ed!) and thought it had been running right under Vegas 6.

Tonight, under deadline (of course), I'm trying to run it and it's not breaking the renders off at the markers (which are always at the end of each event courtesy of the ThumbnailAtMarker script). It is trying to render all of my events together (which I don't want in this case - I need to render out each individual event to .wmv, .mov and .rm).

Has something changed that I need to adjust for in the script? Here's what I'm using:

/**
* This script will render between markers
*
* Written By: Edward Troxel
* www.jetdv.com/tts
* Modified: 05-29-2003
**/

import System;
import System.Text;
import System.IO;
import System.Windows.Forms;
import System.Object;
import Sony.Vegas;

// here are some default variables for the GUI.
//Path names must use "\\" to indicate a standard path "\"
//so, defaultBasePath refers to D:\renders
var defaultBasePath = "C:\\TT400Photos\\";

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

try {

var mrkEnum = new Enumerator(Vegas.Project.Markers);

var zeroMark = new Timecode(0);
var PrevMark = zeroMark;
var currMark = zeroMark;
var SubClipNum = 1;
var renderStart : Timecode;
var totalLength = Vegas.Project.Length;
var renderLength : Timecode;

var renderer = FindRenderer(/Windows Media Video V9/);
if (null == renderer)
throw "failed to find renderer";

var template = FindRenderTemplate(renderer, /512 Kbps Video/);
if (null == template)
throw "failed to find template";

var renderer2 = FindRenderer(/RealMedia 9/);
if (null == renderer)
throw "failed to find renderer";

var template2 = FindRenderTemplate(renderer2, /450 Kbps Video for 512K DSL or Cable/);
if (null == template)
throw "failed to find template";

var renderer3 = FindRenderer(/QuickTime 6/);
if (null == renderer)
throw "failed to find renderer";

var template3 = FindRenderTemplate(renderer3, /512 Kbps Video/);
if (null == template)
throw "failed to find template";

//Go through the list of Markers
while (!mrkEnum.atEnd()) {
currMark = Marker(mrkEnum.item()).Position;

renderStart = PrevMark;
renderLength = currMark - PrevMark;
DoRender(defaultBasePath + "WM9_512k_#" + SubClipNum + ".wmv", renderer, template, renderStart, renderLength);
DoRender(defaultBasePath + "RM8_512k_#" + SubClipNum + ".rm", renderer2, template2, renderStart, renderLength);
DoRender(defaultBasePath + "QT6_512k_#" + SubClipNum + ".mov", renderer3, template3, renderStart, renderLength);

PrevMark = currMark
SubClipNum++;
mrkEnum.moveNext();
}

// Do the final clip
renderStart = PrevMark;
renderLength = totalLength - PrevMark;
DoRender(defaultBasePath + "WM9_512k_#" + SubClipNum + ".wmv", renderer, template, renderStart, renderLength);
DoRender(defaultBasePath + "RM8_512k_#" + SubClipNum + ".rm", renderer2, template2, renderStart, renderLength);
DoRender(defaultBasePath + "QT6_512k_#" + SubClipNum + ".mov", renderer3, template3, renderStart, renderLength);

} catch (e) {
MessageBox.Show(e);
}


// 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) {
// 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 FindRenderer(rendererRegExp : RegExp) : Renderer {
var rendererEnum : Enumerator = new Enumerator(Vegas.Renderers);
while (!rendererEnum.atEnd()) {
var renderer : Renderer = Renderer(rendererEnum.item());
if (null != renderer.FileTypeName.match(rendererRegExp)) {
return renderer;
}
rendererEnum.moveNext();
}
return null;
}

function FindRenderTemplate(renderer : Renderer, templateRegExp : RegExp) : RenderTemplate {
var templateEnum : Enumerator = new Enumerator(renderer.Templates);
while (!templateEnum.atEnd()) {
var renderTemplate : RenderTemplate = RenderTemplate(templateEnum.item());
if (null != renderTemplate.Name.match(templateRegExp)) {
return renderTemplate;
}
templateEnum.moveNext();
}
return null;
}

I'm using Vegas 6.0c.

Rick

Comments

jetdv wrote on 12/5/2005, 6:35 AM
On a quick glance, I can't see anything wrong. Have you been using it on Vegas 6.0c?
RNLVideo wrote on 12/5/2005, 6:52 AM
I thought I had.... I edit the path each time, so a glance at the file date shows that I used it back in August (was 6.0c out then? I forget...)
RNLVideo wrote on 12/5/2005, 7:53 AM
Well... not sure what the root cause was, but now it is working. I deleted all of the markers, ran the markers at events script again and all is well once again.

Wish I would have thought of that last night so my renders would have been finished this morning (only 218 to go....).
jetdv wrote on 12/5/2005, 7:54 AM
Looks like 6.0c was released on 9/20.
jetdv wrote on 12/5/2005, 8:35 AM
I can also confirm your results - but I also confirmed that the start and length values are correct. I also confirmed that the region render (I went to DV-AVI) in Excalibur appeared to work correctly. More testing definitely appears to be in order.
jetdv wrote on 12/5/2005, 9:04 AM
Ok, this seemed to work for me: REMOVE the first marker on the timeline. With a marker at the beginning of the timeline, it seems to want to render FROM 00:00:00:00 TO 00:00:00:00 and does the entire timeline. For some reason, that seems to affect the additional renders as well.

When I removed that marker, the first render I got was from the beginning of the timeline to the first marker. The rest of the renders appeared to work correctly after that as well.
RNLVideo wrote on 12/5/2005, 5:26 PM
Thanks, Ed. I did run into one more (unrelated?) problem - I got an out of memory error after rendering 177 of about 220 clips. Unfortunately, I didn't write down the specifics; I was monitoring the render from a Remote Desktop Connection. I thought I heard that there were some "differences" in memory use in V6; any ideas?

FWIW, over the past couple of years I've thrown it 300+ clips at a time (actually 900 renders considering one each .wmv, .rm and .mov) and don't recall any similar problems.

Rick
jetdv wrote on 12/5/2005, 5:50 PM
When rendering something like this, you'll be better off leaving the RAM Preview setting at the default (16 megs). Another thing that *may* help is reducing the number of threads down to 1.
RNLVideo wrote on 12/7/2005, 6:17 AM
Thanks, Ed - I'll do some experimenting.