Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Multimedia ja grafiikka => Aiheen aloitti: Vika/fiba - 01.08.22 - klo:18.55
-
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:
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:
exiv2 -pv --grep lens/i /home/minä/Kuvat/kuva1.jpg
Tulos Sonyn kuvassa on hiukan erilainen kuin manuaalin esimerkkinä käytetty Nikonin tuloste.
$ 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?
-
.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:
exiv2 -M "set Exif.Photo.LensModel Ascii TSE 24mm F3.5" mo Kuvat/kuva1.jpg
Edit: korjattu typo esimerkkikomennossa
-
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.
-
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.
-
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
man exiv2
kertoo:
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:
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.
-
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:
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.
-
Ohjeen perusteella pitäisi onnistua näin:
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
~/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
:~/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.
:~/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?
-
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.
exiv2 -M "set Exif.Photo.FNumber 11/1" kuva.jpg
$ exiv2 -g FNumber kuva.jpg
Exif.Photo.FNumber Rational 1 F11
-
Kiitos paljon jälleen! ;D
Tuota en olisi itse keksinyt, vaikka murtolukuja exifissä vilahtelee. Onnistuin tuota matkimalla laittamaan myös polttovälin
exiv2 -M"set Exif.Photo.FocalLength 1350/10" kuva1.jpg
Mutta kinovastaavuus on muotoa "Short", joten se menee käskyllä
exiv2 -M"set Exif.Photo.FocalLengthIn35mmFilm 135" kuva1.jpg
Lopputulos
$ 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)