|
Важная информация: |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
03.09.2008, 02:52 | #1 | |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
Скрипты (Scripts)
Скрипты и утилиты для Sony Vegas
Помимо множества полезных функций Sony Vegas обладает и чрезвычайно приятной особенностью – он умеет работать со скриптами (scripts). Для справки: Работа со скриптами доступна лишь в полной версии Vegas. В варианте Vegas Movie Studio такая возможность отсутствует. Скрипт – это макрокоманда, которая "в один клик" запускает целую цепочку операций в Вегас и позволяет таким образом автоматизировать выполнение множества задач при работе с видео и звуком и сэкономить массу времени. Для Vegas уже написано множество различных скриптов и они активно используются, однако для большинства русскоязычных пользователей их применение ограничивается тем, что инструкции по работе и настройке скрипта под конкретную систему записываются в исходном коде на английском языке. Пришла пора исправить этот пробел. Править скрипты можно с помощью встроенного в Windows Notepad, но удобнее это делать с помощью бесплатного редактора Notepad++, в котором есть подсветка синтаксиса скрипта и ряд других полезных возможностей (в т.ч. русский интерфейс) скачать можно с оф.сайта: http://notepad-plus.sourceforge.net/...ut.php?lang=ru Предлагаю выкладывать здесь реально работающие скрипты для Вегаса, и дабы уменьшить по возможности число лишних вопросов выкладывать их с ОБЯЗАТЕЛЬНЫМ описанием того, как скрипт работает и какие изменения необходимо внести в исходный код для подстройки под конкретную систему. Поскольку ссылки на файлообменники имеют тенденцию устаревать, просьба в постах выкладывать также и исходный код скрипта, чтобы пользователь, в случае необходимости, мог самостоятельно создать для себя файл скрипта или адаптировать существующий. Ну и, естественно, хотя большинство скриптов и выкладываются в сети для общего пользования - не стоит забывать о том, что каждый скрипт имеет своего автора. Давайте уважать друг друга и если Вы модифицировали скрипт – укажите это ОТДЕЛЬНОЙ СТРОКОЙ, а не затирайте имя автора исходного кода.
Цитата:
Для того, чтобы создать файл скрипта из исходного кода необходимо в любом текстовом редакторе (например в 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кБ).
__________________
Всякий живет как может, если не может жить как хочет. Последний раз редактировалось romamos; 01.06.2009 в 19:47. |
|
03.09.2008, 02:56 | #2 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
Ещё пара скриптов из серии "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") Архив со скриптами и иконками можно скачать здесь:
__________________
Всякий живет как может, если не может жить как хочет. |
03.09.2008, 02:56 | #3 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
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-фреймам. Архив со скриптом и иконкой к нему лежит здесь. Или здесь -
__________________
Всякий живет как может, если не может жить как хочет. |
03.09.2008, 03:08 | #4 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
Ещё несколько скриптов для работы со звуком.
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);}
__________________
Всякий живет как может, если не может жить как хочет. |
26.09.2008, 20:34 | #5 | |
Tango
Стажер
Регистрация: 17.09.2008
Сообщений: 9
Рейтинг: 71
|
Цитата:
вот это серьезный минус альтернативных MPEG2-кодировщиков. приятно все-таки и удобно расставлять чаптеры по своему усмотрению, а не зависеть от произвольно ими расставленных I-кадров. |
|
11.02.2009, 17:50 | #6 | |
Yarosik
Научный сотрудник
Регистрация: 11.02.2009
Сообщений: 44
Рейтинг: 133
|
Цитата:
старнно, но у меня не срабатывает. и вот такую ошибку выдает(см. приложения) Версия - Вегас 8.0с, что подскажете? |
|
03.09.2008, 03:08 | #7 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
Скрипт 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); }
__________________
Всякий живет как может, если не может жить как хочет. |
06.09.2008, 01:21 | #8 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
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); } } Успехов всем!
__________________
Всякий живет как может, если не может жить как хочет. |
26.09.2008, 22:21 | #9 |
Kanst
Научный сотрудник
Регистрация: 22.05.2008
Сообщений: 30
Рейтинг: 4915
|
Расставляй перед кодированием в ССЕ - он в месте маркера автоматически ставит I-кадр.
__________________
Когда ты, наконец-то стал специалистом в своем деле, дело может исчезнуть к чертовой матери! |
12.02.2009, 23:14 | #10 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
Только что еще раз попробовал на Vegas 8.0c. Все работает.
Я, увы, не программер, поэтому точный диагноз дать не могу. Возможно проблема в NET.Framework, или, как уже бывало прежде, в каком-нибудь обновлении безопасности от мелкомягких. У меня монтажная система только с SP2 и небольшим набором критических обновлений.
__________________
Всякий живет как может, если не может жить как хочет. |
15.02.2009, 10:59 | #11 |
Yarosik
Научный сотрудник
Регистрация: 11.02.2009
Сообщений: 44
Рейтинг: 133
|
ПриветЪ!
Похоже на то, мой ХР обновляется автоматически. И вот что страннно, RecreateAudioEvents и AlfaChanel работают. а другие скрипты - нет. может есть у кого-нибудь догадки на этот счет? |
15.02.2009, 22:55 | #12 |
vkuzin
Старший научный сотрудник
Регистрация: 14.05.2008
Сообщений: 616
Рейтинг: 15862
|
попробуй переустановить Вегас.На проекты это никак не скажется..
__________________
Вперед и вверх А там посмотрим... |
16.02.2009, 18:17 | #13 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
В Вегасе при установке ставится базовый набор скриптов. Эти скрипты работают?
__________________
Всякий живет как может, если не может жить как хочет. |
16.02.2009, 01:54 | #14 |
daos
Старший научный сотрудник
Регистрация: 02.02.2009
Сообщений: 186
Рейтинг: 10977
|
Помниться скрипты разные бывают. Были под версии когда вега еще была не сонивская(там имя что ли менял, не помню уже). А и еще разные фреймнетвоки им нужны вроде бы(опять тут не помню:-))
|
16.02.2009, 12:50 | #15 | |
YNUS
Старший научный сотрудник
Регистрация: 12.05.2008
Сообщений: 916
Рейтинг: 22598
|
RemoveAllEffects
Достаточно полезный скрипт, редкая необходимость в использовании но очень важен при ошибочном монтаже и переделке достаточно большого проекта. Как следует из названия удаляет все присвоенные эффекты из выделенных эвентов.
Цитата:
|
|
19.02.2009, 11:54 | #16 |
Yarosik
Научный сотрудник
Регистрация: 11.02.2009
Сообщений: 44
Рейтинг: 133
|
ПриветЪ!
работает не всякий сторонний скрипт, родные работают. |
19.02.2009, 14:53 | #17 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
Тогда надо разбираться с каждым конкретно. Как вариант - брать тексты неработающих скриптов и сравнивать построчно с рабочими. Иногда скрипты не запускаются из-за того, что неправильно указаны пути сохранения, форматы и т.п.
Те, что выкладываются в этой теме, работают вплоть до VP 8.0c. Общее для всех скриптов - в первых строках должно быть указано: "import System.Windows.Forms; import Sony.Vegas;" у "старых" скриптов часто бывает ошибка во второй строке. Вместо Sony - Sonic Foundry.
__________________
Всякий живет как может, если не может жить как хочет. |
20.02.2009, 10:31 | #18 |
Yarosik
Научный сотрудник
Регистрация: 11.02.2009
Сообщений: 44
Рейтинг: 133
|
ПриветЪ!
вот спасибо, в програмирование не вникал, но просмотрю тексты тех скриптов что не работают. |
20.03.2009, 14:41 | #19 |
albert_kes
Толковый человек ®
Регистрация: 21.10.2008
Сообщений: 1,275
Рейтинг: 34243
|
Несколько скриптов для 8 версии
__________________
Знание - сила, сила есть - ума не надо... |
05.04.2009, 01:39 | #20 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
В этом комплекте скриптов для VP8 от GILLES PIALAT (прямой ход в хранилище: http://sony.vegas.1.free.fr/VP8/ там можно найти еще и ряд скрин-шотов, поясняющих работу скриптов) есть ряд весьма полезных скриптов особенно для тех, кто часто работает с мультикамерой. В частности:
Add New Take To Multicam Project Automatic Multicam Editing Sync Events TakesToTracks Takes2TracksForCDM_V2 Два последних хочу выделить особо. Они преобразуют мультикамерный трек обратно в набор треков! Причем делать это можно, в т.ч. и на этапе редактуры. TakesToTracks дает возможность разделять мультикам в разных вариантах: только видео, только аудио, и видео и аудио. Есть пара моментов. Без аудиодороги (с чистым видео) скрипт работать не будет. Если в окне настроек поставить флажок только на аудио, видео дорога удаляется и в результате остаются только аудио-треки. Takes2TracksForCDM_V2 просто разделяет мультикамерную аудиодорогу на треки, не трогая видео.
__________________
Всякий живет как может, если не может жить как хочет. |
27.03.2009, 12:02 | #21 |
albert_kes
Толковый человек ®
Регистрация: 21.10.2008
Сообщений: 1,275
Рейтинг: 34243
|
Коллекция скриптов
Add Effect And Slow Play Add effect to all media Add markers at interval Add markers at interval Add markers to events Add Regions To Events Add2SecondGap Adjust volume Apply Random Transition Apply transitions Aspect ratio Audio to new take Audit for event levels Audit for short blank gaps Automated_photo_snapshot Automated_photo_snapshot Batch render Batch render gui Batch Render GUI (JHM) Batch Render Gui JHM Blink ChangeAlphaChannel ChangeMediaPoolAspectRatio Chop off front CopyVelEnv(e) Create tracks CurveTypesConcave CurveTypesConvex CurveTypesLinear CurveTypesSmooth Delete Empty Space Between Events Delete from cursor to event start Delete n frames from event Delete next frames on all tracks Directory converter Drum bus and track DVDA chapter from Vegas marker Event curve types (4) Expand events Export images for range Fade event in out Fade in out cursor Film look Highlight selected fX Events Improved Render Gui Loop to normalize Markers at Media Change Points Markers To Regions Match aspect Move cursor 60 sec left Multi Cam Dissolve Multi fade MulticamWithTakes 1.54 Normalize all One frame from each event Opacity level Photo_Snapshot Play Sound Put In First Track End Quick Envelope Quick pan Quick Pan 1.0 QuickEnvelope2.0[1] RC1_filmlook Reconstruct Audio events Recreate Audio events Reduce Interlace Flicker Regions from event names RegionsToChapters Remote Control Remove all effects Remove Not Active Takes Render DVD Render image sequence Render on markers Render queue RenderSegs2 Reverse event Select all Select all events in single track Select all events in tracks SelectEventsFromCursor Selection area around selected event SelectionToMultitakeClips 1.32 Show number of tracks Snapshot to clipboard Snapshot to file Split Events TapTempo Test pattern Test timeline redraw Thumbnail Thumbnail at markers Time Lapse (1 Frame per Event) Tracksetup Transitions TRIMMODULE 1.12 VegasQuakeInstall Visual Key framer wil_maestrochp ЗЫ Если есть повторы, извините. все не проверял Описание на аглицком в архиве Описание.zip . __________________
Знание - сила, сила есть - ума не надо... |
27.03.2009, 14:01 | #22 |
vladyud
Стажер
Регистрация: 26.03.2009
Сообщений: 2
Рейтинг: 56
|
Export MKVmerge chapters
Экспорт маркеров в XML-файл в формате программы MKVmerge
- скрипт будет полезен тем, кто собирает mkv-файлы в MKVmerge; - после экспорта достаточно загрузить полученный xml-файл в MKVmerge: меню Chapter Editor -> Load, либо указать Chapter file в закладке Global.
Код:
/** * Script that exports Sony Vegas project's markers data to an XML file. * * Based on "Export XML" script. * * Note: Not every aspect of project data is accessible from the * scripting API so it is likely that information will be lost in a * round trip to and from Xml. Most noticeably, you'll loose effect * properties. * * Revision Date: March 27, 2009. * Author: Vlad Yudkin **/ using System; using System.Collections; using System.Text; using System.IO; using System.Xml; using System.Windows.Forms; using System.Globalization; using Sony.Vegas; public class EntryPoint { NumberFormatInfo myNumberFormat = NumberFormatInfo.InvariantInfo; System.Text.Encoding myCharacterEncoding = System.Text.Encoding.UTF8; bool UseProjectRulerFormatForTimecodes = true; RulerFormat myTimecodeFormat = RulerFormat.Nanoseconds; Vegas myVegas = null; public void FromVegas(Vegas vegas) { myVegas = vegas; if (UseProjectRulerFormatForTimecodes) myTimecodeFormat = myVegas.Project.Ruler.Format; String outputFile = myVegas.Project.FilePath; if (!String.IsNullOrEmpty(outputFile)) { String fileNameWOExt = Path.GetFileNameWithoutExtension(outputFile); String directoryName = Path.GetDirectoryName(outputFile); outputFile = Path.Combine(directoryName, fileNameWOExt + ".xml"); } outputFile = ShowSaveFileDialog("XML Files (*.xml)|*.xml", "XML Output File", outputFile); myVegas.UpdateUI(); if (null != outputFile) { ExportXml(outputFile); } } void ExportXml(String outputFile) { XmlDocument doc = new XmlDocument(); XmlProcessingInstruction xmlPI = doc.CreateProcessingInstruction("xml", "version=\"1.0\""); doc.AppendChild(xmlPI); XmlElement root = doc.CreateElement("Chapters"); doc.AppendChild(root); ExportProject(root, myVegas.Project); XmlTextWriter writer = new XmlTextWriter(outputFile, myCharacterEncoding); writer.Formatting = Formatting.Indented; writer.Indentation = 2; writer.IndentChar = ' '; doc.WriteTo(writer); writer.Close(); } void ExportProject(XmlElement parent, Project proj) { XmlElement elt = AddChild(parent, "EditionEntry"); ChildInt32(elt, "EditionFlagHidden", 0); ChildInt32(elt, "EditionFlagDefault", 0); ChildString(elt, "EditionUID", proj.Length.Nanos.ToString(myNumberFormat)); ExportMarkers(elt, proj.Markers, "Markers"); } void ExportMarkers(XmlElement parent, IList markers, String type) { foreach (Marker marker in markers) { ExportMarker(parent, marker); } } void ExportMarker(XmlElement parent, Marker marker) { Type type = marker.GetType(); XmlElement elt = AddChild(parent, "ChapterAtom"); ChildString(elt, "ChapterUID", marker.Position.Nanos.ToString(myNumberFormat)); ChildUInt32(elt, "ChapterFlagHidden", 0); ChildUInt32(elt, "ChapterFlagEnabled", 1); XmlElement elt2 = AddChild(elt, "ChapterDisplay"); ChildString(elt2, "ChapterString", marker.Label); ChildString(elt2, "ChapterLanguage", "rus"); ChildTimecode(elt, "ChapterTimeStart", marker.Position); } XmlElement AddChild(XmlElement parent, String childName) { return ChildString(parent, childName, null); } // For Timecodes, both the string and nanos are exported so that // importing them can be precise and flexible. XmlElement ChildTimecode(XmlElement parent, String childName, Timecode childValue) { XmlElement elt = ChildString(parent, childName, TimecodeToString(childValue)); //elt.SetAttribute("Nanos", myTimecodeFormat); return elt; } XmlElement ChildBoolean(XmlElement parent, String childName, Boolean childValue) { return ChildString(parent, childName, childValue.ToString()); } XmlElement ChildDouble(XmlElement parent, String childName, Double childValue) { return ChildString(parent, childName, childValue.ToString(myNumberFormat)); } XmlElement ChildSingle(XmlElement parent, String childName, Single childValue) { return ChildString(parent, childName, childValue.ToString(myNumberFormat)); } XmlElement ChildInt64(XmlElement parent, String childName, Int64 childValue) { return ChildString(parent, childName, childValue.ToString(myNumberFormat)); } XmlElement ChildInt32(XmlElement parent, String childName, Int32 childValue) { return ChildString(parent, childName, childValue.ToString(myNumberFormat)); } XmlElement ChildUInt32(XmlElement parent, String childName, UInt32 childValue) { return ChildString(parent, childName, childValue.ToString(myNumberFormat)); } XmlElement ChildObject(XmlElement parent, String childName, Object childValue) { return ChildString(parent, childName, childValue.ToString()); } XmlElement ChildString(XmlElement parent, String childName, String childValue) { XmlElement child = parent.OwnerDocument.CreateElement(childName); parent.AppendChild(child); if (null != childValue) child.InnerText = childValue.ToString(); return child; } String TimecodeToString(Timecode timecode) { return timecode.ToString(myTimecodeFormat); } String ShowSaveFileDialog(String filter, String title, String defaultFilename) { SaveFileDialog saveFileDialog = new SaveFileDialog(); if (null == filter) { filter = "All Files (*.*)|*.*"; } saveFileDialog.Filter = filter; if (null != title) saveFileDialog.Title = title; saveFileDialog.CheckPathExists = true; saveFileDialog.AddExtension = true; if (null != defaultFilename) { String initialDir = Path.GetDirectoryName(defaultFilename); if (Directory.Exists(initialDir)) { saveFileDialog.InitialDirectory = initialDir; } saveFileDialog.DefaultExt = Path.GetExtension(defaultFilename); saveFileDialog.FileName = Path.GetFileName(defaultFilename); } if (DialogResult.OK == saveFileDialog.ShowDialog()) { return Path.GetFullPath(saveFileDialog.FileName); } else { return null; } } } |
28.03.2009, 13:56 | #23 |
vladyud
Стажер
Регистрация: 26.03.2009
Сообщений: 2
Рейтинг: 56
|
romamos, благодарю
В дополнение к скрипту: для его корректной работы необходимо выставить Time Format в Time, т.е. чтобы время было в виде 01:30:15.235. В зависимости от региональных настроек Windows, тысячные доли секунды могут быть отделены запятой - должна быть точка. |
27.03.2009, 18:04 | #24 | |
Quentin Buratino
Научный сотрудник
Регистрация: 04.03.2009
Сообщений: 34
Рейтинг: 3420
|
Цитата:
как говориться у вас не будет второго шанса произвести первое впечатление =) |
|
27.03.2009, 22:49 | #25 |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
Quentin Buratino, зачем же так вот безапеляционно... Если бы вы потрудились посмотреть сам скрипт, то увидели бы, что скрипт как раз написан для Sony Vegas и предназначен для переноса данных проекта Вегаса в MKVmerge. Другое дело - то, что вы лично не пользуетесь этой программой, но тем кто использует MKVmerge, этот скрипт очень пригодится. Задача вполне актуальная. Есть большой спрос на подобные скрипты, с помощью которых можно было бы полностью передавать данные проекта Вегаса в другие программы, например After Affects, Final Cut, AVID MC и т.д. и поднимать из них обратно в Вегас. Форматы EDL и AAF не решают этой задачи, некоторые данные в них передать нельзя. В XML это возможно.
Так что офтопом был именно ваш пост. На будущее... Слово - не воробей, подумайте прежде чем выпускать его на всеобщее обозрение. vladyud, вам спасибо за то, что решили опубликовать этот скрипт здесь. Скриптописателей у нас не так много. Добро пожаловать в тему.
__________________
Всякий живет как может, если не может жить как хочет. |
15.04.2009, 08:01 | #26 | |
albert_kes
Толковый человек ®
Регистрация: 21.10.2008
Сообщений: 1,275
Рейтинг: 34243
|
Цитата:
Ещё один скрипт New Deshaker __________________
Знание - сила, сила есть - ума не надо... |
|
15.04.2009, 17:09 | #27 | |
romamos
Провидеолюбитель
Регистрация: 06.05.2008
Сообщений: 519
Рейтинг: 20674
|
Цитата:
Есть пара приятных сервисных моментов. Скрипт позволяет выбирать, что хотите добавить: видео, или аудио, или и то, и другое вместе + к этому есть возможность выбрать как добавлять "камеру": только в мультикамерный трек, или плюс к этому оставить еще и отдельным треком в проекте. Подводный камень - если в добавляемой "камере" и мультикамерном треке нет звука, скрипт будет ругаться.
__________________
Всякий живет как может, если не может жить как хочет. |
|
30.06.2010, 20:17 | #28 |
psi-x
Стажер
Регистрация: 30.06.2010
Сообщений: 1
Рейтинг: 10
|
а можно узнать как с ним работать в вегасе? Я только недавно научился кое как его применять в виртуал дабе, а вот в вегасе непойму как его заставить работать...
И еще вопрос попроще: подскажите хороший скрипт для автоматической генерации переходов, мне нужно чтоб использовались не все переходы, а только те которые я выберу. |
07.10.2010, 13:22 | #29 | |
igode2007
Старший научный сотрудник
Регистрация: 18.03.2010
Сообщений: 126
Рейтинг: 11671
|
Цитата:
__________________
Учись у мудрых и помогай молодым Любите книгу (учебник) - источник знаний! |
|
08.10.2010, 12:27 | #30 |
Maxundel
Стажер
Регистрация: 13.06.2009
Сообщений: 29
Рейтинг: 1286
|
Вроде всё делаю как надо... ))
Установил VirtualDub, установил Deshaker В вегасе появилась славная иконка D Выделяю клип, нажимаю D Vegas спрашивает скрипт с расширением vds, а там vdf, в чем разница? Направляю на vdf, начинает вроде что-то рендерить - и фиг. В конце просчёта выдает ошибку
__________________
www.SiMax.Pro Последний раз редактировалось Maxundel; 08.10.2010 в 13:16. |
|
Теги |
scripts, sony vegas, скрипты |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|