Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Terveisiä elokuva-alalta

PetriKeckman [19.11.2024 01:43:20]

#

Koodailu on joskus melko yksinäistä puuhaa - ainakin, jos koodaa yksikseen. Siksi oli erityisen miellyttävää tehdä yhteistyötä öljyvärimaalari Milla Isomäen kanssa. Minula on 34 kpl valokuvia hänen tauluistaan. Halusin keksiä eri animaation jokaiselle tauluvalokuvalle. Tuotoksena tämä animaatio:


https://youtu.be/-bjs3GqQeHs

Ei se tosin vielä lopullisessa kuosissaan ole. Ensi vuoden Projio media- ja valotaidetapahtumaan on melkein vuosi aikaa, eli on tässä aikaa parantaa sitä.

Sen soundit sain aikaiseksi siten, että latasin ilmaisesta pixabay kirjastosta 36 kpl hyvin lyhkäsiä syntsan soundeja. Arvoin niitä 500 kpl jonoon, sitten toiset 500 ja kolmannet ja laitoin nämä kolme ääniraitaa (jotka sain aikaiseksi ffmpeg ohjelmalla) Audacity äänieditorissa päällekkäin. Jokainen animaatio kestää 20 sekuntia ja sen jälkeen näytetään taulusta selkeää kuvaa 5 sek. Samalla näytetään taulun nimi. Tämän sain aikaiseksi omalla REBOL-kielisellä ohjelmalla, joka tuotti .srt eli tekstitystiedoston, joka oli muotoa:

1
00:00:00,000 --> 00:00:00,001


2
00:00:20,000 --> 00:00:25,000
Hukkummassa

3
00:00:45,000 --> 00:00:50,000
Talvella

4
00:01:10,000 --> 00:01:15,000
Puupää

5
00:01:35,000 --> 00:01:40,000
Niskaan hengittäminen

6
00:02:00,000 --> 00:02:05,000
Solbo

Jos ihmettelette, miksi minulla on ensimmäisenä teksityksenä pelkkä tyhjä rivi, niin se johtuu siitä, että VSDC editorin tekstitys toiminto kertakaikkiaan jättää ensimmäisen tekstityksen noteeraamatta.

Videon efektit sain musan tahtiin heilumaan VSDC editorin Edit the Beat toiminnolla. Kuten ehkä tarkkasilmäiset huomanette, niin videossa vaihdetaan 5 sekunnin välein efektiä. Vaati vähän kikkailua, että tein molemmat efektit koko videolle ja paloittelin ne 5 sekunnin pätkiin, joista joka toinen oli toista ja joka toinen toista, paitsi jos mod järjestysluku = 5, jolloin kyseessä oli selkeä kuva, jossa oli taulun nimi, niin sillä ei saanut olla minkäänlaista efektiä.

Se siitä proggiksesta. Nyt on valmisteilla toinen. Tunnin elokuva. Koska minulla on ne 34 erilaista kuville tuottavaa animaatiota ja lisäksi ohjelma, jolla voin tuottaa loputtomasti erilaisia kuvia, joista 300 esimerkkikuvaa on tuolla:

https://petke.info/uus/points.html

Aion siis tehdä kuvan ja arpoa sille animaation - tarkemmin sanottuna minulla on lista, missä kahden saman animaation etäisyys éi saa olla pienempi kuin 22 kpl, jotta ei tulisi liian nopeasti toistoa eri animaatioiden välillä. Sen listan tuottaminen oli mielenkiintoinen ohjelmointihaaste. ChatGPT:kään ei auttanut yhtään, vaan alkoi sekoilemaan täysin. Oli itse koodattava tällainen ohjelma:

REBOL []
koodeja: 34 ; Eri koodien määrä 34
etäisyys: 22 ; Minimi etäisyys saman animaation välillä
animaatioita: 144 ; Animaatioiden määrä 144 tunnin elokuvaan
valmiit: copy [] ; Lista koodeille 1...34
random/seed now/precise
; laitetaan ensin  valmiit taulukkoon 144 satunnaista koodin arvoa
valmiit: copy[]
for i 1 animaatioita 1 [
    append valmiit random koodeja
]
;aletaan tarkistamaan valmiit taulukkom kunnes se kelpaa...
print "wait"
until [
	pieninetäisyys: 9999 ;tutkitaan niin kauan kunnes taulukosta löytyvä pienin etäisyys >= etäisyys
	i: 1 ; aloitetaan tarkistus ensimäisestä koodista
	until [
		koodi1: valmiit/(i)
		;taaksepän tarkistus
		indeksi: i - 1
		if indeksi > 1 [
			until [
				if koodi1 = valmiit/(indeksi) [ ;löytyi sama koodi
					et: i - indeksi
					if et < pieninetäisyys [pieninetäisyys: et]
					if et < etäisyys [valmiit/(indeksi): random koodeja]
				]
				indeksi: indeksi - 1
				(indeksi = (i - etäisyys)) or (indeksi <= 1)
			]
		]
		;eteenpäin tarkistus
		indeksi: i + 1
		if indeksi < animaatioita [
			until [
				if koodi1 = valmiit/(indeksi) [
					et: indeksi - i
					if et < pieninetäisyys [pieninetäisyys: et]
					if et < etäisyys [valmiit/(indeksi): random koodeja]
				]
				indeksi: indeksi + 1
				(indeksi > (i + etäisyys)) or (indeksi >= animaatioita)
			]
		]
		i: i + 1
		i > animaatioita
	]
	pieninetäisyys >= etäisyys
]
print etäisyys
probe valmiit
halt

