如何使用ImageMagick的identify工具格式化日期和时间?

3

我正在创建一个bash脚本,用于重命名照片,使它们的文件名包含日期和时间信息。我想使用ImageMagick的identify工具来构建文件名。

identify -format "IMG_%[EXIF:DateTime].jpg" myphoto.jpg

我想对日期和时间进行格式化处理。我该如何使用ImageMagick实现?identify是否支持格式化处理?


2
你可能更适合使用 exiftool 来完成这个任务。 - Mark Setchell
不幸的是,答案似乎是你不能仅使用ImageMagick进行格式化。有各种替代方案。 - Vytenis Bivainis
1
哇,exiftool 是一个非常好的工具。我之前知道它的存在,但现在我发现它非常强大(尽管它的文档可能需要改进)。这是我的问题的解决方案(但不是我的问题的答案):exiftool "-FileName<CreateDate" -d "IMG_%Y%m%d_%H%M%S.jpg" myphoto.jpg - Vytenis Bivainis
如果您需要在ExifTool中与“find”或“awk”结合使用,那么您可能还没有发现ExifTool的全部功能。更多信息请参见https://www.sno.phy.queensu.ca/~phil/exiftool/faq.html,命令行示例请参见https://owl.phy.queensu.ca/~phil/exiftool/examples.html。 - Vytenis Bivainis
2个回答

5

使用date实用工具重新格式化日期值。运行man date,并查看其他问题/答案以获取示例。

img_date=$(identify -format "%t_%[EXIF:DateTime]" input.jpeg)
#=> 2018:07:25 06:28:41
my_date=$(date -j -u -f "%Y:%m:%d %H:%M:%S" "$img_date" +"%Y-%m-%d")
#=> 2018-07-25
convert input.jpeg "output_${my_date}.jpeg"
#=> output_2018-07-25.jpeg

3
您可以在Imagemagick中完成大部分操作。但是Imagemagick没有内置的日期时间格式化功能。因此,您需要捕获日期和时间并将其传输到操作系统以进行重新格式化。然后捕获不带后缀的图像名称。接下来,将输入转换为具有所需输出名称的新图像。
以下是一个示例,使用Unix tr重新格式化捕获的数据和时间,其中我将空格更改为下划线,将冒号更改为连字符。
datetime=$(identify -format "%[EXIF:DateTime]" P1050001.JPG | tr " " "_" | tr ":" "-")

inname=$(identify -format "%t" P1050001.JPG)

convert P1050001.JPG ${inname}_${datetime}.jpg


这将创建一个名为P1050001_2009-12-05_16-59-51.jpg的新文件。

或者,您也可以将前两个步骤合并为:

newname=$(identify -format "%t_%[EXIF:DateTime]" P1050001.JPG | tr " " "_" | tr ":" "-")

convert P1050001.JPG ${newname}.jpg


如果您不想使用转换来创建新的图像,则可以使用操作系统重命名原始文件。

如Mark Setchell所建议的那样,使用exiftool可能更容易完成所有这些操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接