Как использовать mogrify (ImageMagick) для преобразования из NEF в *.jpg и сохранения данных EXIF?

Я конвертирую около 9000 фотографий из.NEF в.jpg.

  • Я хотел бы сохранить все данные EXIF, наиболее важные дата и время, Latidude и Longitude.
  • Я бы хотел, чтобы JPG были максимально высокого качества.

Я только начал использовать ImageMagick из командной строки. У меня также установлен Exiftool. Я использую mogrify команда, потому что она хорошо обрабатывает партии.

Когда я бегу

mogrify -format jpg *.NEF

Все мои файлы.NEF успешно конвертируются в JPG, но все данные EXIF ​​теряются.

Я довольно долго искал, чтобы попытаться найти решение этой проблемы, и мне кажется, что мне, возможно, придется установить ufraw, но, если это возможно, я бы хотел найти решение, использующее программное обеспечение, которое у меня уже есть - ImageMagick и Exiftool.

Заранее благодарим за любые советы о том, как это сделать.

Обновить:

  • Изображения, которые я конвертировал с помощью mogrify, немного меньше (~ 1-2 МБ), чем те, которые были получены моим коллегой с помощью Picasa для преобразования NEF в JPG. Но когда я укажу -quality 100 в ImageMagick размеры изображений увеличиваются на 45 МБ! Зачем?
  • Код exiftool -tagsfromfile %d%f.NEF -ext jpg -overwrite_original . добавляет EXIF-информацию в JPG.

1 ответ

Решение

Подумайте дважды, прежде чем делать это - вы действительно отбрасываете много информации - и если вы не хотите этого, то почему бы сначала не снимать JPEG вместо RAW?

FWIW, вы можете использовать ImageMagick, чтобы получить JPEG:

convert somefile.NEF somefile.jpg

Затем вы можете скопировать теги из оригинала в файл, созданный ImageMagick:

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

Если у вас есть тысячи образов и вы используете macOS или приличную ОС Linux/Unix, я бы порекомендовал GNU Parallel, как этот, и он будет занят всеми этими замечательными ядрами, за которые вы так дорого заплатили Intel:

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, вам нужно будет выполнить некоторые специальные jiggery-pokery, чтобы сделать это в любой разумный период времени. Вы можете использовать mogrify команда и получить все преобразования, сделанные в JPEG, а затем сделать все exiftool повторное вложение данных 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 следующим образом:

FOR %%G IN (*.NEF) DO (
   exiftool -tagsfromfile %%G -all:all %%~dpnG.jpg
)

%%~dpnG часть - это предположение, основанное на этом ответе.

Другие вопросы по тегам