在使用Python向给定文件写入XMP元数据方面,最常见的方法似乎是使用Python XMP Toolkit
https://github.com/python-xmp-toolkit/python-xmp-toolkit
不幸的是,这个工具包似乎无法在Windows上工作(或者至少没有非常清晰的说明如何在Windows上让它工作)。是否有另一种方法可以使用Python向视频文件写入XMP元数据,在Windows和macOS上都可用?
在使用Python向给定文件写入XMP元数据方面,最常见的方法似乎是使用Python XMP Toolkit
https://github.com/python-xmp-toolkit/python-xmp-toolkit
不幸的是,这个工具包似乎无法在Windows上工作(或者至少没有非常清晰的说明如何在Windows上让它工作)。是否有另一种方法可以使用Python向视频文件写入XMP元数据,在Windows和macOS上都可用?
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',
========================================================================
#-----------------------------------------------------------
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