| exiftool Application Documentation |
exiftool - Read/write meta information
exiftool [OPTIONS] [-TAG[[+-<]=[VALUE]] or --TAG ...] FILE ...
A command-line interface to Image::ExifTool used for
reading and writing meta information in image, audio and video files.
FILE may be an image file name, a directory name, or - for the
standard input. Information is read from the specified file and output in
readable form to the console (or written to an output text file with the
-w option).
To write information to a file, specify new values using either the
-TAG=[VALUE] syntax or the -TagsFromFile option. This causes exiftool
to rewrite FILE with the specified information, preserving the original
file by renaming it to FILE_original. (Note: Be sure to verify that the
new file is OK before erasing the original.)
Below is a list of file types and meta information formats currently supported by ExifTool (r = read, w = write, c = create):
File Types | Meta Information
--------------------------------------- | --------------------
ACR r MIE r/w/c PSD r/w | EXIF r/w/c
AI r MIFF r QTIF r | GPS r/w/c
AIFF r MNG r/w RA r | IPTC r/w/c
ARW r MOS r/w RAF r | XMP r/w/c
ASF r MOV r RAM r | MakerNotes r/w/c
AVI r MP3 r RAW r | Photoshop IRB r/w/c
BMP r MP4 r RIFF r | ICC Profile r/w/c
CR2 r/w MPG r RM r | MIE r/w/c
CRW r/w MRW r/w SR2 r | JFIF r/w
DCM r NEF r/w SRF r | CIFF r/w
DNG r/w ORF r SWF r | AFCP r/w
EPS r/w PBM r/w THM r/w | FlashPix r
ERF r/w PDF r TIFF r/w | GeoTIFF r
FPX r PEF r/w WAV r | PrintIM r
GIF r/w PGM r/w WDP r/w | ID3 r
ICC r/w/c PICT r WMA r | Kodak Meta r
JNG r/w PNG r/w WMV r | ASCII APP12 r
JP2 r PPM r/w X3F r | Adobe APP14 r
JPEG r/w PS r/w XMP r/w/c |
Note: Case is not significant for any command-line option (including tag and group names), except for single-character options if the corresponding upper case option is defined. Multiple options may NOT be combined into a single argument, because that would be interpreted as a tag name.
-GROUP:TAG, where GROUP is any valid family
0 or 1 group name optionally prefixed by a family number. Use the -listg
option to list valid group names.) If no tags are specified, all available
information is extracted.
A special tag name of All may be used to indicate all meta information.
This is particularly useful when a group name is specified to extract all
information in a group. (* is a synonym for All, but must be quoted
if used on the command line to prevent shell globbing.)
-x option.
May also be used following a -TagsFromFile option to exclude tags from
being extracted from the source file.
-TAG=VALUE), or delete the
tag if VALUE is not specified. += and -= add or remove VALUE
from a list, or shift date/time values (see
Image::ExifTool::Shift.pl for shift formats).
<= sets the value of a tag from the contents of a file with name
VALUE. (Note: Quotes are required around the argument in this case to
prevent shell redirection.)
If a group name is not specified for TAG, then the information is written
to the preferred group, which is the first group in the following list where
TAG is valid: 1) EXIF, 2) GPS, 3) IPTC, 4) XMP, 5) MakerNotes.
The special All tag may be used in this syntax only if a VALUE is NOT
given. This causes all meta information to be deleted (or all information
in a group if -GROUP:All= is used). Note that not all groups are
deletable. Also, within an image some groups may be contained within
others, and these groups are removed if the super group is deleted. Below
are lists of these group dependencies:
JPEG Image:
- Deleting EXIF or IFD0 also deletes ExifIFD, GlobParamIFD,
GPS, IFD1, InteropIFD, MakerNotes, PrintIM and SubIFD.
- Deleting ExifIFD also deletes InteropIFD and MakerNotes.
- Deleting Photoshop also deletes IPTC.
TIFF Image:
- Deleting EXIF only removes ExifIFD which also deletes
InteropIFD and MakerNotes.
# and are
ignored. ARGFILE may exist relative to either the current directory or
the exiftool directory unless an absolute pathname is given.
FMT uses the same syntax as
the printf format string. The specifiers correspond to degrees, minutes
and seconds in that order, but minutes and seconds are optional. For
example, the following table gives the output for the same coordinate using
various formats:
FMT Output
------------------- ------------------
"%d deg %d' %.2f"\" 54 deg 59' 22.80" (the default)
"%d deg %.4f min" 54 deg 59.3800 min
"%.6f degrees" 54.989667 degrees
strftime man page
for FMT syntax. The default format is equivalent to ``%Y:%m:%d %H:%M:%S''.
This option has no effect on date-only or time-only tags.
-h
option.
--ext to exclude
files. There may be multiple -ext or --ext options. Extensions may
begin with a leading '.', and case is not significant. For example:
exiftool -ext .JPG * # process only JPG files
exiftool --ext crw --ext dng * # process all but CRW and DNG
exiftool --ext . * # ignore if no extension
# specifies the group family number,
and may be 0 (general location), 1 (specific location) or 2 (category). If
not specified, -g0 is assumed. Use the -listg option to list all
group names for a specified family.
-g but print Group name for each tag.
-E option.
-htmlDump option is also involked if the -v and -h options are
used together. The verbose level controls the maximum length of the blocks
dumped. Currently only works for EXIF and TIFF information.
-i options.
-list), all writable tag names
(-listw), all recognized file types (-listf), or all tag groups
in a specified family (-listg). The -list and -listw options may
be followed by an additional argument of the form -GROUP:All to list all
tags in a specific group. With -listg, a number may be given to specify
the group family, otherwise family 0 is assumed. For example:
-list # list all tag names
-list -EXIF:All # list all EXIF tags
-listw -XMP-dc:All # list all writable XMP-dc tags
-listf # list all recognized file types
-listg1 # list all groups in family 1
> exiftool -Orientation -S a.jpg
Orientation: Rotate 90 CW
> exiftool -Orientation -S -n a.jpg
Orientation: 6
and the following two writing commands have the same effect
> exiftool -Orientation='Rotate 90 CW' a.jpg
> exiftool -Orientation=6 -n a.jpg
FILE_original and the output file is FILE in
the original directory). The output file name may also be specified using a
FMT string in which %d, %f and %e represent the directory, file name and
extension of FILE. See the -w option for FMT string examples.
The output file is taken to be a directory name if it already exists as a
directory or if the name ends with '/'. Output directories are created if
necessary. Existing files will not be overwritten. Combining the
-overwrite_original option with -o causes the original source file to
be erased after the output file is successfully written.
A special feature of this option allows it to be used to create certain types
of files from scratch. Currently, this can only be done with XMP and
ICC/ICM files. The file is created from a combination of information in
FILE and tag values assigned on the command line. This is done by
specifying a file extension of '.XMP', '.ICC' or '.ICM' for OUTFILE. The
output file may be created even if no FILE is specified, provided some
appropriate tag values are specified on the command line.
FILE_original when
writing information to an image. Caution: This option should only be used
if you already have separate backup copies of your image files.
-overwrite_original option except that an extra step is
added to allow the original file attributes to be preserved. On a Macintosh
for example, this preserves the original file type, creator and icon.
$ symbol and
may contain an optional group name. Case is not significant. Braces {}
may be used around the tag name to separate it from subsequent text. Use
$$ to represent a $ symbol. Lines beginning with # are ignored.
For example, this format file:
# this is a comment line
File $FileName was created on $DateTimeOriginal
(f/$Aperture, ${ShutterSpeed}s, ISO $EXIF:ISO)
produces output like this:
File test.jpg was created on 2003:10:31 15:44:19
(f/5.6, 1/60s, ISO 100)
If a tag does not exist, the value is set to '-' in the output.
-q suppresses normal informational messages,
and a second -q suppresses warnings as well. Error messages can not be
suppressed, although minor errors may be downgraded to warnings with the
-m option.
FILE is a
directory name.
-s options for even shorter formats. Also effective
when combined with -t or -h options.
-s options. Extra spaces used
to column-align values are not printed.
-s to print tag names instead of
descriptions, or -S to print tag values only, tab-delimited on a single
line.
-TagsFromFile option may be specified to set tag values from information
in different files.
By default, this option will commute information between same-named tags in
different groups, allowing information to be translated between images with
different formats. This behaviour may be modified by specifying a group
name for extracted tags (even if All is used as a group name), in which
case the information is written to the original group, unless redirected to
a different group.
SRCFILE may be the same as FILE to move information around within a
file. @ may be used to represent the source file (ie. -TagsFromFile
@), permitting this feature to be used for batch processing multiple files
(see note 3 below). Specified tags are then copied from each file in turn
as it is rewritten. For advanced batch use, the source file name may also
be specified using a FMT string in which %d, %f and %e represent the
directory, file name and extension of FILE. See -w option for FMT
string examples.
A powerful redirection feature allows a destination tag to be specified for
each extracted tag. With this feature, information may be written to a tag
with a different name or group. This is done using
"'-SRCTAG>DSTTAG'" on the command line after
-TagsFromFile ("'-DSTTAG<SRCTAG'" also works). Note
that this argument must be quoted to prevent shell redirection, and there is
no = sign as there is when setting new values. Both source and
destination tags may be prefixed by a group name, and All or * may be
used as a tag or group name. If no destination group is specified, then the
information is written to the preferred group. As a convenience,
-TagsFromFile @ is assumed for any redirected tags which are specified
without a prior -TagsFromFile option.
An extension of the redirection feature allows expressions involving tag
names to be used on the right hand side of the < symbol with the
syntax "'-DSTTAG<EXP'", where tag names in EXP are
prefixed with a $ symbol. See the -p option for more details about
this syntax. Expressions starting with a = sign must insert a single
space after the < to avoid confusion with the <= syntax which
would otherwise attempt to set the tag value from the contents of a file. A
single space at the start of an expression is removed if it exists, but all
other whitespace is preserved.
See COPYING EXAMPLES for examples using -TagsFromFile.
Notes:
1) Be aware of the difference between excluding a tag from being copied
(--TAG), and deleting a tag (-TAG=). Excluding a tag will prevent it
from being copied to the destination image, but deleting a tag will remove
it if it already exists.
2) The maker note information is set as a block, so it isn't affected like other information by subsequent tag assignments on the command line. Also, since the PreviewImage referenced from the maker notes may be rather large, it is not copied. Instead, it must be transferred separately if desired.
3) When performing complex batch processing, it is important to note that the order of operations is different for tags copied in batch mode. In general, tags are copied from batch-mode files after all other command-line arguments have been applied. (The exception is that a group delete is always performed last if there are no subsequent tag assignments on the command line.) For example, the following two commands are not equivalent:
# (not batch mode): sets xmp:title to 'NEW'
exiftool -tagsfromfile a.jpg -xmp:title -xmp:title=NEW a.jpg
# (batch mode): preserves original title if it exists
exiftool -tagsfromfile @ -xmp:title -xmp:title=NEW a.jpg
-u to also extract
unknown information from binary data blocks.
-u options.
# in the range 1-5 may be specified to
indicate the level of verbosity -- higher is more verbose. This option
suppresses normal console output unless specific tags are being extracted.
Verbose output goes to the console, and is not affected by the -w option.
EXT for each source
file. The output file name is obtained by replacing the source file
extension (including the .) with the specified extension. Alternatively,
a format statement may be used to give more control over the output file
name and directory. In this case, FMT is a string specifying the output
file name. In this string, %d, %f and %e represent the directory, filename
and extension of the source file. (%d includes the trailing '/' if
necessary, but %e does not include the leading '.') For example:
-w %d%f.txt # same effect as "-w txt"
-w dir/%f_%e.out # writes files to "dir" as "FILE_EXT.out"
-w dir2/%d%f.txt # writes to "dir2", keeping dir structure
Existing files will not be overwritten. Output directories are created automatically if necessary.
Advanced feature: A substring of the original file name, directory or extension may be taken by specifying a string length immediately following the % character. If the length is negative, the substring is taken from the end. The substring position (characters to ignore at the start or end of the string) may be given by a second optional value after a decimal point. For example:
Input File Name Format Specifier Output File Name
---------------- ---------------- ----------------
Picture-123.jpg %7f.txt Picture.txt
Picture-123.jpg %-.4f.out Picture.out
Picture-123.jpg %7f.%-3f Picture.123
Picture-123a.jpg Meta%-3.1f.txt Meta123.txt
This same FMT syntax is used with the -o and -TagsFromFile options.
-x options. This
has the same effect as --TAG on the command line. May also be used
following a -TagsFromFile option to exclude tags from being extracted
from the source file.
dir.
pictures directory
into files with the same names as the images but with a .txt extension.
image.jpg to a file called thumbnail.jpg.
_JFR.JPG for the name of the output JPG files.
preview.jpg.
a.jpg and write it to
xmp.out using the special XMP tag (see the Extra tags in
Image::ExifTool::TagNames).
t/images directory. The output HTML files are written to the tmp
directory (which is created if it didn't exist), with names of the form
'FILENAME_EXT.html'.
Note that quotes are necessary around arguments which contain certain special characters such as >, < or any white space. These quoting techniques are shell dependent, but the examples below will work for most Unix shells. With the Windows cmd shell however, double quotes should be used around the entire argument (ie. ``-Comment=This is a new comment'')
EXIF and editor).
word) to the
current list of keywords.
xxx) from all files in directory.
-comment='lonely' -all= would also delete
the new comment.)
dir by subtracting
one hour and 30 minutes. (This is equivalent to -DateTimeOriginal-=1.5.
See Image::ExifTool::Shift.pl for details.)
City exists in both, and IPTC has
priority).
ISO only in the Canon maker notes.
LightSource tag only if it is unknown with a value of 0.
WhiteBalance to Tungsten only if it was previously Auto.
dir.
These examples demonstrate the ability to copy tag values between files.
src.crw to dst.jpg, writing
the information to the preferred groups.
src.jpg to dst.jpg,
preserving the original tag groups.
dst.jpg image, then copy EXIF tags from
src.jpg.
a.jpg to an XMP data file. If the XMP data file
out.xmp already exists, it will be updated with the new information.
Otherwise the XMP data file will be created. Only XMP and ICC files may be
created like this (other file types may be edited but not created).
a.jpg to b.jpg, deleting all XMP
information and the thumbnail image from the destination.
-TagsFromFile @ is assumed if no other -TagsFromFile is specified when
redirecting information as in this example.)
src.jpg and write in XMP format to
dst.jpg.
JPG images in dir with information copied from
the corresponding CRW images in the same directories.
dir from the values of the EXIF:ISO
and ShutterSpeed tags. The resulting comment will be in the form ``ISO=100
Exposure=1/60''.
By writing the FileName and Directory tags, files are renamed and/or
moved to new directories. This can be particularly useful and powerful for
organizing files by date when combined with the -d option. New
directories are created as necessary, but existing files will not be
overwritten. The file name format codes %d, %f and %e (see the -w option
for details) may be used to represent the directory, name and extension of
the original file, but note that if used within a date format string, an
extra '%' must be added to pass these codes through the date/time parser.
old.jpg to new.jpg in directory dir.
dir into directories named by the original
file extensions.
dir into a directory hierarchy based on year, month and
day of DateTimeOriginal. ie) This command would move the file
dir/image.jpg with a DateTimeOriginal of 2005:10:12 16:05:56 to
2005/10/12/image.jpg.
dir according to the CreateDate date and time,
preserving the original file extensions. Note the extra '%' added to the
file extension code (%%e) since it is used in a date format string.
FileName tag if the new FileName contains a '/'. The example above
recursively renames all images in a directory by adding a CreateDate
timestamp to the start of the filename, then moves them into new directories
named by date.
Copyright 2003-2006, Phil Harvey
This is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Image::ExifTool(3pm), Image::ExifTool::TagNames(3pm), Image::ExifTool::Shortcuts(3pm), Image::ExifTool::Shift.pl
| exiftool Application Documentation |