You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1719 lines
80 KiB
Markdown
1719 lines
80 KiB
Markdown
4 years ago
|
<div id="exiv2">
|
||
|
|
||
|
# EXIV2(1)
|
||
|
|
||
|
<div id="name">
|
||
|
|
||
|
# NAME
|
||
|
exiv2 - Image metadata manipulation tool
|
||
|
|
||
|
<div id="synopsis">
|
||
|
|
||
|
# SYNOPSIS
|
||
|
**exiv2** [ *options* ] [ *action* ] *file* ...
|
||
|
|
||
|
<div id="description">
|
||
|
|
||
|
# DESCRIPTION
|
||
|
**exiv2** is a program to read and write image metadata, including
|
||
|
Exif, IPTC, XMP, image comments, ICC Profile, thumbnails, image
|
||
|
previews and many vendor makernote tags. The program optionally
|
||
|
converts between Exif tags, IPTC datasets and XMP properties as
|
||
|
recommended by the Exif Standard, the IPTC Standard, the XMP
|
||
|
specification and the Metadata Working Group guidelines.
|
||
|
|
||
|
<div id="TOC">
|
||
|
|
||
|
### TABLE OF CONTENTS
|
||
|
1. [SYNOPSIS](#synopsis)
|
||
|
2. [DESCRIPTION](#description)
|
||
|
1. [FILE TYPES](#file_types)
|
||
|
2. [ACTIONS](#actions)
|
||
|
3. [COMMAND SUMMARY](#cmd_summary)
|
||
|
4. [OPTIONS](#options)
|
||
|
5. ['MODIFY' COMMANDS](#modify_cmds)
|
||
|
1. [Quotations with 'modify' commands](#quotes_modify)
|
||
|
2. ['Modify' command format](#mod_cmd_format)
|
||
|
3. ['Modify' examples](#mod_examples)
|
||
|
3. ['Modify' command file](#modify_cmd_file)
|
||
|
6. [EXIV2 GROUPS, TYPES AND VALUES](#groups_types_values)
|
||
|
1. [Exiv2 tags](#exiv2_tags)
|
||
|
2. [Exif/IPTC/XMP types](#exiv2_types)
|
||
|
3. [Exiv2 key syntax](#exiv2_key_syntax)
|
||
|
4. [Multiple elements](#multi_elements)
|
||
|
5. [Duplicate Exif tags](#multi_exif_tags)
|
||
|
6. [Date/Time formats](#date_time_fmts)
|
||
|
7. [Exif 'Comment' values](#exif_comment_values)
|
||
|
8. [XMP namespaces](#xmp_namespaces)
|
||
|
9. [XMP LangAlt values](#langalt_values)
|
||
|
10. [XMP structs](#xmp_structs)
|
||
|
7. [CONFIGURATION FILE](#config_file)
|
||
|
8. [EXAMPLES](#examples)
|
||
|
9. [ENVIRONMENT](#environment)
|
||
|
10. [NOTES](#notes)
|
||
|
11. [BUGS](#bugs)
|
||
|
12. [COPYRIGHT](#copyright)
|
||
|
13. [SEE ALSO](#see_also)
|
||
|
14. [AUTHORS](#authors)
|
||
|
|
||
|
<div id="file_types">
|
||
|
|
||
|
# FILE TYPES
|
||
|
|
||
|
The following image formats and metadata categories are supported:<br>
|
||
|
|
||
|
Type | Exif | IPTC | XMP | Image Comments | ICC Profile | Thumbnail
|
||
|
|:---|:---- |:---- |:---- |:---- |:---- |:----
|
||
|
ARW | Read | Read | Read | - | - | Read
|
||
|
AVIF | Read | Read | Read | - | - | Read
|
||
|
BMP | - | - | - | - | - | -
|
||
|
CR2 | Read/Write | Read/Write | Read/Write | - | Read/Write | Read/Write
|
||
|
CR3 | Read | Read | Read | - | Read | Read
|
||
|
CRW | Read/Write | - | - | Read/Write | - | Read/Write
|
||
|
DNG | Read/Write | Read/Write | Read/Write | - | Read/Write | Read/Write
|
||
|
EPS | - | - | Read/Write | | - | -
|
||
|
EXV | Read/Write | Read/Write | Read/Write | Read/Write | Read/Write | Read/Write
|
||
|
GIF | - | - | - | - | - | -
|
||
|
HEIC | Read | Read | Read | - | - | Read
|
||
|
HEIF | Read | Read | Read | - | - | Read
|
||
|
JP2 | Read/Write | Read/Write | Read/Write | - | Read/Write | Read/Write
|
||
|
JPEG | Read/Write | Read/Write | Read/Write | Read/Write | Read/Write | Read/Write
|
||
|
MRW | Read | Read | Read | - | - | Read
|
||
|
NEF | Read/Write | Read/Write | Read/Write | - | Read/Write | Read/Write
|
||
|
ORF | Read/Write | Read/Write | Read/Write | - | - | Read/Write
|
||
|
PEF | Read/Write | Read/Write | Read/Write | - | Read/Write | Read/Write
|
||
|
PGF | Read/Write | Read/Write | Read/Write | Read/Write | Read/Write | -
|
||
|
PNG | - | Read/Write | Read/Write | - | Read/Write | Read/Write
|
||
|
PSD | Read/Write | Read/Write | Read/Write | - | - | Read/Write
|
||
|
RAF | Read | Read | Read | - | - | Read
|
||
|
RW2 | Read | Read | Read | - | - | Read
|
||
|
SR2 | Read | Read | Read | - | - | Read
|
||
|
SRW | Read/Write | Read/Write | Read/Write | - | - | Read/Write
|
||
|
TGA | - | - | - | - | - | -
|
||
|
TIFF | Read/Write | Read/Write | Read/Write | - | Read/Write | Read/Write
|
||
|
WEBP | Read/Write | - | Read/Write | - | Read/Write | Read/Write
|
||
|
XMP | - |- | Read/Write | - | - | -
|
||
|
|
||
|
+ Support for GIF, TGA and BMP images is minimal: the image format is
|
||
|
recognized, a MIME type assigned to it and the height and width of the
|
||
|
image are determined.
|
||
|
|
||
|
+ Reading other TIFF-like RAW image formats, which are not listed in
|
||
|
the table, may also work.
|
||
|
|
||
|
+ The thumbnail, if available, is included in the list of image previews.
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="actions">
|
||
|
|
||
|
# ACTIONS
|
||
|
The *action* argument is only required if it is not clear from the
|
||
|
*options* which action is implied.
|
||
|
|
||
|
<div id="pr_print">
|
||
|
|
||
|
### pr | print
|
||
|
Print image metadata. This is the default action, i.e. the command
|
||
|
`exiv2 image.jpg` will print a summary of the image Exif metadata.
|
||
|
|
||
|
<div id="ex_extract">
|
||
|
|
||
|
### ex | extract
|
||
|
Extract metadata to \*.exv, XMP sidecar (\*.xmp), preview image,
|
||
|
thumbnail or ICC profile file. Modification commands can be applied
|
||
|
on-the-fly.
|
||
|
|
||
|
<div id="in_insert">
|
||
|
|
||
|
### in | insert
|
||
|
Insert metadata from corresponding \*.exv, XMP sidecar (\*.xmp),
|
||
|
thumbnail or ICC profile files. Use option [--suffix suf](#suffix_suf)
|
||
|
to change the suffix of the input files. Since files of any supported
|
||
|
format can be used as input files, this command can be used to copy
|
||
|
the metadata between files of different formats. Modification commands
|
||
|
can be applied on-the-fly.
|
||
|
|
||
|
<div id="rm_delete">
|
||
|
|
||
|
### rm | delete
|
||
|
Delete image metadata from the files.
|
||
|
|
||
|
<div id="ad_adjust">
|
||
|
|
||
|
### ad | adjust
|
||
|
Adjust Exif timestamps by the given time. Requires at least one of the
|
||
|
options [--adjust time](#adjust_time), [--years +-n](#years_n),
|
||
|
[--months +-n](#months_n) or [--days +-n](#days_n). See [TZ environment variable](#TZ).
|
||
|
|
||
|
<div id="mo_modify">
|
||
|
|
||
|
### mo | modify
|
||
|
Apply commands to modify (add, set, delete) the Exif, IPTC and XMP
|
||
|
metadata of image files. Requires option [--comment txt](#comment_txt),
|
||
|
[--modify cmdfile](#modify_cmdfile) or [--Modify cmd](#Modify_cmd).
|
||
|
|
||
|
<div id="mv_rename">
|
||
|
|
||
|
### mv | rename
|
||
|
Rename files and/or set file timestamps according to the Exif create
|
||
|
timestamp. Uses the value of tag [Exif.Photo.DateTimeOriginal](https://www.exiv2.org/tags.html)
|
||
|
or, if not present, [Exif.Image.DateTime](https://www.exiv2.org/tags.html)
|
||
|
to determine the timestamp. The filename format can be set with [--rename fmt](#rename_fmt),
|
||
|
timestamp options are [--timestamp](#timestamp) and [--Timestamp](#Timestamp).
|
||
|
See [TZ environment variable](#TZ).
|
||
|
|
||
|
<div id="fi_fixiso">
|
||
|
|
||
|
### fi | fixiso
|
||
|
Copy the ISO setting from one of the proprietary Nikon or Canon
|
||
|
makernote ISO tags to the regular Exif ISO tag,
|
||
|
[Exif.Photo.ISOSpeedRatings](https://www.exiv2.org/tags.html). Does not
|
||
|
overwrite an existing Exif ISO tag.
|
||
|
|
||
|
<div id="fc_fixcom">
|
||
|
|
||
|
### fc | fixcom
|
||
|
Fix the character encoding of Exif Unicode user comments. Decodes the
|
||
|
comment using the auto-detected or specified character encoding and
|
||
|
writes it back in UCS-2. Use option [--encode enc](#encode_enc) to
|
||
|
specify the current encoding of the comment if necessary.
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="cmd_summary">
|
||
|
|
||
|
# COMMAND SUMMARY
|
||
|
|
||
|
**exiv2** [ **option** [ *arg* ] ]+ [ *action* ] *file* ...<br>
|
||
|
|
||
|
Where *file* contains image metadata, optionally specified using a URL
|
||
|
(http, https, ftp, sftp, data and file supported) or a wildcard pattern
|
||
|
(e.g., \*.jpg)
|
||
|
|
||
|
| Option | Long option | Description |
|
||
|
|:------ |:---- |:---- |
|
||
|
| **-a** *time* | **--adjust** *time* | Automatically modify metadata time stamps. For the [adjust](#ad_adjust) action [[...]](#adjust_time) |
|
||
|
| **-b** | **--binary** | Obsolete and should not be used. Reserved for use with the test suite |
|
||
|
| **-c** *txt* | **--comment** *txt* | JPEG comment string to set in the image. For the [modify](#mo_modify) action [[...]](#comment_txt) |
|
||
|
| **-d** *tgt1* | **--delete** *tgt1* | Delete target(s) for the [delete](#rm_delete) action [[...]](#delete_tgt1) |
|
||
|
| **-D** *+-n* | **--days** *+-n* | Automated adjustment of the days in metadata dates [[...]](#days_n) |
|
||
|
| **-e** *tgt3* | **--extract** *tgt3* | Extract target(s) for the [extract](#ex_extract) action [[...]](#extract_tgt3) |
|
||
|
| **-f** | **--force** | Do not prompt before overwriting existing files. For the [rename](#mv_rename) and [extract](#ex_extract) actions [[...]](#force_Force) |
|
||
|
| **-F** | **--Force** | Do not prompt before renaming files. For the [rename](#mv_rename) and [extract](#ex_extract) actions [[...]](#force_Force) |
|
||
|
| **-g** *str* | **--grep** *str* | Only output where *str* matches in output text [[...]](#grep_str) |
|
||
|
| **-h** | **--help** | Display help and exit [[...]](#help) |
|
||
|
| **-i** *tgt2* | **--insert** *tgt2* | Insert target(s) for the [insert](#in_insert) action [[...]](#insert_tgt2) |
|
||
|
| **-k** | **--keep** | Preserve file timestamps when updating files [[...]](#keep) |
|
||
|
| **-K** *key* | **--key** *key* | Report a key. Similar to [--grep str](#grep_str), however *key* must match exactly [[...]](#key_key) |
|
||
|
| **-l** *dir* | **--location** *dir* | Location (directory) for files to be inserted or extracted [[...]](#location_dir) |
|
||
|
| **-m** *cmdfile* | **--modify** *cmdfile* | Read commands from a file. For the [modify](#mo_modify) action [[...]](#modify_cmdfile) |
|
||
|
| **-M** *cmd* | **--Modify** *cmd* | Modify the metadata with the command. For the [modify](#mo_modify) action [[...]](#Modify_cmd) |
|
||
|
| **-n** *enc* | **--encode** *enc* | Charset to decode Exif Unicode user comments [[...]](#encode_enc) |
|
||
|
| **-O** *+-n* | **--months** *+-n* | Automated adjustment of the months in metadata dates [[...]](#months_n) |
|
||
|
| **-p** *mod* | **--print** *mod* | Print report (common reports) [[...]](#print_mod) |
|
||
|
| **-P** *flg* | **--Print** *flg* | Print report (fine grained control) [[...]](#Print_flgs) |
|
||
|
| **-q** | **--quiet** | Silence warnings and error messages [[...]](#quiet) |
|
||
|
| **-Q** *lvl* | **--log** *lvl* | Set the log-level to 'd'(ebug), 'i'(nfo), 'w'(arning), 'e'(rror) or 'm'(ute) [[...]](#log_lvl) |
|
||
|
| **-r** *fmt* | **--rename** *fmt* | Filename format for the [rename](#mv_rename) action [[...]](#rename_fmt) |
|
||
|
| **-S** *suf* | **--suffix** *suf* | Use suffix for source files when using the [insert](#in_insert) command [[...]](#suffix_suf) |
|
||
|
| **-t** | **--timestamp** | Set the file timestamp from Exif metadata. For the [rename](#mv_rename) action [[...]](#timestamp) |
|
||
|
| **-T** | **--Timestamp** | Only set the file timestamp from Exif metadata. For the [rename](#mv_rename) action [[...]](#Timestamp) |
|
||
|
| **-u** | **--unknown** | Show unknown tags [[...]](#unknown) |
|
||
|
| **-v** | **--verbose** | Verbose [[...]](#verbose) |
|
||
|
| **-V** | **--version** | Show the program version and exit [[...]](#version) |
|
||
|
| **-Y** *+-n* | **--years** *+-n* | Automated adjustment of the years in metadata dates [[...]](#years_n) |
|
||
|
|
||
|
The flags for those options are:
|
||
|
|
||
|
<div id="cmd_summary_flgs">
|
||
|
|
||
|
| Parameter | Description |
|
||
|
|:------ |:---- |
|
||
|
| *action* | pr \| ex \| in \| rm \| ad \| mo \| mv \| fi \| fc<br>(print, extract, insert, delete, adjust, modify, rename, fixiso, fixcom) |
|
||
|
| *cmd* | (**set** \| **add**) *key* [[*type*] *value*] \| **del** *key* [*type*] \| **reg** *prefix* *namespace*<br>(see ['Modify' command format](#mod_cmd_format)) |
|
||
|
| *enc* | Values defined in [iconv_open(3)](https://linux.die.net/man/3/iconv_open) (e.g., UTF-8) |
|
||
|
| *flg* | E \| I \| X \| x \| g \| k \| l \| n \| y \| c \| s \| v \| t \| h<br>(Exif, IPTC, XMP, num, grp, key, label, name, type, count, size, vanilla, translated, hex) |
|
||
|
| *fmt* | Default format: %Y%m%d_%H%M%S |
|
||
|
| *key* | See [Exiv2 key syntax](#exiv2_key_syntax)) |
|
||
|
| *lvl* | d \| i \| w \| e<br>(debug, info, warning, error) |
|
||
|
| *mod* | s \| a \| e \| t \| v \| h \| i \| x \| c \| p \| C \| R \| S \| X<br>(summary, all, Exif, translated, vanilla, hex, IPTC, XMP, comment, preview, ICC Profile, Recursive Structure, Simple Structure, raw XMP) |
|
||
|
| *suf* | '.' then the file's extension (e.g., '.txt') |
|
||
|
| *time* | [ +\|-]HH[:MM[:SS[.mmm]]]<br>(Default is **+** when **+**/**-** are missing) |
|
||
|
| *tgt1* | a \| c \| e \| i \| I \| t \| x \| C \| -<br>(all, comment, Exif, IPTC, IPTC all, thumbnail, XMP, ICC Profile, stdin/out) |
|
||
|
| *tgt2* | a \| c \| e \| i \| t \| x \| C \| X \| XX \| -<br>(all, comment, Exif, IPTC, thumbnail, XMP, ICC Profile, SideCar, Raw XMP, stdin/out) |
|
||
|
| *tgt3* | a \| e \| i \| p \| t \| x \| C \| X \| XX \| -<br>(all, Exif, IPTC, preview, thumbnail, XMP, ICC Profile, SideCar, Raw XMP, stdin/out) |
|
||
|
| *type* | An Exif, IPTC or XMP tag type (e.g., xmpText). See [Exif/IPTC/XMP types](#exiv2_types) |
|
||
|
| *+-n* | The amount to change in the date (e.g., -3). Default is **+** when **+**/**-** are missing |
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="options">
|
||
|
|
||
|
# OPTIONS
|
||
|
|
||
|
<div id="help">
|
||
|
|
||
|
### **-h**, **--help**
|
||
|
Display help and exit.
|
||
|
|
||
|
<div id="version">
|
||
|
|
||
|
### **-V**, **--version**
|
||
|
Show the program version and exit.
|
||
|
|
||
|
When **--version** is combined with [--verbose](#verbose), build
|
||
|
information is printed to standard output along with a list of shared
|
||
|
libraries which have been loaded into memory. Verbose version is
|
||
|
supported on Windows (MSVC, Cygwin and MinGW builds), macOS and Linux
|
||
|
and is provided for test and debugging. The library name and version
|
||
|
number are always printed, even if output is filtered with
|
||
|
[--grep str](#grep_str).
|
||
|
|
||
|
<div id="verbose">
|
||
|
|
||
|
### **-v**, **--verbose**
|
||
|
Be verbose during the program run.
|
||
|
|
||
|
<div id="quiet">
|
||
|
|
||
|
### **-q**, **--quiet**
|
||
|
Silence warnings and error messages during the program run. Note that
|
||
|
options **--quiet** and [--verbose](#verbose) can be used at the same
|
||
|
time.
|
||
|
|
||
|
<div id="log_lvl">
|
||
|
|
||
|
### **-Q** *lvl*, **--log** *lvl*
|
||
|
Set the log-level to 'd'(ebug), 'i'(nfo), 'w'(arning), 'e'(rror)
|
||
|
or 'm'(ute), with the *lvl* chosen including those below it
|
||
|
('d' <- 'i' <- 'w' <- 'e'). The default log-level is 'w'. **--log** *m*
|
||
|
is equivalent to [--quiet](#quiet). All log messages are written to
|
||
|
standard error.
|
||
|
|
||
|
<div id="unknown">
|
||
|
|
||
|
### **-u**, **--unknown**
|
||
|
Show unknown tags. Default is to suppress tags which don't have a name
|
||
|
(e.g., Exif.SonyMisc3c.0x022b).
|
||
|
|
||
|
<div id="grep_str">
|
||
|
|
||
|
### **-g** *str*, **--grep** *str*
|
||
|
When printing tags, display only those where *str* is found in
|
||
|
the key (see [Exiv2 key syntax](#exiv2_key_syntax)). When
|
||
|
**--grep** *str* is used with [--verbose](#verbose)
|
||
|
[--version](#version), lines are included where *str* matches in the
|
||
|
variable or value.
|
||
|
|
||
|
Multiple **--grep** *str* options can be used to output additional data:
|
||
|
|
||
|
```
|
||
|
$ exiv2 --verbose --version --grep webready --grep time
|
||
|
exiv2 1.0.0.9
|
||
|
time=11:01:53
|
||
|
enable_webready=1
|
||
|
xmlns=mediapro:http://ns.iview-multimedia.com/mediapro/1.0/
|
||
|
```
|
||
|
|
||
|
When the [--print mod](#print_mod) and [--Print flgs](#Print_flgs)
|
||
|
options are not specified, the default is [--print a](#print_mod):
|
||
|
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --grep Date Stonehenge.jpg
|
||
|
Exif.Image.DateTime Ascii 20 2015:07:16 20:25:28
|
||
|
Exif.Photo.DateTimeOriginal Ascii 20 2015:07:16 15:38:54
|
||
|
Exif.Photo.DateTimeDigitized Ascii 20 2015:07:16 15:38:54
|
||
|
Exif.NikonWt.DateDisplayFormat Byte 1 Y/M/D
|
||
|
Exif.GPSInfo.GPSDateStamp Ascii 11 2015:07:16
|
||
|
Xmp.xmp.ModifyDate XmpText 25 2015-07-16T20:25:28+01:00
|
||
|
```
|
||
|
|
||
|
You may use [--print mod](#print_mod) or [--Print flgs](#Print_flgs) to
|
||
|
further filter output ([--print s](#print_mod) is ignored):
|
||
|
|
||
|
```
|
||
|
$ exiv2 --print x --grep Date Stonehenge.jpg
|
||
|
Xmp.xmp.ModifyDate XmpText 25 2015-07-16T20:25:28+01:00
|
||
|
```
|
||
|
|
||
|
*str* can contain an optional */i* modifier at the end, to indicate case
|
||
|
insensitivity:
|
||
|
|
||
|
```
|
||
|
$ exiv2 --print px --grep date/i Stonehenge.jpg
|
||
|
Xmp.xmp.ModifyDate XmpText 25 2015-07-16T20:25:28+01:00
|
||
|
```
|
||
|
|
||
|
<div id="key_key">
|
||
|
|
||
|
### **-K** *key*, **--key** *key*
|
||
|
Only reports tags for a given *key*, which must match the key exactly
|
||
|
(See [Exiv2 key syntax](#exiv2_key_syntax)).
|
||
|
|
||
|
Multiple **--key** *key* options can be used to report more than a
|
||
|
single key:
|
||
|
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --key Exif.Photo.DateTimeDigitized --key Exif.Photo.DateTimeOriginal Stonehenge.jpg
|
||
|
Exif.Photo.DateTimeOriginal Ascii 20 2015:07:16 15:38:54
|
||
|
Exif.Photo.DateTimeDigitized Ascii 20 2015:07:16 15:38:54
|
||
|
```
|
||
|
|
||
|
<div id="encode_enc">
|
||
|
|
||
|
### **-n** *enc*, **--encode** *enc*
|
||
|
Charset to use when decoding Exif Unicode user comments, where *enc* is
|
||
|
a name understood by [iconv_open(3)](https://linux.die.net/man/3/iconv_open)
|
||
|
(e.g., 'UTF-8').
|
||
|
|
||
|
<div id="keep">
|
||
|
|
||
|
### **-k**, **--keep**
|
||
|
Preserve file timestamps when updating files. Can be used with
|
||
|
all options which update files and is ignored by read-only
|
||
|
options.
|
||
|
|
||
|
<div id="timestamp">
|
||
|
|
||
|
### **-t**, **--timestamp**
|
||
|
Set the file timestamp according to the Exif create timestamp in
|
||
|
addition to renaming the file (overrides [--keep](#keep)). This option is
|
||
|
only used with the [rename](#mv_rename) action. See [TZ](#TZ) environment
|
||
|
variable.
|
||
|
|
||
|
<div id="Timestamp">
|
||
|
|
||
|
### **-T**, **--Timestamp**
|
||
|
Only set the file timestamp according to the Exif create timestamp, do
|
||
|
not rename the file (overrides [--keep](#keep)). This option is only used
|
||
|
with the [rename](#mv_rename) action. See [TZ environment variable](#TZ).
|
||
|
|
||
|
<div id="force_Force">
|
||
|
|
||
|
### **-f**, **--force** or **-F**, **--Force**
|
||
|
These options are used by the [rename](#mv_rename) and
|
||
|
[extract](#ex_extract) actions to determine the file overwrite policy.
|
||
|
The options override the default behavior, which is to prompt the user if
|
||
|
the filename already exists. These options are usually combined with
|
||
|
[--verbose](#verbose), to provide additional status output.
|
||
|
|
||
|
The [rename](#mv_rename) action will overwrite files when **--force** is
|
||
|
used. Instead, if **--Force** is used and the file already exists, the
|
||
|
new filename is appended with '_1' ('_2', ...) to prevent data loss.
|
||
|
|
||
|
The [extract](#ex_extract) action will overwrite files when either
|
||
|
**--force** or **--Force** is used.
|
||
|
|
||
|
For example, renaming a file using **--Force**, where the same filename
|
||
|
has already been renamed:
|
||
|
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --verbose --Force rename Stonehenge.jpg
|
||
|
File 1/1: Stonehenge.jpg
|
||
|
Renaming file to ./20150716_153854.jpg
|
||
|
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --verbose --Force rename Stonehenge.jpg
|
||
|
File 1/1: Stonehenge.jpg
|
||
|
Renaming file to ./20150716_153854_1.jpg
|
||
|
```
|
||
|
|
||
|
<div id="rename_fmt">
|
||
|
|
||
|
### **-r** *fmt*, **--rename** *fmt*
|
||
|
Filename format for the [rename](#mv_rename) action (See [TZ](#TZ)
|
||
|
environment variable). The *fmt* string follows the definitions in
|
||
|
[strftime(3)](https://linux.die.net/man/3/strftime), using
|
||
|
[Exif.Photo.DateTimeOriginal](https://www.exiv2.org/tags.html) or
|
||
|
[Exif.Image.DateTime](https://www.exiv2.org/tags.html) as the reference
|
||
|
date and time. In addition, the following special character sequences are
|
||
|
also provided:
|
||
|
|
||
|
| Variable | Description |
|
||
|
|:------ |:---- |
|
||
|
| :basename: | Original filename without extension |
|
||
|
| :dirname: | Name of the directory holding the original file |
|
||
|
| :parentname: | Name of parent directory |
|
||
|
|
||
|
The default *fmt* is %Y%m%d_%H%M%S
|
||
|
|
||
|
For example, renaming a file when *fmt* is made up of the basename, day,
|
||
|
short month and long year:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --verbose --rename ':basename:_%d_%b_%Y' Stonehenge.jpg
|
||
|
File 1/1: Stonehenge.jpg
|
||
|
Renaming file to ./Stonehenge_16_Jul_2015.jpg
|
||
|
```
|
||
|
|
||
|
If the filename to rename to already exists and [--Force](#force_Force)
|
||
|
and [--force](#force_Force) are not used, the user is prompted for an
|
||
|
action.
|
||
|
|
||
|
| Option | Description |
|
||
|
|:------ |:---- |
|
||
|
| [O]verwrite | Rename the file, overriding the existing one |
|
||
|
| [r]ename | Rename the file, but append '_1' ('_2', ...) to the new filename |
|
||
|
| [s]kip : | Cancel renaming this file |
|
||
|
|
||
|
For example, when renaming a second Stonehenge.jpg file:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --verbose --rename ':basename:_%d_%b_%Y' Stonehenge.jpg
|
||
|
File 1/1: Stonehenge.jpg
|
||
|
exiv2.exe: File `./Stonehenge_16_Jul_2015.jpg' exists. [O]verwrite, [r]ename or [s]kip? r
|
||
|
Renaming file to ./Stonehenge_16_Jul_2015_1.jpg
|
||
|
```
|
||
|
|
||
|
<div id="adjust_time">
|
||
|
|
||
|
### **-a** *time*, **--adjust** *time*
|
||
|
Time adjustment, where *time* is in the format [-]HH[:MM[:SS]]. This
|
||
|
option is only used with the [adjust](#ad_adjust) action. See [TZ](#TZ)
|
||
|
environment variable.
|
||
|
|
||
|
Examples of *time* are:
|
||
|
|
||
|
| Time | Description |
|
||
|
|:------ |:---- |
|
||
|
| +1 | Adds one hour |
|
||
|
| 1:01 | Adds one hour and one minute |
|
||
|
| -0:00:30 | Subtracts 30 seconds |
|
||
|
|
||
|
<div id="years_n">
|
||
|
|
||
|
### **-Y** *+-n*, **--years** *+-n*
|
||
|
Time adjustment by a positive or negative number of years, for
|
||
|
the [adjust](#ad_adjust) action. See [TZ environment variable](#TZ).
|
||
|
|
||
|
<div id="months_n">
|
||
|
|
||
|
### **-O** *+-n*, **--months** *+-n*
|
||
|
Time adjustment by a positive or negative number of months, for
|
||
|
the [adjust](#ad_adjust) action. See [TZ environment variable](#TZ).
|
||
|
|
||
|
<div id="days_n">
|
||
|
|
||
|
### **-D** *+-n*, **--days** *+-n*
|
||
|
Time adjustment by a positive or negative number of days, for
|
||
|
the [adjust](#ad_adjust) action. See [TZ environment variable](#TZ).
|
||
|
|
||
|
<div id="print_mod">
|
||
|
|
||
|
### **-p** *mod*, **--print** *mod*
|
||
|
Print mode for the [print](#pr_print) action (see
|
||
|
[DESCRIPTION](#file_types), for metadata support in a file type).
|
||
|
Possible modes are:
|
||
|
|
||
|
| Option | Description |
|
||
|
|:------ |:---- |
|
||
|
| s | A summary of the Exif metadata (the default for the [print](#pr_print) action) |
|
||
|
| a | Exif, IPTC and XMP metadata (shortcut for [--Print kyct](#Print_flgs)) |
|
||
|
| e | Exif metadata (shortcut for [--Print Ekycv](#Print_flgs)) |
|
||
|
| t | Interpreted (translated) Exif tag values (shortcut for [--Print Ekyct](#Print_flgs)) |
|
||
|
| v | Plain (untranslated) Exif tag values (shortcut for [--Print Exgnycv](#Print_flgs)) |
|
||
|
| h | Hex dump of the Exif data (shortcut for [--Print Exgnycsh](#Print_flgs)) |
|
||
|
| i | IPTC datasets (shortcut for [--Print Ikyct](#Print_flgs)) |
|
||
|
| x | XMP properties (shortcut for [--Print Xkyct](#Print_flgs)) |
|
||
|
| c | JPEG comment |
|
||
|
| p | List available image previews, sorted by size in pixels (e.g., see [--extract tgt3](#extract_tgt3)) |
|
||
|
| C | Image ICC Profile |
|
||
|
| R | Print image structure recursively (only for the 'debug' build with jpg, png, tiff, webp, cr2 and jp2 types) |
|
||
|
| S | Image structure information (jpg, png, tiff, webp, cr2 and jp2 types only) |
|
||
|
| X | "raw" XMP |
|
||
|
|
||
|
**--print** *mod* can be combined with [--grep str](#grep_str) or
|
||
|
[--key key](#key_key) to further filter the output.
|
||
|
|
||
|
For the order of the columns in the output, see
|
||
|
[--Print flgs](#Print_flgs_order).
|
||
|
|
||
|
<div id="Print_flgs">
|
||
|
|
||
|
### **-P** *flgs*, **-Print** *flgs*
|
||
|
Print flags allows fine control of the tag list for the
|
||
|
[print](#pr_print) action (see [DESCRIPTION](#file_types), for metadata
|
||
|
support in a file type). The option allows control of the type of metadata
|
||
|
as well as data columns included in the print output. Valid flags are:
|
||
|
|
||
|
| Option | Description |
|
||
|
|:------ |:---- |
|
||
|
| E | Exif tags |
|
||
|
| I | IPTC datasets |
|
||
|
| X | XMP properties |
|
||
|
| x | Tag number for Exif or IPTC tags (in hexadecimal) |
|
||
|
| g | Group name (e.g., for Exif.Photo.UserComment, outputs Photo) |
|
||
|
| k | Key (e.g., Exif.Photo.UserComment) |
|
||
|
| l | Tag label (human readable tagname, e.g., for Exif.Photo.UserComment, outputs 'User comment') |
|
||
|
| n | Tagname (e.g., for Exif.Photo.UserComment, outputs UserComment) |
|
||
|
| y | Type (for available types, see [Exif/IPTC/XMP types](#exiv2_types) |
|
||
|
| c | Number of components (for single entry types, the number of **sizeof('type')** in 'size'. For multi-entry types, the number of entries. See [Exif/IPTC/XMP types](#exiv2_types)) |
|
||
|
| s | Size in bytes |
|
||
|
| v | Plain data value (vanilla values, i.e., untranslated) |
|
||
|
| V | Plain data value AND the word 'set ' (see ['MODIFY' COMMANDS](#modify_cmds) |
|
||
|
| t | Interpreted (translated) human readable data values |
|
||
|
| h | Hex dump of the data |
|
||
|
|
||
|
<div id="Print_flgs_order">
|
||
|
|
||
|
The order of the values in *flgs* is not respected, with output displayed
|
||
|
as follows:
|
||
|
```
|
||
|
Tag number (x) | Plain 'set' (V) | Group (g) | Key (k) | Tagname (n) | Tagname label (l) | Type (y) | Components (c) | Size (s) | Value (E, I, X, v, t)
|
||
|
```
|
||
|
For example, displaying the IPTC tags in a file:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Print xgknlycsIt Stonehenge.jpg
|
||
|
0x0000 Envelope Iptc.Envelope.ModelVersion ModelVersion Model Version Short 1 2 4
|
||
|
0x005a Envelope Iptc.Envelope.CharacterSet CharacterSet Character Set String 3 3
|
||
|
0x0000 Application2 Iptc.Application2.RecordVersion RecordVersion Record Version Short 1 2 4
|
||
|
0x0078 Application2 Iptc.Application2.Caption Caption Caption String 12 12 Classic View
|
||
|
```
|
||
|
**--Print** *flgs* can be combined with [--grep str](#grep_str) or
|
||
|
[--key key](#key_key) to further filter the output.
|
||
|
|
||
|
<div id="delete_tgt1">
|
||
|
|
||
|
### **-d** *tgt1**, **--delete** *tgt1*
|
||
|
Delete target(s) for the [delete](#rm_delete) action. Possible targets are:
|
||
|
|
||
|
| Option | Description |
|
||
|
|:------ |:---- |
|
||
|
| a | All supported metadata (the default for the [delete](#rm_delete) action) |
|
||
|
| e | Exif section |
|
||
|
| t | Exif thumbnail only |
|
||
|
| i | IPTC data |
|
||
|
| x | XMP packet |
|
||
|
| c | JPEG comment |
|
||
|
| C | ICC Profile |
|
||
|
| I | All IPTC data (removes broken metadata containing multiple IPTC blocks) |
|
||
|
|
||
|
<div id="insert_tgt2">
|
||
|
|
||
|
### **-i** *tgt2*, **--insert** *tgt2*
|
||
|
Insert target(s) for the [insert](#in_insert) action (see
|
||
|
[DESCRIPTION](#file_types), for metadata support in a file type). Possible
|
||
|
targets are:
|
||
|
|
||
|
| Option | Description |
|
||
|
|:------ |:---- |
|
||
|
| a | All supported metadata (the default for the [insert](#in_insert) action) |
|
||
|
| e | Exif section |
|
||
|
| t | Exif thumbnail. Only JPEG thumbnails can be inserted from a file called *file-thumb.jpg* |
|
||
|
| i | IPTC data |
|
||
|
| x | XMP packet |
|
||
|
| c | JPEG comment |
|
||
|
| C | ICC Profile, inserted from a file called *<file>.icc* |
|
||
|
| X | Insert metadata from an XMP sidecar file, <file>.xmp. The remaining targets determine which metadata to include, possible are Exif, IPTC and XMP (default is all of these). Inserted XMP properties include those converted to Exif and IPTC |
|
||
|
| XX | Insert "raw" XMP metadata from a sidecar file, *<file>.exv* |
|
||
|
| - | Insert from stdin. This option is intended for "filter" operations |
|
||
|
|
||
|
Filter operations between extract and insert are possible, using the
|
||
|
following template; [xmllint(1)](https://linux.die.net/man/1/xmllint) can
|
||
|
be optionally used when extracting XMP sidecar files:
|
||
|
|
||
|
```
|
||
|
$ exiv2 -e{tgt3}- filename | [ xmllint .... |] exiv2 -i{tgt2}- filename
|
||
|
```
|
||
|
|
||
|
<div id="extract_tgt3">
|
||
|
|
||
|
### **-e** *tgt3*, **--extract** *tgt3*
|
||
|
Extract target(s) for the [extract](#ex_extract) action. Possible targets are:
|
||
|
|
||
|
| <div style="width:100px">Option</div> | Description |
|
||
|
|:------ |:---- |
|
||
|
| a | All supported metadata (the default for the [extract](#ex_extract) action) |
|
||
|
| e | Exif section |
|
||
|
| t | Extract Exif thumbnail only to a file called *<file>-thumb.jpg* |
|
||
|
| i | IPTC data |
|
||
|
| x | XMP packet |
|
||
|
| c | JPEG comment |
|
||
|
| p\[\<n\>\[,\<m\> ...\]\] | Extract preview images to files called *\<file\>-preview\<n \| m \| ...\>.jpg* (`--extract p` extracts all previews). The thumbnail is included in any preview images |
|
||
|
| C | Extract ICC profile, to a file called *<file>.icc* |
|
||
|
| X | Insert metadata from an XMP sidecar file, <file>.xmp. The remaining targets determine which metadata to include, possible are Exif, IPTC and XMP (default is all of these). Inserted XMP properties include those converted to Exif and IPTC |
|
||
|
| XX | Extract "raw" XMP metadata to a sidecar . Other targets cannot be used with this, as only XMP data is written |
|
||
|
| - | Output to stdout (see [--insert tgt2](#insert_tgt2) for an example of this feature) |
|
||
|
|
||
|
When extracting preview images, first list which previews are available:
|
||
|
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --print p Stonehenge.jpg
|
||
|
Preview 1: image/jpeg, 160x120 pixels, 10837 bytes
|
||
|
```
|
||
|
|
||
|
then extract the preview by number (in this case, preview 1 is also the
|
||
|
thumbnail):
|
||
|
|
||
|
```
|
||
|
$ exiv2 --verbose --extract p1 Stonehenge.jpg
|
||
|
File 1/1: Stonehenge.jpg
|
||
|
Writing preview 1 (image/jpeg, 160x120 pixels, 10837 bytes) to file ./Stonehenge-preview1.jpg
|
||
|
```
|
||
|
|
||
|
<div id="comment_txt">
|
||
|
|
||
|
### **-c** *txt*, **--comment** *txt*
|
||
|
JPEG comment string to set in the image ([modify](#mo_modify) action).
|
||
|
This option can also be used with the [extract](#ex_extract) and
|
||
|
[insert](#in_insert) actions to modify metadata on-the-fly.
|
||
|
|
||
|
<div id="modify_cmdfile">
|
||
|
|
||
|
### **-m** *cmdfile*, **--modify** *cmdfile*
|
||
|
Commands for the [modify](#mo_modify) action (see
|
||
|
[Command file format](#Command_file_format)). In the format:
|
||
|
|
||
|
**--modify** ( *file* | *-* )
|
||
|
|
||
|
| Parameter | Description |
|
||
|
|:------ |:---- |
|
||
|
| *file* | The file containing the 'modify' commands |
|
||
|
| *-* | Stdin |
|
||
|
|
||
|
This option can also be used with the [extract](#ex_extract) and
|
||
|
[insert](#in_insert) actions to modify metadata on-the-fly. See
|
||
|
['MODIFY' COMMANDS](#modify_cmds).
|
||
|
|
||
|
<div id="Modify_cmd">
|
||
|
|
||
|
### **-M** *cmd*, **--Modify** *cmd*
|
||
|
Command line for the [modify](#mo_modify) action. This option can also be
|
||
|
used with the [extract](#ex_extract) and [insert](#in_insert) actions to
|
||
|
modify metadata on-the-fly. See ['MODIFY' COMMANDS](#modify_cmds) and
|
||
|
['Modify' command file](#modify_cmd_file).
|
||
|
|
||
|
<div id="location_dir">
|
||
|
|
||
|
### **-l** *dir*, **--location** *dir*
|
||
|
Location (directory) for files to be inserted from or extracted to.
|
||
|
|
||
|
<div id="suffix_suf">
|
||
|
|
||
|
### **-S** *suf*, **--suffix** *suf*
|
||
|
Use suffix *suf* for source files when using [insert](#in_insert) action
|
||
|
(e.g., '.txt').
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="modify_cmds">
|
||
|
|
||
|
# 'MODIFY' COMMANDS
|
||
|
Tags can be altered using the 'modify' action and
|
||
|
[--Modify cmd](#Modify_cmd) or [--modify cmdfile](#modify_cmdfile).
|
||
|
|
||
|
For example, adding an IPTC tag on the command line:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Iptc.Application2.Credit String Mr. Mills" Stonehenge.jpg
|
||
|
```
|
||
|
or applying a set of 'modify' commands from a file (see ['Modify' command File](#modify_cmd_file)):
|
||
|
```
|
||
|
$ exiv2 --modify cmd.txt Stonehenge.jpg
|
||
|
```
|
||
|
Multiple [--Modify cmd](#Modify_cmd) and [--modify cmdfile](#modify_cmdfile)
|
||
|
options can be combined together, with the changes applied left to right
|
||
|
on each file. For example, applying one command line 'modify' then a
|
||
|
'modify' command file, then another command line 'modify':
|
||
|
```
|
||
|
$ exiv2 --Modify "set Iptc.Application2.Caption Stonehenge" --modify cmdfile.txt --Modify "add Iptc.Application2.Keywords Monument" Stonehenge.jpg
|
||
|
```
|
||
|
|
||
|
<div id="gen_modify_cmds">
|
||
|
|
||
|
A list of modify commands can be generated from an existing file using
|
||
|
[--Print Vkyv](#Print_flgs). For example, only displaying the 'dc'
|
||
|
'modify' commands:
|
||
|
```
|
||
|
$ exiv2 --Print Vkyv --grep dc Stonehenge.jpg
|
||
|
set Xmp.dc.description LangAlt lang="x-default" Classic View
|
||
|
set Xmp.dc.Family XmpBag Robin
|
||
|
```
|
||
|
|
||
|
<div id="modify_cmdfile_stdin">
|
||
|
|
||
|
Using [--modify -](#modify_cmdfile), a command file can be read from
|
||
|
stdin instead of
|
||
|
being a named file. For example:
|
||
|
```
|
||
|
$ cat cmdfile.txt | exiv2 --modify - Stonehenge.jpg
|
||
|
```
|
||
|
|
||
|
When modifying, only a correct metadata structure is enforced and it is
|
||
|
possible to write tags with types and values different from those
|
||
|
specified in the standards. This can include incorrect types (e.g.,
|
||
|
change [Exif.Image.DateTime](https://www.exiv2.org/tags.html) to a
|
||
|
Float), [duplicate Exif tags](#multi_exif_tags) or incomplete metadata
|
||
|
(e.g., deleting [Exif.GPSInfo.GPSLatitudeRef](https://www.exiv2.org/tags.html),
|
||
|
which works together with [Exif.GPSInfo.GPSLatitude](https://www.exiv2.org/tags.html)).
|
||
|
While **exiv2** is able to read all metadata that it can write, other
|
||
|
programs may have difficulties with images that contain non
|
||
|
standards-defined metadata.
|
||
|
|
||
|
<div id="quotes_modify">
|
||
|
|
||
|
### Quotations with 'modify' commands
|
||
|
With [--Modify cmd](#Modify_cmd), quotation marks are use to surround the
|
||
|
*cmd*. The Windows command line requires double quotes to be
|
||
|
used, however generally, quotes inside that string, can be either single
|
||
|
or double. Generally, UNIX based systems can use pairs of single or
|
||
|
double quotes in any position. In both systems, inner string quotation
|
||
|
marks may need to use the `\` escape sequence.
|
||
|
|
||
|
See note on quotations when using [XMP LangAlt values](#langalt_values).
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="mod_cmd_format">
|
||
|
|
||
|
### 'Modify' command format
|
||
|
The format of a command is:
|
||
|
|
||
|
( **set** | **add** ) *key* [ [ *type* ] *value* ] | **del** *key* [ *type* ] | **reg** *prefix* *namespace*
|
||
|
|
||
|
Where:
|
||
|
|
||
|
| Option | Description |
|
||
|
|:------ |:---- |
|
||
|
| **add** | Adds a tag. For Exif and IPTC repeatable tags, this adds a new tag, otherwise this replaces any existing tag (see [Multiple elements](#multi_elements) and [Duplicate Exif tags](#multi_exif_tags)) |
|
||
|
| **set** | Set the *value* of an existing tag with a matching *key* or if undefined, **add** the tag. If [Duplicate Exif](#multi_exif_tags) or IPTC repeatable tags already exist, this replaces them (see [Multiple elements](#multi_elements)) |
|
||
|
| **del** | Delete all occurrences of a tag that matches *key*, including any duplicate tags |
|
||
|
| **reg** | Registers an XMP *namespace* with an XMP *prefix* (see [XMP namespaces](#xmp_namespaces)) If registering an existing *prefix* with a different *namespace*, then the namespace is updated |
|
||
|
|
||
|
using the parameters:
|
||
|
|
||
|
| Parameter | Description |
|
||
|
|:------ |:---- |
|
||
|
| *key* | An Exif, IPTC or XMP key (see [Exiv2 key syntax](#exiv2_key_syntax)) |
|
||
|
| *type* | The *type* for the tag, a default is used if none is given. For built-in tags, the default is defined in the standard and for registered XMP tags, the default is XmpText (see [Exif/IPTC/XMP types](#exiv2_types)) |
|
||
|
| *value* | The remaining text on the line is the value, and can optionally be enclosed in quotes (see [Quotations with 'modify' commands](#quotes_modify)). For Ascii, XmpAlt, XmpBag, XmpSeq and XmpText, the value is optional which is equivalent to an empty value ("") |
|
||
|
| *prefix* | This is the XMP 'Group' that is being registered. This is case sensitive and must be unique within an image's metadata. e.g., For an "Exiv2" *prefix*, the tags for that group are available as Xmp.Exiv2.Tagname |
|
||
|
| *namespace* | An identifier for the prefix. This is case sensitive and must be unique within an image's metadata. Built-in namespaces use a URL format, but they are not required to exist |
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="mod_examples">
|
||
|
|
||
|
### 'Modify' examples
|
||
|
|
||
|
<div id="set_Rational_SRational">
|
||
|
|
||
|
#### Setting a Rational or SRational value
|
||
|
For the 'Rational' and 'SRational' formats, see [Exif/IPTC/XMP types](#exiv2_types_exif).
|
||
|
|
||
|
For example, modifying a 'Rational' number:
|
||
|
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Modify"set Exif.Photo.MaxApertureValue 2485427/500000" Stonehenge.jpg
|
||
|
```
|
||
|
|
||
|
<div id="set_aperture">
|
||
|
|
||
|
#### Setting an aperture value
|
||
|
Exif aperture values are stored in an apex-value format and when using the
|
||
|
translated print option, are output as an Fnumber value. The APEX Fnumber
|
||
|
translations use the formulae (in base 2):
|
||
|
|
||
|
```
|
||
|
apex-value = log(Fnumber) * 2.0 / log(2.0)
|
||
|
Fnumber = exp(apex-value * log(2.0) / 2.0)
|
||
|
```
|
||
|
The apex-value is a Rational and can be modified as shown in [Setting a Rational or SRational value](#set_Rational_SRational),
|
||
|
however a convenience method is also provided to set an Fnumber directly.
|
||
|
This uses the format:
|
||
|
|
||
|
**F** *\<value\>*
|
||
|
|
||
|
Where *\<value\>* is either an integer or decimal number.
|
||
|
|
||
|
For example, the following 'modify' will produce the same value as
|
||
|
[Setting a Rational or SRational value](#set_Rational_SRational). This is
|
||
|
displayed in vanilla and translated output:
|
||
|
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Modify "set Exif.Photo.MaxApertureValue F5.6" Stonehenge.jpg
|
||
|
$ exiv2 --print e --grep MaxApertureValue Stonehenge.jpg
|
||
|
Exif.Photo.MaxApertureValue Rational 1 2485427/500000
|
||
|
$ exiv2 --print t --grep MaxApertureValue Stonehenge.jpg
|
||
|
Exif.Photo.MaxApertureValue Rational 1 F5.6
|
||
|
```
|
||
|
|
||
|
More information about APEX values is available from: http://en.wikipedia.org/wiki/APEX_system
|
||
|
|
||
|
<div id="set_comment">
|
||
|
|
||
|
#### Setting a Comment value
|
||
|
For the 'Comment' format, see [Exif 'Comment' values](#exif_comment_values).
|
||
|
|
||
|
For example, to set an Ascii comment:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Modify "set Exif.Photo.UserComment charset=Ascii Photo" Stonehenge.jpg
|
||
|
$ exiv2 --grep UserComment Stonehenge.jpg
|
||
|
Exif.Photo.UserComment Undefined 13 charset=Ascii Photo
|
||
|
```
|
||
|
or a Unicode comment:
|
||
|
```
|
||
|
$ exiv2 --Modify "set Exif.GPSInfo.GPSProcessingMethod charset=Unicode \\u0047\\u0050\\u0053" Stonehenge.jpg
|
||
|
$ exiv2 --grep GPSProcessingMethod Stonehenge.jpg
|
||
|
Exif.GPSInfo.GPSProcessingMethod Undefined 14 charset=Unicode GPS
|
||
|
```
|
||
|
|
||
|
<div id="reg_xmp_namespace">
|
||
|
|
||
|
#### Registering an XMP namespace
|
||
|
For help with namespaces, see [XMP namespaces](#xmp_namespaces).
|
||
|
|
||
|
Each XMP [namespace](#mod_cmd_format) has a [prefix](#mod_cmd_format)
|
||
|
associated with it. For example, when modifying, this is declared using
|
||
|
the string:
|
||
|
```
|
||
|
--Modify "reg myPrefix http://ns.myPrefix.me/"
|
||
|
```
|
||
|
|
||
|
When a non-standard group or tag belonging to that group is modified, the
|
||
|
appropriate 'reg' 'modify' command must be included before that. For
|
||
|
example, adding a *myPhotos* group with a *weather* tag and values:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Modify "reg myPhotos http://ns.myPhotos.org/" --Modify "add Xmp.myPhotos.weather XmpBag Cloudy" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "reg myPhotos http://ns.myPhotos.org/" --Modify "set Xmp.myPhotos.weather XmpBag Sunny" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "reg myPhotos http://ns.myPhotos.org/" --Modify "set Xmp.myPhotos.weather XmpBag Hot" Stonehenge.jpg
|
||
|
$ exiv2 --grep myPhotos Stonehenge.jpg
|
||
|
Xmp.myPhotos.weather XmpBag 3 Cloudy, Sunny, Hot
|
||
|
```
|
||
|
|
||
|
<div id="add_xmp_tags">
|
||
|
|
||
|
#### Adding new XMP tags
|
||
|
Provided that an XMP's group is defined (see [Registering an XMP namespace](#reg_xmp_namespace)),
|
||
|
new tags can be added by assigning values.
|
||
|
|
||
|
For example, to add a *RatingInPercent* tag to a built-in namespace and
|
||
|
a *Surname* tag to a registered namespace:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmp.RatingInPercent XmpText 98" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "reg cm2e http://clanmills.com/exiv2/" --Modify "add Xmp.cm2e.Surname XmpText Mills" Stonehenge.jpg
|
||
|
$ exiv2 --grep RatingInPercent --grep Surname Stonehenge.jpg
|
||
|
Xmp.xmp.RatingInPercent XmpText 2 98
|
||
|
Xmp.cm2e.Surname XmpText 5 Mills
|
||
|
```
|
||
|
|
||
|
<div id="set_langalt">
|
||
|
|
||
|
#### Setting an XMP LangAlt value
|
||
|
For the LangAlt format, see [XMP LangAlt values](#langalt_values). When
|
||
|
setting a LangAlt tag, only one entry is allowed per modify.
|
||
|
|
||
|
For example, adding one default, one language/country and one language
|
||
|
entry:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Modify "set Xmp.dc.description LangAlt Monument" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "set Xmp.dc.description LangAlt lang=de-DE das Monument" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "set Xmp.dc.description LangAlt lang="fr" les monuments" Stonehenge.jpg
|
||
|
$ exiv2 --grep description Stonehenge.jpg
|
||
|
Xmp.dc.description LangAlt 3 lang="x-default" Monument, lang="de-DE" das Monument, lang="fr" les monuments
|
||
|
```
|
||
|
|
||
|
To remove a language specification, set the value to the empty string.
|
||
|
For example:
|
||
|
```
|
||
|
$ exiv2 --Modify "set Xmp.dc.description lang=de-DE" Stonehenge.jpg
|
||
|
```
|
||
|
To remove all language specifications, delete the key. For example:
|
||
|
```
|
||
|
$ exiv2 --Modify "del Xmp.dc.description" Stonehenge.jpg
|
||
|
```
|
||
|
|
||
|
<div id="set_xmp_struct">
|
||
|
|
||
|
#### Setting an XMP struct value
|
||
|
For the format of XMP structs, see [Exiv2 key syntax](#exiv2_xmp_key_syntax)
|
||
|
and [XMP structs](#xmp_structs).
|
||
|
|
||
|
To create a struct, first set the base key to an empty version of an
|
||
|
array type. This can be achieved by either stating the array type and
|
||
|
using the empty string, or by using XmpText and stating the array type.
|
||
|
|
||
|
For example, both of the following set the Xmp.xmpMM.History tag to an
|
||
|
empty XmpSeq:
|
||
|
```
|
||
|
--Modify "add Xmp.xmpMM.History XmpSeq \"\""
|
||
|
--Modify "add Xmp.xmpMM.History XmpText type=Seq"
|
||
|
```
|
||
|
Numbered keys plus name and action can then be added.
|
||
|
|
||
|
For example, setting the [Xmp.xmpMM.History](https://www.exiv2.org/tags-xmp-xmpMM.html)
|
||
|
tag to record the file being converted from tiff to JPEG, then saved.
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History XmpSeq \"\"" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[1]/stEvt:action derived" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[1]/stEvt:parameters converted from image/tiff to image/jpeg, saved to new location" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[2]/stEvt:action saved" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[2]/stEvt:instanceID xmp.iid:89A4EB97412C88632107D65978304F45" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[2]/stEvt:when 2021-08-13T10:12:09+01:00" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[2]/stEvt:softwareAgent MySuperPhotoFixer 1.0" Stonehenge.jpg
|
||
|
$ exiv2 --grep xmpMM Stonehenge.jpg
|
||
|
Xmp.xmpMM.History XmpText 0 type="Seq"
|
||
|
Xmp.xmpMM.History[1] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[1]/stEvt:action XmpText 7 derived
|
||
|
Xmp.xmpMM.History[1]/stEvt:parameters XmpText 62 converted from image/tiff to image/jpeg, saved to new location
|
||
|
Xmp.xmpMM.History[2] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[2]/stEvt:action XmpText 5 saved
|
||
|
Xmp.xmpMM.History[2]/stEvt:instanceID XmpText 40 xmp.iid:89A4EB97412C88632107D65978304F45
|
||
|
Xmp.xmpMM.History[2]/stEvt:when XmpText 25 2021-08-13T10:12:09+01:00
|
||
|
Xmp.xmpMM.History[2]/stEvt:softwareAgent XmpText 21 MySuperPhotoFixer 1.0
|
||
|
```
|
||
|
|
||
|
Nested arrays are permitted. For example, to add an additional XmpSeq to
|
||
|
the first struct in the [Xmp.xmpMM.History](https://www.exiv2.org/tags-xmp-xmpMM.html)
|
||
|
tag:
|
||
|
|
||
|
```
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[1]/stEvt:myBag XmpText type=Bag" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[1]/stEvt:mySeq[1]/stEvt:action open a file" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[1]/stEvt:mySeq[2]/stEvt:action convert" Stonehenge.jpg
|
||
|
$ exiv2 --Modify "add Xmp.xmpMM.History[1]/stEvt:mySeq[3]/stEvt:action save" Stonehenge.jpg
|
||
|
$ exiv2 --grep xmpMM Stonehenge.jpg
|
||
|
Xmp.xmpMM.History XmpText 0 type="Seq"
|
||
|
Xmp.xmpMM.History[1] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[1]/stEvt:action XmpText 7 derived
|
||
|
Xmp.xmpMM.History[1]/stEvt:parameters XmpText 62 converted from image/tiff to image/jpeg, saved to new location
|
||
|
Xmp.xmpMM.History[1]/stEvt:mySeq XmpText 0 type="Seq"
|
||
|
Xmp.xmpMM.History[1]/stEvt:mySeq[1] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[1]/stEvt:mySeq[1]/stEvt:action XmpText 11 open a file
|
||
|
Xmp.xmpMM.History[1]/stEvt:mySeq[2] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[1]/stEvt:mySeq[2]/stEvt:action XmpText 7 convert
|
||
|
Xmp.xmpMM.History[1]/stEvt:mySeq[3] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[1]/stEvt:mySeq[3]/stEvt:action XmpText 4 save
|
||
|
Xmp.xmpMM.History[2] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[2]/stEvt:action XmpText 5 saved
|
||
|
Xmp.xmpMM.History[2]/stEvt:instanceID XmpText 40 xmp.iid:89A4EB97412C88632107D65978304F45
|
||
|
Xmp.xmpMM.History[2]/stEvt:when XmpText 25 2021-08-13T10:12:09+01:00
|
||
|
Xmp.xmpMM.History[2]/stEvt:softwareAgent XmpText 21 MySuperPhotoFixer 1.0
|
||
|
```
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="modify_cmd_file">
|
||
|
|
||
|
### 'Modify' command file
|
||
|
Commands for the 'modify' action can be read from a file. They are
|
||
|
executed line-by-line, as though each command were passed to [--Modify cmd](#Modify_cmd)
|
||
|
on a single **exiv2** line. In the file, any blank lines or additional
|
||
|
white space is ignored and any lines beginning with a `#` are comments.
|
||
|
When registering namespaces, place this in the file before the command to
|
||
|
use it.
|
||
|
|
||
|
For help creating a command file from an existing file, see [extracting modify commands](#gen_modify_cmds).
|
||
|
|
||
|
For example, a *cmd.txt* file:
|
||
|
```
|
||
|
# Comments are ignored
|
||
|
add Xmp.dc.description LangAlt lang="x-default" Monument
|
||
|
set Xmp.dc.description LangAlt lang="de-DE" das Monument
|
||
|
|
||
|
# This command was generated from a file. Additional whitespace is ignored
|
||
|
set Xmp.xmp.Rating XmpText 0
|
||
|
|
||
|
# Additional whitespace is ignored
|
||
|
del Iptc.Application2.Caption
|
||
|
|
||
|
# Use 'reg' before modifying any non-standard 'Group'
|
||
|
reg myPhotos https://ns.myPhotos.org/
|
||
|
set Xmp.myPhotos.weather Cloudy
|
||
|
```
|
||
|
would be run using:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --modify cmd.txt Stonehenge.jpg
|
||
|
```
|
||
|
For another example, see: https://www.exiv2.org/sample.html
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="groups_types_values">
|
||
|
|
||
|
# EXIV2 GROUPS, TYPES AND VALUES
|
||
|
|
||
|
Exiv2 supports Exif 2.32, Adobe XMP 4.4.0 by default, although can be
|
||
|
built with newer versions of the SDK, and many manufacturer's makernote
|
||
|
tags.
|
||
|
|
||
|
<div id="exiv2_tags">
|
||
|
|
||
|
### Exiv2 tags
|
||
|
For an explanation of Exiv2 keys, see [Exiv2 key syntax](#exiv2_key_syntax).
|
||
|
The following groups are defined for the Exif family:
|
||
|
|
||
|
```
|
||
|
GPSInfo Canon Nikon1 NikonMe OlympusFe8 SonyMisc2b
|
||
|
Image CanonCf Nikon2 NikonPc OlympusFe9 SonyMisc3c
|
||
|
Image2 CanonCs Nikon3 NikonPreview OlympusFi SonyMinolta
|
||
|
Image3 CanonFi NikonAFT NikonSi01xx OlympusIp SonySInfo1
|
||
|
Iop CanonPa NikonAf NikonSi02xx OlympusRd
|
||
|
MakerNote CanonPi NikonAf NikonSiD300a OlympusRd2 Samsung2
|
||
|
MpfInfo CanonPr NikonAf2 NikonSiD300b OlympusRi SamsungPictureWizard
|
||
|
Photo CanonSi NikonAf22 NikonSiD40 SamsungPreview
|
||
|
SubImage1 CanonTi NikonCb1 NikonSiD80 Sigma
|
||
|
SubImage2 NikonCb2 NikonVr
|
||
|
SubImage3 Casio NikonCb2a NikonWt Sony1
|
||
|
SubImage4 Casio2 NikonCb2b Sony1Cs
|
||
|
SubImage5 NikonCb3 Olympus Sony1Cs2
|
||
|
SubImage6 Minolta NikonCb4 Olympus2 Sony1MltCs7D
|
||
|
SubImage7 MinoltaCs5D NikonFi OlympusCs Sony1MltCsA100
|
||
|
SubImage8 MinoltaCs7D NikonFl1 OlympusEq Sony1MltCsNew
|
||
|
SubImage9 MinoltaCsNew NikonFl2 OlympusFe1 Sony1MltCsOld
|
||
|
SubThumb1 MinoltaCsOld NikonFl3 OlympusFe2 Sony2
|
||
|
Thumbnail NikonIi OlympusFe3 Sony2Cs
|
||
|
Panasonic NikonLd1 OlympusFe4 Sony2Cs2
|
||
|
Pentax PanasonicRaw NikonLd2 OlympusFe5 Sony2010e
|
||
|
PentaxDng NikonLd3 OlympusFe6 Sony2Fp
|
||
|
Fujifilm NikonLd4 OlympusFe7 SonyMisc1
|
||
|
```
|
||
|
|
||
|
A full list of built-in Exif, IPTC and XMP tags is available online at
|
||
|
https://www.exiv2.org/metadata.html. To query Exiv2 Groups and Tagnames,
|
||
|
a sample program called *taglist* is provided (see
|
||
|
https://github.com/Exiv2/exiv2/blob/main/README-SAMPLES.md), which can be
|
||
|
built from source (see https://github.com/Exiv2/exiv2/blob/main/README.md)
|
||
|
or downloaded from https://www.exiv2.org/download.html.
|
||
|
|
||
|
For the Exif, IPTC and XMP groups:
|
||
|
|
||
|
+ The same tags that are available in Exif's Image group (e.g., Exif.Image.XResolution),
|
||
|
are also available in Exif's Thumbnail, Image(2|3), SubImage(1-9) and
|
||
|
SubThumb1 groups, (e.g., Exif.Thumbnail.XResolution).
|
||
|
|
||
|
+ Many camera manufacturer tags are available and are accessed as
|
||
|
different Exif groups, using the manufacturer's name as a prefix (e.g.,
|
||
|
CanonCs is the Camera Settings for a Canon camera). Groups called the
|
||
|
manufacturer name plus number, access the main tags in different file
|
||
|
formats (e.g., Sony1 is for JPEGs, Sony2 is for others such as TIFF and
|
||
|
ARW). Groups are available for use, depending upon which camera
|
||
|
manufacturer and model captured the photo. Supporting the large number of
|
||
|
tags for all the different manufacturers is an ongoing task, only partial
|
||
|
support is available. The full unprocessed makernotes data is available
|
||
|
in [Exif.Photo.MakerNote](https://www.exiv2.org/tags.html).
|
||
|
|
||
|
+ Every Exif tag and IPTC dataset has a tag number (16 bit, 2 byte
|
||
|
integer), which is unique within a Group (to display, see [--Print x](#Print_flgs)).
|
||
|
|
||
|
+ Some of the Exif tags and IPTC datasets are mirrored in the XMP
|
||
|
specification (see https://www.exiv2.org/metadata.html).
|
||
|
|
||
|
+ The XMP specification is flexible and allows new custom 'Groups' and
|
||
|
'Tagnames' to be added (see [Adding new XMP tags](#add_xmp_tags) and
|
||
|
['Modify' command format](#mod_cmd_format)). For example, the 'cm2e'
|
||
|
'Group' has been added, which has 'Father' and 'Family' Tagnames.
|
||
|
Additionally, a 'Family' tag has been added to the built-in 'dc' Group:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --print x Stonehenge.jpg
|
||
|
Xmp.xmp.Rating XmpText 1 0
|
||
|
Xmp.xmp.ModifyDate XmpText 25 2015-07-16T20:25:28+01:00
|
||
|
Xmp.cm2e.Father XmpText 11 Robin Mills
|
||
|
Xmp.cm2e.Family XmpBag 0
|
||
|
Xmp.dc.description LangAlt 1 lang="x-default" Classic View
|
||
|
Xmp.dc.Family XmpBag 1 Robin
|
||
|
```
|
||
|
|
||
|
+ Further information on Exiv2 groups can be found on the Exiv2 wiki: https://github.com/Exiv2/exiv2/wiki
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="exiv2_types">
|
||
|
|
||
|
### Exif/IPTC/XMP types
|
||
|
|
||
|
Each tag uses a specific type to store the value, with all elements in
|
||
|
any array having the same type. Available types for the different
|
||
|
'Family' categories are:
|
||
|
|
||
|
<div id="exiv2_types_exif">
|
||
|
|
||
|
#### Exif
|
||
|
|
||
|
| Type | Format | Element | Comment |
|
||
|
|:------ |:---- |:------ |:------ |
|
||
|
| Short | A 16-bit (2-byte) unsigned integer | Single | - |
|
||
|
| Long | A 32-bit (4-byte) unsigned integer | Single | - |
|
||
|
| Rational | Two Long types. Numerator and denominator | Single | Use as X/Y (e.g., "31/1" is 31.0). See [Setting a Rational or SRational value](#set_Rational_SRational) |
|
||
|
| Byte | A string of 8-bit unsigned integers | Single | Use as a string (e.g., "Value")|
|
||
|
| SShort | A 16-bit (2-byte) signed integer | Single | - |
|
||
|
| SLong | A 32-bit (4-byte) signed integer | Single | - |
|
||
|
| SRational | Two SLong types. Numerator and denominator | Single | Use as [+\|-]X/Y (e.g., "-31/1" is -31.0). See [Setting a Rational or SRational value](#set_Rational_SRational) |
|
||
|
| SByte | A string of 8-bit signed integers | Single | Use as a string (e.g., "Value") |
|
||
|
| Float | Signed single precision (4-byte) IEEE format | Single | Use as a signed decimal (e.g., "-0.5" is -0.5) |
|
||
|
| Double | Signed double precision (8-byte) IEEE format | Single | Use as a signed decimal (e.g., "-0.5" is -0.5) |
|
||
|
| Ascii | A string of 7-bit ASCII. NULL terminated | Single | Use as a string (e.g., "Value") |
|
||
|
| Comment | A string of 7-bit ASCII. NULL terminated) | Single | Use as a string (e.g., "Value"). See [Exif 'Comment' values](#exif_comment_values) |
|
||
|
| Undefined | A string of 8-bit bytes | Single | Use as a string (e.g., "Value") |
|
||
|
|
||
|
<div id="exiv2_types_iptc">
|
||
|
|
||
|
#### IPTC
|
||
|
|
||
|
| Type | Format | Element | Comment |
|
||
|
|:------ |:---- |:------ |:------ |
|
||
|
| String | A string of ASCII | Single | - |
|
||
|
| Short | A 16-bit (2-byte) unsigned integer | Single | - |
|
||
|
| Date | A string of ASCII (8 bytes) | Single | See [Date/Time formats](#date_time_fmts) |
|
||
|
| Time | A string of ASCII (11 bytes) | Single | See [Date/Time formats](#date_time_fmts) |
|
||
|
| Undefined | A string of 8-bit bytes | Single | Use as a string (e.g., "Value") |
|
||
|
|
||
|
<div id="exiv2_types_xmp">
|
||
|
|
||
|
#### XMP
|
||
|
|
||
|
| Type | Format | Element | Comment |
|
||
|
|:------ |:---- |:------ |:------ |
|
||
|
| LangAlt | A string of text | Multi | Similar to XmpAlt. Alternative text for different languages. See [XMP LangAlt values](#langalt_values), [Multiple elements](#multi_elements) and ['Modify' command format](#mod_cmd_format)) |
|
||
|
| XmpAlt | A string of text | Multi | An ordered array, any default value is first |
|
||
|
| XmpBag | A string of text | Multi | An unordered array (e.g., 3 values, "Red, Yellow, Green") (see [Multiple elements](#multi_elements) and ['Modify' command format](#mod_cmd_format) |
|
||
|
| XmpSeq | A string of text | Multi | An ordered array (e.g., 3 values, "Gold, Silver, Bronze") (see [Multiple elements](#multi_elements) and ['Modify' command format](#mod_cmd_format) |
|
||
|
| XmpText | A string of text | Single | - |
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="exiv2_key_syntax">
|
||
|
|
||
|
### Exiv2 key syntax
|
||
|
|
||
|
The standard format for Exif and IPTC tags is:
|
||
|
|
||
|
*Family.Group.Tagname*
|
||
|
|
||
|
Definition | Description |
|
||
|
|:------ |:---- |
|
||
|
| Family | Either 'Exif' or 'Iptc' |
|
||
|
| Group | The tag group within the family. e.g., for Exif, 'Image' |
|
||
|
| Tagname | The tagname within a family and group. e.g., For Exif.Image, 'Model' |
|
||
|
|
||
|
For example, Exif.Image.Model or Iptc.Application2.Subject .
|
||
|
|
||
|
<div id="exiv2_xmp_key_syntax">
|
||
|
|
||
|
#### XMP
|
||
|
In addition to the standard key syntax, XMP can also use an extended format:
|
||
|
|
||
|
*Family.Group.Tagname*[ *\<index\>*[ *\<value_types\>* ] ]+
|
||
|
|
||
|
| Definition | Description |
|
||
|
|:------ |:---- |
|
||
|
| Family | i.e. 'Xmp' |
|
||
|
| Group | The tag group within the family. e.g., for Xmp, 'dc' |
|
||
|
| Tagname | The tagname within a family and group. e.g., For Xmp.dc, 'subject' |
|
||
|
| *\<index\>* | An integer (1,...,n) surrounded by square brackets (e.g., [n], is the n'th item in the 'array') |
|
||
|
| *\<value_types\>* | This is */name1* : *name2* (e.g., /dim:length). Within a *Family.Group.Tagname[n]* and nested arrays, only one type of */name1* identifier is allowed, but many *name2* values |
|
||
|
|
||
|
For example, the [Xmp.xmpMM.History](https://www.exiv2.org/tags-xmp-xmpMM.html)
|
||
|
tag would use the extended key:
|
||
|
```
|
||
|
Xmp.xmpMM.History[1]/stEvt:action
|
||
|
```
|
||
|
Nested structures are permitted and use multiple [ *\<index\>*[ *\<value_types\>* ] ]
|
||
|
in the key. For example, if an [Xmp.xmpMM.History](https://www.exiv2.org/tags-xmp-xmpMM.html)
|
||
|
tag defined an additional nested array struct, the extended key would be:
|
||
|
```
|
||
|
Xmp.xmpMM.History[1]/stEvt:myArray[1]/myName1:myName2
|
||
|
```
|
||
|
|
||
|
See [XMP structs](#xmp_structs) and [Setting an XMP struct value](#set_xmp_struct).
|
||
|
|
||
|
More information about XMP keys and conventions for *\<value_types\>* is
|
||
|
available from: https://www.adobe.com/content/dam/acom/en/devnet/xmp/pdfs/XMPSDKReleasecc-2020/XMPSpecificationPart2.pdf#G4.1132618
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="multi_elements">
|
||
|
|
||
|
### Multiple elements
|
||
|
Some IPTC datasets and XMP properties allow multiple elements to be
|
||
|
stored, although they both do this in different ways.
|
||
|
|
||
|
<div id="multi_elements_iptc">
|
||
|
|
||
|
#### IPTC
|
||
|
|
||
|
IPTC datasets marked as repeatable, can have multiple entries with the
|
||
|
same key (i.e. Family.Group.Tagname) in the image metadata (for
|
||
|
supported datasets, see https://www.exiv2.org/iptc.html, column R).
|
||
|
|
||
|
For example, a file containing three [Iptc.Application2.Subject](https://www.exiv2.org/iptc.html)
|
||
|
values:
|
||
|
```
|
||
|
$ exiv2 --grep Application2 Stonehenge_with_extra_data.jpg
|
||
|
Iptc.Application2.RecordVersion Short 1 4
|
||
|
Iptc.Application2.Caption String 12 Monument
|
||
|
Iptc.Application2.Subject String 10 Stonehenge
|
||
|
Iptc.Application2.Subject String 6 Cloudy
|
||
|
Iptc.Application2.Subject String 5 Grass
|
||
|
```
|
||
|
|
||
|
<div id="multi_elements_xmp">
|
||
|
|
||
|
#### XMP
|
||
|
XMP multiple values are grouped together within the same tag, using ", "
|
||
|
as a separator (see [Exif/IPTC/XMP types](#exiv2_types) for supported
|
||
|
types). If a default value exists for a LangAlt or XmpAlt tag, then this
|
||
|
is the first item listed. For example, a file containing two
|
||
|
[Xmp.dc.description](https://www.exiv2.org/tags-xmp-dc.html) values (for
|
||
|
format, see ['Modify' command format](#Modify_command_format) and three
|
||
|
[Xmp.dc.subject values](https://www.exiv2.org/tags-xmp-dc.html):
|
||
|
|
||
|
```
|
||
|
$ exiv2 --grep description --grep subject Stonehenge_with_extra_data.jpg
|
||
|
Xmp.dc.description LangAlt 1 lang="x-default" Monument, lang="de-DE" das Monument
|
||
|
Xmp.dc.subject XmpBag 3 Stonehenge, Cloudy, Grass
|
||
|
```
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="multi_exif_tags">
|
||
|
|
||
|
### Duplicate Exif tags
|
||
|
The Exif specification allows for duplicate tags, but this is currently
|
||
|
unused by any current tag definitions.
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="date_time_fmts">
|
||
|
|
||
|
### Date/Time formats
|
||
|
|
||
|
The times and dates are stored using different formats in image metadata.
|
||
|
|
||
|
<div id="date_time_fmts_exif">
|
||
|
|
||
|
#### Exif
|
||
|
An Exif DateTime string is stored as 20 ascii bytes (including trailing
|
||
|
NULL) in the format:
|
||
|
```
|
||
|
YYYY:MM:DD HH:mm:SS
|
||
|
```
|
||
|
where YYYY:MM:DD is the year, month and day and HH:mm:SS is the hour,
|
||
|
minute and second (e.g., "2010:09:15 08:45:21" is 08:45:21 on 15-Aug-10).
|
||
|
|
||
|
The options [--timestamp](#timestamp) and [--Timestamp](#Timestamp) will
|
||
|
accept files in which the Date part, has been incorrectly stored as
|
||
|
YYYY-MM-DD.
|
||
|
|
||
|
<div id="date_time_iptc">
|
||
|
|
||
|
#### IPTC
|
||
|
An IPTC 'Date' type is stored in the format:
|
||
|
```
|
||
|
YYYYMMDD
|
||
|
```
|
||
|
where YYYYMMDD is the year, month and day (e.g., "20100915" is 15-Aug-10).
|
||
|
|
||
|
An IPTC 'Time' type is stored in the format:
|
||
|
```
|
||
|
HHMMSScHHMM
|
||
|
```
|
||
|
where HHMMSS refers to local time's hour, minutes and seconds and, HHMM
|
||
|
refers to hours and minutes with c being ahead (+) or behind (-)
|
||
|
Universal Coordinated Time (UCT) as described in ISO 8601 (e.g.,
|
||
|
084515+0100 is 08:45:15, which is +1 hour different from UCT).
|
||
|
|
||
|
<div id="date_time_makernotes">
|
||
|
|
||
|
#### Makernote tags
|
||
|
There is no one single format. Different camera manufacturers use
|
||
|
different formats, even within their own sets of tags. Some tags use
|
||
|
encoded data that does not conform to any official format.
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="exif_comment_values">
|
||
|
|
||
|
### Exif 'Comment' values
|
||
|
Exif 'Comment' values can include an optional charset definition to
|
||
|
explain how to interpret the rest of the value. This is used by tags such
|
||
|
as [Exif.Photo.UserComment](https://www.exiv2.org/tags.html), [Exif.GPSInfo.GPSProcessingMethod](https://www.exiv2.org/tags.html)
|
||
|
and [Exif.GPSInfo.GPSAreaInformation](https://www.exiv2.org/tags.html).
|
||
|
|
||
|
The format of the value is:
|
||
|
|
||
|
[ **charset=** ( *Ascii* | *Jis* | *Unicode* | *Undefined* ) ] comment
|
||
|
|
||
|
If the charset is not specified then the default is *Undefined*.
|
||
|
|
||
|
For example, if Ascii and Unicode Comments have been set:
|
||
|
```
|
||
|
$ exiv2 --grep UserComment --grep GPSProcessingMethod Stonehenge.jpg
|
||
|
Exif.Photo.UserComment Undefined 16 charset=Ascii Monument
|
||
|
Exif.GPSInfo.GPSProcessingMethod Undefined 14 charset=Unicode GPS
|
||
|
```
|
||
|
|
||
|
The reported size of the 'value' is calculated as:
|
||
|
```
|
||
|
8 Bytes (for "charset=val ") + (the rest of the value) * (2 Bytes for Unicode, otherwise 1 Byte)
|
||
|
```
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="xmp_namespaces">
|
||
|
|
||
|
### XMP namespaces
|
||
|
Every XMP 'Group' (called a *prefix*) has an identifier (called a
|
||
|
*namespace*) associated with it. Within an image's metadata, both
|
||
|
namespaces and prefixes are unique.
|
||
|
|
||
|
**exiv2** has standards defined prefixes and namespaces built-in, which
|
||
|
can be displayed in the format: `xmlns=<prefix>:<namespace>`. For
|
||
|
example, here, only a couple are shown:
|
||
|
```
|
||
|
$ exiv2 --verbose --version --grep xmlns
|
||
|
...
|
||
|
xmlns=xmp:http://ns.adobe.com/xap/1.0/
|
||
|
xmlns=dc:http://purl.org/dc/elements/1.1/
|
||
|
...
|
||
|
```
|
||
|
|
||
|
To list the XMP prefixes and namespaces used by an image's metadata (in
|
||
|
the format `xmlns:<prefix>=<namespace>`), [extract a sidecar file to stdout](#extract_tgt3).
|
||
|
For example, here, other data is not included:
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --extract X- Stonehenge.jpg
|
||
|
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
|
||
|
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 4.4.0-Exiv2">
|
||
|
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||
|
<rdf:Description rdf:about=""
|
||
|
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
|
||
|
xmlns:cm2e="http://clanmills.com/exiv2/"
|
||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||
|
xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
|
||
|
xmlns:exif="http://ns.adobe.com/exif/1.0/"
|
||
|
xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
|
||
|
xmp:Rating="0"
|
||
|
xmp:ModifyDate="2015-07-16T20:25:28+01:00"
|
||
|
xmp:CreateDate="2015-07-16T15:38:54.00"
|
||
|
...
|
||
|
```
|
||
|
|
||
|
New XMP namespaces can be registered, allowing new 'Groups' and
|
||
|
'Tagnames' to be created (see [Registering an XMP namespace](#reg_xmp_namespace)).
|
||
|
|
||
|
Within an image's metadata, built-in prefixes can be re-registered with
|
||
|
different namespaces. In this case, **exiv2** will use any new
|
||
|
definitions.
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="langalt_values">
|
||
|
|
||
|
### XMP LangAlt values
|
||
|
A 'LangAlt' string provides alternative text for different languages,
|
||
|
with individual entries separated using a `, `. Each entry is in the
|
||
|
format:
|
||
|
```
|
||
|
[lang=( x-default | <lang> | (<lang>-<country>)] text
|
||
|
```
|
||
|
|
||
|
| Definition | Description |
|
||
|
|:------ |:---- |
|
||
|
| x-default | The default value. If defined, a LangAlt string always lists this entry first |
|
||
|
| lang | A language code as defined in [IEFT RFC 3066](https://www.ietf.org/rfc/rfc3066.txt) |
|
||
|
| country | A country code as defined in [IEFT RFC 3066](https://www.ietf.org/rfc/rfc3066.txt) |
|
||
|
| text | The text to use for a language definition |
|
||
|
|
||
|
The *\<lang\>-\<country\>* combination is useful where a country uses a
|
||
|
different version of a common language (e.g. Swiss-French, would be
|
||
|
"fr-CH"). The *\<lang\>* or *\<lang\>-\<country\>* can be optionally
|
||
|
surrounded by double quotes (single quotes are not allowed). If no
|
||
|
language is specified, the default value is *x-default*. Any *x-default*
|
||
|
entry is always listed first.
|
||
|
|
||
|
For example, 3 language definitions including a default value, a
|
||
|
British English value and a general French value:
|
||
|
```
|
||
|
lang="x-default" Elevator, lang="en-gb" Lift, lang="fr" ascenseur
|
||
|
```
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="xmp_structs">
|
||
|
|
||
|
### XMP structs
|
||
|
|
||
|
XMP structs group XmpText elements together in an array arrangement. The
|
||
|
elements themselves can contain other structs, allowing complex nested
|
||
|
array structures to be created. The tags in a struct use the extended XMP
|
||
|
version of the [Exiv2 key syntax](#exiv2_xmp_key_syntax).
|
||
|
|
||
|
In a struct, the base key (e.g., [Xmp.xmpMM.History](https://www.exiv2.org/tags-xmp-xmpMM.html))
|
||
|
contains:
|
||
|
|
||
|
**type**=*\<array_type\>*
|
||
|
|
||
|
where *\<array_type\>* is 'Alt' for XmpAlt, 'Bag' for XmpBag or 'Seq' for
|
||
|
XmpSeq.
|
||
|
|
||
|
Each numbered base key (e.g., Xmp.xmpMM.History[n]) contains the
|
||
|
string: `type="Struct"` and each numbered base key plus value type
|
||
|
(e.g. Xmp.xmpMM.History[n]/stEvt:action), contains the data.
|
||
|
|
||
|
For example, the [Xmp.xmpMM.History](https://www.exiv2.org/tags-xmp-xmpMM.html)
|
||
|
tag recording that a file has been converted from tiff to JPEG, then
|
||
|
saved.
|
||
|
|
||
|
```
|
||
|
Xmp.xmpMM.History XmpText 0 type="Seq"
|
||
|
Xmp.xmpMM.History[1] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[1]/stEvt:action XmpText 7 derived
|
||
|
Xmp.xmpMM.History[1]/stEvt:parameters XmpText 62 converted from image/tiff to image/jpeg, saved to new location
|
||
|
Xmp.xmpMM.History[2] XmpText 0 type="Struct"
|
||
|
Xmp.xmpMM.History[2]/stEvt:action XmpText 5 saved
|
||
|
Xmp.xmpMM.History[2]/stEvt:instanceID XmpText 40 xmp.iid:89A4EB97412C88632107D65978304F45
|
||
|
Xmp.xmpMM.History[2]/stEvt:when XmpText 25 2021-08-13T10:12:09+01:00
|
||
|
Xmp.xmpMM.History[2]/stEvt:softwareAgent XmpText 21 MySuperPhotoFixer 1.0
|
||
|
```
|
||
|
|
||
|
For an example of modifying a struct, see [Setting an XMP struct value](#set_xmp_struct).
|
||
|
|
||
|
More information about structs is available from: https://wwwimages2.adobe.com/content/dam/acom/en/devnet/xmp/pdfs/XMP%20SDK%20Release%20cc-2016-08/XMPSpecificationPart1.pdf#G5.873540
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="config_file">
|
||
|
|
||
|
# CONFIGURATION FILE
|
||
|
**exiv2** can read an optional configuration file, which allows
|
||
|
additional lens definitions to be added to translated output. On UNIX
|
||
|
based systems, this file is called *.exiv2* and on Windows, *exiv2.ini*.
|
||
|
The file is searched for first in the current directory, then in the
|
||
|
home directory (on UNIX based systems, *~/* and on Windows, *%USERPROFILE%\\*).
|
||
|
|
||
|
You can determine the name of the file and where it is searched for,
|
||
|
with the command:
|
||
|
|
||
|
```
|
||
|
$ exiv2 --verbose --version --grep config_path
|
||
|
exiv2 1.0.0.9
|
||
|
config_path=/Users/rmills/.exiv2
|
||
|
```
|
||
|
|
||
|
The configuration file uses the Windows *\*.ini* format (see https://en.wikipedia.org/wiki/INI_file)
|
||
|
and has sections for each of the major camera manufactures: Canon,
|
||
|
Minolta, Nikon, Olympus, Pentax and Sony. The configuration file
|
||
|
definitions override any existing values.
|
||
|
|
||
|
For example, to add a new lens definition, first obtain the lensID for
|
||
|
your camera:
|
||
|
|
||
|
```
|
||
|
$ curl --silent -O https://clanmills.com/Stonehenge.jpg
|
||
|
$ exiv2 --print v --grep lens/i Stonehenge.jpg
|
||
|
0x0083 Nikon3 LensType Byte 1 14
|
||
|
0x0084 Nikon3 Lens Rational 4 180/10 2500/10 35/10 63/10
|
||
|
0x008b Nikon3 LensFStops Undefined 4 55 1 12 0
|
||
|
0x000c NikonLd3 LensIDNumber Byte 1 146
|
||
|
0x000d NikonLd3 LensFStops Byte 1 55
|
||
|
```
|
||
|
|
||
|
Then using the 'LensIDNumber' value (i.e., 146), add the following text to
|
||
|
the configuration file:
|
||
|
```
|
||
|
[nikon]
|
||
|
146=Robin's Sigma Lens
|
||
|
```
|
||
|
The text will now appear when the translated print option is used:
|
||
|
|
||
|
```
|
||
|
$ exiv2 --print t --grep lens/i Stonehenge.jpg
|
||
|
Exif.Nikon3.LensType Byte 1 D G VR
|
||
|
Exif.Nikon3.Lens Rational 4 18-250mm F3.5-6.3
|
||
|
Exif.Nikon3.LensFStops Undefined 4 4.58333
|
||
|
Exif.NikonLd3.LensIDNumber Byte 1 Robin's Sigma Lens
|
||
|
Exif.NikonLd3.LensFStops Byte 1 F4.6
|
||
|
```
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="examples">
|
||
|
|
||
|
# EXAMPLES
|
||
|
|
||
|
+ `exiv2 *.jpg`<br>
|
||
|
Prints a summary of the Exif information for all the JPEG files in the current
|
||
|
directory (the same as `exiv2 print *.jpg`). The summary
|
||
|
is brief and does not use the Family.Group.Tagname format
|
||
|
|
||
|
+ `exiv2 --grep date/i https://clanmills.com/Stonehenge.jpg`<br>
|
||
|
Prints tags in https://clanmills.com/Stonehenge.jpg, where the key
|
||
|
(see [Exiv2 key syntax](#exiv2_key_syntax)) contains the string *date*
|
||
|
(*/i* searches case insensitive). When not including [--print mod](#print_mod)
|
||
|
or [--Print flgs](#Print_flgs), the default output becomes `--print a`
|
||
|
(i.e., print all)
|
||
|
|
||
|
+ `exiv2 --print i image.jpg`<br>
|
||
|
Prints the IPTC datasets in *image.jpg*
|
||
|
|
||
|
+ `exiv2 --Print IkytEX image.jpg`<br>
|
||
|
Prints (with finer grained control) the Exif tags and XMP properties in
|
||
|
*image.jpg*. The tag's key (see [Exiv2 key syntax](#exiv2_key_syntax)),
|
||
|
type and translated value are displayed
|
||
|
|
||
|
+ `exiv2 rename image.jpg`<br>
|
||
|
Renames *image.jpg* (taken on 13-Nov-05 at 22:58:31) to *20051113_225831.jpg*
|
||
|
|
||
|
+ `exiv2 --rename ":basename:_%Y-%m" image.jpg`<br>
|
||
|
Renames *image.jpg* using the basename (i.e., *image*) and values
|
||
|
defined in [iconv_open(3)](https://linux.die.net/man/3/iconv_open)
|
||
|
to *image_2005-11.jpg*. The values for time and date are taken from the
|
||
|
Exif metadata
|
||
|
|
||
|
+ `exiv2 --extract t image1.jpg image2.jpg`<br>
|
||
|
Extracts (copies) the Exif thumbnails from *image1.jpg* into
|
||
|
*image1-thumb.jpg* and from *image2.jpg* into *image2-thumb.jpg*.
|
||
|
|
||
|
+ `exiv2 --insert t image1.jpg image2.jpg`<br>
|
||
|
Inserts (copies) thumbnails *image1-thumb.jpg* into *image1.jpg* and
|
||
|
*image2-thumb.jpg* into *image2.jpg*.
|
||
|
|
||
|
+ `exiv2 --extract p1,2 image.jpg`<br>
|
||
|
Extracts (copies) previews 1 and 2 from *image.jpg*, into *image-preview1.jpg*
|
||
|
and *image-preview2.jpg*. Use `exiv2 --print p image.jpg` to display a
|
||
|
list of available previews for *image.jpg*.
|
||
|
|
||
|
+ `exiv2 --extract X image.jpg`<br>
|
||
|
Extracts (copies) metadata tags from *image.jpg*, into an XMP sidecar file,
|
||
|
*image.xmp*. In the process, this converts selected Exif tags and IPTC
|
||
|
datasets to XMP properties.
|
||
|
|
||
|
+ `exiv2 --insert X image.jpg`<br>
|
||
|
Inserts (copies) metadata from an XMP sidecar file, *image.xmp*, into
|
||
|
*image.jpg*. The resulting Exif tags and IPTC datasets are converted from
|
||
|
the equivalent XMP properties in the sidecar file.
|
||
|
|
||
|
+ `exiv2 --extract X --Modify "add Xmp.dc.subject Sunset" image.jpg`<br>
|
||
|
Extracts (copies) metadata tags from *image.jpg*, applies [--Modify cmd](#Modify_cmd)
|
||
|
to those tags and then saves in an XMP sidecar file, *image.xmp*. While
|
||
|
saving, selected Exif tags and IPTC datasets are converted to
|
||
|
XMP properties. Multiple [--Modify cmd](#Modify_cmd) and [--modify cmdfile](#modify_cmdfile)
|
||
|
can be used.
|
||
|
|
||
|
+ `exiv2 --extract X- image1.jpg | exiv2 --insert X- image2.jpg`<br>
|
||
|
Extracts (copies) the *image1.jpg* metadata as XMP sidecar data and
|
||
|
inserts it directly into *image2.jpg*. [--Modify cmd](#Modify_cmd) and [--modify cmdfile](#modify_cmdfile)
|
||
|
can also be added when extracting from *image1.jpg*.
|
||
|
|
||
|
+ `exiv2 delete image.jpg`<br>
|
||
|
Deletes all the metadata in *image.jpg*.
|
||
|
|
||
|
+ `exiv2 --delete tC image.jpg`<br>
|
||
|
Deletes the thumbnail and ICC profile in *image.jpg*.
|
||
|
|
||
|
+ `exiv2 --adjust 1:00:00 image.jpg`<br>
|
||
|
Adjusts Exif timestamps in *image.jpg*, adding 1 hour
|
||
|
|
||
|
+ `exiv2 --Modify "set Exif.Photo.UserComment charset=Ascii New Exif comment" image.jpg`<br>
|
||
|
Sets the Exif comment in *image.jpg*, to an ASCII string with the value *New Exif comment*.
|
||
|
|
||
|
+ `exiv2 --Modify "set Exif.GPSInfo.GPSLatitude 4/1 15/1 33/1" --Modify "set Exif.GPSInfo.GPSLatitudeRef N" image.jpg`<br>
|
||
|
Sets the latitude to 4 degrees, 15 minutes and 33 seconds north in
|
||
|
*image.jpg*. The Exif standard stipulates that the GPSLatitude
|
||
|
tag consists of three Rational numbers for the degrees, minutes and
|
||
|
seconds of the latitude and GPSLatitudeRef contains either 'N' or 'S'
|
||
|
for north or south latitude respectively.
|
||
|
|
||
|
+ `exiv2 --Modify "reg myPrefix http://ns.myPrefix.me/" --Modify "add Xmp.myPrefix.Whom Mr. Mills" Stonehenge.jpg`<br>
|
||
|
Registers a new XMP namespace called *http<nolink>://ns.myPrefix.me/* and a new
|
||
|
XMP group called *myPrefix*. This new Group has a new *Whom* tag added to it.
|
||
|
|
||
|
+ `exiv2 --location /tmp --suffix .CRW /data/*.JPG`<br>
|
||
|
Copy all metadata from *CRW* files in the */tmp* directory to *JPG* files
|
||
|
with corresponding basenames in the */data* directory. Note that this
|
||
|
copies metadata as is, without any modifications to adapt it to the
|
||
|
requirements of the target format. Some tags copied like this may not make
|
||
|
sense in the target image.
|
||
|
|
||
|
+ `exiv2 fixiso image.jpg`<br>
|
||
|
Adds the Exif ISO metadata (if missing) to *image.jpg*. This is for
|
||
|
Nikon and Canon cameras only and copies the camera maker's value into the Exif
|
||
|
metadata.
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="environment">
|
||
|
|
||
|
# ENVIRONMENT
|
||
|
|
||
|
<div id="TZ">
|
||
|
|
||
|
### TZ
|
||
|
This is the timezone to use when adjusting for daylight savings time (DST) and
|
||
|
affects the changing of the the time and date (e.g., when adjusting or
|
||
|
renaming). See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||
|
for a list of valid values to use. The variable is not set by default for
|
||
|
Windows and an attempt is made to obtain the timezone from the OS. If this
|
||
|
fails, the DST rules for the United States are used. This can be corrected
|
||
|
by defining *TZ*.
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="notes">
|
||
|
|
||
|
# NOTES
|
||
|
For further help, see the Exiv2 wiki: https://github.com/Exiv2/exiv2/wiki
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="bugs">
|
||
|
|
||
|
# BUGS
|
||
|
Report bugs to: https://github.com/Exiv2/exiv2/issues
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="copyright">
|
||
|
|
||
|
# COPYRIGHT
|
||
|
The Exiv2 project is released under the GNU GPLv2 license: https://github.com/Exiv2/exiv2/blob/main/COPYING
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="see_also">
|
||
|
|
||
|
# SEE ALSO
|
||
|
[curl(1)](https://linux.die.net/man/1/curl), [xmllint(1)](https://linux.die.net/man/1/xmllint), [iconv_open(3)](https://linux.die.net/man/3/iconv_open),
|
||
|
[strftime(3)](https://linux.die.net/man/3/strftime),
|
||
|
|
||
|
Exiv2 'modify' command examples: https://exiv2.org/sample.html#modify<br>
|
||
|
All Exiv2 tags, listing the key and default type: https://exiv2.org/metadata.html<br>
|
||
|
Exiv2 README: https://github.com/Exiv2/exiv2/blob/main/README.md<br>
|
||
|
Exiv2 sample programs: https://github.com/Exiv2/exiv2/blob/main/README-SAMPLES.md<br>
|
||
|
Exiv2 downloads: https://www.exiv2.org/download.html<br>
|
||
|
Exiv2 wiki: https://github.com/Exiv2/exiv2/wiki<br>
|
||
|
APEX Exposure values: https://en.wikipedia.org/wiki/APEX_system<br>
|
||
|
XMP keys: https://www.adobe.com/content/dam/acom/en/devnet/xmp/pdfs/XMPSDKReleasecc-2020/XMPSpecificationPart2.pdf#G4.1128133<br>
|
||
|
XMP structs: https://wwwimages2.adobe.com/content/dam/acom/en/devnet/xmp/pdfs/XMP%20SDK%20Release%20cc-2016-08/XMPSpecificationPart1.pdf<br>
|
||
|
International Language Codes: https://www.ietf.org/rfc/rfc3066.txt<br>
|
||
|
Windows INI format: https://en.wikipedia.org/wiki/INI_file<br>
|
||
|
TZ Environment variable values: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones<br>
|
||
|
|
||
|
[TOC](#TOC)
|
||
|
|
||
|
<div id="authors">
|
||
|
|
||
|
# AUTHORS
|
||
|
**exiv2** was written by Andreas Huggel and others.
|
||
|
|
||
|
Exiv2 project website: https://exiv2.org<br>
|
||
|
Exiv2 source code: https://github.com/exiv2/exiv2
|
||
|
|
||
|
[TOC](#TOC)
|