/** * The following script renders a project in two stages for use in DVD * Architect. The first stage renders the video as MPEG-2 (NTSC), * second renders the audio as either AC-3 or 48KHz Wave. * * Revision Date: Feb. 10, 2003 **/ import System; import System.IO; import System.Windows.Forms; import Sony.Vegas; var videoRendererRegexp = /MPEG-2/; var videoTemplateRegexp = /DVD Architect NTSC video/; var audioRendererRegexp; var stereoTemplateRegexp = /Stereo/; var surroundTemplateRegexp = /Surround/; var fourtyEightKHzRegexp = /48/; var audioTemplateRegexp; try { var renderStart = new Timecode(); var renderLength = Vegas.Project.Length; if (Vegas.SelectionLength > new Timecode()) { var msgBoxResult = MessageBox.Show("Render selected region only?", "Region Selected", MessageBoxButtons.YesNo); if (msgBoxResult == DialogResult.Yes) { renderStart = Vegas.SelectionStart; renderLength = Vegas.SelectionLength; } } var projDir, projName, videoOutputFile, audioOutputFile; var projFile = Vegas.Project.FilePath; if ((null == projFile) || (0 == projFile.length)) { projDir = ""; projName = "Untitled"; } else { projDir = Path.GetDirectoryName(projFile) + Path.DirectorySeparatorChar; projName = Path.GetFileNameWithoutExtension(projFile); } videoOutputFile = projDir + projName + ".mpg"; videoOutputFile = ShowSaveFileDialog("MPEG-2 Files (*.mpg)|*.mpg", "Render Video File", videoOutputFile); if (null == videoOutputFile) throw "operation canceled"; var mpegRenderer = findRenderer(videoRendererRegexp); if (null == mpegRenderer) throw "failed to find MPEG-2 renderer"; var videoTemplate = findTemplate(mpegRenderer, videoTemplateRegexp); if (null == videoTemplate) throw "failed to find video template"; audioOutputFile = Path.GetDirectoryName(videoOutputFile) + Path.DirectorySeparatorChar + projName; var audioFileFilter = "AC-3 Files (*.ac3)|*.ac3|Wave Files (*.wav)|*.wav" audioOutputFile = ShowSaveFileDialog(audioFileFilter, "Render Audio File", audioOutputFile); if (null == audioOutputFile) throw "operation canceled"; var audioExtension = Path.GetExtension(audioOutputFile); if (audioExtension == ".ac3") { audioRendererRegexp = /AC-3/; } else if (audioExtension == ".wav") { audioRendererRegexp = /Wave.*Microsoft/; } else { throw "unknown file extension: " + audioOutputFile; } var audioRenderer = findRenderer(audioRendererRegexp); if (null == audioRenderer) throw "failed to find audio renderer"; if (audioExtension == ".wav") { // just do 48KHz stereo. audioTemplateRegexp = fourtyEightKHzRegexp; } else { // if the project is surround, use the surround template, // otherwise use the stereo template. var audioProperties : Sony.Vegas.ProjectAudioProperties = Sony.Vegas.ProjectAudioProperties(Vegas.Project.Audio); if (audioProperties.MasterBusMode == AudioBusMode.Surround) audioTemplateRegexp = surroundTemplateRegexp; else audioTemplateRegexp = stereoTemplateRegexp; } var audioTemplate = findTemplate(audioRenderer, audioTemplateRegexp); if (null == audioTemplate) throw "failed to find audio template"; var renderStatus = Vegas.Render(videoOutputFile, videoTemplate, renderStart, renderLength); if (renderStatus != RenderStatus.Complete) throw "render not complete"; var renderStatus = Vegas.Render(audioOutputFile, audioTemplate, renderStart, renderLength); if (renderStatus != RenderStatus.Complete) throw "render not complete"; } catch (e) { MessageBox.Show(e); } // find a renderer that matches the given regular expression. function findRenderer(re) { var rendererEnum = new Enumerator(Vegas.Renderers); while (!rendererEnum.atEnd()) { var renderer = rendererEnum.item(); if (null != renderer.FileTypeName.match(re)) { return renderer; } rendererEnum.moveNext(); } return null; } // find a render template that matches the given regular expression. function findTemplate(renderer, re) { var templateEnum = new Enumerator(renderer.Templates); while (!templateEnum.atEnd()) { var template = templateEnum.item(); if (null != template.Name.match(re)) { return template; } templateEnum.moveNext(); } return null; } // an example filter: "PNG File (*.png)|*.png|JPEG File (*.jpg)|*.jpg" function ShowSaveFileDialog(filter, title, defaultFilename) { var saveFileDialog = new SaveFileDialog(); if (null == filter) { filter = "All Files (*.*)|*.*"; } saveFileDialog.Filter = filter; saveFileDialog.Title = title; saveFileDialog.CheckPathExists = true; saveFileDialog.AddExtension = true; if (null != defaultFilename) { var initialDir = Path.GetDirectoryName(defaultFilename); if (Directory.Exists(initialDir)) { saveFileDialog.InitialDirectory = initialDir; } saveFileDialog.DefaultExt = Path.GetExtension(defaultFilename); saveFileDialog.FileName = Path.GetFileName(defaultFilename); } if (System.Windows.Forms.DialogResult.OK == saveFileDialog.ShowDialog()) { return Path.GetFullPath(saveFileDialog.FileName); } else { return null; } }