Archive for Arvuti

Veel video loomisest

Eelmisel korral kirjutasin video loomisest, mille lähtematerjaliks oli hulk pilte. Kirjutan nüüd video loomisest uuesti – aga sel korral oli pilte palju rohkem.

Niisiis. alustame.

Algmaterjal: kaks kataloogi, kuhu kaks kaamerat tegid poole aasta jooksul iga minut ühe pildi. Pildid on samast objektist, aga erinevate nurkade all. Kaamerate piltidest tuleks kokku panna video. Pilte on kokku sadu tuhandeid (iga tund 60 pilti ja niimoodi septembrist oktoobrini (13 kuud): 60(pilti tunnis)x24(tundi päevas)x30(päeva kuus)x13(kuud)=561600 pilti ÜHE kaamera kohta). Tegelikult on see number ligilähedane, sest igas kuus ei ole 30 päeva ja aeg-ajalt oli ka häireid, nii et pilte ei saanud üle võrgu üles laadida. Piltide mõõtmed: 800x600px, ühe pildi maht ca 120kB.

Eesmärk: luua piltidest „kiirvideo“ objekti valmimise kohta.

Sammud eesmärgi saavutamiseks:

  1. Kopeerida vajalik hulk pilte kummagi kaamera algmaterjalide kataloogist töötlemiseks uude kataloogi. Arvestusega, et video tuleb 25 kaadrit sekundis, siis vajalike piltide arv sõltub loodava video pikkusest (iga minuti kohta 25×60=1500 pilti).
  2. Seejärel kleepida kaamerate pildid kokku nii, et kaks pilti oleks uuel pildil kõrvuti. Kui algsed pildid on mõõtudega 800x600px, siis kahest kokku pandud uus pilt peab olema mõõtudega 1600x600px (kõrgus jääb samaks, aga kaks korda laiem).
  3. Seejärel kokkukleebitud piltidest luua vajalik videofail ja lisada sinna heli.

On kaks kataloogipuud – kummlagi kaameral oma kataloogipuu. Pildid asuvad kataloogides nii, et üks aasta on üks kataloog, milles on alamkataloogid kuude kaupa. Iga kuu kataloogis on alamkataloogid kuupäevade kaupa, seal omakorda alamkataloogid tundide kaupa. Ühe tunni pildid asuvad samas kataloogis ning pildifailidel on nime algused samasugused kuni 11-nda sümbolini (faili nimes on kirjas aasta, kuu, päev, tund ja minut kahekohalisena, st AAKKPPHHMM; faili alguses on alati täht m). See pildifaili nimetamise põhimõte on läbiv kogu kataloogipuus. Niisiis, ühes kataloogis on 60 pildifaili. Kataloogipuus on aga neli taset alates tipust, kuid failinimed on ühe kataloogipuu piires kordumatud.

Näide ühe kataloogipuu kohta on alloleval pildil. Teine kataloogipuu on sarnase struktuuriga, vaid tipmine kataloog on teise nimega – lehtma.

Jupp ühest kataloogipuust

Kataloogipuu struktuurinäide

Vaja oli leida kummastki kataloogipuust samadel kellaaegadel tehtud pildid. Faile oli kummaski kataloogipuus 561600, kokku üle miljoni faili… Kuid kellaaega tähistas neli numbrit, mis asusid faili nimes kaheksandast kuni üheteistkümnenda positsioonini. See andis võimaluse luua kopeerimiseks vajalik reegel. Tegelikult polnud üldse vaja vaadata 11-st postitsioonist edasi, kus lõpud olid muutuvad. Minule vajaliku video jaoks piisas, kui ma võtsin igast päevast ca 10 kaadrit kindlatel kellaaegadel. Niisiis tuli mul teha ühe kataloogipuu kohta kümme kopeerimist – iga vajaliku kellaaja kohta tuli üks käsk. Kokku sai kakskümmend korda kopeerimist. Sihtkataloogid, kuhu kopeerida, tegin käsitsi enne valmis.

Käsk sai järgmine:

