#Aufnahme vom NDS mit zwei Displays
#RGB24 oder YV24 ist wichtig, da nur diese Farbräume sowohl von der Höhe als auch von der Breite Mod 1 fähig sind. Wird benötigt um den Bildwechsel zu Animieren
Video = AVISource("NDS.avi").AssumeFPS(30, 1).ConvertToYV24()
#Aufnahme in Oberen und Unteren Bildschirm aufteilen und global setzen
global Oben = Video.Crop(2, 0, -2, -288)
global Unten = Video.Crop(2, 288, -2, -0)
#Hintergrund mit einer eindeutigen Farbe
#Back = BlankClip(Video.framecount, 1920, 1080, "RGB24", Video.framerate, Video.frameratedenominator, color=$000000).KillAudio()
#Hintergrund mit einem Bild
Back = ImageReader("..\Backgrounds\Background_04.jpg", 0, Video.Framecount, 30, true).Spline16Resize(1920, 1080)
#Größenangaben bei kleinen und großen Fenstern vordifinieren und global setzen
global wmin = int(Oben.width*1.5)
global hmin = int(Oben.height*1.5)
global wmax = int(Oben.width * 3.4)
global hmax = int(Oben.height * 3.4)
global wmit = int(Oben.width * 2.45)
global hmit = int(Oben.height * 2.45)
#Die Funktionen Gleich und Tausch bestehen aus folgenden 4 Argumenten:
# 1 - Die Fläche auf der gezeichnet werden soll
# 4 - Bildverhalten (Siehe entsprechende Funktion für Einstellung)
#Änderungswerte innerhalb des Videoverlaufes
#Video die Audiospur wieder geben. Fertiges Video!!!
#AudioDub(last, Video).ConvertToYV12()
#Gleichbleibendes Display in entsprechender Größe
#r = 0 - linkes Display klein, rechtes Display groß
#r = 1 - linkes Display groß, rechtes Display klein
#r = 2 - linkes Display + rechtes Display bleiben gleich groß (mitte)
Function Gleich(clip draw, int fstart, int fend, int r) {
clip1= (r == 0) ? Kleingleich(draw, Oben, fstart, fend, 0) : (r == 1) ? Grossgleich(draw, Oben, fstart, fend, 0) : (r == 2) ? Mittegleich(draw, Oben, fstart, fend, 0) : Mittegleich(draw, Oben, fstart, fend, 0)
return (r == 0) ? Grossgleich(clip1, Unten, fstart, fend, 1) : (r == 1) ? Kleingleich(clip1, Unten, fstart, fend, 1) : (r == 2) ? Mittegleich(clip1, Unten, fstart, fend, 1) : Mittegleich(clip1, Unten, fstart, fend, 1)
#Tausch der Größe zwischen den Displays.
#r = 0 - Linkes Display wird klein, rechtes Display wird groß,
#r = 1 - Linkes Display wird groß, rechtes Display wird klein
#r = 2 - Linkes Display wird von groß auf mitte, rechtes Display wird von klein auf mitte
#r = 3 - Linkes Display wird von klein auf mitte, rechtes Display wird von groß auf mitte
#r = 4 - Linkes Display wird von mitte auf groß, rechtes Display wird mitte auf klein
#r = 5 - Linkes Display wird von mitte auf klein, rechtes Display wird von mitte auf groß
Function Tausch(clip draw, int fstart, int fend, int r) {
clip1 = (r == 0) ? Klein(draw, Oben, fstart, fend, 0) : (r == 1) ? Gross(draw, Oben, fstart, fend, 0) : (r == 2) ? Grossmitte(draw, Oben, fstart, fend, 0) : (r == 3) ? Kleinmitte(draw, Oben, fstart, fend, 0) : (r ==4) ? Mittegross(draw, Oben, fstart, fend, 0) : (r == 5) ? Mitteklein(draw, Oben, fstart, fend, 0) : Mitteklein(draw, Oben, fstart, fend, 0)
return (r == 0) ? Gross(clip1, Unten, fstart, fend, 1) : (r == 1) ? Klein(clip1, Unten, fstart, fend, 1) : (r == 2) ? Kleinmitte(clip1, Unten, fstart, fend, 1) : (r == 3) ? Grossmitte(clip1, Unten, fstart, fend, 1) : (r == 4) ? Mitteklein(clip1, Unten, fstart, fend, 1) : (r == 5) ? Mittegross(clip1, Unten, fstart, fend, 1) : Mittegross(clip1, Unten, fstart, fend, 1)
#Größe bleibt gleich auf max
Function Grossgleich(clip draw, clip clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Size", clip0, wmax, hmax, l)
#Größe bleibt gleich auf min
Function Kleingleich(clip draw, clip clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Size", clip0, wmin, hmin, l)
#Größe bleibt gleich auf mitte
Function Mittegleich(clip draw, clip clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Size", clip0, wmit, hmit, l)
#Größe ändert sich von min auf max
Function Gross(clip draw, clip clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Animate", fstart, fend, "Size", clip0, wmin, hmin, l, clip0, wmax, hmax, l)
#Größe ändert sich von max auf min
Function Klein(clip draw, clip clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Animate", fstart, fend, "Size", clip0, wmax, hmax, l, clip0, wmin, hmin, l)
#Größe ändert sich von min auf mitte
Function KleinMitte(clip draw, clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Animate", fstart, fend, "Size", clip0, wmin, hmin, l, clip0, wmit, hmit, l)
#Größe ändert sich von groß auf mitte
Function GrossMitte(clip draw, clip clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Animate", fstart, fend, "Size", clip0, wmax, hmax, l, clip0, wmit, hmit, l)
#Größe ändert sich von mitte auf min
Function MitteKlein(clip draw, clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Animate", fstart, fend, "Size", clip0, wmit, hmit, l, clip0, wmin, hmin, l)
#Größe ändert sich von mitte auf max
Function MitteGross(clip draw, clip clip0, int fstart, int fend, int l) {
return ApplyRange(draw, fstart, fend, "Animate", fstart, fend, "Size", clip0, wmit, hmit, l, clip0, wmax, hmax, l)
#Resizen und zusammenfügen und das ganze zum Mainprozess wieder übergeben
#Positionsangabe auf dem Gesamtbild
Function Size(clip draw, clip clip0, int fw, int fh, int l) {
clip0 = clip0.Spline16Resize(fw, fh)
return (l == 0) ? Overlay(draw, clip0, 20, (draw.height - clip0.height) / 2) : Overlay(draw, clip0, draw.width - clip0.width - 20, (draw.height - clip0.height) / 2)