Aivan samoin kuin Milla Isomäen öljyväritaulujen kuvista näytetään 5 sekuntia selkeää kuvaa ja taulun nimeä, aion näyttää 5 sek kuvan nimeä. Kuvan nimen tuotan siten, että minulla on 50 adjektiivia ja 50 substantiivia. Erilaisia nimiä on siis 2500 kpl. Mutta tiedättekös mitä? Jos arpoo vain sattumalta adjektiivi ja substantiivipareja, niin todennäköisyys, että joillekin kahdelle eri taulule tulee sama nimi, kun tauluja on 144 kpl on noin 98.5%! On siis tarkistettava, että kuviennimet listaan kun laitetaan uusi nimi, ettei se jo ole siellä.

PetriKeckman [21.11.2024 20:20:23]

#

Lähettivät minulle äsken University of Utah & College of Charleston:sta kyselylomakkeen koskien taidettani! Halusivat tietää, mistä olen oppini saanut ja mitä ohjelmia käytän. Suunnittelevat sinne jotain "Art and Computing" ohjelmaa.

Enhän minä mitään ohjelmia käytä kuin omia REBOL-ohjelmiani ja oppini sen käyttöön olen saanut harrastuksistani. Toki Helsingin yliopistossa 80-luvulla opiskelin muita kieliä ja kaikissa lauseohjelmoinin kielissähän on samoja piirteitä, mutta kaikkea muuta siellä Pascal kielellä ohjelmoitiin kuin taidetta.

Niin! Ehkäpä jopa nimeni mainitaan Yhdysvaltalaisessa yliopistossa esimerkkinä siitä, kuinka taidetta tehdään! Se olisi hieno tunnustus! Hienoa olisi, jos professorit tai opiskelijat keskustelisivat luennolla:

"Ja tässä on esimerkki suomalaisesta taiteilijasta, Petri Keckmanista, joka käyttää REBOL-ohjelmointikieltä luodakseen taidetta. Hänen työnsä on osoitus siitä, miten omistautuminen ja luovuus voivat yhdistää teknologian ja taiteen täysin ainutlaatuisella tavalla." 😀

PetriKeckman [22.11.2024 17:46:14]

#

Haluaisin valaista, kuinka tein nämä soundit:

https://petke.info/syntsat1.mp3

Ne syntyivät minun, REBOL:in ja ffmpeg ohjelman yhteistyöllä. Ja toki kaikkien niiden, jotka ilmaisia syntsasoundeja ovat pixabayhin ladanneet:

https://pixabay.com/fi/sound-effects/

Tein syntsa soundi teoksen elokuvaan, mutta olen kokeillut myös viulun, sellon ja pianon soundeja. Niillä soundeilla saa eräänlaista "Kamarimusiikkijazzia" aikaiseksi:

https://petke.info/KamarimusiikkiJazzia.mp3


Kun kaikki erilaiset ladatut lyhyet syntsasoundit 51 kpl olivat yhdessä kansiossa, täytyi ne ensiksi nimetä 1.mp3, 2.mp3, ..., 51.mp3 sen tein tällä ohjelmalla:

rebol[]
substr: func [string start length][
  copy/part at string start length
]
rebol[]
hak: read %/E/Projio/Musa/
probe hak
numero: 0
foreach tdsto hak [
	if find tdsto ".mp3" [
		print [numero tdsto]
		numero: numero + 1
		rename to-file tdsto to-file rejoin [numero ".mp3"]
	]
]
halt

Sitten ne täytyi muuttaa .wav tyyppisiksi, koska olen huomannut, että kun .mp3 tyyppisiä yhdistää, niin tulee kauheita häiriöitä ja säröjä joskus. Tämä ohjelma:

rebol[]
for i 1 51  1 [
print rejoin ["ffmpeg -i " i ".mp3 " i ".wav"]
]
halt

printtaa käskyt, jotka copy/pastaan käsky.cmd scriptiin - toki olisin voinut pistää käskyt tulostumaan suoraan .cmd tiedostoon, mutta en nyt jaksanut.

