Перейти к содержимому
Главная страница

ExifTool: чтение, правка и автоматизация метаданных

ExifTool

ExifTool нужен, когда метаданные файлов требуется не просто посмотреть, а точно прочитать, изменить, перенести, удалить, сопоставить или обработать сразу для большого набора файлов по формальным правилам. Он полезен фотографам, архивистам, администраторам медиатек, разработчикам и специалистам по цифровым материалам: программа понимает EXIF, IPTC, XMP, MakerNotes и множество контейнерных полей, умеет работать не только с фотографиями, но и с видео, аудио, PDF и другими форматами, а все операции задаются командами, поэтому их можно повторять и автоматизировать.

Варианты загрузок
  • Визуальная ретушь и коррекция фото
  • Замена фона и удаление объектов
  • Пакетные фильтры и изменение размера
ExifTool
  • Нет собственного графического интерфейса
  • Команды требуют точного синтаксиса
  • Не все теги и форматы записываются

Содержание:

Установка и начало работы

ExifTool представляет собой командную утилиту и набор Perl-модулей. На Windows официальный исполняемый пакет уже содержит необходимую среду Perl, поэтому отдельно ставить интерпретатор не требуется. После распаковки рядом с исполняемым файлом находится каталог exiftool_files; если переносить программу в другое место, этот каталог нужно переносить вместе с ней. Имя exiftool(-k).exe рассчитано на запуск двойным щелчком: параметр -k удерживает окно открытым после вывода информации. Для нормальной работы из командной строки файл обычно переименовывают в exiftool.exe и либо запускают из его каталога, либо добавляют этот каталог в переменную PATH.

На macOS пакет устанавливает команду exiftool так, чтобы её можно было вызывать из Terminal. На Unix-подобных системах доступен полный Perl-дистрибутив и пакеты репозиториев конкретного дистрибутива. Принцип работы везде одинаков: сначала вводится имя команды, затем параметры и имена файлов или каталогов. Различаются главным образом правила кавычек оболочки и оформление путей.

Первую проверку удобно делать без записи. Команда ниже читает метаданные одного файла и ничего в нём не меняет:

exiftool photo.jpg

В ответ ExifTool печатает пары «имя тега — значение»: имя файла, размер, тип, временные отметки файловой системы, размер изображения, параметры камеры, выдержку, диафрагму, ISO, дату съёмки, координаты и другие найденные данные. Набор строк зависит от содержимого конкретного файла: отсутствие поля в выводе обычно означает, что соответствующего тега нет либо он не извлекается выбранным режимом.

ExifTool в Terminal выводит EXIF и параметры JPEG-файла Canon.jpg

На Windows можно перетащить файл или папку на exiftool(-k).exe, чтобы увидеть метаданные без ручного ввода пути. Этот способ годится для первичного знакомства, но для записи, фильтрации и пакетных сценариев удобнее командная строка. В ней проще явно контролировать группу тега, формат вывода и набор файлов, а саму команду можно сохранить в сценарий.

Проверить, что команда доступна, можно ключом -ver. Если оболочка сообщает, что exiftool не найден, проблема относится не к файлам и метаданным, а к пути запуска: нужно перейти в каталог программы, указать полный путь к исполняемому файлу или добавить каталог в PATH. На Windows при запуске из PowerShell текущий каталог не всегда ищется автоматически, поэтому может понадобиться запись вида .exiftool.exe.

Как устроена командная строка ExifTool

Базовая форма команды читается слева направо: exiftool, затем параметры, затем один или несколько источников. Источником может быть конкретный файл, несколько файлов, каталог или стандартный ввод. Параметр, начинающийся с одиночного дефиса, чаще всего обозначает тег или режим. Если после имени тега нет знака равенства, тег читается; если есть =, программа переходит к записи значения.

exiftool -Model -LensModel -DateTimeOriginal photo.jpg
exiftool -Artist="Иван Петров" photo.jpg

Первая команда читает только три выбранных поля. Вторая записывает автора. Это важное различие: простое указание тега безопасно в том смысле, что файл не переписывается, а присваивание значения инициирует изменение. В сложных сценариях полезно сначала выполнить эквивалентную команду только на чтение, убедиться, что выбран нужный тег и группа, а затем добавлять оператор записи.

ExifTool не требует располагать параметры строго до имён файлов, однако для читаемости лучше придерживаться одного стиля. Команды легче проверять, если сначала стоят параметры вывода и операции, затем фильтры, а пути — в конце. Пробелы в путях и значениях требуют кавычек. На Windows CMD обычно применяются двойные кавычки, а в Bash, zsh и PowerShell особенно важно учитывать переменные и специальные символы оболочки.

Названия тегов не чувствительны к регистру, но в документации обычно используются формы вроде DateTimeOriginal, GPSLatitude, XMP-dc:Subject. Для повторяемых сценариев лучше сохранять именно документированные имена: это облегчает диагностику и показывает, к какой группе относится поле.

Чтение метаданных: от краткого вывода до диагностики

Обычный запуск показывает интерпретированные значения, рассчитанные так, чтобы их было удобно читать человеку. Например, числовой код ориентации может отображаться текстом, координаты — в градусах, а выдержка — привычной дробью. Для автоматизации иногда требуется исходное числовое значение без такой интерпретации. Тогда добавляют -n.

exiftool -ExposureTime -FNumber -ISO photo.jpg
exiftool -n -ExposureTime -FNumber -ISO photo.jpg

Если нужно увидеть группы и одноимённые поля, применяется -G или -G1. Это особенно важно для дат, заголовков и описаний: одинаковое короткое имя может существовать в EXIF, XMP, QuickTime или другой области файла. Без группы легко принять одно поле за другое и затем записать значение не туда, куда ожидалось.

exiftool -G1 -a -s -time:all photo.jpg

Здесь -G1 выводит семейство групп, -a разрешает показывать повторяющиеся теги с одинаковыми именами, -s использует короткие имена тегов, а -time:all выбирает все доступные временные поля. Такая команда удобнее простого поиска строки «Date», потому что отделяет даты файловой системы от даты съёмки, даты создания XMP и временных полей контейнера.

ExifTool в Linux Terminal показывает метаданные PNG, включая ICC-профиль

Для максимально подробного осмотра часто используют сочетание -a -u -g1. Ключ -u добавляет неизвестные теги, которые ExifTool умеет извлечь, но не присвоил им стандартного имени. При этом «неизвестный» не означает «безопасный для записи»: большая часть таких значений предназначена только для анализа. Если требуется ещё глубже разбирать вложенные документы и потоки, существуют режимы -ee и расширенные варианты извлечения, но они способны заметно увеличить объём работы и не нужны для обычной фототеки.

Опция -e отключает вычисляемые Composite-теги. Composite — это не отдельный блок файла, а значения, которые ExifTool вычисляет из других полей. Типичный пример — итоговые размеры или производные временные значения. Если задача состоит в судебном или техническом сравнении того, что физически хранится в файле, вычисляемые поля иногда мешают и их полезно отключать.

Бинарные значения по умолчанию не вываливаются целиком в консоль: вместо них программа обычно сообщает размер и подсказывает использовать -b для извлечения. Это относится к встроенным миниатюрам, профилям, превью и другим блокам. Например, сохранить встроенную миниатюру можно перенаправлением бинарного вывода в файл, если соответствующий тег присутствует.

exiftool -b -ThumbnailImage photo.jpg > thumb.jpg

Важно не путать «все метаданные, которые программа показала» с «абсолютно все возможные данные внутри контейнера». Ради производительности стандартный режим не всегда извлекает вложенные объекты, внешние структуры и данные, требующие тяжёлого анализа. Для повседневной работы это разумный компромисс. Если требуется исчерпывающий разбор, нужно сознательно включать дополнительные режимы и учитывать, что вывод станет больше и медленнее.

ExifTool в macOS Terminal выводит метаданные PNG-файла matter-1.png

Группы тегов и почему одно имя может означать разные поля

ExifTool работает не с абстрактным «полем Автор», а с конкретными тегами, расположенными в определённых пространствах метаданных. В JPEG можно встретить EXIF, IPTC и XMP, а в MP4 — QuickTime ItemList, Keys, UserData и другие области. Тег Title или Description может существовать сразу в нескольких местах. Поэтому важный навык — уметь читать группу и при записи указывать её явно, когда расположение имеет значение.

Формат GROUP:TAG задаёт группу и имя. Например, XMP-dc:Description обращается к полю Description в пространстве Dublin Core, а EXIF:Artist — к EXIF Artist. Без группы ExifTool выбирает предпочтительное место для создания нового тега и обновляет подходящие существующие одноимённые поля. Это удобно в простых случаях, но для управляемого каталога лучше не полагаться на неявный выбор.

exiftool -EXIF:Artist="Иван Петров" photo.jpg
exiftool -XMP-dc:Creator="Иван Петров" photo.jpg
exiftool -XMP-dc:Description="Закат над озером" photo.jpg

У XMP группировка соответствует пространствам имён: XMP-dc, XMP-xmp, XMP-photoshop, XMP-iptcCore и другим. Если одно имя определено в нескольких пространствах, указание группы снимает двусмысленность. В нестандартных XMP-пространствах ExifTool может читать неизвестные поля, но запись таких полей потребует пользовательской конфигурации с определением тегов.

В документации тегов встречаются пометки writable, unsafe, protected и другие ограничения. Они отражают не косметические свойства, а правила безопасности записи. «Unsafe» поля не записываются массово через шаблон вроде -all:all, если их не указать явно, поскольку изменение может затронуть обработку изображения. «Protected» поля напрямую не записываются, а формируются программой автоматически при изменении связанных значений. Это одна из причин, по которой слепое копирование «всего» не всегда равнозначно побайтовому клонированию метаданных.

Продолжение вывода ExifTool с XMP, ICC и EXIF-полями PNG-файла

Запись и изменение отдельных тегов

