You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyExifTool无法写入自定义XMP标签问题求助

PyExifTool无法写入自定义XMP标签的解决方法

问题背景

环境:Windows 10、Python 3.11.2、ExifTool 12.60
自定义XMP标签XMP:EvalHuman可正常读取,但通过PyExifTool写入时完全不生效;而EXIF原生标签(如EXIF:GPSLatitude)能正常写入。直接用ExifTool命令行则可以成功修改该自定义标签。

原实现代码

from os import path
import exiftool

file_path = path.relpath("./subfolder/targetfile.jpg")

with exiftool.ExifToolHelper() as et:
    ex_res = et.execute(b"-config ExifTool_config.cnf", b"-GPSLatitude=18.91", b"-XMP:EvalHuman=TEXT", file_path)

print(ex_res)

with exiftool.ExifToolHelper() as et:
    metadata = et.get_metadata(file_path)
    for d in metadata:
        for k, v in d.items():
            print(f"Dict: {k} = {v}")

运行结果

执行后输出显示文件已更新,但自定义标签未被修改:

1 image files updated
...
Dict: EXIF:GPSLatitude = 18.91
Dict: XMP:XMPToolkit = Image::ExifTool 12.60
Dict: XMP:CopyDate = 2023:04:14 16:03:59+02:00
Dict: XMP:CreationTime = 16:00:51
Dict: XMP:EvalHuman = ION
...

其中XMP:EvalHuman并未被设置为预期值TEXT。

而通过ExifTool命令行执行以下命令后,自定义标签能成功写入:

exiftool -config ExifTool_config.cnf -GPSLongitude=12.34 -XMP:EvalHuman=TARGETTEXT "subfolder/targetfile.jpg"

再次运行Python脚本,结果显示标签已更新:

Dict: EXIF:GPSLatitude = 18.91
Dict: EXIF:GPSLongitude = 12.34
Dict: XMP:XMPToolkit = Image::ExifTool 12.60
Dict: XMP:CopyDate = 2023:04:14 16:03:59+02:00
Dict: XMP:CreationTime = 16:00:51
Dict: XMP:EvalHuman = TARGETTEXT

解决方案

问题出在配置文件的传递方式:原代码通过execute方法传递-config参数,但PyExifTool的ExifToolHelper需要在初始化时单独指定配置文件,而非通过命令参数传递。修改后的代码如下:

from os import path
import exiftool

file_path = path.relpath("./subfolder/targetfile.jpg")

with exiftool.ExifToolHelper(config_file = "ExifTool_config.cnf") as et:
    et.execute(b"-GPSLatitude=18.91", b"-XMP:EvalHuman=TEXT", file_path)

# 验证写入结果
with exiftool.ExifToolHelper(config_file = "ExifTool_config.cnf") as et:
    metadata = et.get_metadata(file_path)
    for d in metadata:
        for k, v in d.items():
            print(f"Dict: {k} = {v}")

原因说明

ExifToolHelper会复用ExifTool进程,如果在execute中传递-config参数,该配置仅对当前单次命令生效,后续读取元数据的进程未加载自定义配置,导致无法正确识别自定义标签的写入状态;或者写入时的配置未被完整应用。通过初始化ExifToolHelper时指定config_file,能确保整个进程生命周期都加载自定义配置,从而正确处理自定义XMP标签的读写操作。

内容的提问来源于stack exchange,提问作者TxMic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:38:21