使用 python 写入给定文件中的 XMP 元数据的最常见方法似乎是
Python XMP Toolkit
https://github.com/python-xmp-toolkit/python-xmp-toolkit
不幸的是,这个工具包似乎无法在 Windows 上运行(或者至少没有关于如何使其在 Windows 上运行的非常明确的说明)。是否有另一种方法可以使用 python 将 XMP 元数据写入视频文件,并且可以在 Windows 和 macOS 上运行?
http://tilloy.net/dev/pyexiv2/ 现在已标记为过时,但它应该可以工作(如果还安装了 http://www.exiv2.org/)。
Pyexiv2 可以读取 EXIF 和 XMP 数据,并且在 Windows 10 上运行良好。
from pyexiv2 import Image
img_path=r'S1001679.jpg'
img=pyexiv2.Image(img_path)
img_xmp=img.read_xmp()
img_xmp
返回:
{'Xmp.xmp.ModifyDate': '2021-02-11T20:21:06Z', 'Xmp.xmp.CreateDate': '2021-02-11T20:21:06Z', 'Xmp.xmp.CreatorTool': '2d3686e931da45b78bd1cf1e858b1fe8',
====================================================== =========================
正如 @icypy 所建议的,pyexiv2 库对于修改视频/图像文件中的 XMP 标签非常有用。
我绝对可以推荐 github 上的文档: https://github.com/LeoHsiao1/pyexiv2/blob/master/docs/Tutorial.md#close
这是一个简单的例子,我如何使用它来更新
<crs:HasCrop>True</crs:HasCrop>
-标签:
#-----------------------------------------------------------
from pyexiv2 import Image
def print_xmp_tags_all(xmp):
for key, value in xmp.items():
print("{}: {}".format(key, value))
def print_xmp_tags_crop(xmp):
print()
print("Xmp.crs.HasCrop: {}".format(xmp['Xmp.crs.HasCrop']))
print("Xmp.crs.CropBottom: {}".format(xmp['Xmp.crs.CropBottom']))
print("Xmp.crs.CropLeft: {}".format(xmp['Xmp.crs.CropLeft']))
print("Xmp.crs.CropRight: {}".format(xmp['Xmp.crs.CropRight']))
print("Xmp.crs.CropTop: {}".format(xmp['Xmp.crs.CropTop']))
#-----------------------------------------------------------
img_path = 'C:/Users/USER/Desktop/MY_IMAGE_0001.jpg'
img = Image(img_path)
# Extract XMP-metadata from file:
xmp = img.read_xmp()
print_xmp_tags_crop(xmp)
# Preparing dictionary containing only those tags we want do update:
new_xmp = {
'Xmp.crs.HasCrop': False,
'Xmp.crs.CropBottom': 0,
'Xmp.crs.CropLeft': 0,
'Xmp.crs.CropRight': 0,
'Xmp.crs.CropTop': 0
}
# Update XMP-tags within file:
img.modify_xmp(new_xmp)
# Free resources:
img.close()
#-----------------------------------------------------------
# Check if xmp-update was successfull:
img = Image(img_path)
xmp = img.read_xmp()
print_xmp_tags_crop(xmp)
img.close()
对应输出:
C:\Users\USER\Desktop>python XMP_flush_attribute_HasCrop.py
Xmp.crs.HasCrop: True
Xmp.crs.CropBottom: 1
Xmp.crs.CropLeft: 0.056000
Xmp.crs.CropRight: 0.944000
Xmp.crs.CropTop: 0
Xmp.crs.HasCrop: False
Xmp.crs.CropBottom: 0
Xmp.crs.CropLeft: 0
Xmp.crs.CropRight: 0
Xmp.crs.CropTop: 0
HTH