Для записи используется присваивание -Tag=Value. Если значение пустое, соответствующий тег обычно удаляется; если нужно записать именно пустую строку, применяется отдельная форма с оператором ^=. Поведение зависит от типа поля: строковый тег принимает текст, числовой — число в допустимом диапазоне, перечислимый — одно из предусмотренных значений, а список может содержать несколько элементов.

exiftool -Copyright="© Иван Петров" photo.jpg
exiftool -XMP-dc:Description="Архивный кадр" photo.jpg
exiftool -Comment= photo.jpg

Для списковых тегов важны операторы += и -=. Первый добавляет элемент, второй удаляет совпадающий элемент или используется для некоторых условных операций. Если вместо добавления несколько раз выполнить обычное =, результат зависит от синтаксиса команды: можно непреднамеренно заменить существующий список. Поэтому работу с Keywords/Subject лучше строить явно.

exiftool -Keywords+=архив -Keywords+=пейзаж photo.jpg
exiftool -Keywords-=черновик photo.jpg

Значения с пробелами, символами перенаправления и знаками, которые интерпретирует оболочка, заключают в кавычки. Особенно внимательным нужно быть с конструкциями копирования, где используется символ <, и с выражениями -if, содержащими знак доллара. В Windows CMD и в PowerShell правила различаются. Ошибка кавычек часто проявляется не сообщением ExifTool, а тем, что часть команды перехватывает сама оболочка.

При записи в JPEG и TIFF без указания группы ExifTool использует предпочтительную группу для создания тега. Для переносимых архивов это может быть удобно, но если рабочий процесс требует конкретного стандарта, нужно явно использовать, например, XMP-dc:Subject или IPTC:Keywords. Такой подход делает команду самодокументируемой и снижает риск появления похожих значений в разных пространствах метаданных.

Как проверить результат перед массовой обработкой

Практический безопасный порядок состоит из трёх шагов. Сначала на одном тестовом файле читают конкретные теги вместе с группами. Затем выполняют запись без -overwrite_original, чтобы ExifTool сохранил резервную копию. После этого повторно читают изменённый файл теми же параметрами и только затем переносят команду на каталог. Это медленнее, чем сразу обработать всю коллекцию, но ошибки в имени группы или значении обнаруживаются до пакетной операции.

exiftool -G1 -a -s -Artist -Creator -Copyright sample.jpg
exiftool -XMP-dc:Creator="Иван Петров" sample.jpg
exiftool -G1 -a -s -Artist -Creator -Copyright sample.jpg

Если значение на экране выглядит иначе, чем ожидалось, полезно добавить -n. Некоторые поля имеют преобразование для печати: внутреннее число превращается в понятную подпись. Записывая такое значение, ExifTool обычно выполняет обратное преобразование, но для редких технических тегов документация может требовать числовой формы. Суффикс # у имени тега также отключает печатное преобразование для конкретного поля.

Резервные копии, временные файлы и безопасная запись

По умолчанию при изменении обычного файла ExifTool сохраняет исходник, добавляя к его имени суффикс _original. Это не необязательная мелочь интерфейса, а важная часть модели безопасности: после первой проверки можно сравнить изменённый и исходный файлы, а при ошибке вернуть первоначальный вариант. В каталоге с тысячами фотографий такие резервные копии удваивают число записей, поэтому после проверки их обычно либо удаляют отдельно, либо переходят на режим без сохранения _original.

Команда ExifTool -all= и созданная резервная копия с суффиксом _original

Опция -overwrite_original отключает создание резервной копии с суффиксом, но ExifTool всё равно использует временный файл при безопасной перезаписи. Это означает, что ключ не превращает изменение в небезопасную «правку на месте» и сам по себе не обязан заметно ускорять операцию. Его смысл — не оставлять рядом дополнительный исходный файл.

exiftool -overwrite_original -Artist="Иван Петров" photo.jpg

Есть и -overwrite_original_in_place. В этом режиме исходный файл заменяется через копирование временного файла поверх него, что позволяет сохранять больше файловых атрибутов и расширенных свойств, особенно на macOS. Цена — дополнительная работа ввода-вывода, поэтому применять этот режим ко всей коллекции без необходимости не стоит.

Ключ -P сохраняет значение FileModifyDate. Это важно, когда каталог сортируется по времени изменения файла или система резервного копирования использует его как сигнал. Следует понимать различие: FileModifyDate относится к файловой системе, а DateTimeOriginal — к метаданным съёмки. Изменение одного не обязано менять другое.

exiftool -P -XMP-dc:Description="Готово" photo.jpg

Перед массовой записью желательно сделать независимую резервную копию каталога, даже если планируется оставить _original. Причина проста: резервные копии ExifTool находятся рядом с рабочими файлами и не защищают от ошибок выбора каталога, последующего удаления или аппаратного сбоя. Для критичного архива лучше иметь копию на другом носителе или в системе версионирования файлов.

Удаление метаданных без неверных ожиданий

Команда -all= удаляет доступные для удаления группы метаданных, но её нельзя воспринимать как универсальный «санитайзер» для любого формата. В JPEG пиксельные данные и метаданные относительно хорошо отделены, однако вместе с тегами можно удалить сведения о цветовом пространстве и ICC-профиль, что потенциально меняет отображение цвета. В проприетарных RAW-файлах метаданные могут содержать сведения, необходимые для корректной интерпретации изображения, поэтому полное стирание для RAW делать не следует.

exiftool -all= photo.jpg

После этой команды по умолчанию рядом останется исходный файл с суффиксом _original. Если добавить -overwrite_original, изменённый файл сохранится без этой резервной копии.

Проверка ExifTool после удаления метаданных из PNG-файла

Для JPEG официальный рекомендуемый подход к более аккуратному удалению сохраняет ICC-профиль и возвращает теги цветового пространства. Такая команда выглядит сложнее, зато избегает типичной ошибки, когда пользователь удаляет приватные данные вместе с технической информацией, влияющей на цвет:

exiftool -ext jpg -all= --icc_profile:all -tagsfromfile @ -colorspacetags DIR

Здесь сначала удаляются метаданные, кроме ICC Profile, затем из исходного файла @ обратно копируются теги цветового пространства. Эта конструкция предназначена именно для JPEG. Применять её механически к RAW, PDF или видео не нужно: набор групп и последствия записи у разных контейнеров отличаются.

Если требуется убрать только EXIF, а XMP и другие блоки сохранить, задают группу:

exiftool -EXIF:all= photo.jpg
ExifTool удаляет метаданные с параметром -overwrite_original

Аналогично можно удалить определённое пространство XMP, например -XMP-dc:all=. Вложенность групп тоже имеет значение. Удаление EXIF из JPEG затрагивает подчинённые IFD, включая GPS и MakerNotes; удаление Photoshop-группы затрагивает встроенный IPTC. Поэтому перед удалением целой группы полезно прочитать файл с -G1 -a, чтобы понимать реальную структуру.

Проверка после очистки

После удаления метаданных файл снова читают ExifTool. Наличие строк FileName, FileSize, MIMEType, размеров изображения и других технических сведений не означает, что удаление «не сработало»: часть этих значений вычисляется из файловой системы или структуры самого формата и не является приватным EXIF-блоком. Смысл проверки — убедиться, что исчезли целевые группы: GPS, автор, серийные номера, описания или XMP, которые планировалось удалить.

ExifTool показывает оставшиеся данные после удаления только EXIF-группы

Если задача связана с публикацией, полезно проверять уже тот файл, который будет отправлен, а не только мастер-копию. Некоторые редакторы при экспорте добавляют собственные XMP-поля или сохраняют часть EXIF заново. ExifTool удобен как последний контрольный этап: одна команда может показать целевые приватные теги для партии готовых файлов.

Копирование метаданных между файлами

Ключевой механизм переноса — -tagsFromFile. Он указывает источник, из которого значения копируются в целевой файл. Без дополнительного списка ExifTool пытается перенести все подходящие теги в предпочтительные места назначения. Для контролируемой работы лучше указывать конкретные теги или группы, особенно если исходник и результат имеют разные форматы.

exiftool -tagsFromFile source.jpg target.jpg
exiftool -tagsFromFile source.jpg -DateTimeOriginal -GPS:all target.jpg

Символ @ означает текущий обрабатываемый файл и часто используется, когда нужно скопировать одно поле в другое внутри того же файла. Например, можно заполнить файловую дату временем съёмки или перенести EXIF-описание в XMP. В оболочках, где символы < и $ имеют специальное значение, аргумент обязательно заключают в правильные кавычки.

exiftool "-FileModifyDate<DateTimeOriginal" photo.jpg
exiftool "-XMP-dc:Description<EXIF:ImageDescription" photo.jpg

При копировании между разными пространствами ExifTool не просто копирует байты: он читает значение исходного тега и записывает его в допустимый тег назначения. Это полезно для миграции EXIF/IPTC в XMP, но означает, что не все неизвестные и защищённые поля переносятся автоматически. Если требуется поблочное сохранение неизвестных структур, используют бинарное копирование соответствующего блока или sidecar-формат, который подходит для этой задачи.

Для пары «RAW + обработанный JPEG» типичный сценарий состоит в переносе рейтинга, авторских данных, ключевых слов и координат в JPEG, не трогая служебные MakerNotes RAW-файла. То есть вместо -all:all лучше перечислить нужные группы. Такой подход устойчивее, когда исходник и целевой контейнер по-разному представляют техническую информацию.

Даты и время: исправление часов камеры и синхронизация полей

В фотоколлекции одновременно встречаются несколько временных полей, и они отвечают на разные вопросы. DateTimeOriginal обычно обозначает момент съёмки, CreateDate — дату создания цифрового содержимого в конкретном стандарте, ModifyDate — время изменения метаданных, а FileModifyDate и FileCreateDate относятся к файловой системе. В видео QuickTime могут присутствовать собственные поля создания и изменения. Перед исправлением времени полезно вывести их вместе с группами.

exiftool -G1 -a -s -time:all photo.jpg

