Скрипты (Scripts) - PROVEGAS.RU: SONY VEGAS FORUM
Нажмите для перехода на сайт ProVegas.ru  

Вернуться   PROVEGAS.RU: SONY VEGAS FORUM > ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ > Sony Vegas > Скрипты и утилиты для Sony Vegas

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.09.2008, 01:52   #1
romamos Меню пользователя
Провидеолюбитель
 
Аватар для romamos
 
Регистрация: 06.05.2008
Сообщений: 545
Рейтинг: 48438
romamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверия
По умолчаниюСкрипты (Scripts)

Скрипты и утилиты для Sony Vegas

Помимо множества полезных функций Sony Vegas обладает и чрезвычайно приятной особенностью – он умеет работать со скриптами (scripts).

Для справки: Работа со скриптами доступна лишь в полной версии Vegas. В варианте Vegas Movie Studio такая возможность отсутствует.

Скрипт – это макрокоманда, которая "в один клик" запускает целую цепочку операций в Вегас и позволяет таким образом автоматизировать выполнение множества задач при работе с видео и звуком и сэкономить массу времени.

Для Vegas уже написано множество различных скриптов и они активно используются, однако для большинства русскоязычных пользователей их применение ограничивается тем, что инструкции по работе и настройке скрипта под конкретную систему записываются в исходном коде на английском языке. Пришла пора исправить этот пробел.

Править скрипты можно с помощью встроенного в Windows Notepad, но удобнее это делать с помощью бесплатного редактора Notepad++, в котором есть подсветка синтаксиса скрипта и ряд других полезных возможностей (в т.ч. русский интерфейс)
скачать можно с оф.сайта: http://notepad-plus.sourceforge.net/...ut.php?lang=ru

Предлагаю выкладывать здесь реально работающие скрипты для Вегаса, и дабы уменьшить по возможности число лишних вопросов выкладывать их с ОБЯЗАТЕЛЬНЫМ описанием того, как скрипт работает и какие изменения необходимо внести в исходный код для подстройки под конкретную систему. Поскольку ссылки на файлообменники имеют тенденцию устаревать, просьба в постах выкладывать также и исходный код скрипта, чтобы пользователь, в случае необходимости, мог самостоятельно создать для себя файл скрипта или адаптировать существующий.

Ну и, естественно, хотя большинство скриптов и выкладываются в сети для общего пользования - не стоит забывать о том, что каждый скрипт имеет своего автора. Давайте уважать друг друга и если Вы модифицировали скрипт – укажите это ОТДЕЛЬНОЙ СТРОКОЙ, а не затирайте имя автора исходного кода.

