Kirjoittaja Aihe: Kuinka korjaan väärän linssin exif-tiedoissa? (Ratkaistu)  (Luettu 3485 kertaa)

Vika/fiba

  • Käyttäjä
  • Viestejä: 652
    • Profiili
Olen kuvannut Canonin objektiivilla ja Sonyn rungolla, välissä Sigman MC-11 -adapteri. Nyt exif-tietoihin tulee polttoväli ja valovoima oikein, mutta merkiksi vastaava Sony-objektiivi.
Sonyllahan tuo linssin malli ja merkki on exifissä epästandardissa paikassa, mutta niin on muillakin isoilla valmistajilla ja asia on kyllä yleisessä tiedossa.
Man exiv2 -sivun ohjeilla kokeilin: You can fine the location of the configuration file with the command:

Koodia: [Valitse]
exiv2 --verbose --version --grep config_path
exiv2 0.27.2
config_path=/home/minä/.exiv2
Tuossa sijainnissa ei ole tiedostoa .exiv2. Ajattelin, että voin sen tehdä tekstieditorilla, kun exiv2 sieltä katsoo. Siis tein sellaisen, sisällöltään: 679=TSE 24mm F3.5

Man-sivun mukaan yritin: You obtain the lensID for your camera with the command:
Koodia: [Valitse]
exiv2 -pv --grep lens/i /home/minä/Kuvat/kuva1.jpg
Tulos Sonyn kuvassa on hiukan erilainen kuin manuaalin esimerkkinä käytetty Nikonin tuloste.

Koodia: [Valitse]
$ exiv2 -pv --grep lens/i /home/minä/Kuvat/kuva1.jpg
0xb027 Sony2        LensID                      Long        1  679
0xa432 Photo        LensSpecification           Rational    4  240/10 240/10 35/10 35/10
0xa434 Photo        LensModel                   Ascii      17  DT 24mm F3.5 SAM

Käytin siis tuota LensID long 679 -numeroa edellä mainitussa .exiv2-tiedostossa. Tämä ei kuitenkaan toiminut, vaan edelleen tuo Sonyn lasi kummittelee. Mikä meni vikaan?


« Viimeksi muokattu: 02.08.22 - klo:09.15 kirjoittanut Vika/fiba »

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Vs: Kuinka korjaan väärän linssin exif-tiedoissa?
« Vastaus #1 : 02.08.22 - klo:01.59 »
.exiv2 -tiedoston linssikonfiguraatio vaikuttaa vain siihen, mitä exiv2 kertoo linssistä. Haluatko siis muuttaa ainoastaan exiv2:n tulostetta, ja jättää varsinaiset EXIF-tiedot alkuperäiseen muotoon?

Jos sen sijaan haluat muuttaa EXIF-tietoja kuvatiedostoissa, mitä kenttiä haluat vaihtaa ja mitä niissä pitäisi näkyä? Esimerkiksi LensModel-kenttään voi asettaa tuon TSE-linssin näin:

Koodia: [Valitse]
exiv2 -M "set Exif.Photo.LensModel Ascii TSE 24mm F3.5"  mo Kuvat/kuva1.jpg
Edit: korjattu typo esimerkkikomennossa
« Viimeksi muokattu: 02.08.22 - klo:13.13 kirjoittanut nm »

Vika/fiba

  • Käyttäjä
  • Viestejä: 652
    • Profiili
Vs: Kuinka korjaan väärän linssin exif-tiedoissa?
« Vastaus #2 : 02.08.22 - klo:09.14 »
Paljon kiitoksia!  ;D
Tuolla pitkään vaivannut ongelma ratkesi. Juuri tätä halusin.
Piti vain poistaa komennon lopusta ylimääräinen lainausmerkki, joka esti komennon toiminnan.

Postimies

  • Käyttäjä
  • Viestejä: 2619
    • Profiili
Uskaltaisiko raw-tiedostoa muutella jos on käyttänyt manuaalilasia, jossa ei sähköä? Noissa tulee jätettyä linssikorjaukset helposti pois ja vuosien jälkeen ei kyllä muista millä kuvattu.