Если часы камеры отставали или спешили на постоянную величину, ExifTool умеет сдвигать дату арифметически, не пересчитывая каждый файл вручную. Оператор += для временного тега означает сдвиг вперёд, а отрицательное значение позволяет двигаться назад. Формат смещения строится по схеме «годы:месяцы:дни часы:минуты:секунды».

exiftool "-DateTimeOriginal+=0:0:0 1:30:0" photo.jpg
exiftool "-DateTimeOriginal-=0:0:0 0:15:0" photo.jpg

Одного DateTimeOriginal может быть недостаточно. Камера нередко записывает также CreateDate и ModifyDate, а программы каталогизации ориентируются на разные поля. Если цель — согласованно сдвинуть несколько дат съёмки, их перечисляют явно. Автоматически изменять все временные поля подряд рискованно, потому что среди них могут быть служебные даты, которые должны оставаться неизменными.

exiftool "-DateTimeOriginal+=0:0:0 2:0:0" 
         "-CreateDate+=0:0:0 2:0:0" 
         photo.jpg

При работе с каталогом та же операция выполняется сразу для всех подходящих файлов. Если есть вложенные папки, добавляют -r. До пакетной записи разумно сначала вывести будущую выборку: например, прочитать DateTimeOriginal только у JPEG и убедиться, что в неё не попали экспортированные копии или изображения из другой камеры.

Часовые пояса и видео

EXIF-даты старых камер часто не содержат часовой пояс. В этом случае строка вроде 2024:07:15 18:30:00 сама по себе не говорит, к какому UTC-смещению она относится. Добавить фиксированный часовой пояс можно в совместимые XMP-поля или использовать его при вычислении, но ExifTool не способен достоверно угадать, где находилась камера. Для архивной коррекции сначала определяют реальную локальную зону и только потом строят команду.

В QuickTime-контейнерах ситуация сложнее: некоторые целочисленные временные поля по спецификации должны храниться в UTC, но камеры и телефоны иногда записывают туда локальное время. Поэтому одинаковая команда для JPEG и MP4 может дать визуально разный результат в других программах. Если корректируются видео, нужно проверить именно те QuickTime-группы, которые читает целевая медиатека, и после записи открыть несколько файлов в ней для контроля.

Синхронизация даты файла с датой съёмки

Если после копирования архива файловая дата стала сегодняшней, её можно восстановить из метаданных. Конструкция копирования переносит значение DateTimeOriginal в FileModifyDate:

exiftool "-FileModifyDate<DateTimeOriginal" photo.jpg

Для смешанной коллекции сначала следует убедиться, что DateTimeOriginal присутствует. Если исходного тега нет, ExifTool не должен выдумывать время. В массовом сценарии можно использовать условие -if, чтобы менять только файлы, где поле найдено.

exiftool -if "$DateTimeOriginal" 
         "-FileModifyDate<DateTimeOriginal" DIR

В Windows PowerShell выражение с долларом заключают в одинарные кавычки, иначе оболочка попытается подставить свою переменную. В CMD правила другие. Это типичный случай, когда одна и та же логика ExifTool требует различного синтаксиса кавычек в разных оболочках.

Переименование и раскладка по папкам на основе метаданных

ExifTool рассматривает FileName и Directory как псевдотеги, которые можно записывать. Благодаря этому имя файла и путь вычисляются из даты съёмки, модели камеры или других тегов. Такой механизм удобен при импорте карт памяти, где файлы называются DSC_0001.JPG, IMG_1234.HEIC или повторяются между устройствами.

Классический шаблон переименования использует дату съёмки:

exiftool "-FileName<DateTimeOriginal" 
         -d "%Y-%m-%d_%H-%M-%S%%-c.%%e" DIR

Ключ -d задаёт формат даты. Последовательности %Y, %m, %d, %H, %M, %S формируют дату и время. Двойной процент перед %c и %e нужен, потому что эти коды относятся к системе имён ExifTool и проходят через форматирование даты. %%e сохраняет исходное расширение, а %%c добавляет номер копии при конфликте имён.

Если два кадра сняты в одну секунду, шаблон без %%c может столкнуться с существующим именем. Поэтому в реальном импорте счётчик безопаснее включать заранее. Можно также использовать доли секунды, если камера их записывает, но не следует рассчитывать, что они есть у каждого файла.

Для раскладки по каталогам записывают Directory. Например, структура «год/месяц» строится по дате:

exiftool "-Directory<DateTimeOriginal" 
         -d "%Y/%m" DIR

Команда физически перемещает файлы, поэтому её особенно важно тестировать на копии. Если дата отсутствует или содержит неверное значение, файл может остаться на месте либо попасть не туда, куда ожидалось. Для большого архива лучше сначала вывести таблицу FileName + DateTimeOriginal и найти пустые или аномальные строки.

Шаблоны можно комбинировать: создавать каталоги по году и месяцу, а имя — по времени и камере. Однако чем больше переменных участвует в имени, тем важнее нормализовать символы. Модель камеры может содержать пробелы, слеши или знаки, которые запрещены в конкретной файловой системе. Для таких случаев применяют выражения и пользовательское форматирование, а не слепо вставляют текст тега в путь.

Пакетная обработка каталогов

Сильная сторона ExifTool — одинаковая операция для множества файлов без предварительного добавления их в проект. Если в конце команды указан каталог, программа обрабатывает файлы этого каталога. Ключ -r рекурсивно проходит вложенные папки. Расширения отбирают через -ext; параметр можно повторять.

exiftool -r -ext jpg -ext jpeg -ext png 
         -Copyright="© Иван Петров" DIR

В отличие от маски оболочки, -ext фильтрует уже внутри ExifTool и одинаково понятен в разных системах. Это полезно, когда в каталоге лежат sidecar-файлы, видео и документы, которые не должны участвовать в операции.

ExifTool в Windows читает метаданные нескольких JPEG через маску имени

Перед записью можно выполнить ту же выборку с тегом на чтение:

exiftool -r -ext jpg -ext jpeg -ext png 
         -FileName -Copyright DIR

Так видно количество и состав файлов. После изменения ExifTool сообщает, сколько файлов было обновлено, сколько осталось без изменений и сколько дало ошибки. Эти итоговые строки важнее субъективного ощущения «команда отработала»: по ним видно, совпала ли реальная выборка с ожидаемой.

Условия через -if

-if позволяет выполнять операцию только для файлов, где выражение истинно. Это один из наиболее полезных инструментов для аккуратной миграции архива. Например, можно записать авторское поле только туда, где оно пусто, не перезаписывая существующие значения.

exiftool -r -if "not $XMP_dc_Creator" 
         -XMP-dc:Creator="Иван Петров" DIR

Имена тегов внутри выражения преобразуются в форму, допустимую для переменной; в сложных условиях лучше сверяться с синтаксисом ExifTool и тестировать выражение на чтении. Для поиска файлов условие можно сочетать с -FileName и не выполнять запись, пока выборка не будет понятна.

Условие полезно и для технических фильтров: например, обрабатывать только файлы определённой модели камеры, только кадры после заданной даты или только изображения с GPS. В отличие от ручного отбора в проводнике, правило сохраняется в команде и может быть воспроизведено на следующей партии.

Исключение каталогов и управление обходом

При рекурсивном проходе можно исключать служебные подкаталоги через -i. Это помогает не трогать каталоги превью, резервные копии или экспорт. Если дерево содержит сотни тысяч файлов, фильтрация до чтения лишних типов уменьшает ненужную работу. В сценариях интеграции также полезен -progress, который выводит ход обработки.

Для повторяемого рабочего процесса стоит хранить команду в текстовом скрипте вместе с комментарием о назначении. Сам ExifTool принимает аргументы из файла через -@; это удобнее очень длинной строки и уменьшает риск ошибок при копировании. Каждый аргумент обычно размещается на отдельной строке.

Чтение нескольких файлов и маски имён

На Windows и Unix можно передать несколько файлов, каталог или маску, но обработка масок частично зависит от оболочки. Надёжнее поручать фильтрацию расширений самому ExifTool через -ext. Команда ниже читает метаданные всех JPEG в каталоге и его подкаталогах независимо от регистра расширения:

exiftool -r -ext jpg -DateTimeOriginal -Model DIR
ExifTool выводит DateTimeOriginal для серии JPEG-файлов по маске

Если вместо каталога указать шаблон вроде *.jpg, оболочка может раскрыть его до запуска программы. На небольшом наборе это нормально, но при огромном числе файлов возможны ограничения длины командной строки. Передача каталога с -ext не создаёт такой проблемы.

Для вывода, который затем будет читать другая программа, рекомендуется не парсить «красивые» строки с двоеточиями. У ExifTool есть табличные, CSV, JSON и XML-режимы. Они сохраняют связь «файл — тег — значение» гораздо надёжнее и уменьшают зависимость от локализации или пробелов.

Экспорт метаданных в CSV, JSON и табличный текст

Когда метаданные нужно анализировать вне терминала, ExifTool умеет выдавать структурированный результат. Для простых таблиц применяют -T или -t, для обмена с электронными таблицами — -csv, для программ и скриптов — -j или -json. В отличие от ручного переноса строк из консоли, эти режимы сохраняют однозначную связь между полями и исходными файлами.

CSV удобен для инвентаризации фототеки. Например, можно выгрузить имя файла, дату съёмки, камеру, объектив и координаты:

exiftool -csv -FileName -DateTimeOriginal -Model 
         -LensModel -GPSLatitude -GPSLongitude DIR > metadata.csv

Первая колонка экспортированного CSV содержит специальное поле SourceFile. Оно связывает строку с файлом при обратном импорте. Если таблица затем редактируется вручную, нельзя бездумно менять пути в этой колонке: ExifTool сопоставляет входные строки с целями именно по SourceFile. Несовпавшая строка не должна записываться «в ближайший» файл; программа выдаёт предупреждение и пропускает такую запись.

