Soo,
ich hab jetzt die Schleifen/Rekursion ausreichend kapiert und umgesetzt.
Bis zu 4 rekursive Schleifen werden genutzt.
AVIsource("K:\Moviez\Ong-Bak.avi")
global anzstreifen = 100 # Die Anzahl der vertikalen Streifen in der die entsprechenden Frames zeitlich nebeneinander liegen
global anzframes = 6 # Die Anzahl der ineinander verschachtelten Frames
sizefaktor = 1 # 1 bedeutet 1 Pixel breite Streifen, 2 dann 2 Pixel breite usw., dies dient der besseren Druckbarkeit.
nxte = 3 # nutze jedes xte Frame. (zeitliche Vergröberung der Animation)
global breite=anzstreifen*anzframes*sizefaktor # Horizontal Auflösung der Ausgabe
global streifenbreite=breite/(anzstreifen*anzframes)
converttoRGB()
vid=killaudio()
#return vid # zum suchen der passenden Stelle
abhier = 69219 # hier den ersten Frame der Animation (Bildfolge) angeben
vid=TRIM(vid,abhier,abhier+anzframes*nxte-1)
vid=selectevery(vid,nxte,0) # Bilder auslassen
vid=LanczosResize(vid,breite,breite*height(vid)/width(vid))
# Die folgende Zeile aktivieren, falls der Subtitle Text auf weiss angezeigt werden soll.
#vid=blankclip(length=anzframes, width=Width(vid), height=Height(vid), fps=25, pixel_type="RGB32", color=$999999)
#folgende Zeile aktvieren, falls ein String angezeigt werden soll, den String kann man hier auch editieren.
#vid = untertitel(vid, "PREDATOR",0,anzframes)
function untertitel(clip todo, string ntext,int countstart,int countend)
{
Rec_running = "text = MidStr(ntext,countstart+1,1)
todo = subtitle(todo, text, width(todo)/3,0,countstart,countstart,font="+chr(34)+"Arial"+chr(34)+",size=breite/2,text_color=Rand(16777215))"
Rec_end = "#return maske"
(countstart == countend) ? eval(Rec_end) : eval(Rec_running)
(countstart == countend) ? todo : untertitel(todo, ntext, countstart+1, countend)
}
a=blankclip(length=1, width=Width(vid), height=Height(vid), fps=25, pixel_type="RGB32", color=$FFFFFF)
b=blankclip(length=anzframes-1, width=Width(vid), height=Height(vid), fps=25, pixel_type="RGB32", color=$000000)
maske=a++b
#framecount()
rasterbild = anreihen(vid)
maske = anreihen(maske)
#folgende 3 Zeilen dienen der Ausgabe, info dazu jeweils rechts daneben:
return rasterbild # das eigentliche Rasterbild
#return maske # die Maske um das Rasterbild zu "entschlüsseln"
#return animiere(rasterbild, maske,anzframes) # Maske auf Rasterbild als Animation.
function animiere(clip rasterbild,clip maske,int anzframes)
{
z = Overlay(rasterbild, maske,mask=invert(maske),x=streifenbreite*0) ++ Overlay(rasterbild, maske,mask=invert(maske),x=streifenbreite*1)
return animrecur(z,rasterbild, maske,2,anzframes)
}
function animrecur(clip todo,clip vid ,clip maske, int countstart, int countend)
{
Rec_running = "todo = todo ++ Overlay(vid, maske,mask=invert(maske),x=streifenbreite*"+string(countstart)+")"
Rec_end = "#return maske"
(countstart == countend) ? eval(Rec_end) : eval(Rec_running)
(countstart == countend) ? todo : animrecur(todo, vid, maske, countstart+1, countend)
}
function anreihen(clip vid)
{
y = zeitraster(vid, 0)
rasterbild = recursive(y,vid,1,anzstreifen)
return rasterbild
}
function recursive(clip vid ,clip anfang, int countstart, int countend)
{
Rec_running = "z = zeitraster(anfang," +string(countstart*anzframes)+")
vid = stackHorizontal(vid, z)"
Rec_end = "#return anfang"
(countstart == countend) ? eval(Rec_end) : eval(Rec_running)
(countstart == countend) ? vid : recursive(vid, anfang, countstart+1, countend)
}
function zeitraster(clip clip,int n)
{
y = selectevery(clip,anzframes,0)
y = crop(y,(n+0)*streifenbreite, 0, streifenbreite,0)
z = selectevery(clip,anzframes,1)
z = crop(z,(n+1)*streifenbreite, 0, streifenbreite,0)
return (zeitrecur(StackHorizontal(y,z), clip, 2, anzframes, n))
}
function zeitrecur(clip todo,clip vid , int countstart, int countend,int n)
{
Rec_running = "z = selectevery(vid,anzframes,countstart)
z = crop(z,(n+countstart)*streifenbreite, 0, streifenbreite,0)
todo = StackHorizontal(todo,z)"
Rec_end = "#return maske"
(countstart == countend) ? eval(Rec_end) : eval(Rec_running)
(countstart == countend) ? todo : zeitrecur(todo, vid, countstart+1, countend, n)
}
Display More
und das kommt dabei heraus:
[Blocked Image: http://img23.imageshack.us/img23/2537/raster.png]
führt man das folgende Raster über das Bild:
[Blocked Image: http://img407.imageshack.us/img407/7756/maske.png]
entsteht die Bewegung:
[Blocked Image: http://img301.imageshack.us/img301/9176/animiert.gif]
die Rastermaske wandert via Overlay über das statische Bild, so kann man sich ein Bild davon machen, wie das ganze ausssieht, wenn man es ausdruckt.
Das Skript ist durch die Schleifen völlig universell geworden, man kann also auch nur 2 Bilder (quasi vertikales Interlacing) nehmen oder wie hier im Beispiel 6, jenseits der 8 sinkt die effektive Auflösung und es wird immer unansehlicher.
Im Skript ist aussderm noch eine Schleife, die einen String Buchstabe für Buchstabe, Frame für Frame gross ins Quellvideo einbindet, das Ergebniss sieht interessant aus.
....cya