Selgitus:

  1. find . -name “???????0910*.*”
    Otsi faile, mille nimes oleks alates 8-ndast sümbolist antud konkreetsed numbrid. Need konkreetsed numbrid viitavad kellaajale, millal pilt tehti: näites on 0910 – pildid, mis on tehtud kell 9:10. Faili lõpp pole tegelikult enam oluline ja ilmselt võiks jätta ka lihtsalt tärni. Käsk „find“ töötab rekursiivselt, niisiis alustatakse parasjagu aktiivsest kataloogist (punkt tähistab aktiivset kataloogi) ja käiakse läbi kogu kataloogipuu.
  2. Käivita leitud failide kopeerimine (-exec cp) ja ära muuda failide ajatempleid (-p) ning kopeeri etteantud sihtkataloogi (-t /see/uus/kataloog/kuhu/kopeerida/lehtma/). Sihtkataloogi määratlust alustasin süsteemi juurkataloogist (kaldkriips / tähistab linux’is juurkataloogi), aga vajadusel saab ka määrata suhteline tee sihtkataloogini.
  3. Korda antud tegevust niikaua kuni leiad vastavaid faile: {} +
  4. Seda käsku tuli korrata iga soovitud kellaaja kohta, muutes vaid 8-ndast kuni 11-kohani asuvaid numbreid.

Minul tekkis kummassegi kataloogi (lehtma ja otikas) üle 5000 faili.

Siis tuli leida veel kataloogide sisu võrdlemise teel failid, milledele uutes loodud kataloogides polnud vastet teises kataloogis. Vastavust mitteomavad failid tuli teisest kataloogist kustutada. Asi oli selles, et kaamerad ei saanud alati täpselt samadel aegadel pilte tehtud – kas võrgu ülekoormatuse tõttu või mõnel muul juhuslikul põhjusel. Seetõttu tekkis kataloogides failide kellaaegades erinevusi. Minule oli aga väga oluline saada alati kaks pilti, mis on tehtud sama minuti sees. Erinevuse kindlaks tegemiseks ja kustutamiseks kasutasin linuxis käsurea skripti:

Selgitus:

  1. Kataloogi „otikas“ failide loetelu
  2. Võrdle seda loetelu kataloogis „lehtma“ olevata failide nimede esimese 11 sümboliga (arvuti alustab loendamist nullist, seetõttu 0:10, MITTE 1:11)
  3. Kui tulemus ei ole 0 (st failil vastavus puudub), siis anna sellest teada (echo…)
  4. Kustuta see fail kataloogist „otikas“ ära

Sama käsk tuli anda ka teise kataloogi suhtes.