CSV хорошо подходит для плоских значений — рейтинга, автора, описания, дат, GPS. Структурированные XMP-поля и многозначные списки могут требовать более аккуратного представления. Перед обратным импортом полезно экспортировать небольшой набор, посмотреть, как именно ExifTool сериализует нужный тег, и не перестраивать формат таблицы вручную.

exiftool -csv=metadata.csv DIR

Импорт записывает теги, перечисленные в строке заголовков. FileName и Directory в этом режиме не используются как обычные поля импорта из CSV; назначение таблицы — массовая запись метаданных по соответствующим исходным файлам. Если нужно переименование, его лучше выполнять отдельной командой через псевдотеги.

JSON для скриптов и API

Режим -j выводит массив JSON-объектов, каждый из которых содержит SourceFile и найденные теги. Он удобен для Python, JavaScript, PowerShell и других языков, потому что не требует разбора выровненных колонок. С -G в имена добавляются группы, а -struct сохраняет XMP-структуры вместо полного разворачивания в плоские поля.

exiftool -j -G1 -DateTimeOriginal -Model -GPS:all DIR > metadata.json

У JSON есть нюанс: ExifTool может выводить значения без кавычек, если они выглядят как числа, независимо от исходного типа хранения. Для строго типизированного потребителя это иногда нежелательно. API-параметр StructFormat=JSONQ заставляет заключать такие числа в кавычки. Многозначные XMP-теги по умолчанию становятся массивами, если не использован -sep.

JSON, как и CSV, можно использовать для обратного импорта. В каждой записи должен присутствовать SourceFile, который указывает соответствующий файл. Для миграций между системами это удобнее серии отдельных команд: таблицу или JSON можно сформировать программно, проверить дифф и только потом применить к архиву.

XML, HTML и диагностический дамп

Опция -X формирует RDF/XML. Она пригодна, если существующая система уже работает с XML или нужно сохранить семантику групп. -h выводит HTML-представление метаданных. Ещё один специализированный режим — -htmlDump: он строит HTML-дамп бинарной структуры EXIF/TIFF и помогает разбирать смещения, сегменты и неизвестные блоки. Для обычного изменения автора или даты этот уровень не нужен, но при анализе повреждённого файла он полезнее, чем краткий список тегов.

GPS и геотегирование по треку

ExifTool умеет не только читать готовые GPS-координаты, но и вычислять их для фотографий по журналу трека. Логика основана на времени: программа загружает точки GPS, берёт время снимка, находит соседние точки трека и интерполирует позицию. Поэтому качество результата зависит прежде всего от корректной синхронизации часов камеры и GPS-устройства.

Базовая команда выглядит так:

exiftool -geotag track.gpx DIR

Если в файлах есть подходящее время съёмки, ExifTool записывает широту, долготу и доступные дополнительные GPS-поля. Поддерживаются GPX, несколько вариантов NMEA, KML, IGC, Garmin XML/TCX, Google Takeout JSON и ряд CSV-форматов. Это позволяет применять один механизм к трекам разных устройств без предварительного преобразования в единый формат.

Если часы камеры отставали от GPS на 25 секунд, поправку задают через -geosync:

exiftool -geotag track.gpx -geosync=+25 DIR

При более сложном дрейфе можно задавать несколько опорных синхронизаций по уже геотегированным фотографиям; тогда корректировка времени интерполируется между ними. Это полезно для длинных съёмок, когда ошибка часов менялась постепенно, а не была постоянным смещением.

Для выбора другого временного поля назначают Geotime. Например, можно привязать позицию к CreateDate или явно добавить часовой пояс. Здесь особенно важны кавычки, потому что аргумент содержит оператор копирования.

exiftool -geotag track.gpx 
         "-geotime<${DateTimeOriginal}+03:00" DIR

На Windows CMD эта форма допустима с двойными кавычками, а в PowerShell знак доллара будет интерпретироваться самой оболочкой. Там аргумент лучше заключать в одинарные кавычки. Если ExifTool сообщает, что время слишком далеко от трека, нужно проверить часовой пояс, смещение камеры, начало и конец журнала. Режим -v2 показывает, сколько точек загружено, диапазон времени трека и вычисленное UTC-время фотографии.

Для видео MP4 координаты можно записывать в QuickTime Keys. Выбор конкретной группы зависит от того, какое приложение затем читает файл. Универсального утверждения «GPS в MP4» недостаточно: разные программы смотрят на разные QuickTime-области, поэтому после записи нужно проверить результат в целевой системе.

Sidecar-файлы и сохранение метаданных отдельно от оригинала

ExifTool может создавать отдельные файлы метаданных. Самый распространённый вариант — XMP sidecar. Он полезен, если мастер-файл нельзя или нежелательно переписывать, а ключевые слова, рейтинг, описание и другие данные должны храниться рядом. Для RAW это типичная модель: изображение остаётся нетронутым, а каталогизатор использует файл с тем же базовым именем и расширением .xmp.

Создать XMP из доступных метаданных исходника можно так:

exiftool -tagsFromFile photo.nef photo.xmp

Если нужно генерировать sidecar для всего дерева RAW, применяются шаблоны имён и -o:

exiftool -ext nef -o %d%f.xmp -r DIR

%d означает каталог исходного файла, %f — имя без расширения. Команда создаёт sidecar рядом с каждым NEF. Если нужно перенести только XMP, а не отображать одноимённые EXIF/IPTC-теги в предпочтительные пространства XMP, добавляют конкретную группу, например -xmp:all.

Обратный перенос из sidecar в изображение выполняется через -tagsFromFile с шаблоном:

exiftool -ext jpg -tagsFromFile %d%f.xmp -all:all -r DIR

Запись -all:all в таком контексте сохраняет конкретные группы XMP, насколько это возможно, вместо переноса одноимённых тегов в предпочтительные пространства. Это важно, когда пространство имён имеет смысл само по себе, например для Lightroom, Dublin Core или IPTC Extension.

Кроме XMP, ExifTool работает с отдельными EXIF, MIE, EXV, ICC и VRD-файлами. MIE особенно полезен для резервирования сложного набора метаданных, включая бинарные блоки. Но экосистема поддержки у него уже, чем у XMP, поэтому для обмена между редакторами чаще выбирают XMP, а MIE используют как технический контейнер внутри собственного процесса.

Поддержка форматов: чтение шире, чем запись

Одна из особенностей ExifTool — очень широкий перечень распознаваемых файлов. Программа читает метаданные фотографий JPEG, TIFF и множества RAW, понимает PNG, WebP, HEIF/HEIC, JXL, PSD, PDF, аудиофайлы, архивы, документы и контейнеры QuickTime/RIFF. Но поддержка конкретного расширения не означает, что все типы метаданных в нём можно записывать. Для каждого формата и группы существуют собственные ограничения.

JPEG — один из наиболее предсказуемых вариантов для чтения и записи EXIF, IPTC, XMP и ICC. TIFF и DNG также имеют развитую поддержку, но структура сложнее. В проприетарных RAW ExifTool умеет читать MakerNotes очень многих камер и для части форматов записывает безопасные области, однако полное удаление метаданных не рекомендуется: производитель может хранить в MakerNotes сведения, необходимые для демозаики, коррекций или отображения превью.

PNG содержит текстовые чанки, XMP, EXIF и ICC, но набор реально используемых полей зависит от программы, которая создала файл. Некоторые приложения игнорируют метаданные, расположенные после IDAT, поэтому ExifTool при записи старается размещать их там, где совместимость выше. Ключ -fast в отдельных режимах может прекращать разбор раньше и, следовательно, пропустить хвостовые данные.

В HEIC/HEIF и CR3 метаданные находятся в контейнере семейства BMFF/QuickTime. Там встречаются EXIF, XMP, ItemList, Keys и служебные атомы. Чтение обычно богато, но перед массовой записью следует проверить конкретный тег: не каждое значение, которое ExifTool показывает, является writable.

Для MP4/MOV ExifTool умеет читать множество параметров аудио, видео, GPS и данных камер, а также записывать часть QuickTime и XMP-тегов. При создании тега без уточнения группы программа выбирает предпочтительное место, но для интеграции с конкретной медиатекой лучше указать Keys:, ItemList: или UserData: осознанно.

PDF поддерживается на чтение и запись метаданных, включая XMP и нативные PDF-поля. Запись выполняется как инкрементальное обновление: новая информация добавляется в конец документа, а старые данные физически могут оставаться в предыдущих ревизиях. Поэтому простое изменение или «удаление» PDF-метаданных через ExifTool не следует считать методом гарантированного уничтожения прежних значений. Для приватизации PDF после правки требуется отдельная процедура полной перезаписи/санитизации документа.

Кроме того, инкрементальная запись нарушает линейность linearized PDF. Если быстрый веб-просмотр по частям важен, после изменения документ нужно заново линеаризовать специализированным инструментом. Это пример ограничения, которое не видно по простой команде -Title=, но важно в производственном процессе.

Автоматизация: файлы аргументов, -stay_open и повторяемые команды

Длинную команду необязательно держать в одной строке оболочки. Ключ -@ читает аргументы из текстового файла. Такой файл удобно хранить рядом со скриптом, проверять в системе контроля версий и использовать на разных компьютерах. Обычно каждый аргумент помещается на отдельной строке: имя тега, значение, фильтр расширения, условие и путь.

-r
-ext
jpg
-ext
jpeg
-XMP-dc:Creator=Иван Петров
-Copyright=© Иван Петров
DIR

Запуск выполняется так:

exiftool -@ job.args

Преимущество arg-файла — не только длина. В командной строке оболочка может обработать звёздочки, знаки доллара, угловые скобки и кавычки до того, как их увидит ExifTool. В файле аргументов часть таких проблем исчезает, потому что параметры читаются напрямую. При этом кодировка имён файлов и текста всё равно должна соответствовать настройкам ExifTool, особенно на Windows.

Постоянный процесс через -stay_open

