Hi guys...
I created this script.
but it is not working.
i just want.
if there are 1 2 3 4 keys in PAN.
then it should add keys 1 (here) 2 (here) 3 (here) 4 at first run
then at every next run it repeat with new keys numbers.
using System;
using System.Collections.Generic;
using ScriptPortal.Vegas;
using System.Windows.Forms;
public class EntryPoint
{
public void FromVegas(Vegas vegas)
{
AddIntermediateKeyframes(vegas);
}
private void AddIntermediateKeyframes(Vegas vegas)
{
List<TrackEvent> selectedEvents = GetSelectedEvents(vegas);
if (selectedEvents == null || selectedEvents.Count == 0)
{
MessageBox.Show("No Event Selected.", "Upps!", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
foreach (Track track in vegas.Project.Tracks)
{
if (track.IsVideo())
{
foreach (VideoEvent videoEvent in track.Events)
{
if (videoEvent.Selected)
{
// Process effects
foreach (Effect effect in videoEvent.Effects)
{
if (effect.IsOFX)
{
OFXEffect ofx = effect.OFXEffect;
foreach (OFXParameter ofxParam in ofx.Parameters)
{
// Ensure parameter is valid for keyframe processing
if ((ofxParam.Name != "Presets") && (ofxParam.Label != "Preset") &&
(ofxParam.ParameterType.ToString() != "Page") &&
(ofxParam.ParameterType.ToString() != "Group") &&
(ofxParam.ParameterType.ToString() != "PushButton"))
{
if (ofxParam.IsAnimated)
{
switch (ofxParam.ParameterType.ToString())
{
case "RGB":
AddIntermediateRGBKeyframes((OFXRGBParameter)ofxParam, videoEvent);
break;
case "RGBA":
AddIntermediateRGBAKeyframes((OFXRGBAParameter)ofxParam, videoEvent);
break;
case "Double":
AddIntermediateDoubleKeyframes((OFXDoubleParameter)ofxParam, videoEvent);
break;
case "Integer":
AddIntermediateIntegerKeyframes((OFXIntegerParameter)ofxParam, videoEvent);
break;
}
}
}
}
}
}
}
}
}
}
}
private void AddIntermediateRGBKeyframes(OFXRGBParameter param, VideoEvent videoEvent)
{
if (param.Keyframes.Count > 1)
{
List<double> newKeyframeTimes = new List<double>();
for (int i = 1; i < param.Keyframes.Count; i++)
{
OFXRGBKeyframe previousKeyframe = param.Keyframes[i - 1];
OFXRGBKeyframe nextKeyframe = param.Keyframes[i];
// Calculate the middle time between two keyframes
double middleTime = (previousKeyframe.Time.ToMilliseconds() + nextKeyframe.Time.ToMilliseconds()) / 2;
newKeyframeTimes.Add(middleTime);
}
foreach (double time in newKeyframeTimes)
{
Timecode middleTimecode = new Timecode(time);
param.AddKeyframe(middleTimecode);
}
}
}
private void AddIntermediateRGBAKeyframes(OFXRGBAParameter param, VideoEvent videoEvent)
{
if (param.Keyframes.Count > 1)
{
List<double> newKeyframeTimes = new List<double>();
for (int i = 1; i < param.Keyframes.Count; i++)
{
OFXRGBAKeyframe previousKeyframe = param.Keyframes[i - 1];
OFXRGBAKeyframe nextKeyframe = param.Keyframes[i];
// Calculate the middle time between two keyframes
double middleTime = (previousKeyframe.Time.ToMilliseconds() + nextKeyframe.Time.ToMilliseconds()) / 2;
newKeyframeTimes.Add(middleTime);
}
foreach (double time in newKeyframeTimes)
{
Timecode middleTimecode = new Timecode(time);
param.AddKeyframe(middleTimecode);
}
}
}
private void AddIntermediateDoubleKeyframes(OFXDoubleParameter param, VideoEvent videoEvent)
{
if (param.Keyframes.Count > 1)
{
List<double> newKeyframeTimes = new List<double>();
for (int i = 1; i < param.Keyframes.Count; i++)
{
OFXDoubleKeyframe previousKeyframe = param.Keyframes[i - 1];
OFXDoubleKeyframe nextKeyframe = param.Keyframes[i];
// Calculate the middle time between two keyframes
double middleTime = (previousKeyframe.Time.ToMilliseconds() + nextKeyframe.Time.ToMilliseconds()) / 2;
newKeyframeTimes.Add(middleTime);
}
foreach (double time in newKeyframeTimes)
{
Timecode middleTimecode = new Timecode(time);
param.AddKeyframe(middleTimecode);
}
}
}
private void AddIntermediateIntegerKeyframes(OFXIntegerParameter param, VideoEvent videoEvent)
{
if (param.Keyframes.Count > 1)
{
List<double> newKeyframeTimes = new List<double>();
for (int i = 1; i < param.Keyframes.Count; i++)
{
OFXIntegerKeyframe previousKeyframe = param.Keyframes[i - 1];
OFXIntegerKeyframe nextKeyframe = param.Keyframes[i];
// Calculate the middle time between two keyframes
double middleTime = (previousKeyframe.Time.ToMilliseconds() + nextKeyframe.Time.ToMilliseconds()) / 2;
newKeyframeTimes.Add(middleTime);
}
foreach (double time in newKeyframeTimes)
{
Timecode middleTimecode = new Timecode(time);
param.AddKeyframe(middleTimecode);
}
}
}
// This method retrieves the selected events from the Vegas project
private List<TrackEvent> GetSelectedEvents(Vegas vegas)
{
List<TrackEvent> selectedEvents = new List<TrackEvent>();
foreach (Track track in vegas.Project.Tracks)
{
foreach (TrackEvent trackEvent in track.Events)
{
if (trackEvent.Selected)
{
selectedEvents.Add(trackEvent);
}
}
}
return selectedEvents;
}
}
