Exiftool - изменить формат метаданных
Предположим, у меня есть 5000 изображений со следующими метаданными в поле LABEL.
0001 ELEPHANT
0002 ELEPHANT
0003 ELEPHANT
...
4999 ELEPHANT
5000 ELEPHANT
Я хочу изменить формат на:
ELEPHANT-0001
ELEPHANT-0002
ELEPHANT-0003
…
ELEPHANT-4999
ELEPHANT-5000
Другими словами, я хочу сделать следующее для поля метаданных нескольких изображений:
#### ИМЯ -> ИМЯ - ####
Из того, что я могу собрать, может быть два способа сделать это
- Не обращайте внимания на текущие метаданные в изображениях и ссылайтесь на файл (простой текст? Csv?), Который я готовлю отдельно; или же
- Считайте метаданные файла в виде строки, определите пробел и число, предшествующее пробелу, сохраните этот номер и, наконец, создайте новую строку, объединив число и пробел и добавив между ними дефис!
Какие-либо предложения?
1 ответ
Расширяя ответ, который я дал на форумах exiftool.
Основная команда будетexiftool "-LABEL<${LABEL;s/(\d{4}) (.*)/$2-$1/}" <FileOrDir>
Вы в основном хотите скопировать тег в тот же тег с некоторыми изменениями. Опция копирования тега - это символ меньше (или больше) <
или же >
, Распространенной ошибкой является использование знака равенства =
который используется для назначения статического значения тегу.
Для внесения изменений в тег требуется опция Advance Formatting, которая на самом деле представляет собой встроенный Perl-код. В этом примере тег обрабатывается как строка perl и используется подстановка регулярных выражений. Это соответствует и захватывает первые четыре цифры (\d{4})
, соответствует пробелу (но не захватывает его), затем сопоставляет и захватывает остальную часть тега (.*)
, Два захвата присваиваются переменным $1
а также $2
соответственно. В замене половина замены $2-$1
, два захвата поменялись местами с дефисом между ними.
Чтобы в полной мере воспользоваться преимуществами предварительного форматирования, полезно знать некоторые базовые знания Perl и Regex.
Если вы уверены в команде, вы можете добавить -overwrite_original
подавить генерацию файлов резервных копий и -r
перечислять в подкаталоги.