Ubuntu Suomen keskustelualueet

Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: LittleLion - 25.11.05 - klo:16.01

Otsikko: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 25.11.05 - klo:16.01
Törmäsin tuossa kerran ongelmaan, koneella pari sataa digikuvaa eikä ollut mitään tietoa milloin mikäkin oli otettu. Ja kaiken lisäksi vielä usealla erimerkkisellä kameralla otettuja kuvia.

Kun rupesin asiaa selvittämään huomasin, että digikamera tallentaa kuvien mukaan EXIF-tagin josta näkee milloin kuvat on otettu. Niinpä tein perl-skriptin joka nimeää nuo kuvat päivämäärän mukaiseen järjestykseen. Ajattelin laittaa skriptin tännekkin, jos siitä olisi jollekkin muullekkin hyötyä.

Skripti tarvitsee toimiakseen perl-base ja universestä löytyvän exif paketit.

Koodia: [Valitse]
#!/usr/bin/perl
# Digikuvien nimeäminen EXIF tiedon päivämäärän mukaan.
#
# 2005 LittleLion
# Lisence http://www.gnu.org/licenses/gpl.txt

$movefolders=1; # Siirretäänkö tiedostot päivämäärän mukaisiin kansioihin
$images="*.JPG *.JPEG *.jpg *.jpeg"; # Etsittävät tiedostotyypit (huomaa kirjainkoko)
$imgfolder="images"; # Kansio josta kuvat löytyvät

#### Varsinainen koodi alkaa #####
@names=`exif $imgfolder/$images`;
@files=`cd $imgfolder && ls $images 2> /dev/null`;
$y=0;
# Luetaan rivit taulukosta
for ($i=0; $i < @names.''; $i++) {

  # Etsitään rivi josta löytyy kellon aika tiedot
  if ($names[$i] =~ s/^Date and Time \(origi\|//) {
    $names[$i] =~ s/ /:/;
    $names[$i] =~ s/ //g;
    $names[$i] =~ s/\n//;
   
    # Pätkitään päivämäärä ja kello aika osiin.
    @fields = split /:/, $names[$i];

    # Kootaan tiedostonimi
    # field muuttujan rakenne:
    #   0           1           2      3        4           5
    # vuosi kuukausi päivä tunti minuutti sekuntti
    $filenames[$y] = "$fields[0]-$fields[1]-$fields[2]_$fields[3]-$fields[4]-$fields[5].jpg\n"; # Tiedostojen nimeäminen
    $day[$y] = "$fields[0]-$fields[1]-$fields[2]"; # Kansioiden nimeäminen
    $y++;

  }
}

if (@filenames.'' != @files.'') {
  print "Päivämäärien ja tiedostojen määrä ei täsmää. Lopetetaan...\n";
  exit 1;
}

chdir $imgfolder;
for ($i=0; $i < @filenames.''; $i++) {
  $files[$i] =~ s/\n//;

  if ($movefolders == 1) {
    mkdir $day[$i] || die "Kansiota ei voitu luoda";
    `mv $files[$i] $day[$i]/$filenames[$i]`; # Nimetään tiedostot uudelleen ja siirretään ne kansioihinsa :D
  }
  else {
    `mv $files[$i] $filenames[$i]`; # Nimetään tiedostot uudelleen :D
  }
}

Kommentteja ja parannusehdotuksia otetaan vastaan. Toivottavasti jollekkin on tästä hyötyä.

EDIT: Lisätty mahdollisuus päivämäärien mukaiseen kansiointiin.

EDIT2:
Tiedossa olevat bugit:
1. Jos kuva kansiossa on kuvia, joissa ei ole EXIF-tagia tulee erroria.
2. Jos kuva kansiossa on useita kuvia, jotka on otettu samana päivänä sekunnilleen samaan aikaan ne häviävät tämän skriptin ajettaessa. (esim kopiot samasta kuvasta tai alkuperäinen ja muokattu versio samasta kuvasta) Kansioon jää kuva joka on aakkosjärjestyksessä jälkimmäisenä.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 25.11.05 - klo:16.30
no ekaks tulee mieleen että jos se osais pistää ne kansioihin sen exif tiedon mukaan eikä tarvitsisi aina muistella mikä sen tiedoston nimi olikaan ai niin se oli 20051010163206.jpg kun esim IMG_1547.JPG on paljon helpompi muistaa.  :-\ :)
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 25.11.05 - klo:16.37
no ekaks tulee mieleen että jos se osais pistää ne kansioihin sen exif tiedon mukaan eikä tarvitsisi aina muistella mikä sen tiedoston nimi olikaan ai niin se oli 20051010163206.jpg kun esim IMG_1547.JPG on paljon helpompi muistaa.  :-\ :)

Eli joka päivälle oma kansio vai?

Ja tuohan palauttaa nyt tiedostojen nimet muodossa:
2005-08-18_19-23-02.jpg

