# EXIV2(1)
# NAME exiv2 - Image metadata manipulation tool
# SYNOPSIS **exiv2** [ *options* ] [ *action* ] *file* ...
# 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.
### 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)
# FILE TYPES The following image formats and metadata categories are supported:
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)
# ACTIONS The *action* argument is only required if it is not clear from the *options* which action is implied.
### 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.
### ex | extract Extract metadata to \*.exv, XMP sidecar (\*.xmp), preview image, thumbnail or ICC profile file. Modification commands can be applied on-the-fly.
### 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.
### rm | delete Delete image metadata from the files.
### 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).
### 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).
### 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).
### 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.
### 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)
# COMMAND SUMMARY **exiv2** [ **option** [ *arg* ] ]+ [ *action* ] *file* ...
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:
| Parameter | Description | |:------ |:---- | | *action* | pr \| ex \| in \| rm \| ad \| mo \| mv \| fi \| fc
(print, extract, insert, delete, adjust, modify, rename, fixiso, fixcom) | | *cmd* | (**set** \| **add**) *key* [[*type*] *value*] \| **del** *key* [*type*] \| **reg** *prefix* *namespace*
(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
(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
(debug, info, warning, error) | | *mod* | s \| a \| e \| t \| v \| h \| i \| x \| c \| p \| C \| R \| S \| X
(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]]]
(Default is **+** when **+**/**-** are missing) | | *tgt1* | a \| c \| e \| i \| I \| t \| x \| C \| -
(all, comment, Exif, IPTC, IPTC all, thumbnail, XMP, ICC Profile, stdin/out) | | *tgt2* | a \| c \| e \| i \| t \| x \| C \| X \| XX \| -
(all, comment, Exif, IPTC, thumbnail, XMP, ICC Profile, SideCar, Raw XMP, stdin/out) | | *tgt3* | a \| e \| i \| p \| t \| x \| C \| X \| XX \| -
(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)
# OPTIONS
### **-h**, **--help** Display help and exit.
### **-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).
### **-v**, **--verbose** Be verbose during the program run.
### **-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.
### **-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.
### **-u**, **--unknown** Show unknown tags. Default is to suppress tags which don't have a name (e.g., Exif.SonyMisc3c.0x022b).
### **-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 ```
### **-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 ```
### **-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').
### **-k**, **--keep** Preserve file timestamps when updating files. Can be used with all options which update files and is ignored by read-only options.
### **-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.
### **-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).
### **-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 ```
### **-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 ```
### **-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 |
### **-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).
### **-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).
### **-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).