Если приложение вызывает ExifTool для каждого файла отдельно, значительная доля времени уходит на запуск интерпретатора и загрузку таблиц тегов. Для интеграций предусмотрен -stay_open True: ExifTool остаётся запущенным и принимает новые аргументы через поток или arg-файл. После блока аргументов вызывающая программа отправляет -execute, получает результат и маркер готовности, затем передаёт следующий блок.

Этот режим особенно полезен для графических оболочек, медиасерверов и собственных скриптов, которые делают сотни мелких запросов. Он не ускоряет сам разбор конкретного тяжелого файла, но убирает повторный старт процесса. В конце сеанса приложение должно корректно отправить команду закрытия, иначе дочерний процесс останется ждать новые задания.

Для синхронизации можно добавлять идентификатор к -execute; тот же номер появляется в маркере {ready}. Это помогает клиенту отличать ответы на разные запросы, если команды подаются асинхронно. В логике интеграции стоит разделять stdout, stderr и код возврата, а не определять успех только по наличию текста.

Пользовательская конфигурация

ExifTool допускает конфигурационный файл с пользовательскими тегами, ярлыками Shortcut и настройками API. Это механизм для нестандартных XMP-пространств, корпоративных полей и сложных вычисляемых значений. Конфигурация загружается параметром -config или из стандартного места. Если рабочий процесс зависит от пользовательских тегов, файл конфигурации является частью проекта и должен распространяться вместе со скриптами.

Создавать собственные теги без необходимости не стоит. Для обычных авторских данных, описаний, ключевых слов, рейтингов и GPS существуют стандартные пространства XMP/IPTC/EXIF, которые понимают другие программы. Пользовательское пространство оправдано, когда данные действительно не укладываются в стандарт и контролируется весь дальнейший обмен.

Производительность без выдуманных цифр

Скорость ExifTool зависит от количества файлов, их размера, формата, числа извлекаемых групп, диска и режима запуска. Поэтому универсальная цифра «файлов в секунду» мало полезна. Гораздо важнее понимать, какие параметры увеличивают объём работы и как сократить ненужные операции без потери нужных данных.

Первое правило — передавать много файлов одному процессу, а не запускать ExifTool отдельно для каждого. Команда на каталог или список файлов загружает программу один раз. Если архитектура приложения требует отдельных запросов, используется -stay_open.

Второе правило — читать только нужные теги. exiftool file.jpg удобен для диагностики, но при построении индекса обычно нужны десять-двадцать полей. Явный список уменьшает форматирование вывода и может сократить дополнительный анализ. Ещё сильнее на тяжёлых контейнерах влияет отказ от -ee, если вложенные потоки не требуются.

Третье правило — ограничивать расширения через -ext и не сканировать каталоги, которые заведомо не нужны. Это особенно заметно в смешанных папках с кэшем, резервными копиями, пакетами приложений и большим количеством мелких служебных файлов.

Опция -fast ускоряет чтение, прекращая часть дополнительного поиска. В JPEG она может не просматривать хвост на предмет некоторых видов метаданных, в RIFF — остановиться до хвостовых XMP, а более высокие уровни способны пропускать MakerNotes и другие данные. Поэтому -fast — не «ускорить без последствий», а сознательный компромисс: применять его стоит только если нужные теги гарантированно находятся в анализируемой части файла.

При записи скорость часто определяется физическим переписыванием контейнера. -overwrite_original не отменяет безопасную работу через временный файл, поэтому ожидать от него радикального ускорения неверно. -overwrite_original_in_place, наоборот, может быть медленнее из-за дополнительного копирования при сохранении файловых атрибутов.

Если данные экспортируются в программу, формат тоже влияет на объём. JSON с сотнями тегов и длинными бинарными строками тяжелее, чем -T с несколькими столбцами. Бинарные теги не следует включать через -b, если они не нужны. Для логов можно использовать короткие имена и подавлять лишний вывод, но предупреждения при массовой записи лучше сохранять.

Типичные ошибки и способы их устранения

«No writable tags set»

Сообщение No writable tags set означает, что ExifTool не нашёл, что можно записать в рамках команды. При копировании это может случиться, если исходный тег отсутствует, выбранная группа назначения не поддерживает запись или формат не позволяет создать такое поле. Не следует сразу добавлять ключ подавления предупреждений. Сначала нужно прочитать исходный и целевой файлы с -G1 -a -s и убедиться, что нужный тег существует.

Если предупреждение ожидаемо, например часть файлов действительно не содержит исходного поля, его можно фильтровать или использовать -if, чтобы такие файлы не попадали в запись. Это делает журнал чище и точнее показывает реальные проблемы.

Тег изменился, но другая программа показывает старое значение

Чаще всего причина — несколько одноимённых тегов. Например, заголовок может существовать в EXIF, IPTC и XMP, а просмотрщик читает только XMP. Нужно вывести группы и выяснить, где находится новое и старое значение. Затем либо записать конкретное пространство, либо синхронизировать нужные поля по правилам рабочего процесса.

Вторая причина — кэш. Каталогизатор может не перечитывать файл автоматически. В таком случае нужно обновить метаданные в самом приложении или переимпортировать тестовый файл. Сначала всё равно следует проверить значение непосредственно ExifTool: это отделяет проблему записи от проблемы чтения сторонней программы.

Значение даты «съехало» на несколько часов

Проверяются три вещи: исходное поле, часовой пояс и правила конкретного контейнера. EXIF DateTimeOriginal часто не содержит зоны, а QuickTime-поля могут трактоваться как UTC. Если дату копировали между ними напрямую, программа-потребитель может применить смещение. Полезно вывести все временные теги с -G1 -a -s -time:all и сравнить исходник, изменённый файл и отображение в целевой программе.

После удаления метаданных изменились цвета

Вероятнее всего был удалён ICC-профиль или теги цветового пространства. Для JPEG безопаснее сохранять ICC_Profile и возвращать ColorSpaceTags, а не использовать голое -all= без проверки. Если исходный файл с суффиксом _original сохранился, его можно вернуть и повторить очистку более выборочно.

После команды появились тысячи файлов *_original

Это штатное поведение записи по умолчанию. Сначала нужно проверить, что изменённые файлы корректны. После этого резервные копии можно удалить отдельной командой ExifTool -delete_original или средствами файловой системы. Для следующих партий, если независимая резервная копия уже сделана и риск понятен, добавляют -overwrite_original. Удалять _original до проверки результата не стоит.

Не обрабатываются файлы с необычными символами в именах

На Windows проблема часто связана с кодовой страницей и способом передачи аргументов. ExifTool поддерживает настройку -charset filename=UTF8 и широкосимвольный ввод-вывод, но сама оболочка должна корректно передать путь. Для сложных наборов имён надёжнее использовать arg-файл с заданной кодировкой или вызывать ExifTool из приложения, которое работает с Unicode-путями без промежуточного копирования через консоль.

Команда работает в CMD, но ломается в PowerShell

Причина обычно в кавычках. PowerShell интерпретирует $ как начало переменной, а < и другие символы могут иметь собственный смысл. Выражения ExifTool с подстановкой тегов, например "-FileName<${DateTimeOriginal}", в PowerShell часто нужно заключать в одинарные кавычки. Не стоит исправлять такую ошибку случайным экранированием: сначала следует определить, какой слой — оболочка или ExifTool — должен видеть каждый специальный символ.

Файл доступен только для чтения

ExifTool часто может переписать файл с атрибутом read-only, если у пользователя есть право записи в каталог и операция выполняется через новый временный файл. Но есть исключения: -overwrite_original_in_place, изменение только системных псевдотегов и некоторые случаи Unicode-путей на Windows требуют разрешения записи самого файла. Если команда чтения работает, а запись нет, нужно проверить и права каталога, и атрибуты файла.

Практический сценарий: привести в порядок архив после нескольких камер

Предположим, в одном каталоге лежат JPEG и RAW от двух камер, а часть фотографий была снята с неверно установленными часами. Цель — сохранить RAW как мастер-файлы, исправить даты JPEG, привести имена к единой схеме и выгрузить каталог в CSV. Работу разумно разделить на независимые этапы, чтобы одна ошибка не затронула всё сразу.

  1. Сделать резервную копию дерева каталогов.
  2. Выгрузить FileName, FileType, Model, DateTimeOriginal и CreateDate в CSV.
  3. По таблице определить, какие камеры или диапазоны дат требуют сдвига.
  4. Исправить даты только у нужной выборки через -if, модель камеры и расширение.
  5. Повторно выгрузить даты и сравнить результат.
  6. Переименовать файлы по проверенному DateTimeOriginal с защитой от совпадений.
  7. Создать XMP sidecar для RAW, если дальнейший каталогизатор работает через XMP.

Такой порядок лучше монолитной команды, которая одновременно исправляет время, переименовывает и пишет авторские данные. Отдельные стадии проще проверить, а при ошибке понятно, какой шаг её вызвал.

Практический сценарий: удалить приватные данные перед публикацией

Для готовых JPEG-файлов обычно достаточно удалить GPS, серийные номера и персональные текстовые поля, не трогая ICC-профиль и технические данные, нужные для корректного цвета. Полное -all= в этом случае может быть избыточным. Сначала можно посмотреть потенциально чувствительные группы:

exiftool -G1 -a -s -GPS:all -SerialNumber -OwnerName 
         -Artist -Copyright -XMP:all publish.jpg

После этого выбираются конкретные поля для удаления. Если политика требует удалить все XMP, можно очистить группу XMP:all, а EXIF оставить. Если требуется убрать только координаты, достаточно -GPS:all=. Такой выборочный подход снижает вероятность удалить полезную техническую информацию.

После обработки важно читать именно итоговый JPEG. Если затем файл проходит через редактор, мессенджер или экспортирующий сервис, метаданные могут измениться ещё раз. ExifTool фиксирует состояние файла в момент проверки, но не гарантирует, что следующая программа сохранит его неизменным.

Практический сценарий: восстановить метаданные после экспорта

Некоторые редакторы при сохранении производной копии сохраняют не все поля исходника. Если есть оригинальный RAW/JPEG и обработанный файл с тем же базовым именем, ExifTool может перенести выбранные авторские, временные и GPS-данные. Лучше копировать не «всё», а только то, что логически относится к снимку и должно пережить обработку.

