SOLUCIÓN:
Hola chicos, por fin tengo la solución para que lo haga correctamente, tanto en el audio como en la longitud del clip, gracias a la IA:
velocidad al 95% (ralentizar)
velocidad al 105% (acelerar)
Hola chicos, por fin tengo la solución para que lo haga correctamente, tanto en el audio como en la longitud del clip, gracias a la IA:
velocidad al 95% (ralentizar)
Código [Seleccionar]
using System;
using System.Windows.Forms;
using ScriptPortal.Vegas;
public class EntryPoint
{
Vegas myVegas = null;
Form dlog = new Form();
public void FromVegas(Vegas vegas)
{
myVegas = vegas;
AdjustPlaybackRate(0.95f); // Aplicar directamente el 95% al abrir la ventana
dlog.Close(); // Cerrar la ventana automáticamente
}
void AdjustPlaybackRate(float rate)
{
foreach (Track track in myVegas.Project.Tracks)
{
foreach (TrackEvent trackEvent in track.Events)
{
if (trackEvent.Selected)
{
// Ajustar tanto audio como video relacionados
SyncAndAdjustEvent(trackEvent, rate);
}
}
}
}
void SyncAndAdjustEvent(TrackEvent selectedEvent, float rate)
{
// Ajustar el evento seleccionado (audio o video)
AdjustEvent(selectedEvent, rate);
// Buscar el evento relacionado (audio o video)
foreach (Track track in myVegas.Project.Tracks)
{
foreach (TrackEvent trackEvent in track.Events)
{
// Si encontramos un evento relacionado con el seleccionado
if (trackEvent != selectedEvent && AreEventsLinked(selectedEvent, trackEvent))
{
// Ajustar el evento relacionado para que coincida
AdjustEvent(trackEvent, rate, selectedEvent.Length);
}
}
}
}
bool AreEventsLinked(TrackEvent event1, TrackEvent event2)
{
// Consideramos que los eventos están vinculados si comparten la misma posición de inicio
return event1.Start == event2.Start && event1.Length == event2.Length;
}
void AdjustEvent(TrackEvent trackEvent, float rate, Timecode syncedLength = null)
{
// Ajustar eventos de audio
if (trackEvent.Track.IsAudio())
{
trackEvent.AdjustPlaybackRate(rate, true); // Ajustar la tasa de reproducción del audio
if (syncedLength != null)
{
trackEvent.Length = syncedLength; // Sincronizar duración con el video
}
else
{
// Ajustar la duración del evento de audio
double newLengthInSeconds = trackEvent.Length.ToMilliseconds() / 1000.0 / rate;
trackEvent.Length = new Timecode(newLengthInSeconds * 1000);
}
}
// Ajustar eventos de video
if (trackEvent.Track.IsVideo())
{
VideoEvent videoEvent = trackEvent as VideoEvent;
if (videoEvent != null)
{
videoEvent.PlaybackRate = rate; // Ajustar la tasa de reproducción del video
if (syncedLength != null)
{
videoEvent.Length = syncedLength; // Sincronizar duración con el audio
}
else
{
// Ajustar la longitud del evento de video
double newLengthInSeconds = videoEvent.Length.ToMilliseconds() / 1000.0 / rate;
videoEvent.Length = new Timecode(newLengthInSeconds * 1000);
}
}
}
}
}
velocidad al 105% (acelerar)
Código [Seleccionar]
using System;
using System.Windows.Forms;
using ScriptPortal.Vegas;
public class EntryPoint
{
Vegas myVegas = null;
Form dlog = new Form();
public void FromVegas(Vegas vegas)
{
myVegas = vegas;
AdjustPlaybackRate(1.05f); // Aplicar directamente el 105% al abrir la ventana
dlog.Close(); // Cerrar la ventana automáticamente
}
void AdjustPlaybackRate(float rate)
{
foreach (Track track in myVegas.Project.Tracks)
{
foreach (TrackEvent trackEvent in track.Events)
{
if (trackEvent.Selected)
{
// Ajustar tanto audio como video relacionados
SyncAndAdjustEvent(trackEvent, rate);
}
}
}
}
void SyncAndAdjustEvent(TrackEvent selectedEvent, float rate)
{
// Ajustar el evento seleccionado (audio o video)
AdjustEvent(selectedEvent, rate);
// Buscar el evento relacionado (audio o video)
foreach (Track track in myVegas.Project.Tracks)
{
foreach (TrackEvent trackEvent in track.Events)
{
// Si encontramos un evento relacionado con el seleccionado
if (trackEvent != selectedEvent && AreEventsLinked(selectedEvent, trackEvent))
{
// Ajustar el evento relacionado para que coincida
AdjustEvent(trackEvent, rate, selectedEvent.Length);
}
}
}
}
bool AreEventsLinked(TrackEvent event1, TrackEvent event2)
{
// Consideramos que los eventos están vinculados si comparten la misma posición de inicio
return event1.Start == event2.Start && event1.Length == event2.Length;
}
void AdjustEvent(TrackEvent trackEvent, float rate, Timecode syncedLength = null)
{
// Ajustar eventos de audio
if (trackEvent.Track.IsAudio())
{
trackEvent.AdjustPlaybackRate(rate, true); // Ajustar la tasa de reproducción del audio
if (syncedLength != null)
{
trackEvent.Length = syncedLength; // Sincronizar duración con el video
}
else
{
// Ajustar la duración del evento de audio
double newLengthInSeconds = trackEvent.Length.ToMilliseconds() / 1000.0 / rate;
trackEvent.Length = new Timecode(newLengthInSeconds * 1000);
}
}
// Ajustar eventos de video
if (trackEvent.Track.IsVideo())
{
VideoEvent videoEvent = trackEvent as VideoEvent;
if (videoEvent != null)
{
videoEvent.PlaybackRate = rate; // Ajustar la tasa de reproducción del video
if (syncedLength != null)
{
videoEvent.Length = syncedLength; // Sincronizar duración con el audio
}
else
{
// Ajustar la longitud del evento de video
double newLengthInSeconds = videoEvent.Length.ToMilliseconds() / 1000.0 / rate;
videoEvent.Length = new Timecode(newLengthInSeconds * 1000);
}
}
}
}
}