Write GPS and XMP-cities with a single command using city as input

Started by wywh, March 18, 2024, 04:06:46 AM

Previous topic - Next topic

wywh

Is it possible to write GPS and XMP-cities in one command using city (Köln, for example) as input (ExifTool 12.79)?

With IPTC it works for .jpg. But .heic and movies do not accept IPTC:

exiftool -overwrite_original '-IPTC:CodedCharacterSet=UTF8' -XMP:Keys:IPTC:Geolocate='Köln' .

exiftool -a -G1 -s -n -XMP:All -Keys:All -IPTC:All .
======== ./a.jpg
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[IPTC]          CodedCharacterSet               : .%G
[IPTC]          EnvelopeRecordVersion           : 4
[IPTC]          City                            : Köln
[IPTC]          Province-State                  : North Rhine-Westphalia
[IPTC]          Country-PrimaryLocationCode     : DE
[IPTC]          Country-PrimaryLocationName     : Germany
[IPTC]          ApplicationRecordVersion        : 4
======== ./a.heic
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
======== ./a.mp4
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[Keys]          GPSCoordinates                  : 50.9333 6.9499

Using GPS coordinates as input it works for XMP-cities, but surprisingly then XMP GPS is not written:

exiftool -overwrite_original -XMP:Keys:Geolocate='50.9333,6.9499' .

exiftool -a -G1 -s -n -XMP:All -Keys:All -IPTC:All .               
======== ./a.jpg
[XMP-iptcCore]  CountryCode                     : DE
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
======== ./a.heic
[XMP-iptcCore]  CountryCode                     : DE
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
======== ./a.mp4
[XMP-iptcCore]  CountryCode                     : DE
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
[Keys]          GPSCoordinates                  : 50.9333 6.9499

Adding XMP-exif takes care of that:

exiftool -overwrite_original -XMP:XMP-exif:Keys:Geolocate='50.9333,6.9499' .

exiftool -a -G1 -s -n -XMP:All -Keys:All -IPTC:All .                       
======== ./a.jpg
[XMP-iptcCore]  CountryCode                     : DE
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
======== ./a.heic
[XMP-iptcCore]  CountryCode                     : DE
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
======== ./a.mp4
[XMP-iptcCore]  CountryCode                     : DE
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
[Keys]          GPSCoordinates                  : 50.9333 6.9499

-> But using a city name instead GPS coordinates as input does not write XMP cities (without XMP-exif in the command it works the same):

exiftool -overwrite_original -XMP:XMP-exif:Keys:Geolocate='Köln' .

exiftool -a -G1 -s -n -XMP:All -Keys:All -IPTC:All .             
======== ./a.jpg
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
======== ./a.heic
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
======== ./a.mp4
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[Keys]          GPSCoordinates                  : 50.9333 6.9499

-> Using a city name instead GPS coordinates it seems to work only using these two-steps:

exiftool -overwrite_original -XMP:Keys:Geolocate='Köln' .
exiftool -overwrite_original '-XMP:Geolocate<GPSPosition' .

exiftool -a -G1 -s -n -XMP:All -Keys:All -IPTC:All .       
======== ./a.jpg
[XMP-iptcCore]  CountryCode                     : DE
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
======== ./a.heic
[XMP-iptcCore]  CountryCode                     : DE
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
======== ./a.mp4
[XMP-iptcCore]  CountryCode                     : DE
[XMP-exif]      GPSLatitude                     : 50.9333
[XMP-exif]      GPSLongitude                    : 6.9499
[XMP-photoshop] City                            : Köln
[XMP-photoshop] Country                         : Germany
[XMP-photoshop] State                           : North Rhine-Westphalia
[Keys]          GPSCoordinates                  : 50.9333 6.9499

Or am I missing something?

- Matti

Phil Harvey

Hi Matti,

I was hoping that the table here should be clear.

For example, if inputting a city name you need to include the group XMP-photoshop to write XMP City.

Try this to always write all XMP city and gps, plus Keys:

exiftool -xmp-photoshop:xmp-iptccore:xmp-exif:keys:geolocate=...

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).

wywh

Quote from: Phil Harvey on March 19, 2024, 07:59:35 AMthe table here should be clear

Thanks. I just needed more time and trial and error experiments to understand the details of this new command. I just added this entry to my exiftool memo:

Write geolocation to images (I still use also IPTC):

exiftool -P -overwrite_original -ext jpg -ext heic -ext png -ext webp '-IPTC:CodedCharacterSet=UTF8' -GPS:XMP-exif:XMP-photoshop:XMP-iptcCore:IPTC:Geolocate='Santiago,Peru,Provincia de Cusco' .
Write geolocation to movies:

exiftool -P -overwrite_original -ext mp4 -ext m4v -ext mov -Keys:XMP-photoshop:XMP-iptcCore:Geolocate='Santiago,Peru,Provincia de Cusco' .
Which outputs:

exiftool -a -G1 -s -n -GPS:All -XMP:All -Keys:All -IPTC:All .
======== ./a.jpg
[GPS]           GPSLatitudeRef                  : S
[GPS]           GPSLatitude                     : 13.5273
[GPS]           GPSLongitudeRef                 : W
[GPS]           GPSLongitude                    : 71.9841
[XMP-iptcCore]  CountryCode                     : PE
[XMP-exif]      GPSLatitude                     : -13.5273
[XMP-exif]      GPSLongitude                    : -71.9841
[XMP-photoshop] City                            : Santiago
[XMP-photoshop] Country                         : Peru
[XMP-photoshop] State                           : Cuzco Department
[IPTC]          CodedCharacterSet               : .%G
[IPTC]          EnvelopeRecordVersion           : 4
[IPTC]          City                            : Santiago
[IPTC]          Province-State                  : Cuzco Department
[IPTC]          Country-PrimaryLocationCode     : PE
[IPTC]          Country-PrimaryLocationName     : Peru
[IPTC]          ApplicationRecordVersion        : 4
======== ./a.heic
[GPS]           GPSLatitudeRef                  : S
[GPS]           GPSLatitude                     : 13.5273
[GPS]           GPSLongitudeRef                 : W
[GPS]           GPSLongitude                    : 71.9841
[XMP-iptcCore]  CountryCode                     : PE
[XMP-exif]      GPSLatitude                     : -13.5273
[XMP-exif]      GPSLongitude                    : -71.9841
[XMP-photoshop] City                            : Santiago
[XMP-photoshop] Country                         : Peru
[XMP-photoshop] State                           : Cuzco Department
======== ./a.mp4
[XMP-iptcCore]  CountryCode                     : PE
[XMP-photoshop] City                            : Santiago
[XMP-photoshop] Country                         : Peru
[XMP-photoshop] State                           : Cuzco Department
[Keys]          GPSCoordinates                  : -13.5273 -71.9841

p.s. Notice that GraphicConverter 12 displays those XMP tags only for .mov. But confusingly it displays those tags for 'file.mp4' and 'file.m4v' movies if there is a same name 'file.jpg' in that folder. I.e. GC treats the .jpg as a sidecar.

- Matti

Phil Harvey

I'm glad to have questions like this.  The new feature is very complicated, and writing the documentation was a challenge (I think it took longer than actually adding the feature), so I'm sure that some things will need clearing up and/or fixing in upcoming versions.

- Phil
...where DIR is the name of a directory/folder containing the images.  On Mac/Linux/PowerShell, use single quotes (') instead of double quotes (") around arguments containing a dollar sign ($).