exiftool -tagsFromFile original.jpg 
         -DateTimeOriginal -CreateDate -GPS:all 
         -XMP-dc:Creator -XMP-dc:Rights edited.jpg

Технические поля вроде размеров, компрессии, цветового профиля или сведений о программном обеспечении обработанного файла копировать из оригинала не нужно: они описывают уже другой файл. То же относится к MakerNotes камеры, которые могут ссылаться на структуру исходного RAW и не предназначены для произвольного переноса в JPEG.

Как читать вывод ExifTool без неверных выводов

Большой список тегов выглядит как единая таблица, но строки в нём имеют разное происхождение. Часть значений берётся из файловой системы, часть — из заголовка контейнера, часть — из EXIF/IPTC/XMP, часть вычисляется ExifTool как Composite. Если задача связана с происхождением файла или проверкой того, что физически записано внутри, нужно всегда смотреть группу тега.

Например, FileType и MIMEType определяются по структуре файла и не являются полями, которые фотограф «вписал» в EXIF. ImageSize может быть вычисляемым итогом. FileModifyDate принадлежит файловой системе. А EXIF:DateTimeOriginal или XMP-exif:DateTimeOriginal — собственно метаданные содержимого. Поэтому после «полной очистки EXIF» ExifTool всё равно показывает имя, размер, тип и размеры изображения: это нормальный результат.

Для технической диагностики полезен формат с короткими именами и группами:

exiftool -G1 -a -s file.jpg

Он менее красив, чем стандартный человекочитаемый вывод, зато показывает точные имена тегов, которые пригодятся для следующей команды. Если тег встречается несколько раз, -a не скрывает дубликаты. Это особенно важно для XMP и QuickTime, где один и тот же смысл может быть записан несколькими приложениями в разные места.

Значения «PrintConv» и исходные числа

ExifTool по умолчанию применяет преобразование для печати: внутренние числовые коды переводятся в понятный текст. Ориентация может выглядеть как Horizontal (normal), единицы разрешения — как inches, режим экспозиции — как подпись. Если скрипту нужен исходный код, применяется -n или суффикс # у конкретного тега.

Это различие важно при сравнении файлов. Два значения могут выглядеть одинаково после преобразования, хотя исходное представление отличается, и наоборот. Для отчётов людям удобнее обычный вывод, для миграций и машинных проверок — числовой или структурированный.

Работа с MakerNotes и данными конкретных камер

MakerNotes — производительские блоки внутри EXIF, где камеры сохраняют параметры, не предусмотренные базовым стандартом. ExifTool известен широкой поддержкой MakerNotes Canon, Nikon, Sony, Fujifilm, Panasonic, Olympus, Pentax, DJI, GoPro и многих других производителей. В них могут находиться серийные номера, настройки автофокуса, режимы съёмки, данные объективов, стабилизации и служебная информация.

Большинство MakerNotes удобно читать, но с записью следует быть значительно осторожнее. Смещения внутри этого блока могут зависеть от расположения данных в файле, а некоторые теги влияют на интерпретацию RAW. ExifTool защищает потенциально опасные поля и не переносит их слепо при массовом копировании. Если задача — изменить авторство, описание или ключевые слова, лучше использовать стандартные XMP/IPTC-теги, а MakerNotes оставить как оригинальную техническую запись камеры.

Если нужно скрыть серийный номер камеры перед публикацией, сначала следует определить, где он записан. В одном файле это может быть EXIF:SerialNumber, в другом — производительский MakerNotes-тег, в третьем — XMP auxiliary. Команда поиска с группами помогает увидеть все варианты:

exiftool -G1 -a -s -SerialNumber -InternalSerialNumber 
         -CameraSerialNumber file.jpg

После этого удаляются конкретные найденные поля, а не весь MakerNotes-блок. Если формат или тег не допускает безопасную запись, ExifTool сообщит об этом. В таком случае приватизацию лучше выполнять через экспорт изображения в новый файл из редактора с контролем метаданных, а не пытаться разрушить внутреннюю структуру RAW.

Точные фильтры по расширению, типу и содержимому

В большом хранилище файлов часто недостаточно фильтра по расширению. Расширение может быть ошибочным, а один каталог может содержать оригиналы, превью и экспортированные копии. ExifTool умеет использовать -if с любыми читаемыми тегами. Например, можно обработать только JPEG, снятые определённой камерой после конкретной даты.

exiftool -r -ext jpg 
  -if '$Model eq "Canon EOS R6" and $DateTimeOriginal ge "2024:01:01"' 
  -XMP-dc:Rights="© Иван Петров" DIR

В Bash и PowerShell внешние одинарные кавычки защищают знак доллара от оболочки. В Windows CMD тот же пример оформляется иначе. Если условие сложное, практичнее сначала выполнить его с чтением -FileName и посмотреть выборку, а уже затем заменить вывод на запись.

Для отсутствующих тегов условие нужно строить явно. Сравнение несуществующего значения со строкой может вести себя не так, как ожидает пользователь. Надёжный вариант — сначала проверить существование, затем содержание. При миграции авторов типичный фильтр выглядит как «если Creator отсутствует — записать; если присутствует — не трогать».

Можно фильтровать и по числовым характеристикам: ISO, ширине изображения, длительности видео, рейтингу. Однако нужно помнить про PrintConv. В выражениях ExifTool обычно предоставляет значение в форме, подходящей для сравнения, но для точных технических условий полезно проверить его через -n и тестовую выборку.

Шаблоны вывода и собственные отчёты

Опция -p позволяет задать шаблон строки, в которую подставляются значения тегов. Она полезна, когда CSV избыточен, а нужен компактный отчёт или команда для другого инструмента. Например, можно вывести имя файла, дату и модель в одной строке:

exiftool -p '$FileName | $DateTimeOriginal | $Model' DIR

В PowerShell такой шаблон следует заключать в одинарные кавычки, чтобы переменные не подставлялись оболочкой. В Windows CMD синтаксис отличается. Шаблон может содержать форматирование и условные выражения, но для сложной логики JSON обычно надёжнее: его проще разобрать стандартной библиотекой языка программирования.

Вместо перенаправления всего вывода можно использовать -w, чтобы создавать отдельный текстовый файл на каждый источник. Например, отчёт метаданных для каждой фотографии:

exiftool -a -G1 -s -w txt DIR

Такой режим удобен для архивной фиксации состояния перед изменениями. Важно не путать эти текстовые отчёты с XMP-sidecar: файл .txt — просто вывод для человека, он не является стандартным хранилищем метаданных и автоматически не синхронизируется с фотографией.

Контроль изменений: до, после и сравнение двух файлов

Для серьёзной пакетной операции полезно сохранять состояние до и после. Минимальный вариант — два JSON-экспорта одинакового набора тегов. Их можно сравнить обычным diff-инструментом и увидеть, какие значения реально изменились. Это надёжнее визуального просмотра нескольких фотографий.

exiftool -j -G1 -a -DateTimeOriginal -CreateDate 
         -GPS:all -XMP:all DIR > before.json

После записи выполняется тот же экспорт в after.json. Если менялась только дата, неожиданные изменения в GPS, рейтинге или описаниях сразу заметны. Для огромных архивов следует ограничивать набор тегов, иначе отчёты будут громоздкими.

У ExifTool есть и встроенный режим -diff, который сравнивает метаданные с одноимённым файлом или другой директорией. Он удобен, когда существуют две версии набора — до и после обработки. Дополнительные -G, -a и -v помогают понять, какие группы совпали и какие различаются.

Особенности удаления и приватности для разных типов файлов

Тип файла Что обычно можно сделать На что обратить внимание
JPEG Удалять EXIF, XMP, IPTC, GPS выборочно или группами Сохранить ICC и цветовые теги, если важен цвет
PNG Удалять EXIF/XMP и текстовые чанки Проверять ICC и дополнительные чанки после обработки
TIFF/DNG Редактировать широкий набор стандартных тегов Структура сложнее JPEG; тестировать на копии
RAW камеры Читать MakerNotes, менять поддерживаемые поля Не использовать бездумно -all=
MP4/MOV Читать и писать часть QuickTime/XMP Разные приложения используют разные группы
PDF Менять нативные поля и XMP Инкрементальная запись не стирает старые ревизии физически

Даже после удаления целевых метаданных приватность нельзя оценивать только по одному классу тегов. Имя файла может содержать дату, адрес или имя человека; изображение может визуально показывать номер дома, документ — содержать текстовые слои, а PDF — историю в предыдущей ревизии. ExifTool решает именно задачу метаданных и структуры поддерживаемых контейнеров, но не анализирует смысл пикселей и текста как система предотвращения утечек.

Работа с видео и аудио

Название ExifTool вводит в заблуждение, если воспринимать его как утилиту только для EXIF фотографий. В MOV/MP4 она читает QuickTime-атомы, параметры кодеков, размеры, частоты кадров, даты, GPS и производительские поля, а в аудиофайлах — ID3 и другие метаданные в зависимости от формата. Но возможности записи неодинаковы: то, что читается, не обязательно можно изменить.

Для видео полезно сначала вывести группы:

exiftool -G1 -a -s video.mp4

После этого видно, где находятся Title, Description, GPSCoordinates, CreateDate и другие поля. Если задача — совместимость с Apple-экосистемой, монтажной программой или медиасервером, следует выяснить, какую QuickTime-группу он предпочитает. Запись «без группы» может быть технически корректной, но сторонняя программа просто не посмотрит в выбранное ExifTool место.

При чтении больших видеофайлов основная масса медиаданных не декодируется: ExifTool анализирует контейнер и метаданные. Однако -ee может заставить извлекать информацию из встроенных потоков и существенно увеличить работу. Для каталогизации длительности, разрешения, кодека, даты и GPS обычно достаточно обычного режима с явным списком тегов.

ExifTool как часть скрипта, а не как интерактивная программа

