# EXIV2(1)
# NAME exiv2 - Image metadata manipulation tool
# 1 SYNOPSIS **exiv2** [ **option** [ *arg* ] ]+ [ *action* ] *file* ...
# 2 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, IPTC and XMP tags, as recommended by their respective standards/specifications and the Metadata Working Group guidelines.
### TABLE OF CONTENTS 1. [SYNOPSIS](#synopsis) 2. [DESCRIPTION](#description) 3. [FILE TYPES](#file_types) 4. [ACTIONS](#actions) 5. [COMMAND SUMMARY](#cmd_summary) 6. [OPTIONS](#options) 7. [EXIV2 GROUPS, TYPES AND VALUES](#groups_types_values) 1. [Exiv2 key syntax](#exiv2_key_syntax) 2. [Exiv2 tags](#exiv2_tags) 3. [Exif/IPTC/XMP types](#exiv2_types) 4. [Multiple elements](#multi_elements) 5. [Duplicate tags](#multi_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) 8. [PREVIEW IMAGES AND THUMBNAILS](#preview_images) 9. [ICC PROFILES](#icc_profiles) 10. [IMAGE COMMENTS](#image_comments) 11. ['MODIFY' COMMANDS](#modify_cmds) 1. [Quotations with 'modify' commands](#quotes_modify) 2. ['Modify' command format](#mod_cmd_format) 3. [Modifying a value](#mod_value) 4. ['Modify' examples](#mod_examples) 5. ['Modify' command file](#mod_cmd_file) 12. [CONFIGURATION FILE](#config_file) 13. [EXAMPLES](#examples) 14. [RETURN VALUE](#return_value) 15. [ENVIRONMENT](#environment) 16. [NOTES](#notes) 17. [BUGS](#bugs) 18. [COPYRIGHT](#copyright) 19. [AUTHORS](#authors) 20. [SEE ALSO](#see_also)
# 3 FILE TYPES The following image formats and metadata categories are supported:
Type | Exif | IPTC | XMP | Image Comments | ICC Profile | Thumbnail |:---|:---- |:---- |:---- |:---- |:---- |:---- ARW | Read/Write | Read/Write | Read/Write | - | Read/Write | Read/Write AVIF | Read | Read | Read | - | - | Read BMP | - | - | - | - | - | - CR2 | Read/Write | Read/Write | Read/Write | - | Read/Write | Read/Write CR3 | Read | Read | Read | - | - | Read CRW | Read/Write | - | - | Read/Write | - | Read/Write DCP | 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 JXL | Read | Read | Read | - | - | Read 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. - Some image formats allow an extra internal type of metadata. Only partial support exists for the RAF format. - Support for BMFF types such as AVIF, CR3, HEIF and HEIC is a build option. To check if this is enabled, use `exiv2 --version --verbose --grep bmff` and see if `enable_bmff=1`. - Naked codestream JXL files do not contain Exif, IPTC or XMP metadata. - Support of video files is limited. Currently **exiv2** only has some rudimentary support to read metadata from quicktime, matroska and riff based video files (e.g. .MOV/.MP4, .MKV, .AVI, .WAV, .ASF). [TOC](#TOC)
# 4 ACTIONS The *action* argument is only required if it is not clear from the *options* which action is implied.
### pr | print Print image metadata, the default is [--print s](#print_mod). This is also the default action (i.e., `exiv2 image.jpg`).
### ex | extract Extract metadata to "raw" metadata (\*.exv), XMP sidecar (\*.xmp), preview image, thumbnail or ICC profile file. The default is [--extract XXei](#extract_tgt3). Use [--location dir](#location_dir) to direct the output to a different directory. Modification commands can be applied on-the-fly.
### in | insert Insert metadata from corresponding "raw" metadata (\*.exv), XMP sidecar (\*.xmp), thumbnail or ICC profile files, the default is [--insert XXeix](#insert_tgt2). Use [--location dir](#location_dir) to direct the input from a different directory and [--suffix suf](#suffix_suf) for the output extension. 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.
### rm | delete Delete image metadata from the files, the default is [--delete a](#delete_tgt1).
### 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 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. The default filename format is in [--rename fmt](#rename_fmt). Uses the value of [Exif.Photo.DateTimeOriginal](https://www.exiv2.org/tags.html) or, [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)
# 5 COMMAND SUMMARY **exiv2** [ **option** [ *arg* ] ]+ [ *action* ] *file* ...
Where *file* is one or more files containing image metadata. These can optionally be specified using a URL (http, https, ftp, sftp, data and file supported) or a wildcard pattern (e.g., *image1.tiff image2.jpg*, *https://www.exiv2.org/Stonehenge.jpg* or *\*.jpg*) | **Option** *arg* | **Long option** *arg* | 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 [[...]](#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) action [[...]](#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 arguments for those options are: | *arg* | 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 \| m
(debug, info, warning, error, mute) | | *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]]
(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 metadata, stdin/out) | | *tgt3* | a \| e \| i \| p \| t \| x \| C \| X \| XX \| -
(all, Exif, IPTC, preview, thumbnail, XMP, ICC Profile, SideCar, Raw metadata, 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)
# 6 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://www.exiv2.org/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://www.exiv2.org/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'). See [Exif 'Comment' values](#exif_comment_values).
### **-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://www.exiv2.org/Stonehenge.jpg $ exiv2 --verbose --Force rename Stonehenge.jpg File 1/1: Stonehenge.jpg Renaming file to ./20150716_153854.jpg $ curl --silent -O https://www.exiv2.org/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 | | :basesuffix: | Suffix in original filename, starts with first dot and ends before extension, e.g. PANO, MP, NIGHT added by Google Camera app | | :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://www.exiv2.org/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://www.exiv2.org/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 ``` If the filename contains a suffix, which shall be included in new filename: ``` $ exiv2 --verbose --rename '%d_%b_%Y:basesuffix:' Stonehenge.PANO.jpg File 1/1: Stonehenge.PANO.jpg Renaming file to '16_Jul_2015.PANO'.jpg```
### **-a** *time*, **--adjust** *time* Adjusts the times in standard Exif tags, 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).