Jäi veel mingi väike osa faile, mida see käsk ei suutnud üles leida ja kustutada, kuna osadel failidel oli mitu vastavust (skript leidis need, kus oli VÄHEMALT ÜKS vastavus, seega MITME vastavusega faile ei kustutatud. Need failid leidsime üles tabelarvutuse abil kasutades järgnevaid funktsioone:

lehtma otikas eraldus1 eraldus2 vordlus
m120909091001952.jpg m120909091045997.jpg =LEFT(A2;11) =LEFT(B2;11) =IF(C2=D2;1;-1)

Nende valemite tulemus oli selline:

lehtma otikas eraldus1 eraldus2 vordlus
m120909091001952.jpg m120909091045997.jpg m1209090910 m1209090910 1/-1

Nüüd eksportisin mitteklappivate failide nimed csv tekstifaili. Ja nüüd sain juba linuxis anda uuesti käsu, mille abil tekstifailis olevate failide nimed sai omakorda kustutada:

Failis „kustutada_otika_kataloogist.csv“ olid kustutamiseks mõeldud failide nimed.

Käsuga xargs saab luua käske, kasutades sisendina tekstifaili sisu.

Selle kohta leidus info siin: http://stackoverflow.com/questions/5142429/unix-how-to-delete-files-listed-in-a-file

Lõpptulemusena sain kaks kataloogi, kus sees oli võrdne arv pilte, mis pealegi on tehtud kõik samadel minutitel (kummaski kataloogis on igale pildile teises kataloogis samal ajal tehtud pildi näol vaste).

Veel oli vaja üle kontrollida, kas kõigi piltide mõõtmed ikka olid kindlalt samad. Kuna mul oli vaja pilte mõõtudega 800x600px, tuli leida, kas ei ole juhtumisi valedes mõõtudes pilte ja need tuli viia õigesse mõõtu. Valedes mõõtmetes pilte oli 531 (ühe kaamera esimeste kuude pildid olid liiga suured). Need viisin õigesse mõõtu programmiga phatch (http://photobatch.stani.be/).

Seejärel nimetasin mõlemas kataloogis kõik pildifailid ümber nii, et tekiks järjekord:

Selgitus:

Oluline osa on

– siin antakse käsk pildifaili ümbernimetamiseks. %06d määrab kasutatava numbrikohtade arvu, minul siis 6 numbrikohta.

Tuletame nüüd veelkord meelde: sadamas oli üleval kaks kaamerat, mis mõlemad tegid sünkroonis pilte. Kummagi kaamera pildifailid said eelpool näidatud viisil välja valitud ja õigetesse mõõtudesse viidud. Praeguseks on siis kummagi kaamera pidid eraldi kataloogides ja valmis edasiseks töötluseks.

Seejärel oli aga vajadus panna kaamerate pildid kokku üheks pildiks, et tekiks „laiekraanvideo“ – niimoodi sai näidata ühes kaadris poole laiemat ala. Selle tegevuse läheolukord oli järgmine:

Esimese kaamera pildid:
otikas/pilt_00001.jpg
otikas/pilt_00002.jpg
otikas/pilt_00003.jpg
otikas/pilt_00004.jpg
otikas/pilt_00005.jpg

Teise kaamera pildid:
lehtma/pilt_00001.jpg
lehtma/pilt_00002.jpg
lehtma/pilt_00003.jpg
lehtma/pilt_00004.jpg
lehtma/pilt_00005.jpg

ja nii edasi, kummaski kataloogis oli ca 5300 pilti.

Nüüd oli vaja lahendust, mis hakkaks järjest katalooge läbi käima ja võtma paarikaupa kataloogidest pilte ja neid kokku kõrvuti panema ning tulemust salvestama kolmandasse kataloogi. Selleks saab kasutada käsku „montage“ (ImageMagick’u käsureavahend), millele tuli lihtsalt ette anda loend õigel viisil. Selleks sai tehtud järgmine skript:

Peale seda käsku oli mul uus kataloog (kataloog3), kus oli 5300 pilti, mis olid valmis laiekraani video tegemiseks.

Ning siis programmiga ffmpeg sai piltidest video „kokku keevitatud“:

Video tegemise õige vahend on tegelikult avconv – ffmpeg on tegelikult juba vananenud vahend ja alles veel lihtsalt ühilduvuse mõttes. Tulevastes distributsioonides kaob see ära.

Tulemusvideot saab vaadata siin: http://www.youtube.com/watch?v=98AMX3YK2BA

Antud kirjelduses ei ole toodud muusika lisamist videofailile. Muusika lisasin valmis “tummfilmile” programmiga “OpenShot video editor”.

Kaamera kell oli vale…

Kaua pole bloginud – viimane sissekanne juba vaata ei kaks kuud tagasi. Siit järeldub, et ma olen vilets kirjutaja. Teadsin seda küll enne ka…

Sattus mu kätte üks kaamera, millega tegin mõned pildid. Kaamera polnud minu oma. Tavaline pisike digikas, Sony DSC-W220. Tegin pildid ära ja salvestasin omale arvutisse. Siis mõne aja pärast oli vaja need pildid panna ka internetti veebigalerisse. Ja siis pilte arvutis vaatama hakates selgus, et kaamera kell oli olnud täiesti vale ja kõik pildid olid saanud loomulikult külge vale pildistamise kuupäeva. Kuna ma ei tahtnud vale kuupäevaga pilte veebi panna – äkki mõni vaatab pildi EXIF andmeid ja need polegi õiged – siis hakkasin otsima vahendit, millega piltide kuupäev EXIF andmetes õigeks keerata. Leidsin – Linuxi jaoks muidugi – kaks vahendit, mis tundusid paljulubavad. Mõlemad kahjuks käsurea-vahendid, kuid kui õige käsk leitud, siis on ka käsurealt kasutatav vahend tegelikult väga mugav. Vahendite nimed: exiv2 ja exiftool. Mina lõpuks kasutasin vahendit exiftool, mis väga mõnusasti võimaldab manipuleerida digifoto EXIF-andmetga. Selle utiliidi kohta on kirjas nii: “ExifTool on platvormist sõltumatu Perli teek ja käsurea-vahend, mille abil on võimalik laia skaala failide meta-andmeid lugeda, kirjutada ja muuta.”

Minul oli vaja tuua pildistamise kuupäev 1 kuu, 29 päeva ja 58 minutit ettepoole (st varasemaks). Käsk, mis selle ära tegi, oli järgmine:

Väike selgitus ka:

“-DateTimeOriginal”: see mida muudetakse, pildi kuupäev
“-“-märk enne “=”-märki: aega tuleb nihutada ETTEPOOLE, st varasemaks. Kui seal oleks “+”-märk, siis tuleks nihutada hilisemaks.
“0:1:29 0:58:0”: 0 aastat, 1 kuu, 29 päeva, 0 tundi, 58 minutit, 0 sekundit
Ja lõpuks kataloogi nimi, milles olevate piltide EXIF-andmed muudetakse.

Kokkuvõtteks oli väga mugav terve kataloogitäie piltide EXIF-andmete muutmine. Kui alguses otsisin selle töö tegemiseks mingit graafilist vahendit, siis tagantjärgi leian, käsureavahend oli mugavamgi. Raskeim osa oli välja nuputada, kui palju aega nihutada vaja oli. Ja kui lugeda exiftool’i juhendeid, siis saab muuta peaaegu mida iganes.

HD video loomine

Täna sai mul valmis esimene omatehtud HD video. Tegemist oli lihtsalt katsetusega, et suurem hulk kõvakettale kogunenud pilte videoks teha. Pean tunnistama, et ma väga osav videotöötleja ei ole. Seetõttu läks õppimiseks, juhendite otsimiseks ning lugemiseks päris palju aega. Samuti tuli mul arvutile veidi tarkust juurde tõmmata, et video tegemine ikka hästi õnnestuks. Täna aga sai see proovitöö valmis ja seekord tulemus mind juba rahuldas. Kui keegi veel peaks sellist tööd tegema, siis siinkohal minu kogemused: ehk on sellest abi.

Algne olukord: kataloogis hunnik pilte, mis tehtud perioodilise ajavahemiku järel. Pildid nagu pildid ikka, sellised nagu nad kaamerast tulevad: 3246x2448px. Piltide nimed olid stiilis IMGP2353.JPG – pange tähele, kaamerad panevad piltidele sageli nimed SUURTE TÄHTEDEGA. Minule see ei meeldi, mina muudan piltide nimed ära väiketähelisteks. Kuna ma sageli pean asju üles panema veebi, ja kuna enamasti veebiserverid on mingid Linux’id või BSD’d, siis tasub teada, et seal tehakse suurtel ja väikestel tähtedel rangelt vahet. Ja et mitte meeles pidada, kas pildi nimi tuli nüüd suurte või väikeste tähtedega kirjutada, siis muudan ma alati KÕIK failide nimed ära väiketähelisteks.

Nii et esimese asjana nimetasin failid omale sobivalt ümber:

find -name ‘*.JPG’ | gawk ‘BEGIN{ a=0 }{ printf “mv %s img_%06d.jpg\n”, $0, a++ }’ | bash

Selle käsu tulemusel said mu failid nimeks img_000000.jpg, img_000001.jpg, img_000002.jpg jne kuni viimaseni. Selle käsu andmise juures on oluline, et ei oleks alamkatalooge (sest käsk “find” otsib rekursiivselt ka alamkataloogidest). Ja “%06d” määrab, mitu numbrikohta failide nimetamisel kasutatakse – minul oli siis kuus umbrikohta. Vajalik numbrikohtade arv sõltub sellest, kui palju pilte on vaja järjekorras ümber nimetada. kui on vaja 1000 pilt, siis peaks see olema “%05d”, kui aga on kümme pilti, siis piisab ka “%03d”. Mulle meeldib, et alati jääb alles alguse 0 – seepärast on mul alati numbrikohtade arv ühe võrra vajalikust suurem.

HD video on külgede suhtega 16:9, laiuseks on 1920px ja kõrguseks 1080px. See tähendab, et algsed pildid sellisel kujul video tegemiseks ei sobi, kuna külgede suhe on hoopis 3:4 ja ka mõõtmed pikslites on liiga suured. Niisiis esmalt peaks pildid viima õigesse mõõtu selliselt, et pildil olevate objektide proportsioonid jääks ikka paika. See tähendab, et ei saa lihtsalt näiteks pildi kõrgust vähendada, kuna sel juhul muutuksid kõik piltidel olevad objektid madalaks ja laiaks. Inimesed oleks siis lühikesed ja paksud – aga kes see ikka tahab lühike ja paks olla? Teiselt poolt tahaks kaadrist maha võtta nii vähe kui võimalik, mis seab omad piirid piltide lõikamisele.

Et leida kaadrist õiget kohta, kasutasin programmi Gimp, mille abil määrasin piltide hulgitöötlemiseks vajalikud lõikamise parameetrid. Parameetriteks on kaadri suurus ja lõikamise ülemise vasaku nurga asukoht. Õigete parameetrite leidmist näitas see juhend: https://www.auroralinux.net/cropping-multiple-images-the-same-way-short-tutorial/ (kahjuks on see leht maha võetud: Tarmo märkus 9. sept. 2022) – see juhend oli küll inglisekeelne.

Nüüd, kui õige kaadrist lõigatav osa on leitud, on aeg asuda pilte töötlema. Minu proovitöös oli 54 pilti, aga pilte võib olla ka 54000 näiteks… Piltide arvust sõltub loomulikult ka töötlemise aeg. Aga töötlemise aeg sõltub ka arvuti võimekusest. Igal juhul tasub suure piltide hulga korral arvestada, et töötlemine võib kesta tunde.

Mina kasutasin piltide lõikamiseks käsku “mogrify”, mis on Linux masinas olemas, kui on installeeritud pakett ImageMagick. Minul oli vajalik selline käsk:

mogrify -crop 3264×1836+0+343 *.jpg

Nagu näha, laiuse jätsin samaks, aga ülevalt lõikasin 323px välja ja uueks kõrguseks sai 1836px. Tulemusena tekkinud pildid olid aga ikka veel liiga suured: 3264x1836pg, aga vaja oli ju 1920x1080px.

Nüüd järgnes piltide skaleerimine. Määrata on vaja vaid laius, kõrgus skaleeritakse automaatselt proportsioone säilitades:

mogrify -resize 1920 *.jpg

Arvestada tuleb, et “mogrify -resize” käsk võtab kõige kauem aega. Nüüd olid mul valmis pildid ilusasti nimede järjekorras ja õiges mõõdus HD video jaoks.

Nüüd polnud enam vaja muud, kui leida õige käsk video tekitamiseks. Mina leidsin endale sobiva olevat sellise käsu:

ffmpeg -f image2 -i “img_%06d.jpg” -r 25 -s 1920×1080 -qscale 12 -an “output4.mov”

Siin ka programmile ffmpeg lisatud mõnede võtmete selgitused:
-i “img_%06d.jpg” – mllised pildid on programmi sisendiks
-r 25 – etteantud kaadrisagedus (25 kaadrit sekundis)
-s 1920×1080 – tulemueks saadava video laius ja kõrgus pikslites
-qscale 12 – siin kasutatakse inglise keeles terminit “quantization scale” – mida ma ei oska hästi eesti keeles väljendada. Sellest sõltub oluliselt saadava videopildi tihedus ja samuti ka tulemusfaili maht. Mida väiksem on see skaala, seda suurem on fail ja parem video.

Programmil ffmpeg on võtmeid palju. Kes inglise keelt loeb, siis pärism hea juhendi piltidest video tegemiseks leiab siit: http://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/image_sequence
Sobivaid võtmeid ja väärtusi kasutades saab ilmselt üsna igasuguseid videosid teha, ka koos audiorajaga, kui vaja. Põhjalikku juhendit ffmpeg kohta saab lugeda siit: http://ffmpeg.org/ffmpeg.html

Mina sain palju targemaks. Ja et meelest ei läheks, sai see nüüd siia ka kirja pandud. Kui kellelegi sellest kasu on, siis on veel topelt hea. Ah ja, lõpuks võib veel nimetada, et proovitöös olnud 54-st pildist mahuga kokku 48MB sai HD video, mille maht oli 6,5MB ja pikkus ca 2 sekundit.

Facebook’i fenomen

Ikka ja jälle kirjutab keegi midagi Facebook’ist. Kes ennustab suurt tulevikku, kes kiiremat või aeglasemat kadu. Tänane Aäripäev vahendab Ironfire Capitali asutaja ja analüütiku Eric Jacksoni arvamust, et vähem kui 10 aastaga on Facebook kui mitte kadunud, siis muutunud marginaalseks ettevõtmiseks. Nojah…

Facebook on üks fenomen küll. Alguse saanud tudengite ajaviitetegevusest, on see aja jooksul kasvanud suureks ettevõtmiseks. Tänaseks haldab kogu seda keskkonda eraõiguslik äriühing Facebook, Inc. Ja need, kes selle kunagi käima lükkasid, on rikkaks saanud. Tõenäoliselt siis, kui asjaga Harvardis algust tehti, ei arvanud tegijad ise ka, et Facemash’ist midagi taolist tuleb. Kuum või mitte…

Tänaseks on sellel suhtlusportaalil üle 900 miljoni aktiivse kasutaja (ilmselt on see küll kontode arv, tegelikke erinevaid isikuid võib siiski vähem olla), järelikult on ilmselt piisavalt kuum. Jah, õnneks ei ole see keskkond lihtsalt “Hot or not” värk. Kui Facebook oleks lihtsalt kellegi hindamise teed läinud, siis ilmselt pole sellest iial nii suure kasutajate arvuga keskkonda saanud. Inimesed kirjutavad siia igasuguseid asju: kus nad käisid, mida tegid, mida mõtlesid jne. Mis mind veidi murelikuks teeb, on tõsiasi, et Facebook on otsustanud kogutud info rahaks teha – küsimata, kas see kasutajatele ka meeldib. Hm, ja mulle ei maksa ka keegi dividende selle info pealt, mis mina Facebook’i pannud olen 🙁 Ilmselt küll olen minagi Facebook’i kontot luues nõustunud teatud reeglitega – aga ma pole neid reegleid isegi korralikult läbi lugenud. Nii et ikka ise süüdi. Ja nüüd on mu andmed võõras serveris võõraste inimeste kontrollida võõra riigi territooriumil. Kui nende andmetega – mis ma ise olen ju sinna üles pannud – otsustatakse midagi ette võtta, siis ma ei saa sinna midagi teha. Ja mida rohkem inimesed oma andmeid Facebook’i panevad, seda rohkem on Facebook, Inc. osanikel võimalust teenida ja seda kindlam on, et Facebook ei kao, vaid hoopis kasvab. Sest väärtus on just see info, mida mina ja sina sinna paneme – mitte keskkond iseenesest.

Ma ei tea, mis Facebook’ist saab. Võib olla tekib mingi tegija, kes teeb veel parema asja. Võib olla see tegija seljatab Facebook’i, võtab need 900 miljonit kasutajat üle ja me unustame Facebook’i ning jookseme uue tegija järele. Olgu kuidas on – mina arvan, et parem on võtta aega rohkem päriselus elamiseks, postitada vähem suhtlusportaalis ja rääkida rohkem silmast silma. Ja parem, kui minu privaatset infot liiga palju võõrastes serverites ei ole: parem karta kui kahetseda, nagu vanasõna ütleb. Mine tea, kus turul nad seda infot ühel päeval müüvad…

Blogi ja Facebook’i sidumine

Paar päeva tagasi installeerisin endale uuesti blogi. Just nimelt endale – ma ei kasuta võõrast serverit blogi pidamiseks, vaid ikka enda oma. Aga kes see ikka mu nurgatagusesse blogisse sattuma peaks? Kui ma tahan, et keegi seda märkaks, tuleb blogi siduda sotsiaalvõrgustikega. Niisiis sidusin selle Facebook’iga. Nüüd peaks see, mida ma blogisse kirjutan, olema nähtav ka Facebook’is minu lehel. Võimalik, et nüüd muutub mu Facebook’i leht veidi aktiivsemaks ka. On ainult üks asi, mida ma tahan veel lisaks selgeks saada: kuidas kirjutada blogisse nii, et see EI LÄHE kohe Facebook’i?