Editing/updating the data of photo metadata using

2020-04-11 03:39发布

问题:

I would like to update the data of photo metadata using exiftool, like data of temperature sensor, height sensor and GPS longitude-altitude. First, I've tried to add new tags of those data using command line within exiftool configuration file and it works. Now, I want to update the data using python script then someone told me I can use execute() method but I'm so confused and still don't know yet how to use those method.

Would anyone can help and give me example of python script within exiftool to edit metadata?

回答1:

The code for your specific problem is:

import exiftool
et = exiftool.ExifTool("C:\Users\...\exiftool.exe")
et.execute("-GPSLongitude=10.0", "picture.jpg")
et.execute("-GPSLatitude=5.78", "picture.jpg")
et.execute("-GPSAltitude=100", "picture.jpg")
et.terminate()

Alternatively, you can leave out the terminate call when using the with statement:

with exiftool.ExifTool("C:\Users\...\exiftool.exe") as et:
    et.execute("-GPSLongitude=10.0", "picture.jpg")
    et.execute("-GPSLatitude=5.78", "picture.jpg")
    et.execute("-GPSAltitude=100", "picture.jpg")

Using the with statement makes sure that the subprocess is killed, see the PyExifTool documentation


If you want to change a date (create, modify, etc.), make sure to leave out the inverted commas around the date itself. That was what took me a while to figure out since no error handling takes place:

Command-line:

exiftool -FileModifyDate="2015:10:01 10:00:00" picture.jpg

Python:

et.execute("-FileModifyDate=2015:10:01 10:00:00", "picture.jpg")


回答2:

Try doing this:

from your_class import ExifTool, fsencode

with ExifTool(source) as et:
    params = map(fsencode, ['-Title="%s"' % title, '%s' % source_file])
    et.execute(*params)

I struggled with this for a bit until I finally figured out that I had to pass the parameters in this way. If you look at the execute_json method, this is where I got the idea from.

There might be a more elegant solution, but this is what worked for me. Also, I'm using Python 3.