Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用mogrify(ImageMagick)将NEF转换为*.jpg并保留EXIF数据?_Imagemagick_Jpeg_Exif_Exiftool_Mogrify - Fatal编程技术网

如何使用mogrify(ImageMagick)将NEF转换为*.jpg并保留EXIF数据?

如何使用mogrify(ImageMagick)将NEF转换为*.jpg并保留EXIF数据?,imagemagick,jpeg,exif,exiftool,mogrify,Imagemagick,Jpeg,Exif,Exiftool,Mogrify,我正在将大约9000张照片从.NEF转换为.jpg 我想保留所有EXIF数据,最重要的是创建的日期和时间,纬度和经度 我希望JPG的质量尽可能高 我刚刚开始从命令行使用ImageMagick。我还安装了Exiftool。我使用的是mogrify命令,因为它可以很好地处理批处理 当我跑的时候 mogrify -format jpg *.NEF 所有my.NEF文件都已成功转换为JPGs,但所有EXIF数据均丢失 我已经搜索了很多地方,试图找到一个解决方案,似乎我可能必须安装ufraw,但如果

我正在将大约9000张照片从.NEF转换为.jpg

  • 我想保留所有EXIF数据,最重要的是创建的日期和时间,纬度和经度
  • 我希望JPG的质量尽可能高
我刚刚开始从命令行使用ImageMagick。我还安装了Exiftool。我使用的是
mogrify
命令,因为它可以很好地处理批处理

当我跑的时候

mogrify -format jpg *.NEF
所有my.NEF文件都已成功转换为JPGs,但所有EXIF数据均丢失

我已经搜索了很多地方,试图找到一个解决方案,似乎我可能必须安装ufraw,但如果可能的话,我想要一个使用我已经拥有的软件的解决方案-ImageMagick和Exiftool

提前感谢您提供的有关如何执行此操作的任何建议

更新:

  • 我使用mogrify转换的图像比我的同事使用picasa将NEF转换为JPG时输出的图像稍小(~1-2MB)。但是当我在ImageMagick中指定
    -quality 100
    时,图像大小增加了大约45MB!为什么?
  • 代码
    exiftool-tagsfromfile%d%f.NEF-ext jpg-overwrite_original.
    将exif信息添加到JPGs中
在这样做之前要三思——你真的在丢弃大量信息——如果你不想要它,为什么不先拍摄JPEG而不是RAW

FWIW,您可以使用ImageMagick获取JPEG:

convert somefile.NEF somefile.jpg
然后,您可以将标记从原始文件复制到ImageMagick新创建的文件:

exiftool -tagsfromfile somefile.NEF -all:all somefile.jpg 

如果您有数千个映像,并且使用的是macOS或基于Linux/Unix的操作系统,我建议您像这样GNU Parallel,它会让您为这些可爱的内核而付出高昂代价:

parallel --dry-run 'convert {} {.}.jpg; exiftool -tagsfromfile {} -all:all {.}.jpg' ::: *nef
样本输出

convert a.nef a.jpg; exiftool -tagsfromfile a.nef -all:all a.jpg
convert b.nef b.jpg; exiftool -tagsfromfile b.nef -all:all b.jpg
如果看起来不错,请删除
--dry run
,使其实际运行该命令


如果你在Windows上,你将不得不做一些临时的拼凑游戏,以便在任何合理的时间范围内完成。您可以使用
mogrify
命令,将所有转换为JPEG,然后在以后重新嵌入EXIF数据。如果您的文件使用某种递增数字的系统命名,您可以同时启动两个或三个
mogrify
副本,例如一个文件名以[0-4]结尾,另一个文件名以[5-9]结尾。我不会说Windows,但这可能看起来像这两个命令,每个命令都在自己的命令提示符下运行:

mogrify -format jpg *0.NEF *1.NEF *2.NEF *3.NEF *4.NEF

mogrify -format jpg *5.NEF *6.NEF *7.NEF *8.NEF *9.NEF
然后,当它们全部完成时,您将执行
exiftool
操作,但您必须使用FOR循环,如:


%%~dpnG
部分是基于猜测的。

谢谢马克,谢谢。您的示例看起来像是针对一张照片的—我如何为9000张照片批处理?只是一个解释性的说明:我们在RAW中拍摄照片,以获得最大数量的信息,以备日后需要。我们正在把所有的照片放进一个马赛克,而我们的马赛克程序不拍摄NEF——JPG在过去工作得很好。我是一个更大的研究团队的成员,我无法控制照片的拍摄格式;)您使用的是什么操作系统?使用Windows 7。我有40个内存,但我想今天能为其他工作节省4个内存?我可以让它在一夜之间运行。谢谢你的更新,@marksetchell!但我正在寻找一个Windows解决方案。。。听起来我的Windows电脑上不会运行该代码?太好了!感谢您提供的并行处理mogrify的提示。我还更新了我的问题,使之成为一个不会产生恼人的备份JPG的解决方案。
FOR %%G IN (*.NEF) DO (
   exiftool -tagsfromfile %%G -all:all %%~dpnG.jpg
)