Eli tuo on kyllä aika helppo katsoa milloin ne on luotu.
Itse nimittäin haluan, että jonkun tietyn reissun kuvat ovat samassa kasassa. Ja jos muitan päivämäärät milloin kyseinen reissu oli on tuosta aika helppo nostella omiin kansioihinsa.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 25.11.05 - klo:16.42
ainakin kun canonin vintoosa ohjelma oli niin se teki joka päivälle oman kansion ja pistin ne kuvat oikeisiin kansioihin.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 25.11.05 - klo:16.48
ainakin kun canonin vintoosa ohjelma oli niin se teki joka päivälle oman kansion ja pistin ne kuvat oikeisiin kansioihin.

Itse en sellaista arvosta vaan haluan, että aina yhden reissun kuvat ovat yhdessä kansiossa. Kun nuo kuvat on nimetty noin niin vaikka kansioon laittaisi monellakin kameralla otettuja kuvia näkyvät ne oikeassa järjestyksessä. (olettaen tietysti, että kameroiden kellot ovat oleet oikeassa ajassa)
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 25.11.05 - klo:17.24
ok!
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 25.11.05 - klo:17.51
ok!

Okei, koska sinä tuota kaipasit ja koska voi olla jollekkin muillekkin hyötyä ehkä joskus jopa itselleni niin tein tuohon vaihtoehdon, että voi valita kansioidaanko päivämäärän mukaan vai ei, että ollos hyvä vaan. ;D
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 25.11.05 - klo:20.13
no ei sun ois välttämättä tarvinnu vaivautua.  ;D
niin ja kiitti!
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 25.11.05 - klo:20.27
no ei sun ois välttämättä tarvinnu vaivautua.  ;D
niin ja kiitti!

No eipä mitään. Onpahan joku muukin testaamassa tuota ja kertomassa jos jotain bugeja ilmaantuu.
Joko kokeilit? Toimiiko niin kuin halusit?
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 25.11.05 - klo:20.33
En saa jostain syystä toimii. sanoo vaan toin jutun: Päivämäärien ja tiedostojen määrä ei täsmää. Lopetetaan...
Kamerani exif versio on 2.2 jos vaikuttaa asiaan.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 25.11.05 - klo:21.30
En saa jostain syystä toimii. sanoo vaan toin jutun: Päivämäärien ja tiedostojen määrä ei täsmää. Lopetetaan...
Kamerani exif versio on 2.2 jos vaikuttaa asiaan.
hmm. Kokeiles tuolla kuva kansiossa komento:
exif kuva.jpg ja etsi sieltä päivämäärää koskeva rivi. (jostakin digikamerallasi otetusta kuvasta)

