1

我有一个图像 1.tiff,我想从中将 exif 数据复制到另外两个图像 2.tiff 和 3.tiff。从普通外壳我可以通过键入将相同的 exif 数据写入多个图像

exiftool -m -overwrite_original -TagsFromFile "1.tiff" {"2.tiff","3.tiff"}

出于某种原因,我无法以 pyton 的形式执行此操作。如果我从 python 脚本执行相同的 shell 命令,即

os.system('exiftool -m -overwrite_original -TagsFromFile "1.tiff" {"2.tiff","3.tiff"}')

我收到以下错误:

Error: File not found - {2.tiff,3.tiff}

但是,如果我为每个要写入的图像调用命令,它就可以工作。IE

os.system('exiftool -m -overwrite_original -TagsFromFile "1.tiff" "2.tiff"')
os.system('exiftool -m -overwrite_original -TagsFromFile "1.tiff" "3.tiff"')

但是,由于我将调用该命令数千次,一遍又一遍地从 1.tiff 读取 exif 数据实在是太慢了。您对如何将 exif 数据从一个源图像复制到多个图像而只读取一次源图像有什么建议吗?

以下 zip 文件包含有效的 bash 脚本和无效的 python 等效项:https ://www.dropbox.com/s/nm8fdkdfq7hqi8m/folder.zip?dl=1

4

3 回答 3

1

如果你的唯一目的是在 python 中使用 exiftool 那么为什么不使用这个模块呢?抱歉,我还没有足够的声誉发表评论。例如:

 import exiftool

 files = ["a.jpg", "b.png", "c.tif"]
 with exiftool.ExifTool() as et:
         metadata = et.get_metadata_batch(files)

更新:对不起,我纠正了。该模块不执行 exif 修改。

于 2016-07-25T15:18:10.767 回答
1

os.system倾向于那样做,尤其是在 Windows 上。您可能会在以下方面取得更大的成功subprocess.call

subprocess.call(['exiftool','-m','-overwrite_original','-TagsFromFile','1.tiff','{"2.tiff","3.tiff"}'])
于 2016-07-25T15:13:22.910 回答
0

这个问题和 Rawing 回答的启发,问题似乎是 /bin/sh 不支持这个花括号。因此,解决方案是在 subprocess.Popen 中设置 executable='/bin/bash'

subprocess.Popen(['exiftool','-m','-overwrite_original','-TagsFromFile','1.tiff','{"2.tiff","3.tiff"}'],executable='/bin/bash')
于 2016-07-25T15:57:41.673 回答