В автоматизации полезно относиться к ExifTool как к внешнему процессу с чётким входом и выходом. Не следует разбирать стандартный формат «Tag : Value» регулярными выражениями, если доступен JSON. Скрипт должен проверять код возврата, stderr, число обновлённых файлов и наличие ожидаемых полей. Если операция изменяет данные, желательно вести журнал исходного пути, команды и времени выполнения.

Для безопасной архитектуры пакетного сервиса удобно разделить этапы: сначала сервис вызывает ExifTool в режиме чтения и строит план изменений; затем пользователь или автоматическое правило подтверждает план; только после этого выполняется запись. Такой подход уменьшает риск, что ошибка в фильтре сразу изменит тысячи файлов.

При длительном процессе -stay_open экономит стоимость повторного запуска, но клиент обязан разделять команды маркерами -execute и корректно читать {ready}. Нельзя просто отправить строку, прочитать произвольное количество байтов и предположить, что ответ закончился.

Если нужен прямой доступ из Perl, дистрибутив содержит модуль Image::ExifTool. Он предоставляет программный API без отдельного процесса. Для приложений на других языках чаще используют CLI с JSON и постоянным режимом, либо специализированные обёртки, которые внутри всё равно управляют процессом ExifTool.

Практический сценарий: выгрузить каталог для инвентаризации

Если задача — понять, из каких камер и дат состоит большой архив, лучше не начинать с изменения файлов. Сначала строится инвентаризационная таблица. Для фотографий полезны поля SourceFile, FileType, ImageWidth, ImageHeight, DateTimeOriginal, Model, LensModel, ISO, ExposureTime, FNumber, GPS и авторские теги.

exiftool -r -csv 
  -FileType -ImageWidth -ImageHeight -DateTimeOriginal 
  -Model -LensModel -ISO -ExposureTime -FNumber 
  -GPSLatitude -GPSLongitude -XMP-dc:Creator DIR > inventory.csv

После открытия CSV в табличном редакторе можно сортировать по модели, искать пустые даты, находить координаты и проверять, насколько единообразно заполнены авторские поля. Если таблица нужна только для анализа, исходные файлы остаются нетронутыми.

Для автоматической обработки лучше выбрать JSON и затем анализировать его скриптом. Например, можно выявить файлы без DateTimeOriginal, собрать диапазоны дат по каждой модели камеры, найти одинаковые серийные номера или подготовить список файлов, которые требуют ручной проверки. Такая архитектура разделяет чтение и изменение и поэтому лучше масштабируется.

Практический сценарий: исправить время только у одной камеры

Предположим, в общей папке лежат снимки двух камер, а одна из них всю поездку отставала на 42 минуты. Нельзя просто сдвинуть все JPEG. Сначала выясняется точное значение Model, которое записано в файлах проблемной камеры:

exiftool -r -ext jpg -Model -FileName DIR

Затем проверяется выборка через -if без записи:

exiftool -r -ext jpg 
  -if '$Model eq "NIKON Z 6_2"' 
  -FileName -DateTimeOriginal DIR

После проверки добавляется сдвиг к нужным временным тегам. Какие именно поля менять, зависит от процесса: для фототеки обычно синхронизируют DateTimeOriginal и CreateDate, но не трогают файловые даты, если они используются системой резервного копирования.

exiftool -r -ext jpg 
  -if '$Model eq "NIKON Z 6_2"' 
  "-DateTimeOriginal+=0:0:0 0:42:0" 
  "-CreateDate+=0:0:0 0:42:0" DIR

После операции повторяется чтение той же выборки. Если результат корректен, резервные копии _original можно оставить до конца работы с архивом или удалить после независимого бэкапа. Такой поэтапный подход позволяет увидеть ошибку модели, кавычек или знака смещения на ограниченной выборке.

Практический сценарий: синхронизировать ключевые слова между IPTC и XMP

Старые каталоги могут хранить ключевые слова в IPTC, а новые программы предпочитают XMP. Простое копирование всех метаданных способно перенести лишние служебные поля. Если нужна только миграция ключевых слов, можно связать конкретные теги:

exiftool "-XMP-dc:Subject<IPTC:Keywords" DIR

Перед записью стоит посмотреть оба поля с -G1 -a. Если XMP Subject уже заполнен, обычное присваивание может заменить его. Для объединения списков требуется другой сценарий: прочитать существующие элементы, добавить отсутствующие и не создавать дублей. ExifTool поддерживает списковые операции, но логика объединения должна быть определена заранее, особенно если регистр или пробелы в ключевых словах отличаются.

Обратное направление тоже возможно, но IPTC имеет ограничения по длине и кодировке, которых нет у современного XMP. Поэтому миграцию из XMP в старый IPTC нельзя считать полностью без потерь для любого набора значений. Если конечная программа понимает XMP, разумнее оставить XMP источником истины.

Практический сценарий: подготовить медиаархив для разработчика

Разработчику часто не нужен полный дамп каждого файла. Достаточно стабильной схемы JSON с фиксированными полями. Например, для медиа-каталога можно получать путь, MIME-тип, размеры, длительность, дату, GPS и основные авторские данные. Если отдельного тега нет, код должен трактовать его как отсутствующий, а не подставлять значение из другого одноимённого поля без правила.

Для избежания конфликтов имён в JSON полезно добавить группы через -G1. Тогда EXIF:CreateDate и QuickTime:CreateDate не сольются в один ключ. Если же приложение хочет унифицированное поле captured_at, нормализация должна происходить в коде приложения: сначала выбирается приоритетный тег по типу файла, затем выполняется преобразование часового пояса.

При обработке пользовательских файлов сервис не должен разрешать произвольные аргументы ExifTool без фильтрации. Командная строка содержит мощные функции записи, чтения сторонних файлов и формирования имён. Безопаснее формировать список разрешённых тегов и параметров на сервере, а пользовательским данным передавать только пути и значения через безопасный интерфейс процесса.

Что ExifTool не заменяет

ExifTool меняет метаданные и отдельные структурные блоки, но не является редактором пикселей. Он не ретуширует кожу, не меняет фон, не удаляет объект со снимка, не корректирует экспозицию как RAW-конвертер и не рисует маски. Тег ExposureCompensation можно переписать как метаданные, но это не изменит яркость уже сформированного JPEG. Для визуальной обработки нужен фоторедактор или RAW-конвертер.

Программа также не является каталогизатором с визуальной библиотекой. Она может переименовать и разложить файлы по папкам, выгрузить ключевые слова и рейтинги, но не предлагает сетку миниатюр, альбомы, лица и интерактивный поиск как медиаменеджер. ExifTool часто работает «под капотом» таких систем как утилита чтения и записи.

Она не гарантирует, что стороннее приложение интерпретирует записанный тег именно так, как задумано. Стандарты метаданных допускают множество пространств и исторических вариантов, а программы выбирают собственные приоритеты. Поэтому при интеграции нужен контроль в целевом редакторе, DAM или медиасервере.

ExifTool не делает необратимую санитарную очистку PDF только удалением логического тега: инкрементальные ревизии могут сохранять прежние данные в файле. Не следует также использовать полное удаление метаданных проприетарного RAW как универсальный способ приватизации. В обоих случаях требуется понимать структуру формата и, возможно, создавать новый производный файл.

Ограничения интерфейса и цена гибкости

У ExifTool нет собственного современного графического интерфейса с таблицей файлов, формами полей и кнопкой «Применить». Основной интерфейс — командная строка. Для специалиста это даёт точность и повторяемость, но новичку приходится разбираться в именах тегов, группах и кавычках. Существуют сторонние оболочки, однако их функции и жизненный цикл не равны самому ExifTool; при оценке возможностей нужно различать ядро и отдельный GUI.

Второе ограничение — разница между чтением и записью. ExifTool читает намного больше полей, чем может безопасно изменять. Особенно это заметно в MakerNotes, контейнерах видео и редких форматах. Наличие тега в выводе нельзя воспринимать как обещание writable. Перед массовой правкой следует проверить таблицу тегов или выполнить тест на копии.

Третье ограничение — сложность семантики. Два тега с одинаковым названием могут принадлежать разным группам, а две программы могут считать «основным» разные варианты. ExifTool предоставляет инструменты для точной записи, но не принимает за пользователя решение, какое пространство метаданных должно быть источником истины.

Четвёртое — shell-зависимость синтаксиса. Одна и та же логика копирования тега может требовать разных кавычек в CMD, PowerShell, Bash и zsh. Если команды документируются для команды или компании, в инструкции необходимо явно указывать оболочку, а не только операционную систему.

Как строить безопасную команду для незнакомого архива

Для неизвестного набора файлов полезна последовательность от наиболее безопасного действия к наиболее рискованному. Сначала определяется состав файлов и расширения. Затем ExifTool читает группы и ключевые теги на выборке. После этого выполняется сухая проверка фильтров и условий. Запись тестируется на копии одного файла. Только когда итог проверен в ExifTool и в целевой программе, операция распространяется на весь каталог.

  1. Скопировать несколько типичных файлов в тестовую папку.
  2. Выполнить -G1 -a -s и определить реальные группы.
  3. Сформулировать цель в терминах конкретных тегов, а не «метаданных вообще».
  4. Проверить выборку с -if, -ext и чтением.
  5. Выполнить запись без -overwrite_original.
  6. Сравнить изменённый файл и _original.
  7. Проверить файл в программе, которая будет использовать его дальше.
  8. Только затем запускать пакетную обработку.

Если операция меняет имена или каталоги, стоит предварительно выгрузить таблицу SourceFile и DateTimeOriginal. Если меняются GPS или даты — сохранить JSON до и после. Если удаляются метаданные — перечислить, какие группы должны исчезнуть и какие обязаны остаться. Такой критерий успеха намного точнее команды «убрать всё лишнее».

Сравнение с аналогами