Vika/fiba

  • Käyttäjä
  • Viestejä: 652
    • Profiili
Saattaisin uskaltaakin, koska exiv2 (exiftool) muuttaa vain kuvan metadataa: Exif, IPTC ja Xmp. Sen ei pitäisi vaikuttaa varsinaiseen kuvaan. En kuitenkaan voi kokeilla, koska exiv2 osaa vain lukea, mutta ei kirjoittaa Sonyn raakakuvatiedostoa (.arw).
Minulle kyllä riittäisikin hyvin raakakuvasta viedyn jpegin käpistely.

Olen myös kuvannut aika paljon objektiiveilla, joilla ei ole mitään sähköistä yhteyttä kamerarunkoon. Kuvakatselin lukee exifistä esim. kuvausaukon: f/0,0 tai polttovälin 0,0 (35 mm filmi), 0,0 (aukko). Noita haluaisin korjata.

Tuolla nm:n ohjeella saan myös sähköttömän objektiivin kuvaan linssin mallin/merkin, vaikka tämä Linux Mintin kuvankatselin ei sitä näytäkään, jotkin muut ohjelmat sen näkevät. Tuo PhotoExifLensModel on selväkielisessä muodossa (Ascii), mutta kun haluaisin laittaa linssin polttovälin tai kuvatessa käytetyn aukon, niin kauan kuin sen muistan, törmään ongelmiin. Nämä kohdat exifissä ovat muotoa Rational, jonka arvo määräytyy laskukaavalla. Esim. aukon arvo menee ilmeisesti kuten
Koodia: [Valitse]
man exiv2kertoo:
Rational Examples:

              $ exiv2 "-Mset Exif.Photo.MaxApertureValue 557429/62500" X.jpg
              $ exiv2 "-Mset Exif.Photo.MaxApertureValue F5.6" X.jpg

              The Rational format Fnumber is for the  convenience  of  setting
              aperture  values.  Aperture values are stored in Exif is an APEX
              value which can be evaluated by the expression:

              apex-value  =    log(Fnumber) * 2.0 / log(2.0)
              number      = exp(apex-value * log(2.0) / 2.0)

              The Rational format Fnumber is valid for any Rational, even when
              the  key  is not an Aperture.  More information about APEX value
              is available from: http://en.wikipedia.org/wiki/APEX_system

Menee vaikeaksi, en tosiaan tiedä, mitä pitäisi sijoittaa Fnumberin paikalle kaavaan, jos haluaisi tulokseksi tietyn aukon muodossa (esim.) F11.

Jos et välttämättä halua esittää objektiivin tietoja muille, vaan tarvitset vain oman muistin tukea, voit käyttä exifin kenttää Exif.Photo.UserComment. Tähän voi laittaa vaikka:
Koodia: [Valitse]
exiv2 -M"set Exif.Photo.UserComment charset=Ascii Ihmelinssi 100mm F1.8 kuvausaukko F6.3" kuva1.jpg
Ainakin RawTherapee näyttää nämä user commentit, en ole vielä asiaa enemmän tutkinut, mutta luulen, että varmaan muutkin kuten DarkTable tai kuvaselaimet.
« Viimeksi muokattu: 09.08.22 - klo:20.06 kirjoittanut Vika/fiba »

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Menee vaikeaksi, en tosiaan tiedä, mitä pitäisi sijoittaa Fnumberin paikalle kaavaan, jos haluaisi tulokseksi tietyn aukon muodossa (esim.) F11.

Ohjeen perusteella pitäisi onnistua näin:

Koodia: [Valitse]
exiv2 -M"set Exif.Photo.ApertureValue F11" kuva.jpg
Eli Exiv2 ymmärtää aukon tuossa muodossa ja muuntaa sen automaattisesti EXIF-kenttään tallennettavaksi APEX-arvoksi.
« Viimeksi muokattu: 09.08.22 - klo:22.47 kirjoittanut nm »

