【问题标题】:Python shell call to exiftoolPython shell 调用 exiftool
【发布时间】:2016-07-25 15:07:03
【问题描述】:

我有一个图像 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

【问题讨论】:

    标签: python shell exiftool


    【解决方案1】:

    os.system 往往会这样,尤其是在 Windows 上。使用subprocess.call,您可能会取得更大的成功:

    subprocess.call(['exiftool','-m','-overwrite_original','-TagsFromFile','1.tiff','{"2.tiff","3.tiff"}'])
    

    【讨论】:

    • 使用subprocess.call时问题好像是一样的
    【解决方案2】:

    如果您的唯一目的是在 python 中使用 exiftool,那么为什么不使用this module?抱歉,我还没有足够的声誉来发布 cmets。例如:

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

    更新:对不起,我的立场得到纠正。该模块不执行 exif 修改。

    【讨论】:

    • 据我所知,该模块仅用于读取exif数据,不用于写入。
    • pypi.python.org/pypi/piexif,也许这就是你要找的,它提供读写功能。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      • 2015-07-29
      • 2021-09-21
      • 1970-01-01
      相关资源
      最近更新 更多