Sitten arvon järjestyksen 2000:lle soundin pätkälle 51:stä ja tuotan 5:lle raidalla listan:

rebol[]
emit: func [code] [repend teksti code] ;kerätään tekstiä teksti muuttujaan
hipsu: to-char 39
newline: to-char 13
;ffmpeg -f concat -safe 0 -i list1.txt -c copy syntsat1.wav
random/seed now/precise
for raita 1 5 1 [
	teksti: make string! 100000 ;luulisi riittävän 100 tuhatta merkkiä tiedostolle
	for i 1 2000 1 [
		emit ["file " hipsu  (random 51) ".wav" hipsu newline]
	]
	write to-file rejoin ["list" raita ".txt"] teksti
]
halt

Tuon ohjelman ajon jälkeen minulla on viisi listaa, joissa ovat arvoittuina sattumanvaraisissa järjestyksissä soundit. Sen jälkeen käyn ajamassa käskyriviltä käskyt:

ffmpeg -f concat -safe 0 -i list1.txt -c copy syntsat1.wav
ffmpeg -f concat -safe 0 -i list2.txt -c copy syntsat2.wav
.
.
.
ffmpeg -f concat -safe 0 -i list5.txt -c copy syntsat5.wav

(tämänkin olisi tietysti voinut automatisoida, mutta ei kaikkea tarvitse)

That's it! Nyt minulla oli viisi raitaa, jotka taisivat olla jopa noin kahden tunnin pituisia, mutta latasin niistä kolme Audacityyn ja lyhensin tuntiin.

PetriKeckman [23.11.2024 18:30:51]

#

Maistiainen on jo saatavilla tunnin elokuvastani.

https://youtu.be/nzUtpWAiQ5U

Huonolla tuurilla se alkoi alkeellisella 3D-kuutio animaatiolla - näyttävämpiäkin animaatioita on. Vielä huonompi tuuri oli nimessä: "Rauhallinen väri". Poistin mokoman adjektiivin taulukosta, kun kuvani ovat riemun kirjavia.

En tiedä kiinnostaako ketään mun tunnin elokuva proggis, mutta kun tässä on aikaa frameja tuottaessani, niin ajattelin kertoa hieman tarkemmin mitä olen täällä tekemässä.

Olen juuri nyt tätä kirjoittaessani tuottanut framen numero 98512 eli 91.2% frameista on tuotettu. Jotta ei tarvitsisi haukkaa liian iso palaa kakku kerralla niin siirrän projektissa aina 4000 kpl frameja manuaalisesti alikansioihin, jotka tein:

REBOL[]
for k 1 27 1 [
    make-dir to-file rejoin ["_kansio" k]
]
halt

Teen alikansiossa animaation ffmpeg käskyillä. Esimerkiksi tässä kansion 24 videon tekokäsky:

ffmpeg -framerate 30 -start_number 92001 -i kuva%d.png -c:v libx264 -r 30 24.mp4

Kun kaikki framet on tuotettu teen viidenlaiset elokuvat.

1) glass efektillä
2) flow efektillä
3) push efektillä
4) bokeh efektillä
5) ilman efektiä

Kaikkien efektien yhteydessä käytän VSDC editorin Edit the Beat toimintoa eli efektit tapahtuvat soundien tahtiin.

Sitten pätkin kaikki elokuvat 5 sekunnin pätkiin eri alikansioissa. Oleellinen osa ohjelmaa on tämä:

lista: read %/E/projio2025/videotbokeh/
sort lista
;jätä: 1 ;glass - poistetaan muut
;jätä: 2;flow
;jätä: 3 ;push
jätä: 4 ;bokeh
;jätä: 5 ;selkeä
i: 1
until [
	if not find lista/(i) ".r" [
		either i = jätä [
				print ["jätetään" i]
				jätä: jätä + 5
			][
			print ["deletoi " i]
			delete to-file rejoin [i ".mp4"]
		]
	]
	i: i + 1
	i > length? lista
]
halt

Jokainen elokuva on siis pätkitty 720 osaan (720 * 5 s = 1 tunti). Ja tuo yo. poisti bokeh-efektin kansiosta kaikki tarpeettomat videon pätkät.

Sitten vain siirrän joka kansiosta videon pätkät yhteen kansioon ja sieltä VSDC editoriin ja renderöin videon.

PetriKeckman [24.11.2024 15:10:36]

#

Koodissa, jolla framet tein on 2160 riviä: https://petke.info/code.html Kun julkaisen leffan englanninkielisillä kotisivullani, niin julkaisen samassa yhteydessä tämän selostuksen tekoprosessista: https://petke.info/how.html Teokseni tullee herättämään mielenkiintoa Atlannin Valtameren toisella puolen, jos kerran taiteeni ollaan jo huomioitu arvovaltaisessa vanhassa Utahin yliopistossa.

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta