Hallo zusammen,
Ich habe manchmal das Problem, dass ich Audio-Teile von Clips versehentlich lösche oder sie sich sonstwie von ihrem Videoteil trennen und ein Eigenleben führen In MSP gabs da ja eine nützliche "Unite" Funktion. Nach einer Diskussion in nem andeern Thread hier habe Ich probiert, dazu einen Skript zu schreiben. Der ist zwar nicht ganz perfekt, aber für meine Zwecke - und vielleicht auch für euch - kanns doch manchmal nützlich sein. Wenn man den Skript auf eine Taste legt (z.B. Ctrl-Shift-1) kann man ihn dann auch gleich per Taste aufrufen (Ctrl-1).
Die Funktionsweise ist ein wenig kompliziert... es passiert Folgendes:
- Zuerst wird auf jeden Fall ein NEUER Audio-Track erstellt, in den die "fehlenden" Audio-Teile gelegt werden, und zwar zuunterst (der Track wird "Missing Audio" genannt). Das ist leider nötig, weil nicht offensichtlich ist, wohin man die Audio-Teile sonst legen soll ...
- Es werden danach für ALLE selektierten Videoevents in diesen Track die entsprechenden Audioevents gelegt - und zwar bündig, mit den korrekten Offsets (relative Startzeiten), und über alle etwaigen Takes des Originalvideos. Je nach Auto-Crossfade werden diese auch gemacht, falls überlappend.
Man kann den Skript also auch für mehrere Video-Events aufs mal ablaufen lassen. Um z.B. die Audio-Teile eines ganzen Tracks zu rekonstruieren, kann man den ersten Event selektieren, dann "select Events to End" mit der rechten Taste wählen, und dann den Skript aktivieren.
Einschränkungen:
- Auch wenn Events in verschiedenen Tracks erscheinen, kommen alle missing Audios in denselben target Track (ist, glaub ich, nicht so schlimm...)
- Lässt man den Skript mehrfach laufen, so wird jedesmal ein neuer Target Track erstellt. Idee ist, dass man die rekonstuierten Teile aus dem neuen Track an ihren Bestimmungsort befördert und den Track danach löscht.
- Hauptproblem: die neuen Audio-Events werden nicht mit den Videoevents gruppiert... ich habe leider im API keine Möglichkeit gefunden, Events zu gruppieren (wenn jemand weiss wie, bitte mir sagen
Die Komentare könnt ihr natürlich weglassen, frisst aber glaub ich kaum Zeit.
Viel Spass! Klaymen
/*
* (re)create audio parts on seperate audio track for all selected video events
*/
import System.Windows.Forms;
import SonicFoundry.Vegas;
try {
// create new target audio track
var targetTrack = new AudioTrack(-1,"Missing Audio");
Vegas.Project.Tracks.Add(targetTrack);
// 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;
// create a fitting audio event and add to target audio track:
var audioEvent = new AudioEvent(evnt.Start,evnt.Length);
targetTrack.Events.Add(audioEvent);
// step through all events of selected video event
for (var tke in evnt.Takes)
{
// find first audio stream in this takes media
var aviFile = new Media(tke.MediaPath);
for (var stream in aviFile.Streams)
{
if (stream.MediaType != MediaType.Audio) continue;
// create new take out of this audio stream
var newTake = new Take(stream,tke.IsActive);
// add it to target audio event (must be done before anything else!!)
audioEvent.Takes.Add(newTake);
// fit offset to video event
newTake.Offset = tke.Offset;
break; // we assume there's only one audio part in any avi file
}
}
audioEvent.Selected = true;
}
}
} catch (e) {MessageBox.Show(e);}
Alles anzeigen
Anmerkung (29.April): Habe die "audioEvent.Selected = true" Zeile gegen Ende eingefügt. Damit werden die neu erstellten Audio Events zusätzlich zu den vorher selektierten Video-Events selektiert. Das löst das Grouping-Problem zwar nicht ganz, aber man kann immerhin danach mit "G" die Events manuell gruppieren (wenn allerdings mehrere Video-Events selektiert waren, landen dann alle zusammen in einer Gruppe, da Vegas-Grupper nur "flach" sind, also eine Gruppe seinerseits keine Gruppe beinhalten kann).