Просмотр полной версии : Скрипты (Scripts)
Я не знаю как сохранить настройки при переустановке, никогда этим не занимался. Наверное, они лежат в y My Documents и в реестре в ветке вегаса
AndrewPet
12.02.2013, 17:52
Есть скрипт который называется SelectEventAtCursor.cs
с таким содержанием:
/**
* This simple C# script displays the version of the Vegas application
* in a message box. Notice that any script that talks to Vegas will
* use the Sony.Vegas namespace.
*
* Revision Date: Oct. 23, 2006.
**/
using System;
using System.Collections;
using System.Windows.Forms;
using Sony.Vegas;
public class EntryPoint {
public void FromVegas(Vegas vegas) {
Timecode pos = vegas.Cursor;
foreach (Track track in vegas.Project.Tracks)
{
if (!track.Selected) continue;
foreach (TrackEvent evnt in track.Events)
{
evnt.Selected = (evnt.End >= pos && evnt.Start < pos);
}
}
}
}
Вот он не совсем понятно работает. Иногда он СИНИМАЕТ выделение с выделенных до него клипов и выделает тот, который под курсором, а иногда НЕ СНИМАЕТ выделение, а добавляет его к уже выделенным до него клипам.
Как изменить этот скрипт, чтоб он ВСЕГДА снимал выделение перед тем, как выделить тот клип, который под курсором?
Надеюсь понятно написал
После этой строки:
Timecode pos = vegas.Cursor;
добавить:
foreach (Track track in vegas.Project.Tracks)
foreach (TrackEvent evnt in track.Events)
evnt.Selected = false;
Pilman`s TV
13.02.2013, 01:33
Ctrl+Shift+A
снимает все выделения )))
AndrewPet
13.02.2013, 02:35
warper, спасибо, сейчас попробую
Ctrl+Shift+A
снимает все выделения )))
а мне нужно не ВСЕ, а только с КЛИПОВ, чтоб выделение на дорожках осталось. спасибо КЭП!
warper, громадное спасибо, плюсовать оно мне запрещает, не знаю, почему, все работает. моя мечта - безмышечный монтаж ТУПЫХ однообразных кусков вроде как достигнут.
Назначил:
Ctrl+Shift+A - снять выделение с клипов
Ctrl+Shift+Alt+A снять выделение с клипов и дорожек
красотища.......))
AndrewPet
28.02.2013, 02:33
Подскажите, родной комманды не нашел, хочу найти скрипт, может у кого есть такой или может написать?
Нужен скрипт, смещающий в режиме slip содержимое клипа на один кадр влево (вправо). (т е сам клип на ТЛ остается на месте, а его содержимое сдвигается).
нашел с клавы только подрезку
"hold Alt while pressing 1, 3, 4, or 6 to slip trim"
а мне нужен аналог с клавы для ПЕРЕМЕЩЕНИЯ, а не подрезки края,
для мышки это звучит в справке так:
"Slip: move media within event without moving the event Alt+drag inside the event"
Кто-то может помочь в этом вопросе?
chainick
01.03.2013, 21:13
OffsetFrameForward.cs (https://www.dropbox.com/s/w8y2i1ly0rv484q/OffsetFrameForward.cs)
OffsetFrameBack.cs (https://www.dropbox.com/s/2rvyferbepdqqo3/OffsetFrameBack.cs)
ИНСТРУКЦИЯ
1)Скопировать файлы скриптов OffsetFrameForward.cs и OffsetFrameBack.cs в директорию «Script Menu»
2) Выполнить команду Tools – Scripting – Rescan Script Menu Folder
3) Выполнить команду Options - Customize Keyboard
4) В окне Customize Keyboard в поле Show commands containing вводим ключевое слово script. В нижнем поле появится список скриптов, находящихся в директории Script Menu. Выбираем OffsetFrameForward.cs, переводим курсор в поле Shortcut keys, на клавиатуре набираем необходимое сочетание и жмем кнопку Add. Такие же действия проводим и для OffsetFrameBack.cs. Горячие клавиши заданы (пример см. на скриншоте) и могут быть использованы в работе.
http://i.imgur.com/yDrJoop.png
AndrewPet
02.03.2013, 02:11
всо работает как и положено! спасибо огромное!
единственное что огорчает - паузы перед каджым запуском, быстро передвинуть на нужное количество кадров не получается. Я где-то читал, что скрипты в вегасе можно предварительно компилировать, и тогда они будут запускаться и работать быстро. как родные комманды.
вот, вспомнил, это было в справке
Плагины Vegas - это откомпилированные скрипты, которые доступны через пункт подменю "Extensions" в меню "View", "Edit" или "Tools". Эти плагины загружаются вместе с Vegas и не выгружаются до выхода из программы. Плагины способны реагировать на различные события, например изменение проекта, управлять воспроизведением проекта, а также иметь интерфейс, который легко интегрируется в окно Vegas.
наверное. сделать это будет не просто...
AndrewPet
06.03.2013, 02:09
Господа, может кто встречал следующие скрипты:
1. чтоб индикатор времени (или как он правильно называется?..) прыгал на след стык (но НЕЗВИСИМО от того какая дорожка выделена, т е как будто бы выделены все). а то часто когда многокамерка, устаешь переключать активный трек, и индикатор времени улетает очень далеко.
2. выделить все клипы на выделенных дорожках, но на ограниченном IO участке ТЛ.
вот 2 вопрос подробнее
нужен скрипт. вот его действие в картинках:
было так
http://s002.radikal.ru/i199/1303/eb/297d4054d85d.jpg
стало так
http://i037.radikal.ru/1303/fd/d36d8878bebf.jpg
либо вот так
http://s019.radikal.ru/i614/1303/e6/bbf6a987736d.jpg
желательно последний вариант
вот 2 вопрос подробнее
нужен скрипт. вот его действие в картинках:
было так
http://s002.radikal.ru/i199/1303/eb/297d4054d85d.jpg
стало так
http://i037.radikal.ru/1303/fd/d36d8878bebf.jpg
либо вот так
http://s019.radikal.ru/i614/1303/e6/bbf6a987736d.jpg
желательно последний вариант
Господа, может кто встречал следующие скрипты:
1. чтоб индикатор времени (или как он правильно называется?..) прыгал на след стык (но НЕЗВИСИМО от того какая дорожка выделена, т е как будто бы выделены все). а то часто когда многокамерка, устаешь переключать активный трек, и индикатор времени улетает очень далеко.
2. выделить все клипы на выделенных дорожках, но на ограниченном IO участке ТЛ.
вот 2 вопрос подробнее
нужен скрипт. вот его действие в картинках:
было так
http://s002.radikal.ru/i199/1303/eb/297d4054d85d.jpg
стало так
http://i037.radikal.ru/1303/fd/d36d8878bebf.jpg
либо вот так
http://s019.radikal.ru/i614/1303/e6/bbf6a987736d.jpg
желательно последний вариант
извиняюсь за дублирование, не могу найти, как редактировать сообщение.
1. Что такое стык? Начало, конец ивента или конец последовательности пересекающихся по времени ивентов? Какая "нопка" улучшается?
2. Откуда на картинках появился Loop region? Предполагается, что он уже есть к моменту начала работы скрипта? И что делать, если его нет?
jurisviii
07.03.2013, 19:20
Как добавть картинок (http://provegas.ru/forum/showpost.php?p=11216&postcount=2)
AndrewPet
08.03.2013, 00:59
1. Что такое стык? Начало, конец ивента или конец последовательности пересекающихся по времени ивентов? Какая "нопка" улучшается?
2. Откуда на картинках появился Loop region? Предполагается, что он уже есть к моменту начала работы скрипта? И что делать, если его нет?
1. стык - это начало, конец, просто рез на сплошном евенте. любое из этого. просто ближайший край. если накладывающиеся, то тоже просто ближайщий край какого-то из этих евентов.
2. loop region я ставлю сам до начала работы скрипта, чтоб указать, что я хочу.
если его нет, то просто звук ошибки, либо подсказка. либо вообще ничего.
chainick
11.03.2013, 18:31
AndrewPet, лучше вам выучить шоткаты для работы на таймлайне, чем ждать, когда кто-то реализует искусственный интеллект на скриптах.
1. Прикладываю скрипт NextCut в архиве. Переводит на следующий стык справа от курсора (начало или конец), включая аудио-ивенты. Если справа от курсора ничего нет, ничего не делает.
Если нужны только видеоивенты, нужно раскомментарить одну строку (удалить ведущие //).
2. Прикладываю скрипт SelectLoopRegion. Выделает все ивенты на выделенных треках, которые целиком влезают в Loop Region. Возможны отрицательные эффекты при наличии группировки ивентов (не проверял).
AndrewPet
13.03.2013, 02:39
2 warper, Офигенно! все-таки дождался!
сейчс буду пробовать!
AndrewPet, лучше вам выучить шоткаты для работы на таймлайне, чем ждать, когда кто-то реализует искусственный интеллект на скриптах.
Да оно-то понятно, во всех программах так и приходится делать, но в вегасе.... я в него влюбился, тут все можно допилить под свои задачи. Жать, только знаний по скриптам у меня не много. ну готовый я немножко изменить смогу, а написать что-то глобальное - нет, уже забыл все, практики мало было.
еще есть интересная задумка, ен знаю. как это реализовать...
в общем при монтаже 4-х камерки камеры соответствуют цифрам 1 2 3 4.
но расположены камеры на экране не так как кнопки на клавиатуре. Я имею в виду в пространстве, геометрически, и поэтому интуитивно не получается резать, каждый раз думать приходится, какую цифру нажимать. Было бы хорошо назначить камеры 1 2 3 4 на кнопки 4 5 1 2 соответственно. если 9 камер, то на 7 8 9 4 5 6 1 2 3. и т д в зависимости от их количества.
я думаю, понятно изложил мысль? может это уже сделано в каком-нибудь вегазавре или чем-то подобном. не заню, если кто встречал. посдскажите.
warper
все отлично работает, группировками не пользуюсь. тоже не проверял.
единственное, что хочется еще PrevCut.js оп аналогии с NextCut.js.
думал сам смогу изменить - неа, не выходит.
AndrewPet
PrevCut выкладываю. А с выбором камеры в мультикаме я пасс, мне эта кухня незнакома.
AndrewPet
15.03.2013, 02:41
Спасибо еще раз, ну камеры - то такое. ипривыкнуть можно.
Еще вопрос: как быстро создавать вложенные проекты в вегасе? ну например, у меня на банкете многокамерка только местами, и мне было бы удобно работать не огромным мультикамерным треком, а отрезками, там, где это нужно. Хочу, чтоб как в премьере, выделил несколько фрагментов, нажал NEST и на их месте появляется вложенный проект, в который они копируются, автоматом выставляются нужные настройки проекта.
может для этого есть скрипт какой-то.
нашел в вегазавре команду похожую, но она заменяет весь трек. а мне нужно много треков (можно и все) но только на определенном отрезке ТЛ.
Скрипт может создать проект и куда-то его сохранить, видел такой код в батч рендере, но я не знаю как туда правильно запихнуть выделенные фрагменты и как полученный проект прозрачно выложить обратно на тайм-лайн. Предположительно много возни будет с отладкой этого дела, тем более там тоже мультикам будет выплывать в скриптах...
AndrewPet
25.03.2013, 17:38
а можно как-то использовать в качестве заготовки или части работы комманду create nested project из набора VEGASAUR. она делает то, что нужно. но берет за основу весь трек, а нужно только часть его.
даже если это сложно. в любом случае, warper, огромное спасибо за уже проделанную работу. мне лично стало намного удобнееработать.
может кто видел такой скрипт: удаление следующего (предыдущего) евента на выделенном треке, если указатель времени стоит на стыке.
а можно как-то использовать в качестве заготовки или части работы комманду create nested project из набора VEGASAUR. она делает то, что нужно. но берет за основу весь трек, а нужно только часть его.Можно, если это не запрещено лицензией. У меня нет ни его самого, ни лицензий, ни тем более нет авторского согласия на распространение модификаций.
AndrewPet
26.03.2013, 23:44
ну это другой вопрос, я понял. это ж ваш коллега. это правильно, цивилизованно.
удаление следующего (предыдущего) евента на выделенном треке, если указатель времени стоит на стыке.
См. приложение
AndrewPet
01.04.2013, 18:55
ух ты, спасибо. сейчас попробую. как раз shuttle pro прикупил. повесим куда-нибудь.
AndrewPet
12.04.2013, 17:14
1. Прикладываю скрипт NextCut в архиве. Переводит на следующий стык справа от курсора (начало или конец), включая аудио-ивенты. Если справа от курсора ничего нет, ничего не делает.
что-то у меня обнаружился баг:
при применении скрипта NextCut и PrevCut несколько раз срабатывает, а потом вылазит окошко
http://s49.radikal.ru/i125/1304/60/6e7672ddc100.png (http://www.radikal.ru)
лечится только перезапуском вегаса.
Я думаю, что это может быть связано с тем, что я запускаю скрипт снова, пока еще не закончился предыдущий вызов. Скрипты в отличии от родных команд, работают с притормаживанием.
Если можно что-то сделать, то просьба поправить.
AndrewPet
20.05.2013, 23:07
Ребята. кто может помочь? нужен скрпт работающий по следующему алгоритму:
1. выделяем эвант А.
2. делаем его неактивным.
3. вырезаем его.
4. находим по имени эвент Б с предыдущим номером (предыдущий в окне проекта, на один выше. или каким-то другим методом определяем предыдущий Эвент из серии).
например, если А=MVI_7133.mov, то Б=MVI_7132.mov если делать через регулярные выражения или еще как-то. то он должен воспринимать только последний номер из имени. т к иногда для всех камер еще бывает сквозная нумерация, типа такой:
100_oper1_MVI_7133.mov
101_oper1_MVI_7134.mov
102_oper1_MVI_7135.mov
103_oper2_MVI_0502.mov
104_oper2_MVI_0503.mov
105_oper2_MVI_0504.mov
106_oper1_MVI_7136.mov
и т д. т е ориентируемся на последний номер в имени.
5. ставим А сразу после Б на ту же дорожку.
ну и желательно, если выделил больше 1 эвента вместо А, то все в том же порядке ставятся после предыдущего ( относительно первого эвента из нескольких в А).
надеюсь понятно описал.
Для чего это нужно: я синхронизирую многокамерку plural eyes и иногда важные куски он не может синхрнизировать и выкидывает в самый конец или начало. и вот нужно их хотя бы приблизительно позиционировать, а потом уже ручками подогнать. сейчас делаю по этому алгоритму. но все руками, это напрягает и долго. нужно переложить ручной труд на плечи машин))
AndrewPet
31.05.2013, 02:33
господа прогрммеры, все на морях что-ли?
в 12 вегасе перестали работать скрипты. Один нормализует все звуковые дорожки и два других нужны для рамдомного изменения переходов:
Normalizeall.js
ApplyTransitions.js
ApplyTransition_1_2.js
Можете подсказать альтернативу или эти же но работающие в 12 вегасе?
а ладно, не надо, снёс 12, вернулся на 10 - теперь всё норм)
Нормализовать звук можно не только отдельными скриптами, но и такими инструментами как Production Assistant (http://provegas.ru/prodassist/) или Vegasaur (http://provegas.ru/vegasaur/)
Рандомное применение переходов это как - просто чтоб было ?
Состыковать "нестыкуемые встык" фрагменты можно с помощью переходов, путем выбора вручную конкретного транзишина и его длины. Одни переходы могут сгладить нестыковку, другие наоборот, подчеркнуть. Поэтому любую "рандомность" считаю ребячеством.
Но это дело вкуса :)
.
Anton Sinicyn
06.08.2013, 14:23
Всем привет. Нужен скрипт удаляющий вса замьюченный ивенты из сессии. Нашел вот такой, но в 12 вегасе он не работает. поможете разобраться?
using Sony.Vegas;
public class EntryPoint
{
public void FromVegas(Vegas app)
{
foreach (Sony.Vegas.Track currentTrack in app.Project.Tracks)
{
System.Collections.Generic.List<Sony.Vegas.TrackEvent> killSheet = new System.Collections.Generic.List<TrackEvent>();
foreach (Sony.Vegas.TrackEvent currentEvent in currentTrack.Events)
{
if (currentEvent.Mute == true)
killSheet.Add(currentEvent);
}
foreach (Sony.Vegas.TrackEvent victim in killSheet)
{
currentTrack.Events.Remove(victim); // BLAM
}
}
}
}
serg kost
08.08.2013, 15:14
Приветствую всех! Коллеги! Может кто видел скрипты или сможет написать.
1. Вызов панели для выбора эффектов. Соответствует такой операции, как нажатие ЛКМ на крестик в углу эвента.
2. То же самое, но для вызова окна Pan/crop
3. Эффект затухания в 1 сек. на конце одного эвента и возрастания (видео или аудио, в зависимости от выделенной дорожки) следующего за ним эвента. К примеру, ставишь курсор на стык между эвентами, нажал скрипт и получил слева от стыка затухание, а вправа - возрастание сигнала.
Забыл написать. Работаю в 12-м Вегасе.
serg kost
1) Бинд уже существует Options->Customize keyboard... -> Tools.Video.VideoEventPanCrop
2) Бинд уже существует Options->Customize keyboard... -> Tools.Video.VideoEventFX
serg kost
10.08.2013, 08:07
Спасибо! Но вот сейчас попробовал задать комбинацию этим действиям, а результата нет. И Вегас перезапускал. Я пытаюсь разные команды навесить на Contour Shuttle Pro, чтобы меньше мышкой выбирать. А фейдер в обе стороны на нужном стыке есть скрипт?
Pan/crop включил на вкладке Global. А VideoEventFX на той же вкладке комбинацию назначаю, и она не работает на клавиатуре. Это только у меня так, или это невозможно? Пожалуйста, отзовитесь кто знает.
У меня комбинация работала. Точно нет пересечения с другими клавишами?
serg kost
10.08.2013, 20:30
Пересечения нет. Пробовал и Ctrl-Shift-S, и Alt-Ctrl-Shift-S. Вегас английский, последний.
Странно. Через Alt-S заработало. Осталось найти скрипт: Фейдер в обе стороны от стыка по 1 сек. для полного счастья))) Сам то писать не умею.
Anton Sinicyn
Вероятно, Вегас не воспринимает внешние коллекции объектов как "родные". Не знаю было ли так раньше. Придётся убирать ивенты прямо из коллекции Вегаса, рестартуя поиск после каждого удаления. Возможно, процесс будет медленным (заметным на глаз) в больших проектах.
Попробуйте приложенный файл DeleteMutes.zip
serg kost
Попробуйте приложенный файл Set1SecFadesLeftRight.zip
Он ставит затухание с обоих сторон от курсора для всех ивентов на всех выделенных дорожках, которые начинаются/заканчиваются на курсоре.
Форма затухания не выставляется, по идее где-то в настройках есть. Можно допилить скрипт, если требуется другая определённая затухания.
serg kost
14.08.2013, 10:01
warper! Попробовал скрипт. Выдаёт вот такую ошибку: Variable 'TimeCode' has not been declared. Пробовал и на видеодорожках, и с подрезанными и состыкованными аудио. Пока так и не сообразил, в чём проблема.
На самом деле Timecode - это целый тип переменных, а не отдельная переменная. Может быть, транслятор javascript почему-то не увидел его из-за различий регистра (хотя обычно javascript на регистр букв не реагирует). Попробуйте заменить TimeCode на Timecode. Если не поможет - вечерком попробую отладить этот скрипт
serg kost
14.08.2013, 18:08
Поменял. Пишет: Error objeсt required
Исправленная версия:
import Sony.Vegas;
try {
var bFound : Boolean = false;
for (var trackEnum = new Enumerator(Vegas.Project.Tracks); !bFound && !trackEnum.atEnd(); trackEnum.moveNext())
if (trackEnum.item().Selected)
{
for (var eventEnum = new Enumerator(Track(trackEnum.item()).Events); !eventEnum.atEnd(); eventEnum.moveNext())
if (eventEnum.item().Start == Vegas.Cursor)
{
eventEnum.item().FadeIn.Length = Timecode.FromMilliseconds(1000);
}
else if (eventEnum.item().End == Vegas.Cursor)
eventEnum.item().FadeOut.Length = Timecode.FromMilliseconds(1000);
}
} catch (e) {
Vegas.ShowError(e);
}
Проходчик
15.08.2013, 11:07
Глупый вопрос можно? Длину фейдера можно менять значением Milliseconds ? Просто других циферек не вижу :-)
Да.
Можно вместо FromMilliseconds(1000) написать FromFrames(25), тогда значение будет в количестве кадров - длина будет зависеть от fps проекта, не знаю как с чересстрочной разверткой.
Можно еще использовать FromString, примерно так: FromString("00:00:01.000"). В строке должно быть значение в формате тайм-рулера проекта. Я не изучал этой формат, так что заведомо рабочее значение навскидку не дам.
serg kost
15.08.2013, 14:29
warper! Большое спасибо! Всё работает как надо!
есть ли скрипты для быстрого изменения параметров автоналожения (Опции-Настройка-Правка)
http://i049.radikal.ru/1309/08/3e194f7fa60f.png
конкретно нужен скрипт который устанавливал бы 0,05 дляну кадра и отключал автоналожение, и второй который бы включал автоналожение и устанавливал бы длину кадра в 6 секунд.
Не пойму, а для чего скрипт? Все всё ж и так настраивает,заменой цифероков и галочками.
ну я делаю видеослайдшоу и бросаю к примеру сто фоток в которых почти ничего не меняется, просто много раз фоткали в разных позах одного человека и в это время быстрая музыка, значит мне нужно чтоб эти фотки быстро прошли. Потом музыка медленная и разные фотки с разными эффектами и мне нужно чтоб они медленно плавно сменяли друг друга. Поэтому после добавления каждой группы фоток лезу в настройки.
Ещё хочу скрипт отключения Maintain Aspect Ratio (сохранения соотношения сторон) во всём проэкте потому что мне не нравится когда из-под фоток выглядывает чуть-чуть видео которое на заднем плане и нужно для каждой группы фоток выбирать ПКМ-Выключатели-Сохранить соотношение. Так что за скрипт автовыключения соотношения сторон тоже был бы признателен.)
В документации по скриптам нет описания прямого доступа к настройкам длины кадров и автоналожения.
Второй скрипт практически не поможет - вместо пары кликов придётся запускать скрипт.
petrovich
16.09.2013, 17:38
проще установить и выучить assistant
edgeone
24.11.2013, 03:43
Trim Start/Trim End. Никак не могу найти эти сценарии для использования в x32 (Vegas Pro 11), повторяющие стандартные подобные действия в двеннадцатой версии. Единственный модифицированный скрипт нашел на оффициальном форуме, отрезающий начало фрагмента, но тот также переводит курсор на начало отрезаемого фрагмента, а другие найденные замедлительно исполняют эти действия. Поиск по запросу trim на этом форуме также не дал результата. Ткните носом, пожалуйста.
Также интересует сценарий для двеннадцатой версии, который уже наверняка имеет место быть, что сокращает по времени выделенные фрагменты до указанной продолжительности.
edgeone
Это не оно?
http://provegas.ru/forum/showthread.php?p=64351&postcount=206
сокращает по времени выделенные фрагменты до указанной продолжительностиУказанной где? Вызывать окошко из скрипта для указания продолжительности несколько... неудобно. Без этого же универсальность скрипта немного хромает. Можно такой скрипт сделать, конечно...
edgeone
25.11.2013, 19:40
warper, спасибо, оно! Но после отрезки/применения сценария при включенном прилипании остается пропуск, чего нет в двеннадцатой версии при использовании стандартных схожих действий. И еще, скрипт у меня срабатывает только через команду Run Script. С панели инструментов или по установке горячей клавиши на данные сценарии выходит ошибка "TypeError: Object is not a collection"
Указанной в строке редактирования сценария. Намерен копировать скрипт и изменять в них соответсвующие параметры, если это возможно. Один скрипт - одна продолжительность.
edgeone
08.12.2013, 10:51
trim start/end теперь интересует мало ввиду исключения использования предпоследней версии программы, но сценарий, что сокращает по времени выделенные фрагменты до указанной в строке сценария продолжительности, например, до двух секунд, если кто-то поможет, все еще интересен.
petrovich
10.12.2013, 02:39
Люди здравствуйте, посоветуйте как указать в скрипте "batch render" чтобы он присваивал имена готовых файлов из именов регионов? И убрать название шаблона из имени.
Очень н-н-нада:)
edgeone
Выкладываю скрипт, который устанавливает длину всех выделенных ивентов на всех дорожках во всём проекте на 2 секунды. В архиве SetSelEventsLength.zip
При необходимости измените число 2.0 в 19-й строке на другое.
petrovich
В строке 127+ стоит формирование второй части имени файла:
String regionFilename = String.Format("{0}[{1}]{2}",
filename,
regionIndex.ToString(),
renderItem.Extension);
В этом контексте region.Label - это "имя" (текст на маркере). В 127 строке квадратные скобки ничего не значат, а {0}, {1} и {2} - это места для следующих аргументов. Сами аргументы - на следующих строках.
Например, так должно получиться что-то вроде названия региона с обычным для шаблона расширением.
String regionFilename = String.Format("{0}{1}",
region.Label,
renderItem.Extension);
Вообще говоря, строки можно склеивать и менее замысловатым способом, просто через +.
Имена шаблонов, если я не путаю, заносятся в строках 92+
String filename = Path.Combine(outputDirectory,
FixFileName(baseFileName) +
FixFileName(renderItem.Renderer.FileTypeName) +
"_" +
FixFileName(renderItem.Template.Name));
Просто аккуратно удалите ненужные части вместе с лишними плюсами.
edgeone
21.12.2013, 06:29
warper, большое спасибо! Очень рад, что Вы нашли время! Надеюсь, сценарий понадобится кому-то еще.
Скажите, пожалуйста, что дописать для удаления пропусков после сокращения фрагментов (close gaps)?
edgeone
Не проще ли после выполнения скрипта просто выполнить post-edit ripple (через меню Edit->Post-edit ripple->вариант или нажать F (Ctrl+F, Shift+Ctrl+F))?
edgeone
21.12.2013, 23:33
warper, спасибо, но немного не ясно, эти сочетания не приводят в действие закрытие пустых промежутков между выделенными фрагментами. Имеется отдельный сценарий DeleteEmptySpaceBetweenEvents, но он выполняет действие на выбранной дорожке целиком.
Добрый день. Передо мной стоит такая задача. Установил Sony Vegas PRO 12. Win 7 64 bit. Есть большой проект - 4-х часовый музыкальный концерт. Проект в формате HDV 720-25p (1280x720; 25,000 fps). Поставил маркеры в начале каждой песни. Хотелось бы просчитать видео в HD формате и чтобы при просмотре в медиаплеере на компьютере или на медиапроигрывателе можно было переходить от одной песни к другой.
Конечно, это можно сделать и в Неро. Но тогда придется один раз конвертировать в вегасе. Затем закидывать этот файл в Неро, где расставлять сцены. А потом экспортировать. То есть два раза конвертировать это видео. Что занимает много времени.
Такое можно сделать и в ДВД Архитект, но на выходе будет не HD файл, а DVD, что ухудшает картинку.
Пробовал просчитывать с маркерами, ставя при рендеринге разные галочки, но ничего не помогло.
Прошу помощи и совета.
Этот вопрос я изложил в новой своей теме под названием "Рендеринг, при котором маркеры преобразовуются в сцены для проигрывания в медиаплеере". Мне ответили, что нужно написать скрипт и дали ссылку http://www.dvinfo.net/forum/what-happens-vegas/504106-vegas-markers-mkv-chapters.html.
Но я вообще не умею их программировать. Только если кто-то поможет написать.
ДВД Архитект может авторить не только DVD, но и Blu-ray проекты.Чем не устраивает?
kfpfhm
Скрипт не нужен для одного раза. Метки можно проставить внешними средствами без перекодирования видео:
http://uzzikie.livejournal.com/17048.html
edgeone
24.12.2013, 05:20
warper, не объясните, как установить горячую клавишу на пользовательский скрипт? Кроме того, что некоторые скрипты программа не видит в меню (также невозможно добавить на панель инструментов), а использовать их я могу только через Run script.., в списке комманд Customize Keyboard они также отсутствуют:pzl:
upd: программа обнаружила один из необходимых скриптов после его перемещения в поддиректорию Script menu, в моем случае это Audio scripts. Таким образом удалось установить горячую клавишу. Но некоторые другие скрипты, которые лежат в директории Script menu, Vegas по-прежнему не видит.
Пожалуйста, по-возможности укажите на руководство и сопутствующие материалы по созданию сценариев.
edgeone
Установка горячей кнопки описана в первом сообщении темы. Я сам кнопки на скрипты не настраиваю, поэтому проблемы с поиском скриптов в командах мне незнакомы.
После обновления каталога, в котором лежат скрипты, нужно в Вегасе обновить скрипт-меню. В противном случае Вегас может не воспринимать обновления, запускать старые версии скриптов или не видеть новые скрипты.
Возможно, имена скриптов должна удовлетворять каким-то ограничениям для того, чтобы они были видны в списке доступных команд. Например, я ожидаю, что должна "прокатывать" латиница с пробелами, но без точек, минусов и проч., длиной до 20 символов.
Возможно, в команды под горячие кнопки не включаются скрипты из пользовательских каталогов (от Users). Я обычно кладу скрипты в Вегасовский подкаталог в Program Files, не используя другие варианты размещения скриптов.
Возможно, подкаталоги скрипт меню и содержащиеся в них скрипты тоже не включаются в список команд.
Вся официальная документация по скриптам (про которую я знаю), скачивается с официального сайта:
http://www.sonycreativesoftware.com/download/devkits
Для Вегаса актуальна Vegas Pro 10.0 Script Developers Kit, более поздних вариантов нету.
edgeone
24.12.2013, 22:46
warper, ясно, попытаюсь разобраться. Еще раз спасибо за развернутый ответ!
edgeone
03.02.2014, 23:01
Имеется скрипт для применения VideoFX к выбранному фрагменту. Сделал несколько копий этого скрипта с различными эффектами. Как по такой аналогии указать применение MediaFX (для Sony Stabilize)?
/**
* Program: AddEffectAndSlowPlay.js
* Description: This script will add a FX and change playrate to the selected event
* Author: Philip
*
* Date: August 24, 2003
**/
import Sony.Vegas;
import System.Windows.Forms;
import Microsoft.Win32;
// This is the full name of the effect plug-in you want to add.
var plugInName = "Sony LAB Adjust";
// This is the name of the preset you want. Set this to null if you
// want the default preset.
var presetName = "Lighter";
var playrate = 1;
try
{
// 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;
// Add FX
var fx = Vegas.VideoFX;
var plugIn = fx.GetChildByName(plugInName);
if (null == plugIn) {
throw "could not find a plug-in named: '" + plugInName + "'";
}
var effect = new Effect(plugIn);
evnt.Effects.Add(effect);
if (null != presetName) {
effect.Preset = presetName;
}
//Set playrate
evnt.AdjustPlaybackRate(playrate, 0);
}
}
}
catch (errorMsg)
{
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
К Media эффекты по идее применяются так же, как и к клипам. У класса Media такая же коллекция Effects, как и класса VideoEvent.
Или как найти? Через event имеем TrackEvent, где есть коллекция Takes, у каждого из которых есть Media, к которым можно уже всё применять. Небольшой минус - можно попасть на одну медию через несколько разных ссылок, если где-то она повторно используется.
Можно ещё искать Media через Vegas.Project.MediaPool.GetSelectedMedia() или обход дерева медиабинов.
edgeone
27.03.2014, 19:15
Существует ли скрипт для проигрывания с позиции за секунду или другой промежуток времени до активного фрагмента?
Или, быть может, есть встроенная команда?
http://i58.tinypic.com/2r3gvmg.jpg
Господа, а может мне кто объяснить, как в скрипт добавить скачанный пресет? В установленном скрипте Batch render+event отсутствует FFmpeg пресет.
Очевидно: узнать причину, по которой темплейт не нравится скрипту и поправить темплейт (или скрипт).
Почитайтте комментарии в функции FillTemplateTree (если структура br+e схожа с br).
chainick
13.05.2014, 16:21
Господа, а может мне кто объяснить, как в скрипт добавить скачанный пресет? В установленном скрипте Batch render+event отсутствует FFmpeg пресет.
ответил в соответствующей теме (http://provegas.ru/forum/showpost.php?p=71440&postcount=20)
petrovich
17.05.2014, 07:47
Всем привет! Нужен скрипт который бы делал выделенным видео фрагмент под курсором, в том случае если в это время выделен какой-то фрагмент, то снять с него веделение.
Blumen24
22.05.2014, 13:12
Друзья,
нужен скрипт который расставит регионы над каждым кадром.
petrovich
22.05.2014, 13:21
А для чего? Может можно другими способами решить задачу?
P.S. Вегазавр или UltimatS есть?
Blumen24
22.05.2014, 13:24
Прокси файлы нужны, а руками лень регионы расставлять.
Потом применю Batch Render
P.S. Вегазавр или UltimatS есть? Нету
.... Вегазавр есть
jurisviii
22.05.2014, 13:45
http://forums.creativecow.net/thread/24/905605
http://www.designstudioschool.com/add-regions-events-t27449.html
итп., просто погуглить нужно
Blumen24
22.05.2014, 14:14
Спасибо, все работает!!!
Первый вариант "снес"
Скопировал с этого сайта - http://forums.creativecow.net/thread/24/905605
Назвал - JHM_AddRegionsToEvents.js
jurisviii
22.05.2014, 14:28
Мне под рукой оказался похожий скрипт AddMarkersToEvents.js
/**
* This script will add markers between all events on the selected track
*
* Written By: Edward Troxel
* www.jetdv.com/tts (http://www.jetdv.com/tts)
* 04/02/2003
**/
import System;
import System.IO;
import System.Windows.Forms;
import Sony.Vegas;
try {
var zeroMark : Timecode = new Timecode(0);
var myMarker : Marker;
//Find the selected event
var track = FindSelectedTrack();
if (null == track)
throw "no selected track";
var eventEnum = new Enumerator(track.Events);
while (!eventEnum.atEnd()) {
var evnt : TrackEvent = TrackEvent(eventEnum.item());
if (evnt.Start > zeroMark) {
//Put a marker at the start point
myMarker = new Marker(evnt.Start);
Vegas.Project.Markers.Add(myMarker);
}
eventEnum.moveNext();
}
} catch (e) {
MessageBox.Show(e);
}
function FindSelectedTrack() : Track {
var trackEnum = new Enumerator(Vegas.Project.Tracks);
while (!trackEnum.atEnd()) {
var track : Track = Track(trackEnum.item());
if (track.Selected) {
return track;
}
trackEnum.moveNext();
}
return null;
}
Я сам не скриптописатель, но пологаю, что по аналогии чего-то можно раскопать.
Blumen24
22.05.2014, 14:39
... Цены тебе нет. Честно.
.. Этот маркеры расставляет, .. пригодится )
petrovich
23.05.2014, 00:43
В Вегазавре все эти функции есть одним щелчком мыши можно делать. А вообще, для прокси файлов другой сценарий, выделяете нужные файлы в окне Project media нажимаете ПКМ -> Build Proxy Files и всё.
petrovich
27.05.2014, 04:15
Подскажите как в скрипт BatchRender+RegionName добавить в имя выходного файла номер региона или счетчик?
/**
* Sample script that performs batch renders with GUI for selecting
* render templates.
*
* Revision Date: Jun. 28, 2006.
* Modified Dec. 23, 2012 - region labels are used in file name
* instead of render templates+region index in region rendering mode
**/
using System;
using System.IO;
using System.Text;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Forms;
using Sony.Vegas;
public class EntryPoint {
// set this to true if you want to allow files to be overwritten
bool OverwriteExistingFiles = false;
String defaultBasePath = "Untitled_";
const int QUICKTIME_MAX_FILE_NAME_LENGTH = 56;
Sony.Vegas.Vegas myVegas = null;
enum RenderMode
{
Project = 0,
Selection,
Regions,
}
ArrayList SelectedTemplates = new ArrayList();
public void FromVegas(Vegas vegas)
{
myVegas = vegas;
String projectPath = myVegas.Project.FilePath;
if (String.IsNullOrEmpty(projectPath))
{
String dir = System.Environment.GetFolderPath(System.Environmen t.SpecialFolder.MyDocuments);
defaultBasePath = Path.Combine(dir, defaultBasePath);
}
else
{
String dir = Path.GetDirectoryName(projectPath);
String fileName = Path.GetFileNameWithoutExtension(projectPath);
defaultBasePath = Path.Combine(dir, fileName + "_");
}
DialogResult result = ShowBatchRenderDialog();
myVegas.UpdateUI();
if (DialogResult.OK == result)
{
// inform the user of some special failure cases
String outputFilePath = FileNameBox.Text;
RenderMode renderMode = RenderMode.Project;
if (RenderRegionsButton.Checked)
{
renderMode = RenderMode.Regions;
}
else if (RenderSelectionButton.Checked)
{
renderMode = RenderMode.Selection;
}
DoBatchRender(SelectedTemplates, outputFilePath, renderMode);
}
}
void DoBatchRender(ArrayList selectedTemplates, String basePath, RenderMode renderMode)
{
String outputDirectory = Path.GetDirectoryName(basePath);
String baseFileName = Path.GetFileName(basePath);
// make sure templates are selected
if ((null == selectedTemplates) || (0 == selectedTemplates.Count))
throw new ApplicationException("No render templates selected.");
// make sure the output directory exists
if (!Directory.Exists(outputDirectory))
throw new ApplicationException("The output directory does not exist.");
List<RenderArgs> renders = new List<RenderArgs>();
// enumerate through each selected render template
foreach (RenderItem renderItem in selectedTemplates)
{
// construct the file name (most of it)
String filename = Path.Combine(outputDirectory,
FixFileName(baseFileName) +
FixFileName(renderItem.Renderer.FileTypeName) +
"_" +
FixFileName(renderItem.Template.Name));
//check to see if this is a QuickTime file...if so, file length cannot exceed 59 characters
if (renderItem.Renderer.ClassID == Renderer.CLSID_CSfQT7RenderFileClass)
{
int size = baseFileName.Length + renderItem.Renderer.FileTypeName.Length + 1 + renderItem.Template.Name.Length;
if (size > QUICKTIME_MAX_FILE_NAME_LENGTH)
{
int dif = size - (QUICKTIME_MAX_FILE_NAME_LENGTH - 2); //extra buffer for a "--" to indicated name is truncated.
string tempstr1 = renderItem.Renderer.FileTypeName;
string tempstr2 = renderItem.Template.Name;
if (tempstr1.Length < (dif + 3))
{
dif -= (tempstr1.Length - 3);
tempstr1 = tempstr1.Substring(0, 3);
tempstr2 = tempstr2.Substring(dif);
}
else
{
tempstr1 = tempstr1.Substring(0, tempstr1.Length - dif);
}
filename = Path.Combine(outputDirectory,
FixFileName(baseFileName) +
FixFileName(tempstr1) +
"--" +
FixFileName(tempstr2));
}
}
if (RenderMode.Regions == renderMode) {
int regionIndex = 0;
foreach (Sony.Vegas.Region region in myVegas.Project.Regions) {
//reconstruct filename
/* String regionFilename = String.Format("{0}[{1}]{2}",
filename,
regionIndex.ToString(),
renderItem.Extension);*/
//instead of normal Basefilename + render template name + region index
//we use basefilename + region name
//if region name is absent, use region index instead
String region_name = region.Label;
if (region_name.Length == 0)
region_name = regionIndex.ToString();
// construct the file name (most of it)
String regionFilename = Path.Combine(outputDirectory,
FixFileName(baseFileName) +
FixFileName(region_name) +
renderItem.Extension);
RenderArgs args = new RenderArgs();
args.OutputFile = regionFilename;
args.RenderTemplate = renderItem.Template;
args.Start = region.Position;
args.Length = region.Length;
renders.Add(args);
regionIndex++;
}
} else {
filename += renderItem.Extension;
RenderArgs args = new RenderArgs();
args.OutputFile = filename;
args.RenderTemplate = renderItem.Template;
args.UseSelection = (renderMode == RenderMode.Selection);
renders.Add(args);
}
}
// validate all files and propmt for overwrites
foreach (RenderArgs args in renders) {
ValidateFilePath(args.OutputFile);
if (!OverwriteExistingFiles)
{
if (File.Exists(args.OutputFile)) {
String msg = "File(s) exists. Do you want to overwrite them?";
DialogResult rs;
rs = MessageBox.Show(msg,
"Overwrite files?",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2);
if (DialogResult.Cancel == rs) {
return;
} else {
OverwriteExistingFiles = true;
}
}
}
}
// perform all renders. The Render method returns a member of the RenderStatus enumeration. If it is
// anything other than OK, exit the loop.
foreach (RenderArgs args in renders) {
if (RenderStatus.Canceled == DoRender(args)) {
break;
}
}
}
RenderStatus DoRender(RenderArgs args)
{
RenderStatus status = myVegas.Render(args);
switch (status)
{
case RenderStatus.Complete:
case RenderStatus.Canceled:
break;
case RenderStatus.Failed:
default:
StringBuilder msg = new StringBuilder("Render failed:\n");
msg.Append("\n file name: ");
msg.Append(args.OutputFile);
msg.Append("\n Template: ");
msg.Append(args.RenderTemplate.Name);
throw new ApplicationException(msg.ToString());
}
return status;
}
String FixFileName(String name)
{
const Char replacementChar = '-';
foreach (char badChar in Path.GetInvalidFileNameChars()) {
name = name.Replace(badChar, replacementChar);
}
return name;
}
void ValidateFilePath(String filePath)
{
if (filePath.Length > 260)
throw new ApplicationException("File name too long: " + filePath);
foreach (char badChar in Path.GetInvalidPathChars()) {
if (0 <= filePath.IndexOf(badChar)) {
throw new ApplicationException("Invalid file name: " + filePath);
}
}
}
class RenderItem
{
public readonly Renderer Renderer = null;
public readonly RenderTemplate Template = null;
public readonly String Extension = null;
public RenderItem(Renderer r, RenderTemplate t, String e)
{
this.Renderer = r;
this.Template = t;
// need to strip off the extension's leading "*"
if (null != e) this.Extension = e.TrimStart('*');
}
}
Button BrowseButton;
TextBox FileNameBox;
TreeView TemplateTree;
RadioButton RenderProjectButton;
RadioButton RenderRegionsButton;
RadioButton RenderSelectionButton;
DialogResult ShowBatchRenderDialog()
{
Form dlog = new Form();
dlog.Text = "Batch Render";
dlog.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
dlog.MaximizeBox = false;
dlog.StartPosition = FormStartPosition.CenterScreen;
dlog.Width = 610;
dlog.FormClosing += this.HandleFormClosing;
int titleBarHeight = dlog.Height - dlog.ClientSize.Height;
int buttonWidth = 80;
FileNameBox = AddTextControl(dlog, "Base File Name", titleBarHeight + 6, 460, 10, defaultBasePath);
BrowseButton = new Button();
BrowseButton.Left = FileNameBox.Right + 4;
BrowseButton.Top = FileNameBox.Top - 2;
BrowseButton.Width = buttonWidth;
BrowseButton.Height = BrowseButton.Font.Height + 12;
BrowseButton.Text = "Browse...";
BrowseButton.Click += new EventHandler(this.HandleBrowseClick);
dlog.Controls.Add(BrowseButton);
TemplateTree = new TreeView();
TemplateTree.Left = 10;
TemplateTree.Width = dlog.Width - 35;
TemplateTree.Top = BrowseButton.Bottom + 10;
TemplateTree.Height = 300;
TemplateTree.CheckBoxes = true;
TemplateTree.AfterCheck += new TreeViewEventHandler(this.HandleTreeViewCheck);
dlog.Controls.Add(TemplateTree);
int buttonTop = TemplateTree.Bottom + 16;
int buttonsLeft = dlog.Width - (2*(buttonWidth+10));
RenderProjectButton = AddRadioControl(dlog,
"Render Project",
6,
buttonTop,
true);
RenderSelectionButton = AddRadioControl(dlog,
"Render Selection",
RenderProjectButton.Right,
buttonTop,
(0 != myVegas.SelectionLength.Nanos));
RenderRegionsButton = AddRadioControl(dlog,
"Render Regions",
RenderSelectionButton.Right,
buttonTop,
(0 != myVegas.Project.Regions.Count));
RenderProjectButton.Checked = true;
Button okButton = new Button();
okButton.Text = "OK";
okButton.Left = dlog.Width - (2*(buttonWidth+20));
okButton.Top = buttonTop;
okButton.Width = buttonWidth;
okButton.Height = okButton.Font.Height + 12;
okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
dlog.AcceptButton = okButton;
dlog.Controls.Add(okButton);
Button cancelButton = new Button();
cancelButton.Text = "Cancel";
cancelButton.Left = dlog.Width - (1*(buttonWidth+20));
cancelButton.Top = buttonTop;
cancelButton.Height = cancelButton.Font.Height + 12;
cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
dlog.CancelButton = cancelButton;
dlog.Controls.Add(cancelButton);
dlog.Height = titleBarHeight + okButton.Bottom + 8;
dlog.ShowInTaskbar = false;
FillTemplateTree();
return dlog.ShowDialog(myVegas.MainWindow);
}
TextBox AddTextControl(Form dlog, String labelName, int left, int width, int top, String defaultValue)
{
Label label = new Label();
label.AutoSize = true;
label.Text = labelName + ":";
label.Left = left;
label.Top = top + 4;
dlog.Controls.Add(label);
TextBox textbox = new TextBox();
textbox.Multiline = false;
textbox.Left = label.Right;
textbox.Top = top;
textbox.Width = width - (label.Width);
textbox.Text = defaultValue;
dlog.Controls.Add(textbox);
return textbox;
}
RadioButton AddRadioControl(Form dlog, String labelName, int left, int top, bool enabled)
{
Label label = new Label();
label.AutoSize = true;
label.Text = labelName;
label.Left = left;
label.Top = top + 4;
label.Enabled = enabled;
dlog.Controls.Add(label);
RadioButton radiobutton = new RadioButton();
radiobutton.Left = label.Right;
radiobutton.Width = 36;
radiobutton.Top = top;
radiobutton.Enabled = enabled;
dlog.Controls.Add(radiobutton);
return radiobutton;
}
static Guid[] TheDefaultTemplateRenderClasses =
{
Renderer.CLSID_SfWaveRenderClass,
Renderer.CLSID_SfW64ReaderClass,
Renderer.CLSID_CSfAIFRenderFileClass,
Renderer.CLSID_CSfFLACRenderFileClass,
Renderer.CLSID_CSfPCARenderFileClass,
};
bool AllowDefaultTemplates(Guid rendererID)
{
foreach (Guid guid in TheDefaultTemplateRenderClasses)
{
if (guid == rendererID)
return true;
}
return false;
}
void FillTemplateTree()
{
int projectAudioChannelCount = 0;
if (AudioBusMode.Stereo == myVegas.Project.Audio.MasterBusMode) {
projectAudioChannelCount = 2;
} else if (AudioBusMode.Surround == myVegas.Project.Audio.MasterBusMode) {
projectAudioChannelCount = 6;
}
bool projectHasVideo = ProjectHasVideo();
bool projectHasAudio = ProjectHasAudio();
int projectVideoStreams = !projectHasVideo ? 0 :
(Stereo3DOutputMode.Off != myVegas.Project.Video.Stereo3DMode ? 2 : 1);
foreach (Renderer renderer in myVegas.Renderers) {
try {
String rendererName = renderer.FileTypeName;
TreeNode rendererNode = new TreeNode(rendererName);
rendererNode.Tag = new RenderItem(renderer, null, null);
foreach (RenderTemplate template in renderer.Templates) {
try {
// filter out invalid templates
if (!template.IsValid()) {
continue;
}
// filter out video templates when project has
// no video.
if (!projectHasVideo && (0 < template.VideoStreamCount)) {
continue;
}
// filter out templates that are 3d when the project is just 2d
if (projectHasVideo && projectVideoStreams < template.VideoStreamCount) {
continue;
}
// filter the default template (template 0) and we don't allow defaults
// for this renderer
if (template.TemplateID == 0 && !AllowDefaultTemplates(renderer.ClassID)) {
continue;
}
// filter out audio-only templates when project has no audio
if (!projectHasAudio && (0 == template.VideoStreamCount) && (0 < template.AudioStreamCount)) {
continue;
}
// filter out templates that have more channels than the project
if (projectAudioChannelCount < template.AudioChannelCount) {
continue;
}
// filter out templates that don't have
// exactly one file extension
String[] extensions = template.FileExtensions;
if (1 != extensions.Length) {
continue;
}
String templateName = template.Name;
TreeNode templateNode = new TreeNode(templateName);
templateNode.Tag = new RenderItem(renderer, template, extensions[0]);
rendererNode.Nodes.Add(templateNode);
} catch (Exception e) {
// skip it
MessageBox.Show(e.ToString());
}
}
if (0 == rendererNode.Nodes.Count) {
continue;
} else if (1 == rendererNode.Nodes.Count) {
// skip it if the only template is the project
// settings template.
if (0 == ((RenderItem) rendererNode.Nodes[0].Tag).Template.Index) {
continue;
}
} else {
TemplateTree.Nodes.Add(rendererNode);
}
} catch {
// skip it
}
}
}
bool ProjectHasVideo() {
foreach (Track track in myVegas.Project.Tracks) {
if (track.IsVideo()) {
return true;
}
}
return false;
}
bool ProjectHasAudio() {
foreach (Track track in myVegas.Project.Tracks) {
if (track.IsAudio()) {
return true;
}
}
return false;
}
void UpdateSelectedTemplates()
{
SelectedTemplates.Clear();
foreach (TreeNode node in TemplateTree.Nodes) {
foreach (TreeNode templateNode in node.Nodes) {
if (templateNode.Checked) {
SelectedTemplates.Add(templateNode.Tag);
}
}
}
}
void HandleBrowseClick(Object sender, EventArgs args)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "All Files (*.*)|*.*";
saveFileDialog.CheckPathExists = true;
saveFileDialog.AddExtension = false;
if (null != FileNameBox) {
String filename = FileNameBox.Text;
String initialDir = Path.GetDirectoryName(filename);
if (Directory.Exists(initialDir)) {
saveFileDialog.InitialDirectory = initialDir;
}
saveFileDialog.DefaultExt = Path.GetExtension(filename);
saveFileDialog.FileName = Path.GetFileNameWithoutExtension(filename);
}
if (System.Windows.Forms.DialogResult.OK == saveFileDialog.ShowDialog()) {
if (null != FileNameBox) {
FileNameBox.Text = Path.GetFullPath(saveFileDialog.FileName);
}
}
}
void HandleTreeViewCheck(object sender, TreeViewEventArgs args)
{
if (args.Node.Checked) {
if (0 != args.Node.Nodes.Count) {
if ((args.Action == TreeViewAction.ByKeyboard) || (args.Action == TreeViewAction.ByMouse)) {
SetChildrenChecked(args.Node, true);
}
} else if (!args.Node.Parent.Checked) {
args.Node.Parent.Checked = true;
}
} else {
if (0 != args.Node.Nodes.Count) {
if ((args.Action == TreeViewAction.ByKeyboard) || (args.Action == TreeViewAction.ByMouse)) {
SetChildrenChecked(args.Node, false);
}
} else if (args.Node.Parent.Checked) {
if (!AnyChildrenChecked(args.Node.Parent)) {
args.Node.Parent.Checked = false;
}
}
}
}
void HandleFormClosing(Object sender, FormClosingEventArgs args)
{
Form dlg = sender as Form;
if (null == dlg) return;
if (DialogResult.OK != dlg.DialogResult) return;
String outputFilePath = FileNameBox.Text;
try {
String outputDirectory = Path.GetDirectoryName(outputFilePath);
if (!Directory.Exists(outputDirectory)) throw new ApplicationException();
} catch {
String title = "Invalid Directory";
StringBuilder msg = new StringBuilder();
msg.Append("The output directory does not exist.\n");
msg.Append("Please specify the directory and base file name using the Browse button.");
MessageBox.Show(dlg, msg.ToString(), title, MessageBoxButtons.OK, MessageBoxIcon.Error);
args.Cancel = true;
return;
}
try {
String baseFileName = Path.GetFileName(outputFilePath);
if (String.IsNullOrEmpty(baseFileName)) throw new ApplicationException();
if (-1 != baseFileName.IndexOfAny(Path.GetInvalidFileNameCha rs())) throw new ApplicationException();
} catch {
String title = "Invalid Base File Name";
StringBuilder msg = new StringBuilder();
msg.Append("The base file name is not a valid file name.\n");
msg.Append("Make sure it contains one or more valid file name characters.");
MessageBox.Show(dlg, msg.ToString(), title, MessageBoxButtons.OK, MessageBoxIcon.Error);
args.Cancel = true;
return;
}
UpdateSelectedTemplates();
if (0 == SelectedTemplates.Count)
{
String title = "No Templates Selected";
StringBuilder msg = new StringBuilder();
msg.Append("No render templates selected.\n");
msg.Append("Select one or more render templates from the available formats.");
MessageBox.Show(dlg, msg.ToString(), title, MessageBoxButtons.OK, MessageBoxIcon.Error);
args.Cancel = true;
return;
}
}
void SetChildrenChecked(TreeNode node, bool checkIt)
{
foreach (TreeNode childNode in node.Nodes) {
if (childNode.Checked != checkIt)
childNode.Checked = checkIt;
}
}
bool AnyChildrenChecked(TreeNode node)
{
foreach (TreeNode childNode in node.Nodes) {
if (childNode.Checked) return true;
}
return false;
}
}
petrovich
После строки:
region_name = regionIndex.ToString();
Добавьте строку:
else region_name += regionIndex.ToString();
У меня почему-то и оригинальный скрипт не запустился. Ни с расширением cs, ни js. Там в тексте ошибки нет?
petrovich
27.05.2014, 14:14
Скорее всего я его скопировал не правильно, потому что попрбовал запустить этот скрипт и тоже не пошел.
Вас не затруднит выложить рабочую версию?!
petrovich
28.05.2014, 01:17
Вот в архиве
petrovich
28.05.2014, 02:10
petrovich
Добавьте строку:
else region_name += regionIndex.ToString();
Добавил, но получилась ерунда какая-то вообще непонятные названия стали
Спасибо. Вещь отличная, но явно нуждается в доработке. Как заставить скрипт назначать имена в формате 01(название региона), 02(название региона), 03(название региона),... и т.д.?
petrovich
28.05.2014, 15:36
Вообще я так понимаю, что нужно дописать переменную вроде region_number или как-то так, но не разобрался ещё какую точно и куда.
Добавил, но получилась ерунда какая-то вообще непонятные названия стали
В "рабочей версии" вообще нет строк с "region_name". Куда добавили-то?
С другой стороны, в рабочей версии в начальном комментарии написано:
Render with FileName = BaseFileName + RegionIndex + RegionName + FileExt
То есть, индекс региона уже должен быть в имени файла.
Имя файла формируется в этих строках:
String regionFilename = String.Format("{0}{1} {2}{3}",
filename,
regionIndex.ToString(),
region.Label,
renderItem.Extension);
Насколько я вижу, после фиксированного имени идёт индекс региона, затем название региона, а потом расширение.
Как заставить скрипт назначать имена в формате 01(название региона), 02(название региона), 03(название региона),... и т.д.?
Замените приведённые строки на эти:
String regionFilename = String.Format("{0}{1:D2}({2}){3}",
filename,
regionIndex,
region.Label,
renderItem.Extension);
D2 в формате определяет печать целого числа в 2 знака с левым паддингом нулями. Если количество регионов будет 99, то 100 и дальше будут именоваться без ведущих нулей. Если это неудобно - увеличьте двойку после D в этой строке.
petrovich
29.05.2014, 02:15
Куда добавили-то?
У меня есть на 140 строчке.
А эти строки что вы показываете у меня закомментированы
//reconstruct filename
/* String regionFilename = String.Format("{0}[{1}]{2}",
filename,
regionIndex.ToString(),
renderItem.Extension);*/
//instead of normal Basefilename + render template name + region index
//we use basefilename + region name
//if region name is absent, use region index instead
String region_name = region.Label;
if (region_name.Length == 0)
region_name = regionIndex.ToString();
// construct the file name (most of it)
String regionFilename = Path.Combine(outputDirectory,
FixFileName(baseFileName) +
FixFileName(region_name) +
renderItem.Extension);
RenderArgs args = new RenderArgs();
args.OutputFile = regionFilename;
args.RenderTemplate = renderItem.Template;
args.Start = region.Position;
args.Length = region.Length;
renders.Add(args);
regionIndex++;
Вот этот кусок кода я так и не понял куда воткнуть индекс региона.
Отлично, всё получилось. Единственный недочёт: первый файл должен быть не 0 или 00, а именно 01, ну или 001. Если просто поменять в строках ("{0}{1:d2}({2}){3}", на ("{1}{2:d2}({3}){4}", то скрипт не работает
vovke
Первая цифра в строке-формате обозначает номер параметра. Тут {0} - первый следующий за строкой параметр в вызове функции (filename), {1} - второй. Следующие через запятую и двоеточие вещи определяют формат вывода этого параметра.
Попробуйте в параметрах вместо "regionIndex," поставить "regionIndex+1,".
petrovich
Имя файла формируется этими строками:
//if region name is absent, use region index instead
String region_name = region.Label;
if (region_name.Length == 0)
region_name = regionIndex.ToString();
String regionFilename = Path.Combine(outputDirectory,
FixFileName(baseFileName) +
FixFileName(region_name) +
renderItem.Extension);
Сначала метка региона заносится в переменную region_name.
Потом, если метка пустая, в неё записывается номер региона (начиная с нуля) без паддинга.
Потом в переменную regionFilename собирается каталог вывода (outputDirectory), начало имени файла + название региона (или номер региона, если название пустое) + расширение файла.
Отлично, всё получилось. "regionIndex+1," то что надо!
edgeone
15.07.2014, 23:42
Подскажите, что необходимо дописать для автоматического проигрывания с места курсора?
import System.Windows.Forms;
import Sony.Vegas;
try {
var timeStamp = new Timecode("00:00:03:00");
Vegas.Cursor = Vegas.Cursor - timeStamp;
} catch (e) {
MessageBox.Show(e);
}
edgeone
17.07.2014, 02:44
В общем, получилось. Скрипт начинает проигрывание, возвращая позицию курсора на секунду ранее. Только срабатывает для проигрывания с непривычной задержкой. Реально ли поместить это действие в память программы, подобно тому, как работают скриптовые плагины? Было бы очень кстати, т.к. этот сценарий будет использоваться мной наиболее часто.
import System.Windows.Forms;
import Sony.Vegas;
try {
var timeStamp = new Timecode("00:00:01:00");
Vegas.Cursor = Vegas.Cursor - timeStamp;
Vegas.Transport.Play();
} catch (e) {
MessageBox.Show(e);
}
edgeone
Прочитайте первую врезку в первом сообщении темы, последние 5 абзацев
edgeone
17.07.2014, 12:04
warper
В VegasPro 8 реализован новый тип скриптов "Extensions", которые работают по типу подключаемых модулей (plug-ins). Дабы не смешивать их с "традиционными" скриптами правильнее будет называть "скриптовыми плагинами". Эти скрипты "живут" в подпунктах "Extensions" меню "View", "Edit" и "Tools"
Чем руководствоваться для создания скриптового плагина на основе скрипта?
Здравствуйте гуру скриптов!
Есть такой вопрос:
возможно ли средствами Вегаса, или может есть какой-то скрипт, сразу на выделенный кусок, скажем, из 10-15 фрагментов вставить переходы, так же, как с помощью Vegasaur?
Из скачаных здесь скриптов работает только один, и то лишь частично, а именно - он ставит переходы только в видео, не затрагивая аудиодорожку.
В общем, немного не то.
Нужно, чтобы сразу между файлами (видео-аудио).
А может кто-то умеет вытягивать скрипты из Vegasaur?
Там такая штука замечательно работает.
petrovich
20.07.2014, 08:53
А чем не устраивает вегазавр?
В некоторых случаях можно средством вегаса сделать, я имею ввиду автоматическое создание переходов при закидвыании на ТЛ.
Я не считаю цену в 49$ такой уж дорогой, ради комфортной работы.
Я не считаю цену в 49$ такой уж дорогойНе 49, а 100, если верить информации с официального сайта. Во-вторых, Vegasaur не обладает никакой незаменимой функциональностью по сравнению с голым Vegas. Он только позволяет автоматизировать и ускорить некоторые часто выполняемые операции.
Поэтому, если вы зарабатываете деньги видеомонтажом, то его покупка могла бы быть оправданной. Если для периодического монтажа домашнего видео - своего и друзей - деньги, выброшенные на ветер.
В некоторых случаях можно средством вегаса сделать, я имею ввиду автоматическое создание переходов при закидвыании на ТЛ.
Ну хоть какой-то вариант есть?
edgeone
20.07.2014, 22:41
vic, Скидка на Вегазавр -50% при обновлении до новой версии.
petrovich
21.07.2014, 07:41
Если поставить вегазавр, а потом его удалить, то они предложат скидку.
serg kost
21.07.2014, 08:50
vic, Скидка на Вегазавр -50% при обновлении до новой версии.
Если вегазавр куплен, то все последующие обновления и версии бесплатные. У меня стоит в системе с версии 1,6. Все последующие обновления приходят на почту. Просто устанавливаешь и работаешь.
edgeone
07.09.2014, 13:39
Подскажите, пожалуйста, как добавить в сценарий действия:
LeftBySelected Ctrl+Shift+[ и BuildRAMPreview Shift+B
Или же буду признателен, если укажете, как определить это самому, руководствуясь интерфейсом программирования. Самостоятельно, используя поиск по странице в VegasScriptAPI.html, найти не получается.
edgeone
14.09.2014, 05:05
Существует скрипт на создание нового проекта из выделенных фрагментов? Аналогичный инструменту из Вегазавра.
создание нового проекта из выделенных фрагментов?
Тоже очень интересует.
А еще интересно есть ли такой скрипт, который мог бы копировать с одного фрагмента на другой только примененные эффекты.
edgeone
20.09.2014, 11:51
копировать с одного фрагмента на другой
Paste event attributes, который обычно для этого используют у меня некорректно срабатывает. Эффекты к новому фрагменту применяются, но на превью не отображаются.
Paste event attributes копирует не только еффекты, но и данные об ускорении и pan\crop. потому и нужен скрипт....
edgeone
11.10.2014, 18:36
Есть ли в сети скрипт BypassAllFX аналогичный RemoveAllFX?
Умеет ли MultiFXAssigner применять filter packages?
(вне)штатная гадалка
12.10.2014, 12:26
А зачем писать скрипт, если кнопка Split Screen View имеет такую функцию :shok:
А если нужно отключить FX на одной или только выбранных треках?
edgeone
14.10.2014, 03:19
А зачем писать скрипт, если кнопка Split Screen View имеет такую функцию :shok:
Наверное, затем, что требуется отключить эффекты, а не включить режим превью без эффектов.
Может, кто-нибудь даст подсказку, как отредактировать RemoveAllFX для BypassAllFX?
В API есть класс для эффектов: Effect Class
У него есть свойство Bypass типа Boolean
Описание говорит само за себя: Get or set whether the effect is bypassed.
Коллеги подскажите пару строчек для скрипта Batch Render:
/**
* Sample script that performs batch renders with GUI for selecting
* render templates.
*
* Revision Date: Jun. 28, 2006.
**/
using System;
using System.IO;
using System.Text;
using System.Drawing;
using System.Collections;
using System.Diagnostics;
using System.Windows.Forms;
using Sony.Vegas;
public class EntryPoint {
// set this to true if you want to allow files to be overwritten
bool OverwriteExistingFiles = false;
String defaultBasePath = "Untitled_";
Sony.Vegas.Vegas myVegas = null;
enum RenderMode
{
Project = 0,
Selection,
Regions,
}
ArrayList SelectedTemplates = new ArrayList();
public void FromVegas(Vegas vegas)
{
myVegas = vegas;
String projectPath = myVegas.Project.FilePath;
if (String.IsNullOrEmpty(projectPath)) {
String dir = System.Environment.GetFolderPath(System.Environmen t.SpecialFolder.MyDocuments);
defaultBasePath = Path.Combine(dir, defaultBasePath);
} else {
String dir = Path.GetDirectoryName(projectPath);
String fileName = Path.GetFileNameWithoutExtension(projectPath);
defaultBasePath = Path.Combine(dir, fileName + "_");
}
DialogResult result = ShowBatchRenderDialog();
myVegas.UpdateUI();
if (DialogResult.OK == result) {
// inform the user of some special failure cases
String outputFilePath = FileNameBox.Text;
RenderMode renderMode = RenderMode.Project;
if (RenderRegionsButton.Checked) {
renderMode = RenderMode.Regions;
} else if (RenderSelectionButton.Checked) {
renderMode = RenderMode.Selection;
}
DoBatchRender(SelectedTemplates, outputFilePath, renderMode);
}
}
void DoBatchRender(ArrayList selectedTemplates, String basePath, RenderMode renderMode)
{
String outputDirectory = Path.GetDirectoryName(basePath);
String baseFileName = Path.GetFileName(basePath);
// make sure templates are selected
if ((null == selectedTemplates) || (0 == selectedTemplates.Count))
throw new ApplicationException("No render templates selected.");
// make sure the output directory exists
if (!Directory.Exists(outputDirectory))
throw new ApplicationException("The output directory does not exist.");
RenderStatus status = RenderStatus.Canceled;
// enumerate through each selected render template
foreach (RenderItem renderItem in selectedTemplates) {
// construct the file name (most of it)
String filename = Path.Combine(outputDirectory,
FixFileName(baseFileName) );
if (RenderMode.Regions == renderMode) {
int regionIndex = 0;
foreach (Sony.Vegas.Region region in myVegas.Project.Regions) {
fileName = Path.GetFileNameWithoutExtension(projectPath);
String regionFilename = String.Format("{0}{1}{2}",
filename - 1,
regionIndex + 1,
renderItem.Extension);
// Render the region
status = DoRender(regionFilename, renderItem, region.Position, region.Length);
if (RenderStatus.Canceled == status) break;
regionIndex++;
}
} else {
filename += renderItem.Extension;
Timecode renderStart, renderLength;
if (renderMode == RenderMode.Selection) {
renderStart = myVegas.SelectionStart;
renderLength = myVegas.SelectionLength;
} else {
renderStart = new Timecode();
renderLength = myVegas.Project.Length;
}
status = DoRender(filename, renderItem, renderStart, renderLength);
}
if (RenderStatus.Canceled == status) break;
}
}
// perform the render. The Render method returns a member of the
// RenderStatus enumeration. If it is anything other than OK,
// exit the loops. This will throw an error message string if the
// render does not complete successfully.
RenderStatus DoRender(String filePath, RenderItem renderItem, Timecode start, Timecode length)
{
ValidateFilePath(filePath);
// make sure the file does not already exist
if (!OverwriteExistingFiles && File.Exists(filePath)) {
throw new ApplicationException("File already exists: " + filePath);
}
// perform the render. The Render method returns
// a member of the RenderStatus enumeration. If
// it is anything other than OK, exit the loops.
RenderStatus status = myVegas.Render(filePath, renderItem.Template, start, length);
switch (status)
{
case RenderStatus.Complete:
case RenderStatus.Canceled:
break;
case RenderStatus.Failed:
default:
StringBuilder msg = new StringBuilder("Render failed:\n");
msg.Append("\n file name: ");
msg.Append(filePath);
msg.Append("\n Renderer: ");
msg.Append(renderItem.Renderer.FileTypeName);
msg.Append("\n Template: ");
msg.Append(renderItem.Template.Name);
msg.Append("\n Start Time: ");
msg.Append(start.ToString());
msg.Append("\n Length: ");
msg.Append(length.ToString());
throw new ApplicationException(msg.ToString());
}
return status;
}
String FixFileName(String name)
{
const Char replacementChar = '-';
foreach (char badChar in Path.GetInvalidFileNameChars()) {
name = name.Replace(badChar, replacementChar);
}
return name;
}
void ValidateFilePath(String filePath)
{
if (filePath.Length > 260)
throw new ApplicationException("File name too long: " + filePath);
foreach (char badChar in Path.GetInvalidPathChars()) {
if (0 <= filePath.IndexOf(badChar)) {
throw new ApplicationException("Invalid file name: " + filePath);
}
}
}
class RenderItem
{
public readonly Renderer Renderer = null;
public readonly RenderTemplate Template = null;
public readonly String Extension = null;
public RenderItem(Renderer r, RenderTemplate t, String e)
{
this.Renderer = r;
this.Template = t;
// need to strip off the extension's leading "*"
if (null != e) this.Extension = e.TrimStart('*');
}
}
Button BrowseButton;
TextBox FileNameBox;
TreeView TemplateTree;
RadioButton RenderProjectButton;
RadioButton RenderRegionsButton;
RadioButton RenderSelectionButton;
DialogResult ShowBatchRenderDialog()
{
Form dlog = new Form();
dlog.Text = "Batch Render";
dlog.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
dlog.MaximizeBox = false;
dlog.StartPosition = FormStartPosition.CenterScreen;
dlog.Width = 600;
dlog.FormClosing += this.HandleFormClosing;
int titleBarHeight = dlog.Height - dlog.ClientSize.Height;
int buttonWidth = 80;
FileNameBox = AddTextControl(dlog, "Base File Name", titleBarHeight + 6, 460, 10, defaultBasePath);
BrowseButton = new Button();
BrowseButton.Left = FileNameBox.Right + 4;
BrowseButton.Top = FileNameBox.Top - 2;
BrowseButton.Width = buttonWidth;
BrowseButton.Height = BrowseButton.Font.Height + 12;
BrowseButton.Text = "Browse...";
BrowseButton.Click += new EventHandler(this.HandleBrowseClick);
dlog.Controls.Add(BrowseButton);
TemplateTree = new TreeView();
TemplateTree.Left = 10;
TemplateTree.Width = dlog.Width - 20;
TemplateTree.Top = BrowseButton.Bottom + 10;
TemplateTree.Height = 300;
TemplateTree.CheckBoxes = true;
TemplateTree.AfterCheck += new TreeViewEventHandler(this.HandleTreeViewCheck);
dlog.Controls.Add(TemplateTree);
int buttonTop = TemplateTree.Bottom + 16;
int buttonsLeft = dlog.Width - (2*(buttonWidth+10));
RenderProjectButton = AddRadioControl(dlog,
"Render Project",
6,
buttonTop,
true);
RenderSelectionButton = AddRadioControl(dlog,
"Render Selection",
RenderProjectButton.Right,
buttonTop,
(0 != myVegas.SelectionLength.Nanos));
RenderRegionsButton = AddRadioControl(dlog,
"Render Regions",
RenderSelectionButton.Right,
buttonTop,
(0 != myVegas.Project.Regions.Count));
RenderProjectButton.Checked = true;
Button okButton = new Button();
okButton.Text = "OK";
okButton.Left = dlog.Width - (2*(buttonWidth+10));
okButton.Top = buttonTop;
okButton.Width = buttonWidth;
okButton.Height = okButton.Font.Height + 12;
okButton.DialogResult = System.Windows.Forms.DialogResult.OK;
dlog.AcceptButton = okButton;
dlog.Controls.Add(okButton);
Button cancelButton = new Button();
cancelButton.Text = "Cancel";
cancelButton.Left = dlog.Width - (1*(buttonWidth+10));
cancelButton.Top = buttonTop;
cancelButton.Height = cancelButton.Font.Height + 12;
cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
dlog.CancelButton = cancelButton;
dlog.Controls.Add(cancelButton);
dlog.Height = titleBarHeight + okButton.Bottom + 8;
dlog.ShowInTaskbar = false;
FillTemplateTree();
return dlog.ShowDialog(myVegas.MainWindow);
}
TextBox AddTextControl(Form dlog, String labelName, int left, int width, int top, String defaultValue)
{
Label label = new Label();
label.AutoSize = true;
label.Text = labelName + ":";
label.Left = left;
label.Top = top + 4;
dlog.Controls.Add(label);
TextBox textbox = new TextBox();
textbox.Multiline = false;
textbox.Left = label.Right;
textbox.Top = top;
textbox.Width = width - (label.Width);
textbox.Text = defaultValue;
dlog.Controls.Add(textbox);
return textbox;
}
RadioButton AddRadioControl(Form dlog, String labelName, int left, int top, bool enabled)
{
Label label = new Label();
label.AutoSize = true;
label.Text = labelName;
label.Left = left;
label.Top = top + 4;
label.Enabled = enabled;
dlog.Controls.Add(label);
RadioButton radiobutton = new RadioButton();
radiobutton.Left = label.Right;
radiobutton.Width = 36;
radiobutton.Top = top;
radiobutton.Enabled = enabled;
dlog.Controls.Add(radiobutton);
return radiobutton;
}
void FillTemplateTree()
{
int projectAudioChannelCount = 0;
if (AudioBusMode.Stereo == myVegas.Project.Audio.MasterBusMode) {
projectAudioChannelCount = 2;
} else if (AudioBusMode.Surround == myVegas.Project.Audio.MasterBusMode) {
projectAudioChannelCount = 6;
}
bool projectHasVideo = ProjectHasVideo();
bool projectHasAudio = ProjectHasAudio();
foreach (Renderer renderer in myVegas.Renderers) {
try {
String rendererName = renderer.FileTypeName;
TreeNode rendererNode = new TreeNode(rendererName);
rendererNode.Tag = new RenderItem(renderer, null, null);
foreach (RenderTemplate template in renderer.Templates) {
try {
// filter out invalid templates
if (!template.IsValid()) {
continue;
}
// filter out video templates when project has
// no video.
if (!projectHasVideo && (0 < template.VideoStreamCount)) {
continue;
}
// filter out audio-only templates when project has no audio
if (!projectHasAudio && (0 == template.VideoStreamCount) && (0 < template.AudioStreamCount)) {
continue;
}
// filter out templates that have more channels than the project
if (projectAudioChannelCount < template.AudioChannelCount) {
continue;
}
// filter out templates that don't have
// exactly one file extension
String[] extensions = template.FileExtensions;
if (1 != extensions.Length) {
continue;
}
String templateName = template.Name;
TreeNode templateNode = new TreeNode(templateName);
templateNode.Tag = new RenderItem(renderer, template, extensions[0]);
rendererNode.Nodes.Add(templateNode);
} catch (Exception e) {
// skip it
MessageBox.Show(e.ToString());
}
}
if (0 == rendererNode.Nodes.Count) {
continue;
} else if (1 == rendererNode.Nodes.Count) {
// skip it if the only template is the project
// settings template.
if (0 == ((RenderItem) rendererNode.Nodes[0].Tag).Template.Index) {
continue;
}
} else {
TemplateTree.Nodes.Add(rendererNode);
}
} catch {
// skip it
}
}
}
bool ProjectHasVideo() {
foreach (Track track in myVegas.Project.Tracks) {
if (track.IsVideo()) {
return true;
}
}
return false;
}
bool ProjectHasAudio() {
foreach (Track track in myVegas.Project.Tracks) {
if (track.IsAudio()) {
return true;
}
}
return false;
}
void UpdateSelectedTemplates()
{
SelectedTemplates.Clear();
foreach (TreeNode node in TemplateTree.Nodes) {
foreach (TreeNode templateNode in node.Nodes) {
if (templateNode.Checked) {
SelectedTemplates.Add(templateNode.Tag);
}
}
}
}
void HandleBrowseClick(Object sender, EventArgs args)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "All Files (*.*)|*.*";
saveFileDialog.CheckPathExists = true;
saveFileDialog.AddExtension = false;
if (null != FileNameBox) {
String filename = FileNameBox.Text;
String initialDir = Path.GetDirectoryName(filename);
if (Directory.Exists(initialDir)) {
saveFileDialog.InitialDirectory = initialDir;
}
saveFileDialog.DefaultExt = Path.GetExtension(filename);
saveFileDialog.FileName = Path.GetFileNameWithoutExtension(filename);
}
if (System.Windows.Forms.DialogResult.OK == saveFileDialog.ShowDialog()) {
if (null != FileNameBox) {
FileNameBox.Text = Path.GetFullPath(saveFileDialog.FileName);
}
}
}
void HandleTreeViewCheck(object sender, TreeViewEventArgs args)
{
if (args.Node.Checked) {
if (0 != args.Node.Nodes.Count) {
if ((args.Action == TreeViewAction.ByKeyboard) || (args.Action == TreeViewAction.ByMouse)) {
SetChildrenChecked(args.Node, true);
}
} else if (!args.Node.Parent.Checked) {
args.Node.Parent.Checked = true;
}
} else {
if (0 != args.Node.Nodes.Count) {
if ((args.Action == TreeViewAction.ByKeyboard) || (args.Action == TreeViewAction.ByMouse)) {
SetChildrenChecked(args.Node, false);
}
} else if (args.Node.Parent.Checked) {
if (!AnyChildrenChecked(args.Node.Parent)) {
args.Node.Parent.Checked = false;
}
}
}
}
void HandleFormClosing(Object sender, FormClosingEventArgs args)
{
Form dlg = sender as Form;
if (null == dlg) return;
if (DialogResult.OK != dlg.DialogResult) return;
String outputFilePath = FileNameBox.Text;
try {
String outputDirectory = Path.GetDirectoryName(outputFilePath);
if (!Directory.Exists(outputDirectory)) throw new ApplicationException();
} catch {
String title = "Invalid Directory";
StringBuilder msg = new StringBuilder();
msg.Append("The output directory does not exist.\n");
msg.Append("Please specify the directory and base file name using the Browse button.");
MessageBox.Show(dlg, msg.ToString(), title, MessageBoxButtons.OK, MessageBoxIcon.Error);
args.Cancel = true;
return;
}
try {
String baseFileName = Path.GetFileName(outputFilePath);
if (String.IsNullOrEmpty(baseFileName)) throw new ApplicationException();
if (-1 != baseFileName.IndexOfAny(Path.GetInvalidFileNameCha rs())) throw new ApplicationException();
} catch {
String title = "Invalid Base File Name";
StringBuilder msg = new StringBuilder();
msg.Append("The base file name is not a valid file name.\n");
msg.Append("Make sure it contains one or more valid file name characters.");
MessageBox.Show(dlg, msg.ToString(), title, MessageBoxButtons.OK, MessageBoxIcon.Error);
args.Cancel = true;
return;
}
UpdateSelectedTemplates();
if (0 == SelectedTemplates.Count)
{
String title = "No Templates Selected";
StringBuilder msg = new StringBuilder();
msg.Append("No render templates selected.\n");
msg.Append("Select one or more render templates from the available formats.");
MessageBox.Show(dlg, msg.ToString(), title, MessageBoxButtons.OK, MessageBoxIcon.Error);
args.Cancel = true;
return;
}
}
void SetChildrenChecked(TreeNode node, bool checkIt)
{
foreach (TreeNode childNode in node.Nodes) {
if (childNode.Checked != checkIt)
childNode.Checked = checkIt;
}
}
bool AnyChildrenChecked(TreeNode node)
{
foreach (TreeNode childNode in node.Nodes) {
if (childNode.Checked) return true;
}
return false;
}
}
1) Как сделать, чтобы при запуске скрипта на выходил BatchRenderDialog, но автоматом начинался рендеринг wav 24-44.1 для Regions (третья радио-кнопка)?
2) У меня название проекта - это цифра. Скажем 86. Там один вав файл, в котором выделены 12 регионов. Надо чтобы автоматом у отрендренных вавок были названия:
Legato_1_85, где 1 - номер региона, а 85 - это название проекта - 1.
Далее номер региона возрастает (я это уже сделал), а вторая цифра уменьшается на один, т.е.
Legato_1_85
Legato_2_84
Legato_3_83
Legato_4_82 и т.д.
...
Legato_12_74
Как представить GetFileNameWithoutExtension(projectPath) в виде числа, и у чтобы от него в цикле уже вычиталась единица?
В скрипте Batch Render with RegionNames обнаружилась неприятная осечка.
Не сохраняются маркеры. Печально:(
Может кто в курсе, как модернизировать скрипт, чтобы маркеры сохранялись?
AntonChik
19.02.2015, 11:58
vovke, в строке (132)
RenderStatus status = myVegas.Render(filePath, renderItem.Template, start, length);
допишите:
RenderStatus status = myVegas.Render(filePath, renderItem.Template, start, length, false, true);
ибо 6 и 7 аргументы это:
Boolean UseSelection - Get or set whether to render the currently selected region of the project.
Boolean IncludeMarkers - Get or set whether to include the project markers and regions in the output file.
А у вас это точно работает? У меня не желает
http://s018.radikal.ru/i525/1502/d1/98231a057b97t.jpg (http://radikal.ru/fp/2d797e7ca1e8423ea459466a2d9ce4ad)
edgeone
25.04.2015, 08:56
прошу поделится, если у кого-то имеется рабочая версия, скриптом по извлечению перехода (заданного типа и длины) в текущую позицию.
также не могу найти скрипт для удаления пустых промежутков для выделенных фрагментов, находятся только те, которые воздействуют на треки целиком.
речь не идет о скриптах, входящих в состав скриптовых расширений.
edgeone
31.08.2015, 20:46
В этом комплекте скриптов для 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 просто разделяет мультикамерную аудиодорогу на треки, не трогая видео.
:good:
Эти скрипты работают в последней версии? Где их взять? Сайт отключен.
zigizigi
25.10.2015, 21:24
существует ли бесплатный скрипт для автоматического добавления множественных аудио кроссфейдов? т.е. сделать то, что делает клавиша "/" только для нескольких выделенных склеек сразу. без сдвига событий на таймлайне.
zigizigi
04.11.2015, 14:54
Нашел решение, не совсем бесплатное и не симметричное относительно стыка. И тем не менее. В Excalibur, если в скрипте Set Duration поставить галку "Proportional change", то он добавляет нахлест правее стыка на заданное время, но ивенты при этом остаются на своих местах.
http://i.imgur.com/gxgY4NW.jpg
altarvic
04.11.2015, 15:30
если не бесплатное, то в Vegasaur есть то что вы ищите.
Проходчик
16.07.2016, 11:50
Привет всем. Знающие, подскажите, есть ли хоть какая то возможность получить event.create.subclip для абстрактного выделенного эвента на TL а не в триммере? Перерыл документацию, легальной возможности, видимо нет, но возможно есть обходные пути? Ну как то так - Хоткей назначить на эту функцию -нет легальной возможности, но по ПКМ клавиша "b" это делает...
VictorGtV
23.02.2018, 21:34
Всем привет. Есть скрипт для выделения eventа под курсором (Select event at cursor, and de-select all other events): https://www.vegascreativesoftware.info/us/forum/script-to-select-event-to-the-left-or-right--80822/
Помогите его "допилить" - чтобы перед выделением снималось выделение со всех эвентов в проекте, и чтобы он работал и для аудиотреков. Цель - резать клип без мышки.
Для аудиотреков сделал, осталось снять выделение со всех эвентов перед выделением (чтоб случайно не разрезать лишнее):
/**
* PURPOSE OF THIS SCRIPT:
*
* Select event at cursor, and de-select all other events.
*
* A video track must be selected. If an audio track is selected, nothing happens.
* If the track beneath the video track contains audio, the audio event in that track
* that lies beneath the cursor will also be selected.
*
* Copyright © John Meyer 2004
* Written: September 23, 2004
*
**/
import System;
import System.IO;
import System.Windows.Forms;
import Sony.Vegas;
try {
//Global declarations
var dStart : Double;
var dLength : Double;
var dCursor : Double;
var trackEnum : Enumerator;
var evnt : TrackEvent;
var CurrentEvnt : TrackEvent;
var track = FindSelectedTrack(); // Use this function to find the first selected track.
var eventEnum = new Enumerator(track.Events);
// if (track.IsVideo()) { // Proceed only if selected track is video track.
if ( SelectEventAtCursor() ) { // Function that selects events under cursor.
// Get set to look at track directly below the video track.
trackEnum.moveNext(); // Go to next track.
if (!trackEnum.atEnd()) { // Only proceed if there is a track below the video track.
track = Track(trackEnum.item()); // When doing the first track (above), these two lines were executed
eventEnum = new Enumerator(track.Events); // in the FindSelectedTrack() function.
if (track.IsAudio()) { // Only trim the event if this is an audio track.
SelectEventAtCursor();
}
}
}
// }
// Vegas.Cursor = CurrentEvnt.Start; // Enable this line to move cursor to start of selected event.
Vegas.UpdateUI();
} catch (e) {
MessageBox.Show(e);
}
// End of main program
// Beginning of functions
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;
}
/**
*
* The following function finds the event on the selected track
* that lies under the cursor. It also deselects all other events.
*
**/
function SelectEventAtCursor() {
var EventFound : boolean = false; // Function returns false if no video media under cursor.
dCursor = Vegas.Cursor.ToMilliseconds(); // Remember the cursor position.
//Go through each event on the track.
while (!eventEnum.atEnd()) {
evnt = TrackEvent(eventEnum.item());
evnt.Selected = false; // De-select the event
// Get the event's start and length timecode, in milliseconds.
dStart = evnt.Start.ToMilliseconds();
dLength = evnt.Length.ToMilliseconds();
/**
* If the cursor timecode is between the beginning and end of the
* event timecodes, then select the event.
**/
if ( (dCursor >= dStart) && ( dCursor < (dLength + dStart) ) ) {
evnt.Selected = true; // Select this event.
EventFound = true;
CurrentEvnt = evnt;
}
eventEnum.moveNext(); // Go to next event on this timeline.
}
return EventFound;
}
VictorGtV
25.02.2018, 13:03
Финальная версия. Снимает выделение со всех клипов в проекте и выделяет клип под курсором на выделенном треке.
/**
* PURPOSE OF THIS SCRIPT:
*
* Select event at cursor, and de-select all other events.
*
* A video track must be selected. If an audio track is selected, nothing happens.
* If the track beneath the video track contains audio, the audio event in that track
* that lies beneath the cursor will also be selected.
*
* Copyright © John Meyer 2004
* Written: September 23, 2004
*
**/
import System;
import System.IO;
import System.Windows.Forms;
import Sony.Vegas;
try
{
// step through all the tracks
for (var track in Vegas.Project.Tracks)
{
// Step through all events
for (var evnt in track.Events)
{
evnt.Selected = false;
}
}
}
catch (errorMsg)
{
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try {
//Global declarations
var dStart : Double;
var dLength : Double;
var dCursor : Double;
var trackEnum : Enumerator;
// var evnt : TrackEvent;
var CurrentEvnt : TrackEvent;
var track = FindSelectedTrack(); // Use this function to find the first selected track.
var eventEnum = new Enumerator(track.Events);
// if (track.IsVideo()) { // Proceed only if selected track is video track.
if ( SelectEventAtCursor() ) { // Function that selects events under cursor.
// Get set to look at track directly below the video track.
trackEnum.moveNext(); // Go to next track.
if (!trackEnum.atEnd()) { // Only proceed if there is a track below the video track.
track = Track(trackEnum.item()); // When doing the first track (above), these two lines were executed
eventEnum = new Enumerator(track.Events); // in the FindSelectedTrack() function.
//if (track.IsAudio()) { // Only trim the event if this is an audio track.
//SelectEventAtCursor();
//}
}
}
// }
// Vegas.Cursor = CurrentEvnt.Start; // Enable this line to move cursor to start of selected event.
Vegas.UpdateUI();
} catch (e) {
MessageBox.Show(e);
}
// End of main program
// Beginning of functions
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;
}
/**
*
* The following function finds the event on the selected track
* that lies under the cursor. It also deselects all other events.
*
**/
function SelectEventAtCursor() {
var EventFound : boolean = false; // Function returns false if no video media under cursor.
dCursor = Vegas.Cursor.ToMilliseconds(); // Remember the cursor position.
//Go through each event on the track.
while (!eventEnum.atEnd()) {
evnt = TrackEvent(eventEnum.item());
evnt.Selected = false; // De-select the event
// Get the event's start and length timecode, in milliseconds.
dStart = evnt.Start.ToMilliseconds();
dLength = evnt.Length.ToMilliseconds();
/**
* If the cursor timecode is between the beginning and end of the
* event timecodes, then select the event.
**/
if ( (dCursor >= dStart) && ( dCursor < (dLength + dStart) ) ) {
evnt.Selected = true; // Select this event.
EventFound = true;
CurrentEvnt = evnt;
}
eventEnum.moveNext(); // Go to next event on this timeline.
}
return EventFound;
}
Проходчик
25.02.2018, 16:51
вау!!! больше ста строк? если тебе нужно резать евент под курсором, совсем не обязательно его выделять, и, соответственно, снимать выделение - лишние телодвижения т.е скрипт, в своем действии, конечно же это делает, но ты этого не видишь... скрипт(по хоткею) просто режет эвент под курсором на выделенном треке во время проигрывания -это ведь нужно?
VictorGtV
26.02.2018, 00:49
Выделяет евент на выделенном треке, а выделение с других снимает, что бы не получилось что несколько евентов будут выделены, так сказать "техника безопасности." А потом можно не только резать... чтоб ставить фэйды тоже нужно выделить. Смотрю сейчас скрипт который тут в архиве был "FadeIn-OutCursor" (Fade clip to/from cursor position), но там выскакивает меню выбора вначале или в конце, я бы сделал отдельно 2 скрипта для In и для Out, может быть уже есть готовый?
Проходчик
26.02.2018, 11:31
Ты не понял, это я предлагаю, набросал на досуге исходя из Цель - резать клип без мышки, и описываю функционал...
VictorGtV
26.02.2018, 16:13
Тогда выкладывай, попробую. Возможно где-то будет удобнее сразу резать, а где-то сначала выделить. Главное, чтоб хоткеев на всё хватило:chkl:
По фэйдам не подскажешь? Из скрипта "FadeIn-OutCursor" нужно убрать меню с выбором и оставить что-то одно In или Out. Я так в Reaper настроил (на кнопки F8 и F9) - ставлю курсор, и сразу фэйд под курсором. B идеале, чтобы это было для видео, аудио, фото, т.е для любого содержимого на дорожке.
Проходчик
26.02.2018, 17:08
Пользуйся, адаптировал к 13 и ниже:
*Trim no selected event from cursor in selected track
*written by Frontovik
*02/2018
using System;
using System.Collections.Generic;
using Sony.Vegas;
using VegasWrapper = Sony.Vegas.Vegas;
using System.Windows.Forms;
namespace EventSelector
{
public class EntryPoint
{
public void FromVegas(VegasWrapper vegas)
{
vegas.ResumePlaybackOnScriptExit = true;
var selectedTrak = getSelectedTrack(vegas);
foreach (var ev in selectedTrak.Events)
{
if (ev.Start < vegas.Cursor && ev.Start + ev.Length > vegas.Cursor)
{
ev.Selected = true;
ev.Split(vegas.Cursor - ev.Start);
}
}
DeselectAllEvents(vegas);
}
private static Track getSelectedTrack(VegasWrapper vw)
{
foreach (var track in vw.Project.Tracks)
{
if (track.Selected) return track;
}
return null;
}
private static void DeselectAllEvents(VegasWrapper vw)
{
foreach (var track in vw.Project.Tracks)
{
foreach(var ev in track.Events)
{
ev.Selected = false;
}
}
}
}
}
По фейдам -есть готовый, ставит фейды (1000мс) по обе стороны от курсора, на любой эвент на выделенном треке можешь оставить нужную сторону -там все интуитивно:
* Find events on selected tracks that start on cursor, set their fadeIn length to 1 second.
*
* Written By: Alexander Anikin
* Written: Mar 31, 2013
*
**/
import Sony.Vegas;
try {
var bFound : Boolean = false;
for (var trackEnum = new Enumerator(Vegas.Project.Tracks); !bFound && !trackEnum.atEnd(); trackEnum.moveNext())
if (trackEnum.item().Selected)
{
for (var eventEnum = new Enumerator(Track(trackEnum.item()).Events); !eventEnum.atEnd(); eventEnum.moveNext())
if (eventEnum.item().Start == Vegas.Cursor)
{
eventEnum.item().FadeIn.Length = Timecode.FromMilliseconds(1000);
}
else if (eventEnum.item().End == Vegas.Cursor)
eventEnum.item().FadeOut.Length = Timecode.FromMilliseconds(1000);
}
} catch (e) {
Vegas.ShowError(e);
}
VictorGtV
26.02.2018, 19:30
Выдает ошибки:
1-й
C:\Program Files\Sony\Vegas Pro 12\Script Menu\Split.cs(1) : A namespace does not directly contain members such as fields or methods
2-й
C:\Program Files\Sony\Vegas Pro 12\Script Menu\Fade.js(1) : Expected expression
Винда 7 SP1, вегас 12 r770 репак Кролика
Проходчик
27.02.2018, 12:52
Ты ж не обозначил, что у тебя 12, а для меня стало открытием, что компилятор 12 Вегаса не подозревает ещё о переменных var, в 13 уже обновили. вот адаптировано к 12:
// Script Trim no selected event from cursor in selected track
// written by Frontovik
// 02/2018
using System;
using System.Collections.Generic;
using Sony.Vegas;
using VegasWrapper = Sony.Vegas.Vegas;
using System.Windows.Forms;
namespace EventSelector
{
public class EntryPoint
{
public void FromVegas(VegasWrapper vegas)
{
vegas.ResumePlaybackOnScriptExit = true;
Track selectedTrak = getSelectedTrack(vegas);
foreach (TrackEvent ev in selectedTrak.Events)
{
if (ev.Start < vegas.Cursor && ev.Start + ev.Length > vegas.Cursor)
{
ev.Selected = true;
ev.Split(vegas.Cursor - ev.Start);
}
}
DeselectAllEvents(vegas);
}
private static Track getSelectedTrack(VegasWrapper vw)
{
foreach (Track track in vw.Project.Tracks)
{
if (track.Selected) return track;
}
return null;
}
private static void DeselectAllEvents(VegasWrapper vw)
{
foreach (Track track in vw.Project.Tracks)
{
foreach(TrackEvent ev in track.Events)
{
ev.Selected = false;
}
}
}
}
}
по второму -не моё,и писано на jave -не сильно понимаю, но исходя из сообщения об ошибке в первой строке....Точно сейчас глянул, нет первой строки с комментом / *, не все скопировал...Потому компилятор и дуреет от * в первой строке :-)
VictorGtV
18.03.2018, 13:17
вот адаптировано к 12
Спасибо, удобно для “косого” стыка.
Скрипты (отдельно для FadeIn и FadeOut), для создания фэйда под курсором:
Fade in:
/**
* This script will Fade In on the selected item up to the current cursor position
*
* Written By: Edward Troxel
* Modified: 04-21-2003
* 08-26-2016 - Modified for MAGIX Vegas Pro versions by Nick Hope
* Modified 18-03-2018 for Sony Vegas 11, 12, 13
**/
import System;
import System.IO;
import System.Windows.Forms;
import Sony.Vegas;
try {
var OrgCursor;
OrgCursor = Vegas.Cursor;
//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());
if (evnt.Selected) {
evnt.FadeIn.Length = OrgCursor - evnt.Start;
//evnt.FadeOut.Length = new Timecode("00:00:01:00");
}
eventEnum.moveNext();
}
trackEnum.moveNext();
}
} catch (e) {
MessageBox.Show(e);
}
Fade Out:
/**
* * This script will Fade Out on the selected item up to the current cursor position
*
* Written By: Edward Troxel
* Modified: 04-21-2003
* 08-26-2016 - Modified for MAGIX Vegas Pro versions by Nick Hope
* Modified 18-03-2018 for Sony Vegas 11, 12, 13
**/
import System;
import System.IO;
import System.Windows.Forms;
import Sony.Vegas;
try {
var OrgCursor;
OrgCursor = Vegas.Cursor;
//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());
if (evnt.Selected) {
//evnt.FadeIn.Length = new Timecode("00:00:01:00");
evnt.FadeOut.Length = evnt.Length - (OrgCursor - evnt.Start);
}
eventEnum.moveNext();
}
trackEnum.moveNext();
}
} catch (e) {
MessageBox.Show(e);
}
Stregmode
18.03.2018, 17:31
А что это такое?
Проходчик
18.03.2018, 23:37
Наверно стоит прочитать тему, ну хоть первую страничку...
VictorGtV
19.03.2018, 12:16
Выделяет все эвенты после курсора только на выделенных треках (если видео с аудио, то нужно выделить 2 трека, если нужны все треки, то предварительно Ctrl+A и снять выделение с эвентов). Отличие от оригинала - добавлена строка 22 if (track.Selected)
SelectEventsRightFromCursor.js:
/**
* Program: SelectEventsFromCursor.js
* Description: This script will select all the events on selected tracks that are
* under the cursor position and to the right of it.
* Author: Johnny (Roy) Rofrano john_rofrano at hotmail dot com
*
* Date: March 24, 2004
* Modifed: 18-03-2018 (add line 22 if (track.Selected))
*
**/
import Sony.Vegas;
import System.Windows.Forms;
try
{
// step through all the tracks
for (var track in Vegas.Project.Tracks)
{
// Step through all events
for (var evnt in track.Events)
if (track.Selected)
{
// Check to see if event is under or to the right of the cursor
if (-1 == Vegas.Cursor.CompareTo(evnt.Start + evnt.Length))
{
evnt.Selected = true;
}
}
}
}
catch (errorMsg)
{
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Удаляет пустые промежутки между выделенными эвентами на одном или нескольких треках и сдвигает все влево. Отличие от оригинала - закрыты строки 34, 44, без этого были ошибки.
Removegaps between selected items.js:
/**
* Program:
* Description: Remove gaps between events. This removes gaps in SELECTED events only. The remove gap function only works on selected events.
All events before and after the selected event are NOT processed. The GAP constant is used as the defined spacer between events
as they are processed. If you want the space between events to be 0, then set GAP to 0. GAP unit is milliseconds. Default is 1000 (1sec).
This script was created because the only other RemoveGaps script found on the interet had a bug where it truncated the end of each event
on complex tracks. This script works on complex tracks with 1000's of events. Also the other script processed all events on a track, this
script processes only selected tracks, so you can selectivly decide which evemts to process and which to not process.
* Author: JRD
*
* Date: April 17, 2011
* Modifed: 18-03-2018 (close the line 34, 44)
**/
import Sony.Vegas;
import System.Windows.Forms;
import Microsoft.Win32;
import System.Diagnostics;
try
{
Debug.WriteLine("RemoveGaps-> START");
var GAP = 0;
// step through all selected video events:
var FirstTrack : Track = Vegas.Project.Tracks.Item(0);
var idx = 0;
var countSel = 0;
// step through all selected video events:
for (var track in Vegas.Project.Tracks)
{
// if( !track.Selected || track.MediaType == MediaType.Audio) continue;
var tracktime = new Timecode(0);
var last = 0;
var begin = 0;
for (var evnt in track.Events)
{
if (evnt.Selected)
{
// start after first event
// if (idx > 0 && countSel > 0)
{
Debug.WriteLine("RemoveGaps-> idx -> " + idx);
// get diff between previous this event and last
var diff = (evnt.Start.ToMilliseconds() - last);
Debug.WriteLine("RemoveGaps-> diff -> " + diff);
// if diff is greater than GAP? then fill it
if (diff > GAP)
{
var start = Timecode.FromMilliseconds(last + GAP);
var end = Timecode.FromMilliseconds(start.ToMilliseconds() + evnt.Length.ToMilliseconds());
var len = Timecode.FromMilliseconds( evnt.End.ToMilliseconds() - evnt.Start.ToMilliseconds());
Debug.WriteLine("RemoveGaps-> diff > GAP " );
Debug.WriteLine("RemoveGaps-> diff > Set evnt.Start to-> " + start.ToMilliseconds().ToString());
Debug.WriteLine("RemoveGaps-> diff > Set evnt.End to-> " + end.ToMilliseconds().ToString());
Debug.WriteLine("RemoveGaps-> diff > Set evnt.Length to-> " +len.ToMilliseconds().ToString());
evnt.Start = start; // new start
evnt.End = end; // new end
evnt.Length = len; // calculate exact length
countSel++;
}
}
countSel++;
}
last = evnt.End.ToMilliseconds();
tracktime = tracktime + evnt.Length;
idx++;
}
}
Debug.WriteLine("RemoveGaps-> DONE");
}
catch (errorMsg)
{
Debug.WriteLine("RemoveGaps-> ERROR-> " + errorMsg);
MessageBox.Show(errorMsg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
Переместить курсор влево-вправо на 2 сек. Оригинал не работал, потому что у меня отображение времени (Time format) выставлено в секундах, в скрипте было Timecode("00:00:02:00"), я исправил на 2.00
Move cursor left.js
//Copyright - John Meyer 2008
import System;
import System.IO;
import System.Windows.Forms;
import Sony.Vegas;
try {
// Change the variable below to change cursor advance
var Advance : Timecode = new Timecode("2.00");
Vegas.Cursor = Vegas.Cursor - Advance;
}
catch (e) {MessageBox.Show(e); }
Move cursor right.js
//Copyright - John Meyer 2008
import System;
import System.IO;
import System.Windows.Forms;
import Sony.Vegas;
try {
// Change the variable below to change cursor advance
var Advance : Timecode = new Timecode("2.00");
Vegas.Cursor = Vegas.Cursor + Advance;
}
catch (e) {MessageBox.Show(e); }
VictorGtV
05.10.2018, 23:24
Всем привет. В скрипте Batch Render хотелось бы прописать путь к папке, чтобы каждый раз не указывать путь (в строке Base file name). Возможно уже было решение, или как это сделать? Скрипт: https://cloud.mail.ru/public/B8xN/hXe7FQjwV