ExifTool корректно сравнивать не по числу кнопок, а по рабочей задаче. Его сильная сторона — точное обращение к тегам, форматам и пакетным правилам. ФотоМАСТЕР решает другую основную задачу: визуально редактирует изображение. Exiv2 ближе к ExifTool как командная утилита и библиотека, а Exif Pilot предлагает графическую работу с EXIF/IPTC/XMP и отдельный модуль для пакетных операций.

Программа Основная задача Метаданные Пакетная работа Визуальное редактирование фото
ExifTool Чтение, запись, перенос и автоматизация метаданных EXIF, IPTC, XMP, MakerNotes, QuickTime и многие другие группы Каталоги, рекурсия, условия, CSV/JSON, скрипты Нет
ФотоМАСТЕР Коррекция, ретушь и оформление фотографий Просмотр и удаление EXIF/GPS Есть пакетные операции с изображениями Да
Exiv2 CLI и C++-библиотека для метаданных изображений EXIF, IPTC, XMP, ICC, превью Командные сценарии и библиотечная интеграция Нет
Exif Pilot Графическое редактирование метаданных EXIF, GPS, IPTC, XMP, часть MakerNotes Расширенная пакетная правка через отдельный плагин Нет

ExifTool и ФотоМАСТЕР

ФотоМАСТЕР предназначен прежде всего для работы с самим изображением. В нём есть коррекция света и цвета, шумоподавление и повышение резкости, ретушь портретов, удаление объектов, замена и размытие фона, замена неба, эффекты, текст и коллажи. Пакетный режим применяется к визуальным задачам вроде фильтров, изменения размера и водяных знаков. Это функции, которых у ExifTool нет, потому что он не редактирует пиксельное содержимое.

При этом ФотоМАСТЕР умеет показывать сведения EXIF и GPS через окно информации о фотографии и позволяет удалить эти данные. В материалах разработчика отдельно указано, что IPTC и XMP в этом режиме не читаются. Поэтому для простой проверки параметров съёмки во время редактирования интерфейс ФотоМАСТЕРа удобен, но для миграции XMP, MakerNotes, QuickTime, CSV-импорта или условной обработки каталога нужен специализированный инструмент.

ExifTool, напротив, не улучшит фотографию визуально, зато позволяет точно выбрать группу, скопировать теги между файлами, сдвинуть даты, геотегировать по треку, переименовать архив на основе метаданных, экспортировать таблицу и автоматизировать процесс. Эти программы могут использоваться последовательно: визуальная обработка выполняется в фоторедакторе, а проверка и нормализация метаданных — отдельным этапом.

ExifTool и Exiv2

Exiv2 — наиболее близкая альтернатива по архитектуре: это командная утилита и C++-библиотека для EXIF, IPTC, XMP и ICC. Она умеет печатать метаданные, изменять и удалять теги, извлекать превью и миниатюры, работать с sidecar, менять временные отметки и переносить данные. Для проекта на C++ наличие нативной библиотеки может быть принципиальным преимуществом архитектуры, потому что не нужно управлять внешним Perl-процессом.

Различие проявляется в широте форматов и специальных функций. ExifTool читает огромное количество типов файлов и производительских MakerNotes, содержит развитые механизмы QuickTime, PDF, геотегирования, CSV/JSON-импорта, переименования и -stay_open. Exiv2 сосредоточен на изображениях; поддержка видео у него ограничена в основном чтением некоторых QuickTime, Matroska и RIFF-контейнеров. Выбор между ними зависит не от абстрактной «мощности», а от форматов проекта и языка интеграции.

Синтаксис Exiv2 и ExifTool различается, поэтому готовые команды не взаимозаменяемы. Если инфраструктура уже использует Exiv2 как библиотеку, переход ради одной операции может быть неоправданным. Если же требуется смешанный архив фото, видео, PDF и редких камерных форматов с единым CLI, набор поддерживаемых ExifTool сценариев обычно шире.

ExifTool и Exif Pilot

Exif Pilot ориентирован на пользователя Windows, которому удобнее выбирать папку и менять поля в графическом окне. Он показывает и редактирует EXIF, EXIF GPS, IPTC и XMP, умеет удалять метаданные, работать с ключевыми словами и экспортировать/импортировать EXIF и IPTC через XML, Excel и CSV. Часть MakerNotes также доступна для редактирования.

Главное практическое ограничение относительно ExifTool — пакетное изменение нескольких фотографий в Exif Pilot вынесено в отдельный платный Batch Editing Plug-in. С ним доступны массовое редактирование, единый файл экспорта/импорта и командная строка. Разработчик также указывает, что обрабатываемые файлы должны находиться в одном каталоге и что программа умеет изменять только известную ей часть огромного набора возможных EXIF-тегов.

ExifTool не требует графического окна для пакетной работы: рекурсия по дереву, условия, несколько расширений, перенос тегов и пользовательские схемы входят в основной CLI. Но цена — необходимость писать команды. Если нужно вручную поправить несколько полей у нескольких снимков и видеть форму перед глазами, Exif Pilot может быть понятнее. Если правила должны повторяться на больших деревьях каталогов и в скриптах, командная модель ExifTool естественнее.

Как выбрать инструмент по конкретной задаче

Для ретуши, коррекции цвета, удаления объектов или подготовки изображения к печати требуется фоторедактор — здесь сравнение с ExifTool заканчивается на границе метаданных. Для встраивания в C++-приложение с фокусом на EXIF/IPTC/XMP логично рассмотреть Exiv2. Для ручной правки полей в Windows без командной строки подходит класс программ вроде Exif Pilot. ExifTool оправдан там, где важны охват форматов, точная адресация групп, массовые правила и автоматизация.

Ни одна из альтернатив не отменяет необходимость тестировать совместимость конкретных тегов с программой-потребителем. Например, XMP может быть технически записан корректно, но DAM ожидает другое пространство имён; видео может содержать несколько вариантов Title; а старый IPTC может иметь ограничения кодировки. Выбор программы не заменяет описания схемы метаданных в рабочем процессе.

Какие команды стоит сохранить как рабочие шаблоны

Удобнее не запоминать десятки параметров, а держать несколько проверенных шаблонов и менять только путь, теги и условия. Для чтения структуры полезен -G1 -a -s. Для дат — -G1 -a -s -time:all. Для инвентаризации — -csv или -j с явным списком полей. Для безопасной записи — тестовый файл без -overwrite_original. Для каталога — -r, -ext и при необходимости -if.

Отдельный шаблон нужен для копирования: -tagsFromFile плюс конкретные группы. Для очистки — список приватных тегов или проверенная схема сохранения ICC, а не универсальное -all= для всех форматов. Для геотегирования — -geotag с явной проверкой часового пояса и при необходимости -geosync.

Если эти команды используются регулярно, лучше хранить их в скриптах или arg-файлах с комментариями о назначении и оболочке. Это уменьшает риск, что через несколько месяцев команда будет восстановлена по памяти с другим знаком, кавычками или группой назначения.

Итоговый рабочий подход

ExifTool особенно полезен в процессах, где метаданные должны быть воспроизводимыми: импорт фотоархива, нормализация дат, перенос авторских полей, экспорт каталога, очистка приватных GPS-данных, синхронизация sidecar и автоматическая обработка новых файлов. Его возможности раскрываются не в одной длинной команде, а в дисциплине «сначала прочитать и выбрать, затем изменить, затем проверить».

Для повседневной работы достаточно освоить несколько концепций: группы тегов, разницу между чтением и записью, резервные копии _original, фильтры -ext/-if, перенос -tagsFromFile, структурированный вывод CSV/JSON и правила кавычек своей оболочки. Остальные функции можно добавлять по мере необходимости.

Главное ограничение ExifTool одновременно является его преимуществом: программа не скрывает сложность метаданных за единой формой. Пользователь сам выбирает точный тег, группу и правило. Это требует аккуратности, но позволяет построить процесс, который одинаково выполняется на одном файле, на каталоге и внутри автоматизированной системы.

Проверка результата перед запуском на всём архиве

Удобный критерий готовности команды — возможность описать ожидаемый результат до её запуска. Если меняется автор, нужно знать, в какой группе он появится и какие существующие поля останутся нетронутыми. Если сдвигается время, нужно заранее перечислить изменяемые даты и величину смещения. Если удаляется GPS, после операции должны исчезнуть конкретные GPS-теги, но ICC-профиль и данные, не относящиеся к геолокации, должны сохраниться.

Для проверки записи полезно читать файл сразу двумя способами: коротким целевым запросом и диагностическим запросом с группами. Первый подтверждает нужное значение, второй показывает, не появилось ли оно неожиданно в нескольких пространствах. Например:

exiftool -XMP-dc:Creator -Copyright sample.jpg
exiftool -G1 -a -s -Creator -Artist -Copyright sample.jpg

При переименовании и перемещении следует отдельно проверить коллизии имён. Шаблон по секундам может дать одинаковое имя серии, а дата съёмки иногда отсутствует у сканов и скачанных изображений. Счётчик %%c, предварительная таблица дат и условие по наличию DateTimeOriginal предотвращают большую часть таких ситуаций.

Для массового импорта CSV или JSON стоит сначала оставить в таблице две-три строки и применить их к копии файлов. Это позволяет проверить SourceFile, кодировку, названия групп и типы значений. Только после корректного round-trip — экспорт, ручное изменение, импорт и повторный экспорт — имеет смысл применять тот же файл к большой коллекции.

Предупреждения не следует автоматически скрывать параметром -q. На этапе настройки они помогают обнаружить отсутствующие теги, несовместимый формат, неверное время трека или невозможность записи. Тихий режим уместен уже в стабильной автоматизации, где stderr записывается в журнал и ошибки контролируются кодом.

После успешной обработки тестовой выборки полезно сохранить точную команду вместе с датой и назначением. Если через месяц потребуется повторить операцию на новой партии, такая запись надёжнее памяти. Для команд с -if и сложными кавычками стоит также сохранить пример оболочки, в которой они проверены: CMD, PowerShell, Bash или zsh.

0 0 голоса
Рейтинг статьи

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные