public void FromVegas(Vegas vegas)
        {
            string         rendererName = Script.Args.ValueOf("renderer");
            string         templateName = Script.Args.ValueOf("template");
            Renderer       renderer     = vegas.Renderers.FindByName(rendererName);
            RenderTemplate template     = null;

            if (renderer != null)
            {
                template = renderer.Templates.FindByName(templateName);
            }
            if (template == null)
            {
                vegas.ShowError("Render template not found.");
                return;
            }
            string       path   = vegas.Project.FilePath;
            string       saveas = Path.GetDirectoryName(path) + "\\" + Path.GetFileNameWithoutExtension(path) + ".rendered.mp4";
            RenderStatus status = vegas.Render(saveas, template);

            if (status == RenderStatus.Complete || status == RenderStatus.Canceled || status == RenderStatus.Quit)
            {
                vegas.Exit();
            }
            else
            {
                vegas.ShowError("Render incomplete. Please try again.");
                return;
            }
        }
        public int ProcessFolder(DirectoryInfo diStart, DirectoryInfo diMedia, string subMedia, string subRender,
                                 RenderTemplate renderTemplate, RenderStatusManager rsm)
        {
            int rendered = 0;

            if (rsm.Cancel)
            {
                return(rendered);
            }
            System.Diagnostics.Debug.WriteLine("Checking {0}", diStart.FullName);
            // Process for files
            foreach (FileInfo fi in diStart.GetFiles("*-1st.veg"))
            {
                if (rsm.Cancel)
                {
                    return(rendered);
                }
                if (ProcessFile(fi, diMedia, subMedia, subRender, renderTemplate, rsm))
                {
                    rendered++;
                }
            }

            foreach (FileInfo fi in diStart.GetFiles("*.veg"))
            {
                if (rsm.Cancel)
                {
                    return(rendered);
                }
                // Make sure we didn't process this as a 1st file and it's not set to do not render
                if (fi.FullName.ToLower().IndexOf("-1st.veg") == -1 &&
                    fi.FullName.ToLower().IndexOf("-dnr.veg") == -1)
                {
                    if (ProcessFile(fi, diMedia, subMedia, subRender, renderTemplate, rsm))
                    {
                        rendered++;
                    }
                }
            }
            // Process subdirectories
            foreach (DirectoryInfo subDi in diStart.GetDirectories())
            {
                rendered += ProcessFolder(subDi, diMedia, subMedia, subRender, renderTemplate, rsm);
            }

            return(rendered);
        }
        public bool RenderFile(FileInfo fiVeg, FileInfo fiRendered, RenderTemplate renderTemplate, RenderStatusManager rsm, object dr)
        {
            DateTime renderStart = DateTime.Now;
            DateTime renderEnd;
            TimeSpan renderTime;

            rsm.Dialog.Hide(); // Temporarily hide because during load the UX kills it.
            rsm.UpdateField(dr, RenderStatusManager.Fields.Names.RenderStart, renderStart);
            if (myVegas.Project != null)
            {
                // No close method so create a clean new project without the ability to prompt for save of existing
                // and then open after that.
                myVegas.NewProject(false, false);
            }
            myVegas.UpdateUI();
            rsm.UpdateField(dr, RenderStatusManager.Fields.Names.RenderStatus, "Loading");
            myVegas.OpenFile(fiVeg.FullName);
            myVegas.UpdateUI();
            myVegas.WaitForIdle();
            rsm.Dialog.Show();

            // Render
            RenderArgs ra = new RenderArgs();

            ra.OutputFile     = fiRendered.FullName;
            ra.RenderTemplate = renderTemplate;
            Timecode projectLength = GetProjectLength();

            rsm.UpdateField(dr, RenderStatusManager.Fields.Names.ProjectLength, projectLength);
            ra.Length     = projectLength;
            ra.StartNanos = 0;

            rsm.UpdateField(dr, RenderStatusManager.Fields.Names.RenderStatus, "Rendering");
            RenderStatus status = myVegas.Render(ra);

            renderEnd  = DateTime.Now;
            renderTime = renderEnd - renderStart;
            rsm.UpdateField(dr, RenderStatusManager.Fields.Names.RenderEnd, renderEnd);
            rsm.UpdateField(dr, RenderStatusManager.Fields.Names.RenderTime, renderTime);
            rsm.UpdateField(dr, RenderStatusManager.Fields.Names.RenderStatus, status.ToString());
            return(status == RenderStatus.Complete);
        }
        public bool ProcessFile(FileInfo fiVeg, DirectoryInfo diMedia, string subMedia, string subRender,
                                RenderTemplate renderTemplate, RenderStatusManager rsm)
        {
            object   dr           = rsm.StartProjectProcessing(fiVeg);
            DateTime lastMedia    = UpdateMediaFiles(diMedia, fiVeg.Directory, subMedia, rsm, dr);
            FileInfo renderedFile = GetRenderedFile(fiVeg, subRender);

            if ((!renderedFile.Exists ||
                 renderedFile.LastWriteTimeUtc < fiVeg.LastWriteTimeUtc ||
                 renderedFile.LastWriteTimeUtc < lastMedia ||
                 renderedFile.Length == 0) && renderedFile.Directory.Exists)
            {
                return(RenderFile(fiVeg, renderedFile, renderTemplate, rsm, dr));
            }
            else
            {
                rsm.UpdateField(dr, RenderStatusManager.Fields.Names.RenderStatus, "Skipped");
            }
            return(false);
        }
 public RenderItem(Renderer r, RenderTemplate t, String e)
 {
     this.Renderer = r;
     this.Template = t;
     // need to strip off the extension's leading "*"
     if (null != e) this.Extension = e.TrimStart('*');
 }
 private static bool IsTemplateValid(int projectAudioChannelCount, bool projectHasVideo, bool projectHasAudio, RenderTemplate template)
 {
     // filter out invalid templates
     if (!template.IsValid())
     {
         return false;
     }
     // filter out video templates when project has
     // no video.
     if (!projectHasVideo && (0 < template.VideoStreamCount))
     {
         return false;
     }
     // filter out audio-only templates when project has no audio
     if (!projectHasAudio && (0 == template.VideoStreamCount) && (0 < template.AudioStreamCount))
     {
         return false;
     }
     // filter out templates that have more channels than the project
     if (projectAudioChannelCount < template.AudioChannelCount)
     {
         return false;
     }
     // filter out templates that don't have
     // exactly one file extension
     String[] extensions = template.FileExtensions;
     if (1 != extensions.Length)
     {
         return false;
     }
     return true;
 }
示例#7
0
    DialogResult DoDialog()
    {
        Form form = new Form();

        form.SuspendLayout();
        form.AutoScaleMode       = AutoScaleMode.Font;
        form.AutoScaleDimensions = new SizeF(6F, 13F);
        form.FormBorderStyle     = FormBorderStyle.FixedDialog;
        form.StartPosition       = FormStartPosition.CenterParent;
        form.MaximizeBox         = false;
        form.MinimizeBox         = false;
        form.HelpButton          = false;
        form.ShowInTaskbar       = false;
        form.Text         = "Render Audio Tracks";
        form.AutoSize     = true;
        form.AutoSizeMode = AutoSizeMode.GrowAndShrink;

        TableLayoutPanel layout = new TableLayoutPanel();

        layout.AutoSize     = true;
        layout.AutoSizeMode = AutoSizeMode.GrowAndShrink;
        layout.GrowStyle    = TableLayoutPanelGrowStyle.AddRows;
        layout.ColumnCount  = 3;
        layout.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 140));
        layout.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 180));
        layout.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 80));
        form.Controls.Add(layout);

        Label label;

        label           = new Label();
        label.Text      = "Output Folder:";
        label.AutoSize  = false;
        label.TextAlign = ContentAlignment.MiddleLeft;
        label.Margin    = new Padding(8, 8, 8, 4);
        label.Anchor    = AnchorStyles.Left | AnchorStyles.Right;
        layout.Controls.Add(label);
        layout.SetColumnSpan(label, 3);

        if (!String.IsNullOrEmpty(myVegas.Project.FilePath))
        {
            OutputDirBox.Text = Path.GetDirectoryName(myVegas.Project.FilePath);
        }
        else
        {
            OutputDirBox.Text = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        }
        OutputDirBox.Anchor = AnchorStyles.Left | AnchorStyles.Right;
        OutputDirBox.Margin = new Padding(16, 8, 8, 4);
        layout.Controls.Add(OutputDirBox);
        layout.SetColumnSpan(OutputDirBox, 2);

        BrowseButton.FlatStyle = FlatStyle.System;
        BrowseButton.Text      = "Browse";
        BrowseButton.AutoSize  = true;
        layout.Controls.Add(BrowseButton);


        label           = new Label();
        label.Text      = "Save as type:";
        label.AutoSize  = false;
        label.TextAlign = ContentAlignment.MiddleLeft;
        label.Margin    = new Padding(8, 8, 8, 4);
        label.Anchor    = AnchorStyles.Left | AnchorStyles.Right;
        layout.Controls.Add(label);

        RendererCombo.Anchor = AnchorStyles.Left | AnchorStyles.Right;
        layout.Controls.Add(RendererCombo);
        layout.SetColumnSpan(RendererCombo, 2);

        label           = new Label();
        label.Text      = "Template:";
        label.AutoSize  = false;
        label.TextAlign = ContentAlignment.MiddleLeft;
        label.Margin    = new Padding(8, 8, 8, 4);
        label.Anchor    = AnchorStyles.Left | AnchorStyles.Right;
        layout.Controls.Add(label);

        TemplateCombo.Anchor = AnchorStyles.Left | AnchorStyles.Right;
        layout.Controls.Add(TemplateCombo);
        layout.SetColumnSpan(TemplateCombo, 2);

        UseSelectionBox.Text      = "Render loop region only";
        UseSelectionBox.Checked   = CanUseSelection && UseSelection;
        UseSelectionBox.Enabled   = CanUseSelection;
        UseSelectionBox.AutoSize  = false;
        UseSelectionBox.FlatStyle = FlatStyle.System;
        UseSelectionBox.Margin    = new Padding(16, 8, 8, 4);
        UseSelectionBox.Anchor    = AnchorStyles.Left | AnchorStyles.Right;
        layout.Controls.Add(UseSelectionBox);
        layout.SetColumnSpan(UseSelectionBox, 3);

        FlowLayoutPanel buttonPanel = new FlowLayoutPanel();

        buttonPanel.FlowDirection = FlowDirection.RightToLeft;
        buttonPanel.Size          = Size.Empty;
        buttonPanel.AutoSize      = true;
        buttonPanel.AutoSizeMode  = AutoSizeMode.GrowAndShrink;
        buttonPanel.Margin        = new Padding(8, 8, 8, 8);
        buttonPanel.Anchor        = AnchorStyles.Top | AnchorStyles.Right;
        layout.Controls.Add(buttonPanel);
        layout.SetColumnSpan(buttonPanel, 3);

        Button cancelButton = new Button();

        cancelButton.Text         = "Cancel";
        cancelButton.FlatStyle    = FlatStyle.System;
        cancelButton.DialogResult = DialogResult.Cancel;
        buttonPanel.Controls.Add(cancelButton);
        form.CancelButton = cancelButton;

        okButton.Text         = "OK";
        okButton.FlatStyle    = FlatStyle.System;
        okButton.DialogResult = DialogResult.OK;
        buttonPanel.Controls.Add(okButton);
        form.AcceptButton = okButton;

        BrowseButton.Click += HandleBrowseOutputDir;
        FillRenderers(RendererCombo);
        RendererCombo.SelectedValueChanged += HandleRendererChanged;
        if (0 < RendererCombo.Items.Count)
        {
            RendererCombo.SelectedIndex = 0;
        }
        form.ResumeLayout();


        DialogResult result = form.ShowDialog(myVegas.MainWindow);

        if (DialogResult.OK == result)
        {
            OutputDir        = OutputDirBox.Text;
            SelectedTemplate = TemplateCombo.SelectedItem as RenderTemplate;
            if (CanUseSelection)
            {
                UseSelection = UseSelectionBox.Checked;
            }
        }
        return(result);
    }
        private void RenderAllStale(object sender, EventArgs e)
        {
            try {
                // Set Defaults
                startDirectory     = "V:\\AIIM\\Change";
                mediaDirectory     = startDirectory;
                mediaSubDirectory  = "Media";
                renderSubDirectory = "Render";
                renderTemplate     = "1920x1080-30fps-6/1.5mbps";

                RenderStaleConfiguration rsc = new RenderStaleConfiguration();
                rsc.LoadScreen(startDirectory, mediaDirectory, mediaSubDirectory, renderSubDirectory, renderTemplate);
                rsc.ShowDialog();
                if (!rsc.Valid)
                {
                    return;
                }
                rsc.GetValues(out startDirectory, out mediaDirectory, out mediaSubDirectory, out renderSubDirectory, out renderTemplate);

                // Find Render Template
                RenderTemplate rt = null;
                foreach (Renderer renderer in myVegas.Renderers)
                {
                    foreach (RenderTemplate temp in renderer.Templates)
                    {
                        if (temp.Name == renderTemplate)
                        {
                            rt = temp; break;
                        }
                    }
                    if (rt != null)
                    {
                        break;
                    }
                }

                // Setup UX
                RenderStatusManager rsm = new RenderStatusManager();
                RenderStaleStatus   rss = new RenderStaleStatus();
                rss.SetRenderStatusManager(rsm);
                rsm.Dialog = rss;
                rss.Show();
                // Process
                DirectoryInfo fiStart = new DirectoryInfo(startDirectory);
                DirectoryInfo fiMedia = new DirectoryInfo(mediaDirectory);
                if (fiStart.Exists && fiMedia.Exists && rt != null)
                {
                    ProcessFolder(fiStart, fiMedia, mediaSubDirectory, renderSubDirectory, rt, rsm);
                }
                rss.Close();

                SaveFileDialog sfd = new SaveFileDialog();
                sfd.FileOk += Sfd_FileOk;
                sfd.ShowDialog();
                if (saveOk)
                {
                    File.WriteAllText(sfd.FileName, rsm.GetTableAsCSV());
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Exception", MessageBoxButtons.OK);
            }
        }
示例#9
0
    public void FromVegas(Vegas vegas)
    {
        if (vegas.Project.Length.ToMilliseconds() == 0)
        {
            return;
        }
        SetDllDirectory(VegasDir + "\\Script Depends");
        string RegKey = "HKEY_CURRENT_USER\\Software\\Sony Creative Software\\Vegas Pro\\frameserver";
        int    AddBuffer = 1; int RenderLoop = 1; string outputDirectory = "";

        try {
            AddBuffer       = (int)Registry.GetValue(RegKey, "AddBuffer", 1);
            RenderLoop      = (int)Registry.GetValue(RegKey, "RenderLoopRegion", 1);
            outputDirectory = (string)Registry.GetValue(RegKey, "TempDir", "");
        } catch {}
        string outDirDefualt = Environment.GetEnvironmentVariable("TEMP") + "\\frameserver";

        if (outputDirectory == "")
        {
            outputDirectory = outDirDefualt;
        }
        if (!Directory.Exists(outputDirectory))
        {
            try {
                Directory.CreateDirectory(outputDirectory);
            } catch {
                outputDirectory = outDirDefualt;
                Directory.CreateDirectory(outputDirectory);
            }
        }

        // Start virtual file system, AviSynth and HandBrake
        ahktextdll(Unzip(Convert.FromBase64String(StartScriptData)), "", "");
        while (!ahkReady())
        {
            Thread.Sleep(100);
        }
        ahkassign("TempFileDir", outputDirectory);
        ahkassign("AddBuffer", AddBuffer.ToString());
        ahkassign("RegKey", RegKey);
        ahkassign("VegasDir", VegasDir);
        ahkPause("Off");

        Regex videoRendererRegexp = new Regex(@"DebugMode FrameServer", RegexOptions.Compiled | RegexOptions.IgnoreCase);
        Regex videoTemplateRegexp = new Regex(@"Project Default", RegexOptions.Compiled | RegexOptions.IgnoreCase);

        try
        {
            //Add an empty event to first video track to solve frameserver audio bug
            if (AddBuffer > 0)
            {
                foreach (Track CurTrack in vegas.Project.Tracks)
                {
                    if (CurTrack.IsVideo())
                    {
                        TargetTrack = CurTrack;
                        emptyEvent  = new VideoEvent(vegas.Project, vegas.Project.Length, Timecode.FromMilliseconds(1000), null);
                        CurTrack.Events.Add(emptyEvent);
                        break;
                    }
                }
            }
            // Check timeline's loop-region
            Timecode renderStart  = new Timecode();
            Timecode renderLength = vegas.Project.Length;
            if (RenderLoop > 0)
            {
                renderStart = vegas.SelectionStart;
                if (AddBuffer > 0)
                {
                    renderLength = vegas.SelectionLength + Timecode.FromMilliseconds(1000);
                }
                else
                {
                    renderLength = vegas.SelectionLength;
                }
            }

            //Define export path and file name
            string projDir, projName, videoOutputFile;
            string 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 = outputDirectory + "\\" + OutFileName + ".avi";
            if (null == videoOutputFile)
            {
                throw new Exception("Process terminated");
            }
            Renderer aviRenderer = FindRenderer(videoRendererRegexp, vegas);
            if (null == aviRenderer)
            {
                throw new Exception("Could not find DebugMode FrameServer");
            }

            // Start export
            RenderTemplate videoTemplate = FindRenderTemplate(aviRenderer, videoTemplateRegexp, vegas);
            if (null == videoTemplate)
            {
                throw new Exception("Could not find the render preset defined by the script");
            }
            RenderStatus renderStatus = vegas.Render(videoOutputFile, videoTemplate, renderStart, renderLength);
            if (AddBuffer > 0)
            {
                TargetTrack.Events.Remove(emptyEvent);
            }
        } catch (Exception ex) {
            if (AddBuffer > 0)
            {
                TargetTrack.Events.Remove(emptyEvent);
            }
            MessageBox.Show(ex.ToString());
        }
    }