我有一张图片,1.tiff,我想从中将exif数据复制到另外两张图片,即2.tiff和3.tiff。 从普通shell我可以通过输入
将相同的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}
但是,如果我为每个图像调用命令,它都可以写入。即。
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
答案 0 :(得分:1)
os.system
往往会像这样,特别是在Windows上。您可能会使用subprocess.call
获得更多成功:
subprocess.call(['exiftool','-m','-overwrite_original','-TagsFromFile','1.tiff','{"2.tiff","3.tiff"}'])
答案 1 :(得分:1)
如果您的唯一目的是在python中使用exiftool那么为什么不使用this module?抱歉,我没有足够的声誉发表评论。例如:
import exiftool
files = ["a.jpg", "b.png", "c.tif"]
with exiftool.ExifTool() as et:
metadata = et.get_metadata_batch(files)
更新:抱歉,我的立场得到了纠正。该模块不执行exif修改。
答案 2 :(得分:0)
受this问题和Rawing回答的启发,问题似乎是/ bin / sh不支持这种花括号。因此,解决方案是在subprocess.Popen
中设置executable ='/ bin / bash'subprocess.Popen(['exiftool','-m','-overwrite_original','-TagsFromFile','1.tiff','{"2.tiff","3.tiff"}'],executable='/bin/bash')