在与 Python 平台无关的情况下写入 XMP 元数据

问题描述 投票:0回答:3

使用 python 写入给定文件中的 XMP 元数据的最常见方法似乎是

Python XMP Toolkit
https://github.com/python-xmp-toolkit/python-xmp-toolkit

不幸的是,这个工具包似乎无法在 Windows 上运行(或者至少没有关于如何使其在 Windows 上运行的非常明确的说明)。是否有另一种方法可以使用 python 将 XMP 元数据写入视频文件,并且可以在 Windows 和 macOS 上运行?

python python-3.x metadata xmp
3个回答
1
投票

http://tilloy.net/dev/pyexiv2/ 现在已标记为过时,但它应该可以工作(如果还安装了 http://www.exiv2.org/)。


1
投票

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',

====================================================== =========================


0
投票

正如 @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

© www.soinside.com 2019 - 2024. All rights reserved.