ExifTool is also available as a stand-alone Windows executable and a
MacOS package: (Note that these versions contain the executable
only, and do not include the HTML documentation or other files of the full
distribution above.)

The stand-alone Windows executable does not require Perl. Just
download and un-zip the archive then double-click on
"exiftool(-k).exe" to read the application documentation,
drag-and-drop files and folders to view meta information, or rename to
"exiftool.exe" for command-line use. Runs on all versions
of Windows.

The MacOS package installs the ExifTool command-line application and
libraries in /usr/local/bin. After installing, type "exiftool" in
a Terminal window to run exiftool and read the application documentation.

If you find
the need to use "find" or "awk" in conjunction with ExifTool, then you probably
haven't discovered the full power of ExifTool. Read about the -ext,
-if, -p and -tagsFromFile options in the
application documentation. (This is
common mistake number 3.)

"... it's super awesome, it's super reliable and after many years of
development it's still being updated!" -
P_W999 blog

"... it is the mother of all EXIF utilities; the BFG of meta-data
extraction; the Pan Galactic Gargle Blaster of EXIF tools ... This thing will
suck the last bit of metadata out of whatever image file you throw at it!" -
Open Photography Forums

Requires Perl 5.004 or later. No other libraries or software required, but
some optional Perl modules may be added to enable certain ExifTool features (for
details, see the DEPENDENCIES section of the README file included in the full
distribution).

Windows users: A stand-alone Windows executable
version of ExifTool is available which doesn't require Perl. You can also use
the pure Perl version if you already have Perl installed. (You can get a good,
free Perl interpreter from
activeperl.com.)

The exiftool application provides a
convenient command-line interface for the
Image::ExifTool Perl package (both included in the
full distribution). Once you have downloaded and extracted the distribution, you
can immediately run exiftool (without building or installing) by typing
"DIR/exiftool FILE" (or
"perl DIR/exiftool FILE" in Windows), where
DIR is the exiftool directory and FILE
is the name of an image file, including directory name. Read the
installation instructions or the README file included
in the full distribution for help installing ExifTool.

Running in Windows

i) From the command line:

The Perl application ("exiftool") is run by typing "perl
exiftool". Alternately, you may be able to rename it to
"exiftool.pl" and type "exiftool.pl", but this
requires that the proper Windows associations have been made for the the
".pl" extension.

The stand-alone version ("exiftool(-k).exe") should be
renamed to "exiftool.exe" to allow it to be run by typing
"exiftool" at the command line.

If the exiftool executable ("exiftool.pl" or
"exiftool.exe") is not in the current directory or your system
PATH, then its directory must be specified on the command line (eg. by typing
"c:\path_to_exiftool\exiftool.pl" or
"c:\path_to_exiftool\exiftool").

Note that when typing commands in the "cmd.exe" shell, you should use double
quotes instead of single quotes as shown in some examples.

ii) Stand-alone version in the Windows GUI:

Double-click on "exiftool(-k).exe" to read the application
documentation, or drag-and-drop files and folders to run exiftool on the
selected files.

Simple options may be added inside brackets in the name of the stand-alone
executable. (But note that the characters /\?*:|"<> may not
be used because they are invalid in Windows file names.) In this way, the
behaviour of the drag-and-drop application can be customized. For example:

Executable Name

Operation

exiftool(-k).exe

Print meta information in window and pause before terminating.

exiftool(-k -a -u -g1 -w txt).exe

Generate output ".txt" files with detailed meta information.

exiftool(-k -o %d%f.xmp).exe

Generate sidecar ".xmp" files.

exiftool(-copyright='Phil Harvey').exe

Add copyright information (and don't pause before terminating).

Hint: Options may also be added to the "Target" property of a Windows
shortcut for the executable. Using a shortcut has 3 advantages over adding
options in the file name: 1) different shortcuts may be created without
requiring multiple copies of the executable, 2) characters which are invalid
in file names may be used, and 3) the shortcuts can be given more meaningful
(and convenient) file names.

As well, it may be useful to increase the window and buffer sizes to display
more information: Right-click on the window's title bar then select
"Properties" from the menu and change the window layout settings.

Verbose and HtmlDump Output