Itselläni se löytyy kaksi ne näyttää tältä:
Date and Time (origi|2005:08:08 13:40:00
Date and Time (digit|2005:08:08 13:40:00

EDIT: exif versio 2.2 mullakin on käytössä joten ei se siitä ole kiinni.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 25.11.05 - klo:21.52
tommonen voiskohan se olla muusta kiinni kuin tosta?
Koodia: [Valitse]
Date and Time (origi|2005:10:20 10:52:00
Date and Time (digit|2005:10:20 10:52:00
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 25.11.05 - klo:22.07
tommonen voiskohan se olla muusta kiinni kuin tosta?
Koodia: [Valitse]
Date and Time (origi|2005:10:20 10:52:00
Date and Time (digit|2005:10:20 10:52:00

hmm. paha sanoa. tekasin pikaisesti tuollaisen debuggaus skiptin kerroppa mitä se tulostaa:

EDIT: Eihän sulla ole siellä kuva kansiossa jonkun vanhan kameran kuvia tai muuten vain käsiteltyjä niin, että kuvasta on lähtenyt toi exif-tagi kävelemään. Toi on sen verran yksin kertainen sktipti, ettei se ymmärrä sellaista.

EDIT2: debuggaus skripti poistettu.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 26.11.05 - klo:12.21
nonii onnistu sille edelliselläkin skriptillä kun se ei hyväksynyt koko polkua vaan tarttes vaan sen kansion nimen niinkuin siinä lukikin! xD homma hoidossa. kiitos!
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 26.11.05 - klo:13.55
nonii onnistu sille edelliselläkin skriptillä kun se ei hyväksynyt koko polkua vaan tarttes vaan sen kansion nimen niinkuin siinä lukikin! xD homma hoidossa. kiitos!
Siis täh? Ei hyväksynyt koko polkua? Tarkoitatko esim: /kuvia itselläni ainakin toimii.

Tajusin juuri äsken sellaisen niksin, että jos laittaa tuohon kansion poluksi: $ARGV[0] siis näin: $imgfolder="$ARGV[0]";
niin sen jälkeen se osaa lukea tuon polun komentoriviltä esim: ./imagerename.pl /kuvia jossa tuo imagerename on skriptin nimi ja /kuvia kansio jonka kuvat nimetään.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 26.11.05 - klo:14.29
koko polkua juurta myöten siis ei hyväksyny mutta eipä se haittaakan kun sen tietää
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 26.11.05 - klo:14.41
koko polkua juurta myöten siis ei hyväksyny mutta eipä se haittaakan kun sen tietää

Ai jaa. Kyl mul toimii. Voithan kokeilla ottaa ton uudestaan itelles jos sul ei satu olemaan viimeinen versio, kun oon jonkun verran tehyt korjauksia tuohon. Mut nyt täällä foorumilla on uusin versio.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: Timo Jyrinki - 21.12.05 - klo:10.18
EXIF-aiheeseen liittyen, onko joku tehnyt esim. sellaista skriptiä jolla kaikki EFIX-tietojen "Orientation"-kentät yksinkertaisesti pyyhittäisiin? Huomasin tuossa näet, että nyt kun olen gThumb:lla kääntänyt digikuvani kaikki niin että ne ovat oikein päin, niin esim. KDE:n oletuskuvakatselimet heittääkin ne aivan väärin päin :) Ilmeisesti gThumb ei välitä tästä EXIF-orientaatiosta mitään, ja taas KDE-ohjelmat välittää kierrättäen kuvaa ilmeisesti niin kuten kamera on alunperin käskenyt.

En myöskään KDE:sta tällöin löytänyt vipua, jolla tuon saisi pois. Olen kyllä aiemminkin ollut sitä mieltä, että se orientaatiotagi ei oikein toimi, parempi vain käännellä fyysisesti kun kerran jpg-dataa voi häviöttömästi kääntää 90 asteen kulmissa.
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: mgronber - 22.12.05 - klo:15.30
EXIF-aiheeseen liittyen, onko joku tehnyt esim. sellaista skriptiä jolla kaikki EFIX-tietojen "Orientation"-kentät yksinkertaisesti pyyhittäisiin?

Koodia: [Valitse]
$ jhead -norot *.jpg
Jos jhead ei ole asennettu niin se löytyy samalla nimellä (k)ubuntun paketinhallinnasta (breezy: universe).
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: JPK1990 - 22.12.05 - klo:17.13
miten saisin tämän koodin ainoastaan siirtämään kuvat?
Otsikko: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: LittleLion - 26.12.05 - klo:17.47
miten saisin tämän koodin ainoastaan siirtämään kuvat?

Pikku muutoksella koodiin. Etsi rivi:
Koodia: [Valitse]
`mv $files[$i] $day[$i]/$filenames[$i]`; # Nimetään tiedostot uudelleen ja siirretään ne kansioihinsa :Dja muuta se muotoon:
Koodia: [Valitse]
`mv $files[$i] $day[$i]/`; # Siirretään tiedostot :D
Otsikko: Vs: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: Bysmyyr - 11.06.08 - klo:11.41
Osaisko joku korjata tosta sen samallasekunillakuvia bugin. Muuten joudun kierrättämään kaikki winkun kautta, mikä ei ole kovin kätevää.
Otsikko: Vs: Re: Digikuvien nimeäminen EXIF tiedon mukaan.
Kirjoitti: Mistofelees - 23.06.08 - klo:10.49
ainakin kun canonin vintoosa ohjelma oli niin se teki joka päivälle oman kansion ja pistin ne kuvat oikeisiin kansioihin.

Itse en sellaista arvosta vaan haluan, että aina yhden reissun kuvat ovat yhdessä kansiossa. Kun nuo kuvat on nimetty noin niin vaikka kansioon laittaisi monellakin kameralla otettuja kuvia näkyvät ne oikeassa järjestyksessä. (olettaen tietysti, että kameroiden kellot ovat oleet oikeassa ajassa)

Meidän taloudessamme on päädytty päivämäärällä leimattujen alikansioiden järjestelmään. Ylimpänä tasona on '/documentit', '/kuvat', sitten '/2006', '/2007', '/2008'... Seuraavalla tasolla mennään karkeasti aihepiireittäin: /Pasi, /Merja.. /Vene, /Kissa, /omakoti, /autot. Seuraavalla tasolla taas tarkennetaan. Esim /documentti/kuvat/Veneet -hakemiston alla on /kartat, /rakenteet, /matkat.

Serverissä oleva materiaali on ainoastaan arkisto, josta tehdään automaattinen varmuuskopio. Varsinaiset kollaashit rakennetaan työasemille.

Järjestelmän tukena on molemmilla servereillä itsetehty scripti, jolla saa kuviin myös tekstit:
http://ptm2.cc.utu.fi/~ptmusta/kuvat/
Kuvien nimiä ei koskaan vaihdeta (Eikä enää koskaan osteta Kodakin kameroita, joissa ei nimen etukirjainta saa vaihdettua)
Kameroiden mukana tulevia ohjelmia ei käytetä. ( Eikä osteta Canonin kameroita, joista kuvia ei saa siirrettyä ilman heidän omia ohjelmiaan)
Kameran kello saa käydä omaa aikaansa, kunhan saman talletuskerran sisällä kellonajat ovat järjestyksessä.