Wobei es hirnlos erscheint etwas Verlustbehaftetes wie [lexicon]OGG[/lexicon] oder MP3 etc. in AVISynth hinzuzufügen. Der Grund ist der das das Script encodiert werden muss. Video als auch Audio. Demnach wird Audio ja noch mal unnötig encodiert. Bei einer [lexicon]WAV[/lexicon] Datei ist das was anderes. Da ist wieder das Prinzip [lexicon]Lossless[/lexicon] to [lexicon]Lossy[/lexicon].
Der beste Weg wäre wie De-M-oN schon erklärt hat nur das Videofile zum Audio zu machen. Das kann halt auch nur ein normales Bild sein. Man gibt die End Frameposition an (Länge des Audios) und fertig ist das Ding.
Image = ImageSource("Pfad", 0, 0, 30, false).Loop(Dauer des Videos * 30)
return Image
Ein return ist überflüssig ;D Das ist wie gesagt etwas für Funktionen oder wenn etwas abgeschlossen sein soll local für sich. Weil alle Variablen die vor dem Return stehen werden nach dem Return außer Kraft gesetzt. Da der Rückgabewert durch das Return geschieht was als nächstes passiert.
Es reicht also: ImageSource("Pfad + Dateiname + Endung", start = 0, end = 59 * 30, fps = 30, false)
Die 30 stehen für die FPS des Videos und die 60 für die Sekunden. Denn Sekunden mal FPS = Frames. Für ein Standbildvideo kann man auch glatt nur 1 [lexicon]FPS[/lexicon] nutzen. Das Bild bewegt sich ja eh nicht. xD
Daher: ImageSource("Pfad + Dateiname + Endung", start = 0, end = 59, fps = 1)
Jetzt dauert das Video nur 60 Sekunden bei 1 FPS. Das ist sehr sehr Platzsparend ;D Vor allem da sich das Bild ja eh nicht ändert xD
60sek weil von 0 bis 59 sind 60.
Noch kürzer wäre also: ImageSource("Pfad + Dateiname + Endung", 0, 59, 1)
Als Funktion hätte ich das Beispiel von CruelDaemon vllt so verpackt:
Zitat# Use a still-frame image with audio:
audio = DirectShowSource("Gina La Piana - Start Over.flv")
video = ImageSource("Gina La Piana.jpg", fps=25, start=1, end=ceil(25*AudioLengthF(audio)/AudioRate(audio)))
return AudioDub(video, audio)
Damit können nun so fast jede Sounddatei geladen werden. Die FPS ist hier nun sehr wichtig. Je größer die FPS Rate, desto genauer wird das Video zur Audiospur angepasst. Das fällt dann nachher im Millisekundenbereich. Beispiel:
25 FPS ergibt 1sek und 200 ms Video. Audiolänge ist aber 1sek und 152 ms
Bei 60 FPS ergibt das Video 1sek und 183 ms
Bei 120 FPS = 1sek und 166 ms
usw...
Bis ein Wert erreicht ist der exakt der Audiospur ist. Wie gesagt, das sind Millisekunden und sind nicht groß tragend.
Der Skript ist einfach und handlich. Kopieren, Pfade und Datein austauschen und fertig.
Bilder wären BMP, JPG, PNG und GIF bei ImageSource. Ebenso bei ImageReader.
Beim 2. Script hast du soweit ich sehe beim Resizefilter einmal , und einmal x angegeben. Ich habe das jetzt bei meinen Script einfach auch auf , abgeändert (wobei ich auch als 2. ein AviSource genommen hatte). Geht das mit dem x also auch oder muss es , sein (also so wie ich es nun gemacht habe)?
Danke für den Hinweis
Bin halt auch nur ein Mensch der Fehler macht. xD
Es muss ein , hin und kein x. Ich hab es noch mal korrigiert.
Wenn ihr weitere kleine Fehler sehen solltet, könnt ihr mich auch per PN oder hier im Thread drauf aufmerksam machen ![]()
Eine weitere Lade Funktion wäre halt noch das was De-M-oN Vorgeschlagen hatte mit FFVideoSource. Sieht dann halt so aus:
Wenn Fehler auftreten sollten dabei mal das ganze so ergänzen:
Diese Ladefunktion von Videos ist der von AVISource oder DirectShowSource weit überlegen und ist in den meisten Fällen auch besser geeignet.
Sound kann man darüber auch laden wenn man das möchte und zwars mit FFAudioSource. Sieht dann so aus:
Hier wird ein [lexicon]Lagarith[/lexicon] codiertes Videos geladen und die Soundspur gleich mit aus der Datei. Man kann auch andere Quellen angeben wie MP3 oder was weiß ich
Mit FFVideosSource und FFAudioSource kann man so gut wie fast alles laden. Das ganze basiert dann auf FFmpeg.