A tag name is a "handle" that is used to refer to a specific piece of meta
information. Tag names are entered on the command line with a leading
'-', in the order you want them displayed. Case is not
significant. The tag name may be prefixed by a group name
(separated by a colon) to identify a specific information type or location. A
special tag name of "All" may be used to represent all tags, or all
tags in a specified group. For example:

exiftool -filename -imagesize -exif:fnumber -xmp:all image.jpg

A complete list of ExifTool Tag Names
accompanies this documentation. As well, current lists of available tag names
and writable tag names may be obtained using the exiftool -list and
-listw options. But perhaps the easiest way to determine a tag name
is to use the -s option to print the tag names instead of
descriptions for all information in a file. It may also be helpful to use the
-G option to display the group names, and the -H or
-D option to print the numerical tag ID's for reference.

Notes:

Tag names sometimes differ from their descriptions. Use the
-s command-line option to see the actual tag names instead of the
descriptions shown when extracting information.

When extracting information, tags will not appear in the output unless they
exist in the file, even if they are specified on the command line. The
-f option may be used to force all specified tags to be displayed
(not including tags specified with wildcards or by -GROUP:all).

Information for a given tag name may occur in multiple locations within a
single file. By default these duplicate tags are suppressed, but the -a
option may be used to extract all tags.

Tag names may be suffixed by a '#' character to disable the
print conversion on a per-tag basis. See the
-n option in the application
documentation for more information.

Shortcut tags represent one or more other tags, and are used like any other
tag when reading, writing or copying information.

ExifTool defines a few shortcut tags
in the Image::ExifTool::Shortcuts module, and allows users to define their own
shortcuts in a configuration file called
".ExifTool_config" in their home directory or exiftool application
directory. Here is a simple example that defines two shortcuts:

When writing information, ExifTool preserves the original file by adding
"_original" to the file name. Be sure to keep a copy of the
original, or thoroughly validate the new file before erasing the original.
(Read here for some ramblings on the subject of
writing meta information.)

Syntax

Tag values are written rather than being extracted if any tag name ends with
a '=' symbol (or if the -tagsFromFile or
-geotag options are used). The '=' may be prefixed by
'+', '-' or '<' to add a value, remove
a value or set a value from file. The following table outlines the different
write syntaxes:

Syntax

Result

-TAG=

Deletes all occurrences of TAG

-all=

Deletes all meta information! †

-GROUP:TAG=

Deletes TAG only in specified group

-GROUP:all=

Deletes all information in specified group

-[GROUP:]TAG=VALUE

Sets value of TAG (only in GROUP if specified)

-[GROUP:]TAG+=VALUE

Adds item to a list, shifts a date/time, or increments a number

-[GROUP:]TAG-=VALUE

Removes item from a list, shifts a date/time, or deletes TAG if it has the specified value

Quotes are required around VALUE if it contains spaces or other
special characters, and around the whole argument if the '<='
syntax is used (to prevent shell redirection).

A special feature allows the print conversion to be disabled on a per-tag
basis by suffixing any tag name (including 'all') with the
'#' character. This has the same effect as the
-n option, but for a single tag. See the
-n option in the application
documentation for more details.

Note: Changes to PDF files are reversible because the original
metadata is never actually deleted from these files. See the
PDF Tags documentation for details.

Group Priorities

ExifTool prioritizes the following types of meta information when writing:

1) EXIF, 2) IPTC, 3) XMP

Many tag names are valid for more than one of these groups. If a group name is
not specified when writing information, then the information is added only to
the highest priority group for which the tag name is valid (however, the
information is updated in all groups where the tag already existed). The
priority of the groups is given by the list above. Specifically, this means that
new information is added preferentially to the EXIF group, or to the IPTC group
if no corresponding EXIF tag exists, or finally to the XMP group.

Alternatively, information may be written to a specific group only, bypassing
these priorities, by providing a group name for the tag. The
"Writing Meta Information" section above gave the syntax
rules for exiftool command-line arguments to do this. Any family 0, 1 or 2 group
name may be used when writing information, although not all groups are writable.

The "-tagsFromFile" Option

A special ExifTool option allows copying tags from one file to another. The
command-line syntax for doing this is
"-tagsFromFile SRCFILE". Any tags specified after this
option on the command line are extracted from source file and written to the
destination file. If no tags are specified, then all writable tags are copied.
This option is very simple, yet very powerful. Depending on the formats of the
source and destination files, some of tags read may not be valid in the
destination file, in which case they aren't written.

This option may also be used to transfer information between different tags
within a single image or between different images. See the
-tagsFromFile
option in the application documentation for more details.

ExifTool will not rewrite a file if it detects a significant problem
with the file format.

ExifTool has been tested with a wide range of different images, but since it
is not possible to test it with every known image type, there is the possibility
that it will corrupt some files. Be sure to keep backups of your files.

Even though ExifTool does some validation of the information written, it is
still possible to write illegal values which may cause problems when
reading the images with other software. So take care to validate the
information you are writing.

ExifTool is not guaranteed to remove metadata completely from a file
when attempting to delete all metadata. For JPEG images, all APP segments
(except Adobe APP14, which is not removed
by default) and trailers are removed which effectively removes all metadata, but
for other formats the results are less complete:

Some antivirus software has been known to cause problems for the Windows
version of ExifTool. Norton Antivirus may delete ExifTool when it is run,
Windows Defender may slow down launching of ExifTool or hang it altogether,
and Bitdefender Antivirus may block ExifTool from writing files.
Presumably this is due to the way the ExifTool package for Windows works -- it
unpacks executable files into a temporary directory and runs from there, which
apparently may be seen as a threat by antivirus software. A work-around is to
add ExifTool to the exclusion list of the antivirus software.

Adobe Camera Raw and DNG Converter 9.5.1 fail to recognize edited
Samsung SRW images from some models (NX30, NX300, NX2000 and EK-GN120).
[This problem was fixed for the NX models in ExifTool 10.26, but
remains for the EK-GN120]

In Windows, ExifTool will not process files with Unicode characters
in the file name. This is due to an underlying lack of support for Unicode
filenames in the Windows standard C I/O libraries. [This deficiency
was addressed in ExifTool 9.79, and ExifTool now supports Windows Unicode file
names with some exceptions. See the
WINDOWS UNICODE FILE NAMES
section of the application documentation for details.]

Memory available to ExifTool in the Windows EXE version is limited to
a few hundred MB. This limitation has been known to cause unreasonably long
processing times (almost 7 minutes) for some large EPS files (> 200 MB) which
are processed much faster by the Perl version (< 6 seconds).

Apple Spotlight and Preview (OS X 10.8.5) and Adobe Photoshop
CC (version 14.0) ignore XMP in PNG images if it comes after the image
data, which is where ExifTool adds new XMP. This should be considered as a bug
in the Apple and Adobe software since XMP is allowed to exist after the image
data according to the XMP and PNG specifications. [ExifTool 9.40
provides the PNGEarlyXMP API option to
allow writing XMP before the IDAT chunk, but there are caveats associated with
its use]

There is a bug in the Apple RAW file support (OS X 10.4.11) which
prevents some edited Pentax PEF images from being displayed properly.
Other software such as the Pentax Silkypix software and dcraw have no problems
with these images. [This bug is fixed in OS X 10.5.4]

There is a bug in a number of Adobe utilities which causes some
edited Sony ARW images to be displayed with the wrong tone curve. This
problem has been observed in Photoshop CS4 Camera Raw 5.6, DNG Converter 5.6 and
Lightroom 2.6 with ARW images from the A500, A550, A700, A850 and A900. Other
software such as the Sony IDC utility, Apple RAW utilities, dcraw and Capture
One have no problems with edited images. [This bug is fixed in
Camera Raw 6.3 and LR 3.3]

Some ExifTool options (-if, -p, -api filter
and copying arguments like "-DSTTAG<STR") have the ability to
execute Perl code from within command-line arguments. This may be a security
problem if ExifTool is executed from another application that blindly passes
untrusted file names on the command line (since they may be interpreted as
ExifTool options if they begin with a dash). To be secure, the calling
application must ensure that input file names do not start with a dash (U+002D)
or a Unicode minus sign (U+2212). The easiest way to accomplish this is to
prefix input file names with a known directory name, eg.)
"./FILENAME".

Have you ever forgotten to set the date/time on your digital camera before
taking a bunch of pictures? ExifTool has a time shift feature that makes it
easy to apply a batch fix to the timestamps of the images (eg. change the "Date
Picture Taken" reported by Windows Explorer). Say for example that your camera
clock was reset to 2000:01:01 00:00:00 when you put in a new battery at
2005:11:03 10:48:00. Then all of the pictures you took subsequently have
timestamps that are wrong by 5 years, 10 months, 2 days, 10 hours and 48
minutes. To fix this, put all of the images in the same directory
("DIR") and run exiftool:

exiftool "-DateTimeOriginal+=5:10:2 10:48:0" DIR

The example above changes only the DateTimeOriginal tag, but any writable date
or time tag can be shifted, and multiple tags may be written with a single
command line. Commonly, in JPEG images, the DateTimeOriginal, CreateDate and
ModifyDate values must all be changed. For convenience, a
Shortcut tag called AllDates has been defined to
represent these three tags. So, for example, if you forgot to set your camera
clock back 1 hour at the end of daylight savings time in the fall, you can fix
the images with:

Note: Not all date/time information is covered by the AllDates
shortcut. Specifically, the filesystem date/time tags are not included, and this
command will reset FileModifyDate to the current date/time as it should when the
file is modified, unless either the -P option is used, or
FileModifyDate is set to something else. To shift FileModifyDate along with the
other tags, add -FileModifyDate-=1 to the command above.

By writing a new value to the FileName and/or Directory tags,
files can be renamed and/or moved to different directories. This can be a very
powerful tool in combination with the -d (date format) option for
organizing images by date/time. For example, the following command renames all
images in directory "DIR" according to the individual file's
creation date in the form "YYYYmmdd_HHMMSS.ext".

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

Or a new directory can be specified by setting the value of the Directory
tag. For example, the following command moves all images originally in
directory "DIR" into a directory hierarchy organized by
year/month/day:

There is a significant overhead in loading ExifTool, so performance may be
greatly improved by taking advantage of ExifTool's batch processing capabilities
(the ability to process multiple files or entire directories with a single
command) to reduce the number of executed commands when performing complex
operations or processing multiple files.†[One exiftool user
documented
a 60x speed increase by processing a large number of files with a single
command instead of running exiftool separately on each file.] Also, the
-execute option may be used to perform multiple independent
operations with a single invocation of exiftool, and together with the
-stay_open option provides a method for calling applications to
avoid this startup overhead.

It has also been observed that the loading time of ExifTool for Windows
increases significantly when Windows Defender is active. Disabling Windows
Defender may speed things up significantly.

The processing speed of ExifTool can be improved when extracting information
by reducing the amount of work that it must do. Decrease the number of
extracted tags by specifying them individually (-TAG) or by group
(-GROUP:all), and disable the composite tags (-e) and
the print conversions (-n) if these features aren't required. Note
that the exclude options (-x or --TAG) are not very
efficient, and may have a negative impact on performance if a large number of
tags are excluded individually.

The -fast option can significantly increase speed when
extracting information from JPEG images which are piped across a slow network
connection. However, with this option any information in a JPEG trailer is not
extracted. For more substantial speed benefits, -fast2 may be
used to also avoid extracting MakerNote information if this is not required.

When writing, avoid copying tags (with -tagsFromFile) or using
the -if or -fileOrder option because these will add
the extra step of extracting tags from the file. Without these the write
operation is accomplished with a single pass of each file.

†However,
note that when the -csv option is used, information from all files
is buffered in memory before the CSV output is written. This may be very memory
intensive and result in poor performance when reading a large number of files in
a single command.

The "exiftool" script provides a command-line interface to the
Image::ExifTool Perl library module which is part of the ExifTool distribution.
The Image::ExifTool module can be used in any Perl script to provide easy access
to meta information. Here is an example of a very simple script that uses
Image::ExifTool to print out all recognized meta information in a file:

There is still much unknown information in the maker notes for many camera
models. (To see this information, run exiftool with the -U
option.) In this area, ExifTool is very much a collaborative effort, and
development relies heavily on the input from camera owners to help decode new
meta information. If you manage to figure out what any of it means, send me an
e-mail (phil at owl.phy.queensu.ca) and I'll add your new discoveries to
ExifTool. Many thanks to all who have helped so far...

ExifTool is free, but due to popular request I am providing a way for
those who feel the need to send me some money. It is really not necessary,
but thank you very much if you decide to make a contribution:

If you have any comments, suggestions or questions, please post to the
ExifTool Forum so
other people may benefit from your experiences. (I check the forum at least as
often as my email.) Otherwise, if you must contact me directly, my e-mail
address is on the first line of the README file in the full distribution.
Thanks. - Phil Harvey