使用pyexiftool编辑/更新照片元数据的数据

3
我想使用exiftool更新照片元数据的数据,例如温度传感器、高度传感器和GPS经度-纬度等数据。首先,我尝试在exiftool配置文件中使用命令行添加这些数据的新标签,并且它有效。现在,我想使用python脚本更新数据,然后有人告诉我可以使用execute()方法,但我很困惑,还不知道如何使用这些方法。
有人能帮忙并给出一个在exiftool中编辑元数据的Python脚本示例吗?

听起来像是你可以将execute()传递一个可变数量的字符串参数,就像你之前在命令行版本中添加新标签时所用的一样。 - martineau
2个回答

5
您的具体问题的代码是:
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()

另外,使用with语句时,您可以省略terminate调用:

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")

使用with语句可以确保子进程被杀死,请参考PyExifTool文档
如果您想更改日期(创建、修改等),请确保在日期本身周围留出引号。这就是我花了一段时间才弄清楚的,因为没有进行错误处理。
命令行:
exiftool -FileModifyDate="2015:10:01 10:00:00" picture.jpg

Python:

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

0

尝试这样做:

from your_class import ExifTool, fsencode

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

我曾经为此苦苦挣扎,直到最终发现我必须以这种方式传递参数。如果你看一下execute_json方法,这就是我得到灵感的地方。

可能有更加优雅的解决方案,但这对我来说是有效的。另外,我正在使用Python 3。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接