Vika/fiba

  • Käyttäjä
  • Viestejä: 652
    • Profiili

Ohjeen perusteella pitäisi onnistua näin:

Koodia: [Valitse]
exiv2 -M"set Exif.Photo.ApertureValue F11" kuva.jpg
Eli Exiv2 ymmärtää aukon tuossa muodossa ja muuntaa sen automaattisesti EXIF-kenttään tallennettavaksi APEX-arvoksi.

Tuo onnistuu

Koodia: [Valitse]
~/Kuvat$ exiv2 -g Aperture kuva1.jpg
Exif.Photo.ApertureValue                     Rational    1  F11
Exif.Photo.MaxApertureValue                  Rational    1  F1

Mutta se tekee uuden ApertureValue-kentän exifiin ja Kuvankatselin lukee aukkotiedon FNumber-kentästä.
Kokeilin aikaisemmin
Koodia: [Valitse]
:~/Kuvat$ exiv2 -M"set Exif.Photo.FNumber F11" kuva1.jpg
Tämä muuttaa aukkoarvon, jonka Kuvakatselinkin näyttää, mikä on lupaavaa, arvo vain tulee väärin.

Koodia: [Valitse]
:~/Kuvat$ exiv2 -g FNumber kuva1.jpg
Exif.Photo.FNumber                           Rational    1  F6.9

6.9 tulee manuaalin kaavasta: apex-value  =    log(Fnumber) * 2.0 / log(2.0), jos Fnumberiksi sijoittaa 11. Ei liene sattuma?
Luulen, että ratkaisu olisi tässä: number      = exp(apex-value * log(2.0) / 2.0). Mutta tätä en osaa laskea. Mitä tuo exp tarkoittaa?

nm

  • Käyttäjä
  • Viestejä: 16232
    • Profiili
Okei, FNumber-tagin asettamisessa exiv2 taitaa toimia harhaanjohtavasti, koska EXIF-käytännön mukaan arvoa ei nähtävästi pidä tallentaa APEX-muodossa toisin kuin *ApertureValue-tageissa. Tällöin exiv2:ta käytettäessä arvoksi ei siis voi asettaa F11, vaan esimerkiksi murtolukuna 11/1. Vastaavasti vaikkapa F5.6 voitaisiin asettaa murtolukuarvona 56/10 tai 28/5.

Koodia: [Valitse]
exiv2 -M "set Exif.Photo.FNumber 11/1"  kuva.jpg
Koodia: [Valitse]
$ exiv2 -g FNumber kuva.jpg
Exif.Photo.FNumber                           Rational    1  F11
« Viimeksi muokattu: 10.08.22 - klo:10.44 kirjoittanut nm »

Vika/fiba

  • Käyttäjä
  • Viestejä: 652
    • Profiili
Kiitos paljon jälleen!  ;D
Tuota en olisi itse keksinyt, vaikka murtolukuja exifissä vilahtelee. Onnistuin tuota matkimalla laittamaan myös polttovälin

Koodia: [Valitse]
exiv2 -M"set Exif.Photo.FocalLength  1350/10" kuva1.jpg
Mutta kinovastaavuus on muotoa "Short", joten se menee käskyllä

Koodia: [Valitse]
exiv2 -M"set Exif.Photo.FocalLengthIn35mmFilm 135" kuva1.jpg
Lopputulos

Koodia: [Valitse]
$ exiv2 -g FocalLength kuva1.jpg
Exif.Photo.FocalLength                       Rational    1  135.0 mm
Exif.Photo.FocalLengthIn35mmFilm             Short       1  135.0 mm

Kun nyt homma sujuu, kysyn vielä, miten voisin muuttaa nuo kolme arvoa yhdellä komennolla?

Edit. Tyhmä kysymys. Nähtävästi näitä -M"set Exif.Photo.JokuKenttä Joku Arvo" -määrityksiä voi komentoon laittaa tarpeellisen määrän peräkkäin.  8)
« Viimeksi muokattu: 10.08.22 - klo:13.30 kirjoittanut Vika/fiba »