Цитата:
Как пользоваться скриптами?
Для запуска скриптов Вегас (до 6-й версии) использует платфору MS.NET Framework 1.1, Vegas 7 – MS.NET Framework 2, Vegas Pro 8 - использует MS.NET Framework 3, что дает возможность писать скрипты на языках поддерживаемых данной платформой (JScipt, C#, VB & etc.)
Если у вас есть готовый файл скрипта, то для запуска его в Вегас требуется скопировать файл в папку "C:\Program Files\Sony\Vegas *.0\Script Menu\".
VP8 для работы со скриптами создает целых три папки: одну как и прежде в программной папке и еще две под названиями "Vegas Script Menu" и "Vegas Application Extensions" в папке *\\My documents.
Если Вегас уже запущен, то в меню - Tools -> Scripting нужно кликнуть по пункту - Rescan Script Menu Folder.
После перепросмотра (обновления списка) в списке скриптов появится Ваш скрипт. Как назывался файл (имя файла) – так же и будет называться пункт меню.
В VegasPro 8 реализован новый тип скриптов "Extensions", которые работают по типу подключаемых модулей (plug-ins). Дабы не смешивать их с "традиционными" скриптами правильнее будет называть "скриптовыми плагинами". Эти скрипты "живут" в подпунктах "Extensions" меню "View", "Edit" и "Tools"

Платформа .NET. Хороший выбор разработчиков, но когда на форуме публикуется скрипт в тексте (сам так делаю), человеку не знающему программирование сложно понять какой это язык. Т.е. в файл с каким расширением сохранять скопированный код. Данный вопрос можно разрешить методом тыка - копируем текст и создаем в вышеуказанной папке файл с расширением (.js, .cs или .vb). Если расширение не соответствует языку скрипта, то - при попытке запустить скрипт, Вегас выдаст ошибку. Следовательно, переименовываем файл (пишем другое расширение) и пробуем запустить еще раз.

Подсказка:
Если в первых строках кода скрипта видим "import"
import System;
import System.Text;
import System.IO;
import System.Drawing;
import System.Windows.Forms;
import Sony.Vegas;
следовательно - это JScript (filename.js)

Если видим "using":
using System;
using System.IO;
using System.Text;
using System.Drawing;
using System.Collections;
using System.Diagnostics;
using System.Windows.Forms;
using Sony.Vegas;
значит это C# (filename.cs)

Добавка в отношении скриптов.
Если Вам часто приходится использовать какой-то скрипт - его можно назначить на кнопки. Для этого идем в Preferences -> Keyboard -> Context => Global -> Available Commands, и мотаем примерно до середины. Все скрипты представлены в списке с префиксом "Script.Имя скрипта". Назначаем удобную комбинацию на требуемый скрипт и наслаждаемся ....

Второй способ - вынос скрипта на инструментальную панель (Тулбар).
Идем Options->Costumize Toolbar...
Крутим список примерно до середины - после
Run Script
Compile Script

видим список наших скриптов. Добавляем на инструментальную панель, пользуемся.
--------------------
Для каждого скрипта можно создать свою иконку, для этого достаточно в папке (С:\Program Files\Sony\Vegas 6.0\Script Menu) создать PNG файл размером 16*16 px и назвать его по имени скрипта.

Например:
export xml.js
export xml.js.png

Иконки скриптов в Vegas Pro 8 должны быть 32 bit цвет и размер строго 16х16 пикс. Предыдущие версии Вегаса в т.ч. понимали иконки размером 16х32 пикс, VP8 их "не видит".
Подсказка: если при наведении мыша на иконку в Вегас 7 и ниже она меняла цвет, или картинку, то это, наверняка - 16х32. У таких иконок надо просто отрезать половину и пересохранить ее как *.png 16x16 32 bit.
В данном случае, на тулбар будет красоваться индивидуальная иконка, что облегчит последующую идентификацию.

Чтобы появилась иконка, требуется зайти в Tools->Scripting->Rescan Script Menu Folder.

Для того, чтобы создать файл скрипта из исходного кода необходимо в любом текстовом редакторе (например в Windows Notepad) создать новый файл, скопировать в него исходный код и сохранить в папку со скриптами Вегаса. Обратите внимание, что при этом название создаваемого файла прописывается полностью с расширением, а тип отображаемых файлов переводится в режим All files (Все файлы).

Подробную инструкцию по работе со скриптами в Вегасе также можно прочитать здесь на странице переведенной Справки.
Для начинающих скриптописателей и скриптомарателей (модификаторов) весьма полезным будет вот этот Vegas Scripting FAQs. (англ.)


ПРИМЕР ОФОРМЛЕНИЯ ПОСТА

RenderQueue
- скрипт для пакетного просчета нескольких проектов Вегас в один заход с вариантом выключения компьютера по окончании просчета.

Порядок работы:

После запуска скрипта из Вегаса в открывшемся окне выбираете проект, который необходимо просчитать. После нажатия ОК окно закрывается и открывается вновь. Выбираете следующий проект и так до тех пор, пока не выберете все нужные вам проекты. Когда выбирать больше нечего, закрываете вновь открывшееся окно кнопкой Cancel (Отмена), запускается просчет.

Код:
===========================================================================
/**
 * This script can be used to queue up multiple Vegas project files
 * to be rendered.
 *
 * Revision Date: May. 07, 2003
 **/

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

// Modify the following two lines to suit you needs for the output
// format.
var rendererRE = /Video for Windows/;
var templateRE = /PAL DV/;

// Set this to a valid out directory or set it to null if you want the
// output files to be created in the same directory as their project
// file.
var defaultOutputDir = "O:\Rendered";

// Set the following variable to true if you want to allow the script
// to overrwite existing rendered output files.
var allowFileOverwrites = false;

try {
        if ((null != defaultOutputDir) && !Directory.Exists(defaultOutputDir))
                throw "output directory does not exist: " + defaultOutputDir;

        // find the renderer and template
        var renderer : Renderer = FindRenderer(rendererRE);
        if (null == renderer)
                throw "failed to find renderer";
        var renderTemplate :RenderTemplate = FindRenderTemplate(renderer, templateRE);
        if (null == renderTemplate)
                throw "failed to find render template";

        // get file name extension that will be appended to each output file
        var rendererExt = renderer.FileExtension.substring(1);

        // prompt user for the list of project files to be rendererd.
        var renderQueue = new Array();
        var queueIndex = 0
        while (true) {
                var nextVeg = ShowOpenFileDialog("Vegas Projects (*.veg)|*.veg", "Queue Project File (cancel to begin)", null);
                if (null == nextVeg) {
                        break;
                }
                renderQueue[queueIndex] = nextVeg;
                queueIndex++;
        }

        // for each project file in the queue...
        var renderIndex = 0
        while (renderIndex < queueIndex) {
                // open the next project
                var vegFilename = renderQueue[renderIndex];
                if (!Vegas.OpenProject(vegFilename)) {
                        throw "failed to open project file: " + vegFilename;
                }

                // compute the output directory
                var outputDir;
                if (null == defaultOutputDir) {
                        outputDir = Path.GetDirectoryName(vegFilename);
                } else {
                        outputDir = defaultOutputDir;
                }

                // create the output file name
                var outputName = Path.GetFileNameWithoutExtension(vegFilename);
                var outputFilename = outputDir + Path.DirectorySeparatorChar + outputName + rendererExt;
                if ((!allowFileOverwrites) && File.Exists(outputFilename))
                        throw "file already exists: " + outputFilename;

                // perform the render
                var renderStatus = Vegas.Render(outputFilename, renderTemplate);
                if (RenderStatus.Complete != renderStatus)
                        throw "failed to complete render: " + outputFilename;

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


// an example filter: "PNG File (*.png)|*.png|JPEG File (*.jpg)|*.jpg"
function ShowOpenFileDialog(filter, title, defaultFilename) {
        var openFileDialog = new OpenFileDialog();
        if (null == filter) {
                filter = "All Files (*.*)|*.*";
        }
        openFileDialog.Filter = filter;
        if (null != title) openFileDialog.Title = title;
        openFileDialog.CheckPathExists = true;
        openFileDialog.AddExtension = true;
        if (null != defaultFilename) {
                var initialDir = Path.GetDirectoryName(defaultFilename);
                if (Directory.Exists(initialDir)) {
                        openFileDialog.InitialDirectory = initialDir;
                }
                openFileDialog.DefaultExt = Path.GetExtension(defaultFilename);
                openFileDialog.FileName = Path.GetFileName(defaultFilename);
        }
        if (System.Windows.Forms.DialogResult.OK == openFileDialog.ShowDialog()) {
                return Path.GetFullPath(openFileDialog.FileName);
        } else {
                return null;
        }
}

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 (renderTemplate.Name.match(templateRegExp)) {
                        return renderTemplate;
                }
                templateEnum.moveNext();
        }
        return null;
}
==========================================================================
Особенности использования скрипта:

Данный скрипт настроен на просчет в формате AVI (Video for Windows) шаблон PAL DV. Для того, чтобы выбрать другой вариант просчета, необходимо в строках:
#14| var rendererRE = /Video for Windows/;
#15| var templateRE = /PAL DV/;
изменить выделенный текст на те настройки, которые вам нужны
в строке:
# 20| var defaultOutputDir = "O:\Rendered";
задается папка, в которую будут просчитываться Ваши проекты.

Дополнение:

RenderQueueShutDown
– вариант скрипта с выключением компьютера по окончании просчета.

Внимание! Прежде чем запускать данный скрипт сохраните изменения в текущем проекте, и других открытых приложениях, т.к. после его запуска отменить исполнение скрипта будет невозможно, в случае отказа от рендеринга проекта компьютер будет выключен с принудительным закрытием всех приложений в течение 10 сек. и несохраненные данные могут быть потеряны!

Код:
===========================================================================
/**
 * This script can be used to queue up multiple Vegas project files
 * to be rendered.
 *
 * Revision Date: July. 07, 2007
 **/ Modified by romamos 

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

// Modify the following two lines to suit your needs for the output
// format.
var rendererRE = /Video for Windows/;
var templateRE = /PAL DV/;

// Set this to a valid out directory or set it to null if you want the
// output files to be created in the same directory as their project
// file.
var defaultOutputDir = "O:\Rendered";

// Set the following variable to true if you want to allow the script
// to overrwite existing rendered output files.
var allowFileOverwrites = true;

try {
        if ((null != defaultOutputDir) && !Directory.Exists(defaultOutputDir))
                throw "output directory does not exist: " + defaultOutputDir;

        // find the renderer and template
        var renderer : Renderer = FindRenderer(rendererRE);
        if (null == renderer)
                throw "failed to find renderer";
        var renderTemplate :RenderTemplate = FindRenderTemplate(renderer, templateRE);
        if (null == renderTemplate)
                throw "failed to find render template";

        // get file name extension that will be appended to each output file
        var rendererExt = renderer.FileExtension.substring(1);

        // prompt user for the list of project files to be rendererd.
        var renderQueue = new Array();
        var queueIndex = 0
        while (true) {
                var nextVeg = ShowOpenFileDialog("Vegas Projects (*.veg)|*.veg", "Queue Project File (cancel to begin)", null);
                if (null == nextVeg) {
                        break;
                }
                renderQueue[queueIndex] = nextVeg;
                queueIndex++;
        }

        // for each project file in the queue...
        var renderIndex = 0
        while (renderIndex < queueIndex) {
                // open the next project
                var vegFilename = renderQueue[renderIndex];
                if (!Vegas.OpenProject(vegFilename)) {
                        throw "failed to open project file: " + vegFilename;
                }

                // compute the output directory
                var outputDir;
                if (null == defaultOutputDir) {
                        outputDir = Path.GetDirectoryName(vegFilename);
                } else {
                        outputDir = defaultOutputDir;
                }

                // create the output file name
                var outputName = Path.GetFileNameWithoutExtension(vegFilename);
                var outputFilename = outputDir + Path.DirectorySeparatorChar + outputName + rendererExt;
                if ((!allowFileOverwrites) && File.Exists(outputFilename))
                        throw "file already exists: " + outputFilename;

                // perform the render
                var renderStatus = Vegas.Render(outputFilename, renderTemplate);
                if (RenderStatus.Complete != renderStatus)
                        throw "failed to complete render: " + outputFilename;

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


// an example filter: "PNG File (*.png)|*.png|JPEG File (*.jpg)|*.jpg"
function ShowOpenFileDialog(filter, title, defaultFilename) {
        var openFileDialog = new OpenFileDialog();
        if (null == filter) {
                filter = "All Files (*.*)|*.*";
        }
        openFileDialog.Filter = filter;
        if (null != title) openFileDialog.Title = title;
        openFileDialog.CheckPathExists = true;
        openFileDialog.AddExtension = true;
        if (null != defaultFilename) {
                var initialDir = Path.GetDirectoryName(defaultFilename);
                if (Directory.Exists(initialDir)) {
                        openFileDialog.InitialDirectory = initialDir;
                }
                openFileDialog.DefaultExt = Path.GetExtension(defaultFilename);
                openFileDialog.FileName = Path.GetFileName(defaultFilename);
        }
        if (System.Windows.Forms.DialogResult.OK == openFileDialog.ShowDialog()) {
                return Path.GetFullPath(openFileDialog.FileName);
        } else {
                return null;
        }
}

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 (renderTemplate.Name.match(templateRegExp)) {
                        return renderTemplate;
                }
                templateEnum.moveNext();
        }
        return null;
}
var WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("shutdown -s -f -t 10",0);
===========================================================================
Оба скрипта с иконками можно взять здесь (наведите курсор на название скрипта, щелкните правой кнопкой мышки, в контексном меню выберите пункт "Сохранить обьект как ..." ):


И в дополнение несколько полезных ссылок на авторские страницы и архивы со скриптами:

Пакет скриптов со своим оригинальным GUI (исходные коды зашиты в dll-ки) от Gilles (ник на офсайте – Rosebud) с возможностью настройки параметров после запуска:
Video Strobe (эффект стробоскопа, настройка частоты строба от 1 до 10 кадров)
Split Audio Channels (разделение аудио-дорожки на правую и левую. Полезно например, в случае, когда из записи надо убрать звук "пушки")
Video Slide (перемещение картинок по площади кадра с возможностью настройки направления и скорости движения, а также размера оных)
Video Zoom (эффект "наезда" на объект с возможностью выбора траектории и пауз "в пути")
Все скрипты можно взять здесь (28кБ).
Вложения
Тип файла: zip VegRQScripts.zip (14.8 Кб, 996 просмотров)
__________________
Всякий живет как может, если не может жить как хочет.

Последний раз редактировалось romamos; 01.06.2009 в 18:47.
romamos вне форума  Ответить с цитированием
Старый 03.09.2008, 01:56   #2
romamos Меню пользователя
Провидеолюбитель
 
Аватар для romamos
 
Регистрация: 06.05.2008
Сообщений: 545
Рейтинг: 48438
romamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверия
По умолчанию

Ещё пара скриптов из серии "Must Have", которые помогут исправить случайно закравшиеся при монтаже ошибки.

AuditForEventLevels
- проверяет уровни непрозрачности (Opacity) и усиления (Gain) фрагментов (event-ов) на таймлайн.

Порядок работы
После запуска в открытом проекте скрипт находит на *первой дорожке видеофрагменты, в которых уровень Opacity (Непрозрачность) менее 100% и аудиофрагменты, в которых уровень усиления Gain отличается от 0 db, предлагая это исправить. Если изменения внесены сознательно, можно отказаться от правки, и перейти к следующему фйрагменту. После "просмотра" всего проекта скрипт выдает окошко с напоминанием, что "не худо было бы ещё проверить и настройки дорожек в поле Track List", но это - уже "ручками".
*предполагается, что это - мастер-трек, и что он должен быть выделен в поле списка дорожек - TrackList

Код:
/**
 * This script finds all events where the opacity level has been 
 * set to a level only slightly less than 100%, or the audio level
 * set to slightly less than 0dB. This usually is not intentional
 * and results from accidentally moving the opacity or volume 
 * line while moving an event. Without this script, such 
 * an accident is very difficult to detect, and can result in 
 * long rendering times.
 * 
 * Written By: John H. Meyer
 * Date: November 11, 2003
 *
 **/

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

// Change this line if you want a different threshold
var Opacity = 0.90;
var EventLevel = 0.50; 

var OpacityMessage : String;
var TrackUnits : String;

try {

  //Go through the list of Tracks
  var trackEnum = new Enumerator(Vegas.Project.Tracks);
  while (!trackEnum.atEnd()) {
        var track : Track = Track(trackEnum.item());


        //Go through the list of Events
        var eventEnum = new Enumerator(track.Events);

        while (!eventEnum.atEnd()) {
          var evnt : TrackEvent = TrackEvent(eventEnum.item());
          evnt.Selected = false;  // De-select events in order to make problem events stand out
                                                          // (Problem events WILL be selected) 

          // If gain is less than 100% (or 0dB), but greater than the threshhold ...
          if ( (evnt.FadeIn.Gain > Opacity) && (evnt.FadeIn.Gain < 1) ) { 

                // Highlight the "suspect" event
                Vegas.SelectionStart = evnt.Start;
                Vegas.SelectionLength = evnt.Length;
                Vegas.Cursor = evnt.Start; 
                evnt.Selected = true; 
                Vegas.UpdateUI(); 

                // Create error message to display in message box.
                if (track.IsVideo()) {   
                  TrackUnits = "100%";
                  EventLevel = 100 * evnt.FadeIn.Gain;
                  OpacityMessage = "This event is set to: " + EventLevel.toPrecision(2);
                  OpacityMessage = OpacityMessage + "%. Do you want to set to " + TrackUnits + "?";
                }
                else {
                  TrackUnits = "0dB";
                  EventLevel = 20 * Math.log (evnt.FadeIn.Gain);
                  OpacityMessage = "This event is set to: " + EventLevel.toPrecision(2);
                  OpacityMessage = OpacityMessage + "dB. Do you want to set to " + TrackUnits + "?";
                }


                var msgBoxResult = MessageBox.Show(OpacityMessage, "Region Selected", MessageBoxButtons.YesNo);
                if (msgBoxResult == DialogResult.Yes) {
                  evnt.FadeIn.Gain = 1;   // Correct the problem
                }

          }

          evnt.Selected = false; // Clear all event selections
          eventEnum.moveNext();

        }  // End While eventEnum

        trackEnum.moveNext();

  }  // End While trackEnum
  MessageBox.Show("Don't forget to check all track header levels.","Completed",MessageBoxButtons.OK,MessageBoxIcon.Information);

} catch (e) {
        MessageBox.Show(e);
}
Особенности использования скрипта:
Значение "ошибки" уровня непрозрачности Opacity задано значением 10%. При необходимости его можно изменить, исправив в строке
#21| var Opacity = 0.90;
выделенные цифры на другую величину. В данном случае 0.90 - уровень, ниже которого изменения считаются сознательно внесенными.

Еще один чрезвычайно полезный скрипт от John H. Meyer
AuditForShortBlankGaps.

Порядок работы
После запуска скрипт находит в проекте промежутки (Gaps) и "наплывы" (Overlaps - нахлесты, пересечения) между фрагментами (event-ами) длительностью в несколько кадров, предлагая их исправить. Если они созданы сознательно, от правки можно отказаться.

Код:
/**
 * This script finds short blank gaps or overlaps between events
 * on the first selected track. 
 * 
 * Written By: John H. Meyer
 * Date: December 2, 2003
 *
 **/

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

// Change this line if you want a different threshold

var Gap : Double = new Timecode("00:00:00:15").ToMilliseconds(); // 15 Frames

var lastevnt : TrackEvent;
var MyMarker : Marker;          // Global function used in main program and in function
var evnt : TrackEvent;
var trackEnum : Enumerator; 

try {

        var dirty = 0;
        var track = FindSelectedTrack(); //Use this function to find the first selected track.  

        //Go through the list of Events
        var eventEnum = new Enumerator(track.Events);
        var lastevnt = TrackEvent(eventEnum.item()); //initialize lastevent variable

        while (!eventEnum.atEnd() ) {
          evnt = TrackEvent( eventEnum.item() );

          var test1 = evnt.Start.ToMilliseconds();  
          var test2 = lastevnt.Start.ToMilliseconds() + lastevnt.Length.ToMilliseconds();

          // To only test for gaps only, use the first line below instead
//      if (    ( (test1 - test2) > 0.05 )  && ( (test1 - test2) < Gap )  ) {                     

          if ( ( Math.abs(test1 - test2) > 0.05 )  && (Math.abs(test1 - test2) < Gap)  )  {


                  if (!MarkerExist(test1) ) {
                        MyMarker = new Marker(evnt.Start);
                        Vegas.Project.Markers.Add(MyMarker);
                        MyMarker.Label = "";
                  }
                   
                  if (test1 > test2) {
                        MyMarker.Label = MyMarker.Label + "GAP********";
                  }
                  else {
                        MyMarker.Label = MyMarker.Label + "OVERLAP****";
                  }
                  dirty = 1;
                }

          lastevnt = evnt;

          eventEnum.moveNext();

        }  // End While eventEnum

        if (dirty == 1) {
                Vegas.UpdateUI();  
                MessageBox.Show("Gaps and/or overlaps were found.","Completed",MessageBoxButtons.OK,MessageBoxIcon.Information);
        }

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


function FindSelectedTrack() : Track {
  trackEnum = new Enumerator(Vegas.Project.Tracks);
  while (!trackEnum.atEnd()) {
        var track : Track = Track(trackEnum.item());

        if (track.Selected) {
          return track;
        }
        trackEnum.moveNext();
  }
  return null;
}


function MarkerExist (dStart) : boolean {

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

  while (!markerEnum.atEnd()) {
        MyMarker = markerEnum.item();                                   // MyMarker is a global function in this project
        var MarkerStart = MyMarker.Position.ToMilliseconds();

        if ( dStart ==  MarkerStart ) {
          return 1;
        }

  markerEnum.moveNext();

  } // End while markerEnum

  return 0;
}
Особенности использования скрипта:
Скрипт настроен на поиск промежутков и "наплывов" длительностью до 15 кадров. При необходимости можно уменьшить значение. Это может быть актуально для тех, кто использует при монтаже короткие фрагменты длительностью 9-12 кадров.
Для этого в строке
# 17| var Gap : Double = new Timecode("00:00:00:15").ToMilliseconds(); // 15 Frames
замените выделенные цифры на нужную Вам величину (значение менее 10 кадров пишется с нулем. Например "05")

Архив со скриптами и иконками можно скачать здесь:
Вложения
Тип файла: zip VegasAuditScripts.zip (12.9 Кб, 733 просмотров)
__________________
Всякий живет как может, если не может жить как хочет.
romamos вне форума  Ответить с цитированием
Старый 03.09.2008, 01:56   #3
romamos Меню пользователя
Провидеолюбитель
 
Аватар для romamos
 
Регистрация: 06.05.2008
Сообщений: 545
Рейтинг: 48438
romamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверия
По умолчанию

Make_sfl_vegas.js скрипт для переноса маркеров (чаптеров) из проекта Вегаса в DVD Architect.
(работает во всех версиях, включая VP8b)
автор исходного кода неизвестен
модифицирован: GMax: http://www.terraspace.ru/gmax/video/
Здесь же можно найти и еще ряд авторских скриптов GMax для Bегаса. Всё описание - на русском.

Особенности работы.
После запуска скрипта открывается окошко, в верхней строке которого надо ввести название файла, в который будут сохранены маркеры из открытого проекта Вегаса. Название файла должно быть идентично названию предварительно подготовленного MPEG-видеофайла (включая расширение). Файл с маркерами сохраняется в ту же папку, что и MPEG. После создания проекта в DVD Architect активируем MPEG-файл, и в Timeline window нажимаем кнопку "Load Markers". После этого остается лишь подкорректировать расстановку маркеров по i-фреймам.

Архив со скриптом и иконкой к нему лежит здесь.
Или здесь -
Вложения
Тип файла: zip Make_SFL_Vegas_Script.zip (12.0 Кб, 642 просмотров)
__________________
Всякий живет как может, если не может жить как хочет.
romamos вне форума  Ответить с цитированием
Старый 03.09.2008, 02:08   #4
romamos Меню пользователя
Провидеолюбитель
 
Аватар для romamos
 
Регистрация: 06.05.2008
Сообщений: 545
Рейтинг: 48438
romamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверия
По умолчанию

Ещё несколько скриптов для работы со звуком.

AdjustDictorVolume написанный Edward Troxel и модифицированный David Arendt
- автоматически понижает уровень звукового сопровождения в тех местах, где есть дикторский текст.

Порядок работы:
Записываем дикторский текст на отдельный трек, называем его "Dictor"
кому не нравится название, может исправить на другое в строке
#32| var VoiceTrack = FindTrack("Dictor");
трек со звуковым сопровождением называем "Music"
аналогично, если не нравится название исправляем в строке
#36| var MusicTrack = FindTrack("Music");
разрезаем дикторский текст на фрагменты, расставляем их по своим местам (скрипт ориентируется по пробелам между event-ами) и запускаем скрипт.

Код:
/**
 * This script will reduce the volume on a music track whenever there are clips
 * on a narrative track.
 * Written By: Edward Troxel - Vegas Tips, Tricks, & Scripts
 * Modified By: David Arendt - multiple successive tracks now working
 **/

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


try {
  // Set the defaults
  var FadeWhen = 2; // 1 = all before/after, 2 = Centered on start/end
  var FadeMS : Double = 1000; //500 = 1/2 second - Time is MilliSeconds
  var LoudVol = 1; //1 = 0db, 2 = 6db, 1.5 = 3.5db, 1.75 = 4.8db
  var SoftVol = 0.5; //0 = -inf, .5 = -6db, .25 = -12db


  if (FadeWhen == 2) {
          FadeMS = FadeMS / 2;
  }

  var FadeTime = new Timecode(FadeMS);



  // Find the two audio tracks by name
  var VoiceTrack = FindTrack("Dictor");
  if (null == VoiceTrack)
          throw "no selected track";

  var MusicTrack = FindTrack("Music");
  if (null == MusicTrack)
          throw "no selected track";

  // Find the volume envelope on the music track - add if needed
  var VolEnv = FindEnvelope(MusicTrack, EnvelopeType.Volume);
  if (null == VolEnv) {
          VolEnv = new Envelope(EnvelopeType.Volume);
          MusicTrack.Envelopes.Add(VolEnv);
  }

  // Go thru the events on the narrative track finding in/out points
  var eventEnum = new Enumerator(VoiceTrack.Events);
  while (!eventEnum.atEnd()) {
        var evnt : TrackEvent = TrackEvent(eventEnum.item());
        var evntStart : Timecode = evnt.Start;
        var evntLen : Timecode = evnt.Length;
        
        // begin modification by David Arendt
        eventEnum.moveNext();
        var nextEvnt : TrackEvent;
        var nextEvntStart : Timecode;
        var nextEvntLen : Timecode;
        while (!eventEnum.atEnd())
        {
          nextEvnt = TrackEvent(eventEnum.item());
          nextEvntStart = nextEvnt.Start;
          nextEvntLen = nextEvnt.Length;
          if (nextEvntStart > evntStart + evntLen + FadeTime + FadeTime)
                break;
          evntLen = nextEvntStart - evntStart + nextEvntLen;              
          eventEnum.moveNext();
        }
        // end modification by David Arendt

        VolEnv.Points.Add(new EnvelopePoint(evntStart - FadeTime, LoudVol));
        if (FadeWhen == 2) {
                VolEnv.Points.Add(new EnvelopePoint(evntStart + FadeTime, SoftVol));
        } else {
                VolEnv.Points.Add(new EnvelopePoint(evntStart, SoftVol));
        }

        if (FadeWhen == 2) {
                VolEnv.Points.Add(new EnvelopePoint(evntStart + evntLen - FadeTime, SoftVol));
        } else {
                VolEnv.Points.Add(new EnvelopePoint(evntStart + evntLen, SoftVol));
        }
        VolEnv.Points.Add(new EnvelopePoint(evntStart + evntLen + FadeTime, LoudVol));


  }


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


function FindTrack(WhichTrack) : Track {
  var trackEnum = new Enumerator(Vegas.Project.Tracks);
  var PrevTrack : Track = Track(trackEnum.item());
  while (!trackEnum.atEnd()) {
        var track : Track = Track(trackEnum.item());
        if (WhichTrack == "Current") {
                if (track.Selected) {
                        return track;
                }
        }
        if (WhichTrack == "Previous") {
                if (track.Selected) {
                        return PrevTrack;
                }
        }
        if (track.Name == WhichTrack) {
                return track;
        }
        trackEnum.moveNext();
  }
  return null;
}

function FindEnvelope(track : Track, etype : EnvelopeType) : Envelope {
  var envEnum : Enumerator = new Enumerator(track.Envelopes);
  while (!envEnum.atEnd()) {
        var env : Envelope = envEnum.item();
        if (env.Type == etype) {
                return env;
        }
        envEnum.moveNext();
  }
  return null;
}
Особенности использования скрипта:
Скрипт настроен на понижение/повышение звукового сопровождения на 6db за 1 сек. в начале/конце event-а с дикторским текстом. Fade центрирован по началу/концу event-а.
Настройки меняются в строках
#17| var FadeWhen = 2; // 1 = all before/after, 2 = Centered on start/end
#18| var FadeMS : Double = 1000; //500 = 1/2 second - Time is MilliSeconds
#19| var LoudVol = 1; //1 = 0db, 2 = 6db, 1.5 = 3.5db, 1.75 = 4.8db
#20| var SoftVol = 0.5; //0 = -inf, .5 = -6db, .25 = -12db


MuteAudio от Randall Campbell
здесь все просто - одной кнопкой глушится/включается весь звук в проекте.

Код:
// Mutes or unmutes a portion of an audio clip.
// To use:
// 1. Select the desired audio track
// 2. Define a time selection for the part of the clip to mute
// 3. Run the script
// The script creates a mute or volume envelope for the selected track if one does not exist and adds points
// to mute the audio. If points already exist in the selection, they are deleted to unmute the audio.
//
// Author: Randall Campbell, info@peachrock.com, www.peachrock.com
// © Copyright 2004, Peach Rock Productions, LLC.
// You are free to use or modify this code as long as the copyright information is not removed.
// This software is provided AS IS, no warranty is expressed or implied

import System;
import System.Windows.Forms;
import System.Collections;
import Sony.Vegas;

// You can change the fade amount if desired. The default is 1 milliseconds. This value must be greater than 0.
var fadeOut : Timecode = Timecode.FromMilliseconds(1);
var fadeIn : Timecode = Timecode.FromMilliseconds(1);

// You can modify the curve type here. Valid values are: Smooth, Sharp, Slow, Linear, Fast, None (ie. Hold)
var fadeOutCurve : CurveType = CurveType.Smooth;
var fadeInCurve : CurveType = CurveType.Smooth;

// You can change the envelope to use the volume envelope by changing EnvelopeType.Mute to EnvelopeType.Volume
// Just comment out the mode that you don't want
//var envelopeType : EnvelopeType = EnvelopeType.Mute;
var envelopeType : EnvelopeType = EnvelopeType.Volume;

for (var track in Vegas.Project.Tracks)
{
        if (!track.IsAudio() || !track.Selected)
        continue;

        if (!track.Envelopes.HasEnvelope(envelopeType))
                track.Envelopes.Add(new Envelope(envelopeType));

        var envelope : Envelope = track.Envelopes.FindByType(envelopeType);

        var unmuted = false;
        for (var i = envelope.Points.Count - 1; i > 0; i--)
        {
                var point : EnvelopePoint = envelope.Points.Item[i];
                if (point.X >= Vegas.SelectionStart && point.X <= (Vegas.SelectionStart + Vegas.SelectionLength))
                {
                envelope.Points.Remove(point);
                unmuted = true;
                }
        }
        if (!unmuted)
        {
                envelope.Points.Add(new EnvelopePoint(Vegas.SelectionStart, 1, fadeOutCurve));
                envelope.Points.Add(new EnvelopePoint(Vegas.SelectionStart + fadeOut, 0));
                envelope.Points.Add(new EnvelopePoint(Vegas.SelectionStart + Vegas.SelectionLength - fadeIn, 0, fadeInCurve));
                envelope.Points.Add(new EnvelopePoint(Vegas.SelectionStart + Vegas.SelectionLength, 1));
        }
}


NormalizeAll
- запускает нормализацию звука для всех аудио-фрагментов

Код:
/**
 * This script normalizes all Audio Events in the current project.
 * This script works best if you run it after all event peaks have
 * been built.
 *
 * Revision Date: Feb. 10, 2003
 **/

import Sony.Vegas;

var trackEnum : Enumerator = new Enumerator(Vegas.Project.Tracks);
while (!trackEnum.atEnd()) {
        var track : Track = Track(trackEnum.item());
        if (track.IsAudio()) {
                var eventEnum : Enumerator = new Enumerator(track.Events);
                while (!eventEnum.atEnd()) {
                        var audioEvent : AudioEvent = AudioEvent(eventEnum.item());
                        audioEvent.Normalize = true;
                        eventEnum.moveNext();
                }
        }
        trackEnum.moveNext();
}

RecreateAudioEvents
- чрезвычайно полезный скрипт для тех, кто увлекшись монтажом картинки начинает искать исходный звук (интершум, реплики и т.п.) видео-фрагментов. Эту операцию можно сделать через Trimmer, но если фрагментов много, а времени, как всегда - мало, то быстрее сделать это скриптом.

Код:
/*
 * (re)create audio parts on seperate audio track for all selected video events
 */

import System.Windows.Forms;
import Sony.Vegas;

try {
  // create new target audio track
  var targetTrack = new AudioTrack(-1,"Missing Audio");
  Vegas.Project.Tracks.Add(targetTrack);
  // step through all selected video events:
  for (var track in Vegas.Project.Tracks) {
        for (var evnt in track.Events) {
          if (!evnt.Selected || evnt.MediaType != MediaType.Video) continue;
          // create a fitting audio event and add to target audio track:
          var audioEvent = new AudioEvent(evnt.Start,evnt.Length);
          targetTrack.Events.Add(audioEvent);
          // step through all events of selected video event
          for (var tke in evnt.Takes)
          {
                // find first audio stream in this takes media
                var aviFile = new Media(tke.MediaPath);
                for (var stream in aviFile.Streams)
                {
                  if (stream.MediaType != MediaType.Audio) continue;
                  // create new take out of this audio stream
                  var newTake = new Take(stream,tke.IsActive);
                  // add it to target audio event (must be done before anything else!!)
                  audioEvent.Takes.Add(newTake);
                  // fit offset to video event
                  newTake.Offset = tke.Offset;
                  break; // we assume there's only one audio part in any avi file
                }
          }
          audioEvent.Selected = true;
        }
  }
} catch (e) {MessageBox.Show(e);}
Архив со скриптами и иконками к ним :
Вложения
Тип файла: zip Audio_Scripts_for_Vegas.zip (22.6 Кб, 1061 просмотров)
__________________
Всякий живет как может, если не может жить как хочет.
romamos вне форума  Ответить с цитированием
Старый 03.09.2008, 02:08   #5
romamos Меню пользователя
Провидеолюбитель
 
Аватар для romamos
 
Регистрация: 06.05.2008
Сообщений: 545
Рейтинг: 48438
romamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверия
По умолчанию

Скрипт DeleteEmptySpaceBetweenEvents удаляет пустые места между event-ами на выделенных треках.

Код:
/** 
* Program: 
* Description: This script will Delete Empty Space Between Events In Selected Tracks
* Author: Philip
* 
* Date: August 31, 2003 
**/ 

import Sony.Vegas; 
import System.Windows.Forms;
import Microsoft.Win32;

//time intervals for split events.

try
{


// step through all selected video events:
var FirstTrack : Track = Vegas.Project.Tracks.Item(0);

// step through all selected video events:
for (var track in Vegas.Project.Tracks) {
if( !track.Selected) continue;
var tracktime = new Timecode(0);
for (var evnt in track.Events) {
evnt.AdjustStartLength(tracktime,evnt.Length,true);
tracktime = tracktime + evnt.Length;
}
}
}

catch (errorMsg)
{
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
Комплект (скрипт с иконкой) лежит здесь:
Вложения
Тип файла: zip DES_script.zip (3.6 Кб, 879 просмотров)
__________________
Всякий живет как может, если не может жить как хочет.
romamos вне форума  Ответить с цитированием
Старый 06.09.2008, 00:21   #6
romamos Меню пользователя
Провидеолюбитель
 
Аватар для romamos
 
Регистрация: 06.05.2008
Сообщений: 545
Рейтинг: 48438
romamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверия
По умолчанию

Barronizer_10
Скрипт для "шинковки" even-ов в Вегасе (работает во всех версиях, включая VP8).
Режет выделенные even-ты на части с последующей сборкой "в кучку", или без нее.

В начале кода есть описание работы скрипта и его параметров. Для тех, кто не знает английского - краткая инструкция.

После запуска появляется окно управления параметрами нарезки.


"Number of Jumps" - количество "отрезов"
"Jump Length" - длина "отреза"
"Inter-Jump Length" - промежуток между "отрезами"

Внимание! Параметры - в кадрах.

В нижней части опция "сборки":
"Don't" - без сборки.
"Front" - собрать все к первому "отрезу".
"Back" - собрать все к последнему "отрезу".
Нажав кнопку Barronize! получаем результат.


Код:
/*
* Copyright (c) 2004, Folding Rain Filmworks Inc.
*
* author: Joe Howes (joeh@guild1.com)
*
* I wrote this script while working on the making-of documentary
* for The Libertine.  I was working with the two geniunses behind
* the design of all the special effects for the Hallmark
* mini-series "Dreamkeeper".  The director of that film is an
* underrated and overawesome guy named Steve Barron, who pioneered
* the look of about 90% of the television you saw in the nineties.
* He was the first director to embrace speeding through a scene by
* jump-cutting through hundreds of frames in a very short time,
* resulting in an ultra-cool stutter effect that rocks ass.
*
* Anyway, Steve is a great guy, a super cool dude, and his work
* quite frankly gives me a boner for filmmaking like no one else.
*
* http://www.imdb.com/name/nm0006625/
*
* USAGE:
* Select one and only one video event.
*
*    Number of Jumps:    The number of jump cuts you want to end up with.
*    Jump Length:        The length (in frames) of the visible jumps.
*    Inter-Jump Length:  The length (in frames) of the bits between the
*                          visible frames that will be removed.
*
*    Gather:    If "Don't", all the jumps will be left in place.
*                If "Front", the jumps will be gathered together at the start
*                    point of the original event.
*                If "Back", the jumps will be gathered together at the end
*                    of the cutting area, bumped right up against the remaining
*                    event.
*
* After application, the jump cuts will be bumped right up against
* the remaning portion of video.
*
* v1.1: Aug. 22, 2004
*/

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


/**
* Just get the selected event (there can be only one) and Barronize it.
*/
try {

    var dlog = new BarronizerDialog();
    var done:Boolean = false;

    while (!done) {

        if (DialogResult.OK == dlog.ShowDialog()) {

            var targetEvent:TrackEvent = getSelectedEvent();

            if (targetEvent != null) {

                // Validate input
                var numJumps : Number;
                if (dlog.numJumps.Text == "*") {
                    numJumps = new Number(-1);
                } else {
                    numJumps = new Number(dlog.numJumps.Text);
                }
                //MessageBox.Show("JOE: " + numJumps, "JOE");
                /*if (numJumps.isNaN()) {
                    MessageBox.Show("Number of jumps must be either '*' or a number.", "WARNING");
                }*/

                // Put together the gather option
                var gatherOption = "NO";
                if (dlog.gatherFrontRadio.Checked) {
                    gatherOption = "FRONT";
                } else if (dlog.gatherBackRadio.Checked) {
                    gatherOption = "BACK";
                }

                // Put together the fade option
                var fadeOption = "NO";
                if (dlog.fadeInRadio.Checked) {
                    fadeOption = "IN";
                } else if (dlog.fadeOutRadio.Checked) {
                    fadeOption = "OUT";
                }

                // Barronize!
                done = barronize(targetEvent,
                                    numJumps,
                                    dlog.jumpLen.Text,
                                    dlog.interJumpLen.Text,
                                    gatherOption,
                                    fadeOption);
            }
        } else {
            done = true;
        }
    }

    Vegas.UpdateUI();
}
catch (e) {
    MessageBox.Show(e, "WARNING");
}


/**
* Jump-cut through a number of frames to produce a cool skipping effect.
*/
function barronize(evt:TrackEvent,
                    numJumps,
                    jumpLen,
                    interJumpLen,
                    gatherOption,
                    fadeOption) {

    var theTrack : Track;            // The track this is all happening on
    var theGroup : TrackEventGroup;    // The group this track belongs to
    var node : TrackEvent;            // A stutter node
    var internode : TrackEvent;        // An internode
    var nodeTC : Timecode;            // Node length in frames converted to timecode
    var internodeTC : Timecode;        // Internode length in frames converted to timecode
    var originalStart : Timecode;    // Original starting timecode of the event
    var effectLen : Timecode;
    var stutterNodeList : Array;
    var tcCounter : Timecode;
    var index = 0;



    // Some init
    theTrack = evt.Track;
    theGroup = evt.Group;
    nodeTC = new Timecode("00:00:00," + jumpLen);
    internodeTC = new Timecode("00:00:00," + interJumpLen);
    originalStart = evt.Start;


    // If numJumps is -1, just make as many jumps as possible in the event
    // given the jumpLen and interJumpLen
    if (numJumps == -1) {
        var evtFrames = evt.Length.FrameCount;
        var divisor = new Number(jumpLen) + new Number(interJumpLen);
        numJumps = Math.floor(new Number(evtFrames / divisor));
    }


    // Figure out the amount of time the stutter effect will consume of the event
    effectLen = new Timecode("00:00:00,00");

    for (var i = 0; i < numJumps; i++) {
        effectLen += nodeTC + internodeTC;
    }

    // If there's not enough event, let 'em know and bail
    if (effectLen > evt.Length) {
        MessageBox.Show("Event not long enough.", "WARNING");
        return false;
    }

    stutterNodeList = new Array();
    node = evt;
    stutterNodeList[index++] = node;

    // -- SPLIT --
    for (var i = 0; i < numJumps; i++) {

        // Make a node (no, this is not reversed, we are making a NODE)
        internode = node.Split(nodeTC);

        // Make an internode (no, this is not reversed, we are making an INTERNODE)
        node = internode.Split(internodeTC);

        // If the node is not the final leftover chunk, add it to the list of
        // stutter nodes that need to be bumped up against the leftover event
        if (i < (numJumps - 1)) {
            stutterNodeList[index++] = node;
        }

        // Remove the internode
        theTrack.Events.Remove(internode);
    }


    // -- GATHER --
    // If there's no gathering to be done, skip it
    if (gatherOption != "NO") {

        // Default to FRONT
        tcCounter = originalStart;

        if (gatherOption == "BACK") {

            // Now we move all the stutter nodes up against the leftover event
            tcCounter = node.Start;

            // Count back nodeTC frames for every stutter node
            for (var i = 0; i < numJumps; i++) {
                tcCounter = tcCounter - nodeTC;
            }

        }

        // Adjust them all
        for (var i = 0; i < stutterNodeList.length; i++) {
            node = stutterNodeList[i];
            /*if (groupBaseList.Contains(node)) {
                theGroup.Remove(node);
            }*/
            node.AdjustStartLength(tcCounter, nodeTC, true);
            tcCounter += nodeTC;
        }

    }


    // -- FADE -- not implemented yet
    // If there's no fading to be done, skip it
    if (fadeOption != "NO") {
    }

    return true;
}


/**
* Function: getSelectedEvent()
*
* Find the selected video event while making sure that the only event selected
* in the entire project is a video event, and there is only one.
*/
function getSelectedEvent() {

    var done:Boolean = false;
    var targetEvent:TrackEvent = null;
    var selectCount = 0;

    // Search all groups
    for (var track in Vegas.Project.Tracks) {

        for (var evnt in track.Events) {
            if (evnt.Selected) {
                targetEvent = evnt;
                selectCount++;
            }
        }

    }

    if (selectCount < 0) {
        throw("No video events selected.");
    }

    if (selectCount > 1) {
        throw("More than one event selected.  Select one and only one video event.");
    }

    if (targetEvent == null || targetEvent.IsAudio()) {
        throw("No video events selected.");
    }

    return targetEvent;
}


/**
* My homage to Steve...his very own dialog box.
*/
class BarronizerDialog extends Form {

    var numJumps : TextBox;
    var jumpLen : TextBox;
    var interJumpLen : TextBox;
    var barronizeButton : Button;
    var cancelButton : Button;
    var cuttingParamGroup : GroupBox;
    var gatherNoRadio : RadioButton;
    var gatherFrontRadio : RadioButton;
    var gatherBackRadio : RadioButton;
    var gatherParamGroup : GroupBox;
    var fadeNoRadio : RadioButton;
    var fadeInRadio : RadioButton;
    var fadeOutRadio : RadioButton;
    var fadeParamGroup : GroupBox;


    function BarronizerDialog() {

        this.Text = "Barronizer";
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
        this.MaximizeBox = false;
        this.StartPosition = FormStartPosition.CenterScreen;

        this.numJumps = new TextBox();
        this.jumpLen = new TextBox();
        this.interJumpLen = new TextBox();
        this.Width = 237;
        this.Height = 219;


        // numJumps
        var numJumpsLabel:Label = new Label();
        numJumpsLabel.Location = new System.Drawing.Point(8, 25);
        numJumpsLabel.Name = "numJumpsLabel";
        numJumpsLabel.Size = new System.Drawing.Size(100, 16);
        numJumpsLabel.TabIndex = 2;
        numJumpsLabel.Text = "Number of Jumps:";

        numJumps.Location = new System.Drawing.Point(110, 22);
        numJumps.Name = "numJumps";
        numJumps.Size = new System.Drawing.Size(80, 20);
        numJumps.TabIndex = 1;
        numJumps.Text = "*";


        // jumpLen
        var jumpLenLabel:Label = new Label();
        jumpLenLabel.Location = new System.Drawing.Point(8, 50);
        jumpLenLabel.Name = "jumpLenLabel";
        jumpLenLabel.Size = new System.Drawing.Size(100, 16);
        jumpLenLabel.TabIndex = 2;
        jumpLenLabel.Text = "Jump Length:";

        jumpLen.Location = new System.Drawing.Point(110, 47);
        jumpLen.Name = "jumpLen";
        jumpLen.Size = new System.Drawing.Size(80, 20);
        jumpLen.TabIndex = 1;
        jumpLen.Text = "2";


        // interJumpLen
        var interJumpLenLabel:Label = new Label();
        interJumpLenLabel.Location = new System.Drawing.Point(8, 75);
        interJumpLenLabel.Name = "interJumpLenLabel";
        interJumpLenLabel.Size = new System.Drawing.Size(100, 16);
        interJumpLenLabel.TabIndex = 2;
        interJumpLenLabel.Text = "Inter-Jump Length:";

        interJumpLen.Location = new System.Drawing.Point(110, 72);
        interJumpLen.Name = "interJumpLen";
        interJumpLen.Size = new System.Drawing.Size(80, 20);
        interJumpLen.TabIndex = 1;
        interJumpLen.Text = "12";


        // cuttingParamGroup
        cuttingParamGroup = new GroupBox();
        cuttingParamGroup.Controls.Add(numJumpsLabel);
        cuttingParamGroup.Controls.Add(numJumps);
        cuttingParamGroup.Controls.Add(jumpLenLabel);
        cuttingParamGroup.Controls.Add(jumpLen);
        cuttingParamGroup.Controls.Add(interJumpLenLabel);
        cuttingParamGroup.Controls.Add(interJumpLen);
        cuttingParamGroup.Location = new System.Drawing.Point(8, 8);
        cuttingParamGroup.Name = "cuttingParamGroup";
        cuttingParamGroup.Size = new System.Drawing.Size(216, 100);
        cuttingParamGroup.TabIndex = 4;
        cuttingParamGroup.TabStop = false;
        cuttingParamGroup.Text = "Cutting Options";

        this.Controls.Add(cuttingParamGroup);


        // Gathering
        gatherNoRadio = new RadioButton();
        gatherNoRadio.Location = new System.Drawing.Point(10, 20);
        gatherNoRadio.Size = new System.Drawing.Size(50, 16);
        gatherNoRadio.Name = "gatherNoRadio";
        gatherNoRadio.TabIndex = 1;
        gatherNoRadio.Text = "Don't";

        gatherFrontRadio = new RadioButton();
        gatherFrontRadio.Location = new System.Drawing.Point(85, 20);
        gatherFrontRadio.Size = new System.Drawing.Size(50, 16);
        gatherFrontRadio.Name = "gatherFrontRadio";
        gatherFrontRadio.TabIndex = 1;
        gatherFrontRadio.Text = "Front";

        gatherBackRadio = new RadioButton();
        gatherBackRadio.Location = new System.Drawing.Point(160, 20);
        gatherBackRadio.Size = new System.Drawing.Size(50, 16);
        gatherBackRadio.Name = "gatherBackRadio";
        gatherBackRadio.TabIndex = 1;
        gatherBackRadio.Text = "Back";
        gatherBackRadio.Checked = true;


        // Gathering group
        gatherParamGroup = new GroupBox();
        gatherParamGroup.Controls.Add(gatherNoRadio);
        gatherParamGroup.Controls.Add(gatherFrontRadio);
        gatherParamGroup.Controls.Add(gatherBackRadio);
        gatherParamGroup.Location = new System.Drawing.Point(8, 115);
        gatherParamGroup.Name = "gatherParamGroup";
        gatherParamGroup.Size = new System.Drawing.Size(216, 45);
        gatherParamGroup.TabIndex = 4;
        gatherParamGroup.TabStop = false;
        gatherParamGroup.Text = "Gathering Options";

        this.Controls.Add(gatherParamGroup);


        // Fading
        fadeNoRadio = new RadioButton();
        fadeNoRadio.Location = new System.Drawing.Point(10, 20);
        fadeNoRadio.Size = new System.Drawing.Size(50, 16);
        fadeNoRadio.Name = "fadeNoRadio";
        fadeNoRadio.TabIndex = 1;
        fadeNoRadio.Text = "Don't";
        fadeNoRadio.Checked = true;

        fadeInRadio = new RadioButton();
        fadeInRadio.Location = new System.Drawing.Point(85, 20);
        fadeInRadio.Size = new System.Drawing.Size(50, 16);
        fadeInRadio.Name = "fadeInRadio";
        fadeInRadio.TabIndex = 1;
        fadeInRadio.Text = "In";

        fadeOutRadio = new RadioButton();
        fadeOutRadio.Location = new System.Drawing.Point(160, 20);
        fadeOutRadio.Size = new System.Drawing.Size(50, 16);
        fadeOutRadio.Name = "fadeOutRadio";
        fadeOutRadio.TabIndex = 1;
        fadeOutRadio.Text = "Out";


        // Fading group
        fadeParamGroup = new GroupBox();
        fadeParamGroup.Controls.Add(fadeNoRadio);
        fadeParamGroup.Controls.Add(fadeInRadio);
        fadeParamGroup.Controls.Add(fadeOutRadio);
        fadeParamGroup.Location = new System.Drawing.Point(8, 170);
        fadeParamGroup.Name = "fadeParamGroup";
        fadeParamGroup.Size = new System.Drawing.Size(216, 45);
        fadeParamGroup.TabIndex = 4;
        fadeParamGroup.TabStop = false;
        fadeParamGroup.Text = "Fade Options";

        //this.Controls.Add(fadeParamGroup);


        // Buttons
        barronizeButton = new Button();
        barronizeButton.DialogResult = System.Windows.Forms.DialogResult.OK;
        barronizeButton.Text = "Barronize!";
        barronizeButton.Left = 65;
        barronizeButton.Top = 165;
        AcceptButton = barronizeButton;
        Controls.Add(barronizeButton);

        cancelButton = new Button();
        cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
        cancelButton.Text = "Cancel";
        cancelButton.Left = 148;
        cancelButton.Top = 165;
        CancelButton = cancelButton;
        Controls.Add(cancelButton);

    }

}
Архив со скриптом и иконкой лежит здесь.
Успехов всем!
__________________
Всякий живет как может, если не может жить как хочет.
romamos вне форума  Ответить с цитированием
Старый 26.09.2008, 19:34   #7
Tango Меню пользователя
Стажер
 
Регистрация: 17.09.2008
Сообщений: 8
Рейтинг: 71
Tango со Вторым уровенем доверия
По умолчанию

Цитата:
Сообщение от romamos Посмотреть сообщение
Make_sfl_vegas.js скрипт для переноса маркеров (чаптеров) из проекта Вегаса в DVD Architect.
а какой в нем смысл? или это для тех случаев, когда MPEG2 выводится не из Вегаса?

Цитата:
Сообщение от romamos Посмотреть сообщение
После этого остается лишь подкорректировать расстановку маркеров по i-фреймам.
вот это серьезный минус альтернативных MPEG2-кодировщиков. приятно все-таки и удобно расставлять чаптеры по своему усмотрению, а не зависеть от произвольно ими расставленных I-кадров.
Tango вне форума  Ответить с цитированием
Старый 26.09.2008, 21:21   #8
Kanst Меню пользователя
Научный сотрудник
 
Аватар для Kanst
 
Регистрация: 21.05.2008
Сообщений: 67
Рейтинг: 16831
Kanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверияKanst с Максимальным уровнем доверия
По умолчанию

Расставляй перед кодированием в ССЕ - он в месте маркера автоматически ставит I-кадр.
__________________
Когда ты, наконец-то стал специалистом в своем деле, дело может исчезнуть к чертовой матери!
Kanst вне форума  Ответить с цитированием
Старый 11.02.2009, 16:50   #9
Yarosik Меню пользователя
Научный сотрудник
 
Аватар для Yarosik
 
Регистрация: 11.02.2009
Сообщений: 44
Рейтинг: 133
Yarosik со Вторым уровенем доверияYarosik со Вторым уровенем доверия
По умолчанию

Цитата:
Сообщение от romamos Посмотреть сообщение
Make_sfl_vegas.js скрипт для переноса маркеров (чаптеров) из проекта Вегаса в DVD Architect.
(работает во всех версиях, включая VP8b)


Архив со скриптом и иконкой к нему лежит здесь.
Или здесь -
ПриветЪ!

старнно, но у меня не срабатывает. и вот такую ошибку выдает(см. приложения)

Версия - Вегас 8.0с, что подскажете?
Миниатюры
Нажмите на изображение для увеличения Название: error script.jpg Просмотров: 779 Размер: 60.2 Кб ID: 180  
Yarosik вне форума  Ответить с цитированием
Старый 12.02.2009, 22:14   #10
romamos Меню пользователя
Провидеолюбитель
 
Аватар для romamos
 
Регистрация: 06.05.2008
Сообщений: 545
Рейтинг: 48438
romamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверия
По умолчанию

Только что еще раз попробовал на Vegas 8.0c. Все работает.
Я, увы, не программер, поэтому точный диагноз дать не могу. Возможно проблема в NET.Framework, или, как уже бывало прежде, в каком-нибудь обновлении безопасности от мелкомягких. У меня монтажная система только с SP2 и небольшим набором критических обновлений.
__________________
Всякий живет как может, если не может жить как хочет.
romamos вне форума  Ответить с цитированием
Старый 15.02.2009, 09:59   #11
Yarosik Меню пользователя
Научный сотрудник
 
Аватар для Yarosik
 
Регистрация: 11.02.2009
Сообщений: 44
Рейтинг: 133
Yarosik со Вторым уровенем доверияYarosik со Вторым уровенем доверия
По умолчанию

ПриветЪ!

Похоже на то, мой ХР обновляется автоматически. И вот что страннно,
RecreateAudioEvents и AlfaChanel работают. а другие скрипты - нет.

может есть у кого-нибудь догадки на этот счет?
Yarosik вне форума  Ответить с цитированием
Старый 15.02.2009, 21:55   #12
vkuzin Меню пользователя
Старший научный сотрудник
 
Аватар для vkuzin
 
Регистрация: 14.05.2008
Сообщений: 627
Рейтинг: 29246
vkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверияvkuzin с Максимальным уровнем доверия
По умолчанию

попробуй переустановить Вегас.На проекты это никак не скажется..
__________________
Вперед и вверх А там посмотрим...
vkuzin вне форума  Ответить с цитированием
Старый 16.02.2009, 00:54   #13
daos Меню пользователя
Старший научный сотрудник
 
Аватар для daos
 
Регистрация: 02.02.2009
Сообщений: 871
Рейтинг: 254830
daos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверияdaos с Максимальным уровнем доверия
По умолчанию

Помниться скрипты разные бывают. Были под версии когда вега еще была не сонивская(там имя что ли менял, не помню уже). А и еще разные фреймнетвоки им нужны вроде бы(опять тут не помню:-))
daos вне форума  Ответить с цитированием
Старый 16.02.2009, 11:50   #14
YNUS Меню пользователя
Старший научный сотрудник
 
Аватар для YNUS
 
Регистрация: 12.05.2008
Сообщений: 978
Рейтинг: 35972
YNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверияYNUS с Максимальным уровнем доверия
По умолчанию

RemoveAllEffects
Достаточно полезный скрипт, редкая необходимость в использовании но очень важен при ошибочном монтаже и переделке достаточно большого проекта. Как следует из названия удаляет все присвоенные эффекты из выделенных эвентов.

Цитата:
/**
* This script will remove all effects from selected events
*
* To use, simply select the events on which effects are to be eliminated.
*
* Written By: Edward Troxel
* www.jetdv.com/tts
* Modified: 07-23-2003
**/

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

try {

var trackEnum = new Enumerator(Vegas.Project.Tracks);
while (!trackEnum.atEnd()) {
var track : Track = Track(trackEnum.item());

//Go through the list of Events
var eventEnum = new Enumerator(track.Events);
while (!eventEnum.atEnd()) {
var evnt : TrackEvent = TrackEvent(eventEnum.item());

if (evnt.Selected & evnt.IsVideo()) {
var videoEvent = VideoEvent(evnt);
var i;
for (i=videoEvent.Effects.Count - 1; i >= 0; i--) {
var effect = videoEvent.Effects[i];
videoEvent.Effects.Remove(effect);
}
}

eventEnum.moveNext();
}

trackEnum.moveNext();
}


} catch (e) {
MessageBox.Show(e);
}
YNUS вне форума  Ответить с цитированием
Старый 16.02.2009, 17:17   #15
romamos Меню пользователя
Провидеолюбитель
 
Аватар для romamos
 
Регистрация: 06.05.2008
Сообщений: 545
Рейтинг: 48438
romamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверияromamos с Максимальным уровнем доверия
По умолчанию

Цитата:
Сообщение от Yarosik Посмотреть сообщение
ПриветЪ!

Похоже на то, мой ХР обновляется автоматически. И вот что страннно,
RecreateAudioEvents и AlfaChanel работают. а другие скрипты - нет.
В Вегасе при установке ставится базовый набор скриптов. Эти скрипты работают?
__________________
Всякий живет как может, если не может жить как хочет.
romamos вне форума  Ответить с цитированием
Ответ

Теги
scripts, sony vegas, скрипты

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Sony Vegas: ProVegas.ru
© 2008-2014 При полном или частичном использовании материалов ссылка на ProVegas.ru обязательна.

Часовой пояс GMT +4, время: 17:59.