@jetdv Sir, please, when you have free time for this, how I solve this issue in the code below. I did a video trying to explain;
using System;
using ScriptPortal.Vegas;
namespace Test_Script
{
public class Class1
{
public Vegas myVegas;
public void Main(Vegas vegas)
{
myVegas = vegas;
foreach (Track currentTrack in myVegas.Project.Tracks)
{
if (currentTrack.IsVideo())
{
foreach (TrackEvent currentEvent in currentTrack.Events)
{
if (currentEvent.Selected)
{
Timecode targetLength = Timecode.FromSeconds(5);
Timecode currentLength = currentEvent.Length;
if (currentLength < targetLength)
{
double newPlaybackRate = currentLength.ToMilliseconds() / targetLength.ToMilliseconds();
Timecode offset = currentEvent.ActiveTake.Offset;
Timecode newOffset = Timecode.FromMilliseconds(offset.ToMilliseconds() / newPlaybackRate);
currentEvent.PlaybackRate = newPlaybackRate;
currentEvent.ActiveTake.Offset = newOffset;
currentEvent.Length = targetLength;
foreach (TrackEvent audioEvent in currentEvent.Group)
{
if (audioEvent.IsAudio())
{
audioEvent.PlaybackRate = newPlaybackRate;
Timecode audioOffset = audioEvent.ActiveTake.Offset;
Timecode newAudioOffset = Timecode.FromMilliseconds(audioOffset.ToMilliseconds() / newPlaybackRate);
audioEvent.ActiveTake.Offset = newAudioOffset;
audioEvent.Length = targetLength;
}
}
}
FixUnquantizedFrames(currentEvent);
foreach (TrackEvent groupedEvent in currentEvent.Group)
{
if (groupedEvent.IsAudio())
{
FixUnquantizedFrames(groupedEvent);
}
}
}
}
}
}
}
private void FixUnquantizedFrames(TrackEvent evt)
{
double frameRate = myVegas.Project.Video.FrameRate;
double frameDurationMs = 1000.0 / frameRate;
double startMs = evt.Start.ToMilliseconds();
evt.Start = new Timecode(Math.Round(startMs / frameDurationMs) * frameDurationMs);
double lengthMs = evt.Length.ToMilliseconds();
evt.Length = new Timecode(Math.Round(lengthMs / frameDurationMs) * frameDurationMs);
}
}
}
public class EntryPoint
{
public void FromVegas(Vegas vegas)
{
Test_Script.Class1 test = new Test_Script.Class1();
test.Main(vegas);
}
}