Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: Pienelokuvani runsasyleisöinen ensi-ilta ;)

PetriKeckman [29.06.2022 07:22:58]

#

Alla selostus siitä, kuinka tein tämän videon: https://youtu.be/gzhp6vGv8-0

Trikkianimaatio näyttää muuten melko aidolta, mutta pirun paikoilleen jämähtäneitä katsojat ovat - ehkä he ovat elokuvan mahtavuudesta niin hämillään! Tosin yksi kehtaa tuijottaa vaan kännykkäänsä. Suotakoon se hänelle anteeksi, jos hän katsoo videoitani Youtubesta.

Aluksi tein 600 kuvaa. Niillä siis tehdään valkokankaalta näkyvä pienelokuva. Lasken jokaisen pixelin RGB-väriarvon siten, että siihen vaikuttaa kuvan skaalaustekijä, jota jokaisen kuvan luonnin jälkeen hieman kasvatetaan - näin jokaisesta kuvasta tulee hieman erilainen.

rebol[]
plot: copy[] ;Grafiikkablockin alustus
print "Odota"
maxx: 500
maxy: 500
main: layout [
	panel: box (as-pair maxx maxy) white effect reduce ['draw plot]
]
kuva: copy/part skip to-image main 20x20 (as-pair maxx maxy) ;otetaan
;typerät 20 pixeliä harmaat reunat pois, mitkä REBOL-laittaa
kuvaindeksiapu: 0.15 ;skaalaustekijä. Sitä kasvatetaan joka kierroksella,
;jolloin saadaan hieman erilaisia frameja
for kuvaindeksi 1 600 1 [ ; tuotetaan 600 kuvaa
	for x 0 (maxx - 1) 1 [
		for y 0 (maxy - 1) 1 [
			xp: x * kuvaindeksiapu
			yp: y * kuvaindeksiapu
			r: x * cosine yp ;lasketaan värin RGB-arvot
			g: y * sine xp
			b: (xp  * yp) * cosine (xp + yp)
			väri: to-tuple compose [(to-integer r) (to-integer g) (to-integer b)]
			poke kuva (as-pair x y) väri
		]
	]
	save/png to-file rejoin ["frame" kuvaindeksi ".png"] kuva
	kuvaindeksiapu: kuvaindeksiapu + 0.005
	print kuvaindeksi
]
halt

Jotta animaatio toistaisi itseään kopioin kuvat 600:sta 1:een kuviksi 601...1200 eli kuva 1200 on sama kuin kuva 1. Näin animaatio "pyörii" ts. toistaa itseään (no, näin ei nyt ihan käy luodussa .avi videossa, mutta tein alunperin samalla tekniikalla .gif animaation, jonka halusin luuppaavan).

rebol[]
tdsto: 601
for i 600 1 (-1) [
	kuva: load to-file rejoin ["frame" i ".png"]
	save/png to-file rejoin ["frame" tdsto ".png"] kuva
    tdsto: tdsto + 1
]
halt

Kun 2*600 erilaista kuvaa oli tehty asetin ne tähän kuvaan valkokankaan kohdalle:

https://petke.info/elokuvasali.jpg

rebol[]
taustakuva: load %elokuvasali.jpg ;valokuva teatterisalista
maxx: taustakuva/size/x
maxy: taustakuva/size/y
for i 1 1200 1 [ ; sijoitetaan animaatiokuvat valkokankaalle
	plot: copy[]
	kuva2: load to-file rejoin ["frame" i ".png"]
	append plot compose [
		image (taustakuva)
		image 159x218 604x222 610x449 176x492 (kuva2)
	]
	main: layout [
	panel1: box (as-pair (maxx) (maxy)) white effect reduce ['draw plot]
	]
	kuva3: copy/part skip to-image main 20x20 (as-pair maxx maxy)
	save/png to-file rejoin ["elokuva" i ".png"] kuva3
	print i
]
halt

Lopuksi tein videon MakeAvi ohjelmalla. MakeAvi ohjelman codecit ovat melko vanhoja. Parhaimmaksi olen niistä todennut listan ensimmäisen "Cinepak codec by Radius". Se tekee tosin frameista videon tosi hitaasti :(

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta