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; } }