1EXIFTOOL(1) User Contributed Perl Documentation EXIFTOOL(1)
2
3
4
6 exiftool - Read and write meta information in files
7
9 Reading
10 exiftool [OPTIONS] [-TAG...] [--TAG...] FILE...
11
12 Writing
13 exiftool [OPTIONS] -TAG[+-<]=[VALUE]... FILE...
14
15 Copying
16 exiftool [OPTIONS] -tagsFromFile SRCFILE [-[DSTTAG<]SRCTAG...] FILE...
17
18 Other
19 exiftool [ -ver | -list[w|f|r|wf|g[NUM]|d|x] ]
20
21 For specific examples, see the EXAMPLES sections below.
22
23 This documentation is displayed if exiftool is run without an input
24 FILE when one is expected.
25
27 A command-line interface to Image::ExifTool, used for reading and
28 writing meta information in a variety of file types. FILE is one or
29 more source file names, directory names, or "-" for the standard input.
30 Metadata is read from source files and printed in readable form to the
31 console (or written to output text files with -w).
32
33 To write or delete metadata, tag values are assigned using
34 -TAG=[VALUE], and/or the -geotag, -csv= or -json= options. To copy or
35 move metadata, the -tagsFromFile feature is used. By default the
36 original files are preserved with "_original" appended to their names
37 -- be sure to verify that the new files are OK before erasing the
38 originals. Once in write mode, exiftool will ignore any read-specific
39 options.
40
41 Note: If FILE is a directory name then only supported file types in
42 the directory are processed (in write mode only writable types are
43 processed). However, files may be specified by name, or the -ext
44 option may be used to force processing of files with any extension.
45 Hidden files in the directory are also processed. Adding the -r option
46 causes subdirectories to be processed recursively, but subdirectories
47 with names beginning with "." are skipped unless -r. is used.
48
49 Below is a list of file types and meta information formats currently
50 supported by ExifTool (r = read, w = write, c = create):
51
52 File Types
53 ------------+-------------+-------------+-------------+------------
54 360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
55 3FR r | DR4 r/w/c | J2C r | O r | RIFF r
56 3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
57 3GP r/w | DV r | JP2 r/w | ODS r | RTF r
58 7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
59 A r | DVR-MS r | JSON r | OFR r | RWL r/w
60 AA r | DYLIB r | JXL r | OGG r | RWZ r
61 AAE r | EIP r | K25 r | OGV r | RM r
62 AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
63 ACR r | EPUB r | KEY r | OPUS r | SKETCH r
64 AFM r | ERF r/w | LA r | ORF r/w | SO r
65 AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
66 AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
67 APE r | EXR r | LNK r | PAC r | SRW r/w
68 ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
69 ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
70 ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
71 AVI r | FITS r | MACOS r | PCX r | TIFF r/w
72 AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
73 AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
74 BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
75 BPG r | FLV r | MIFF r | PFA r | TXT r
76 BTF r | FPF r | MKA r | PFB r | VCF r
77 CHM r | FPX r | MKS r | PFM r | VNT r
78 COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
79 CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
80 CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
81 CRM r/w | GZ r | MODD r | PICT r | WDP r/w
82 CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
83 CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
84 CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
85 CUR r | HEIF r/w | MP3 r | PPT r | WMV r
86 CZI r | HTML r | MP4 r/w | PPTX r | WPG r
87 DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
88 DCP r/w | ICO r | MPG r | PSB r/w | WV r
89 DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
90 DFONT r | IDML r | MQV r/w | PSP r | XCF r
91 DIVX r | IIQ r/w | MRC r | QTIF r/w | XISF r
92 DJVU r | IND r/w | MRW r/w | R3D r | XLS r
93 DLL r | INSP r/w | MXF r | RA r | XLSX r
94 DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
95 DOC r | INX r | NKSC r/w | RAM r | ZIP r
96 DOCX r | ISO r | NRW r/w | RAR r |
97
98 Meta Information
99 ----------------------+----------------------+---------------------
100 EXIF r/w/c | CIFF r/w | Ricoh RMETA r
101 GPS r/w/c | AFCP r/w | Picture Info r
102 IPTC r/w/c | Kodak Meta r/w | Adobe APP14 r
103 XMP r/w/c | FotoStation r/w | MPF r
104 MakerNotes r/w/c | PhotoMechanic r/w | Stim r
105 Photoshop IRB r/w/c | JPEG 2000 r | DPX r
106 ICC Profile r/w/c | DICOM r | APE r
107 MIE r/w/c | Flash r | Vorbis r
108 JFIF r/w/c | FlashPix r | SPIFF r
109 Ducky APP12 r/w/c | QuickTime r | DjVu r
110 PDF r/w/c | Matroska r | M2TS r
111 PNG r/w/c | MXF r | PE/COFF r
112 Canon VRD r/w/c | PrintIM r | AVCHD r
113 Nikon Capture r/w/c | FLAC r | ZIP r
114 GeoTIFF r/w/c | ID3 r | (and more)
115
117 Case is not significant for any command-line option (including tag and
118 group names), except for single-character options when the
119 corresponding upper-case option exists. Many single-character options
120 have equivalent long-name versions (shown in brackets), and some
121 options have inverses which are invoked with a leading double-dash.
122 Unrecognized options are interpreted as tag names (for this reason,
123 multiple single-character options may NOT be combined into one
124 argument). Contrary to standard practice, options may appear after
125 source file names on the exiftool command line.
126
127 Option Overview
128 Tag operations
129
130 -TAG or --TAG Extract or exclude specified tag
131 -TAG[+-^]=[VALUE] Write new value for tag
132 -TAG[+-]<=DATFILE Write tag value from contents of file
133 -[+]TAG[+-]<SRCTAG Copy tag value (see -tagsFromFile)
134
135 -tagsFromFile SRCFILE Copy tag values from file
136 -x TAG (-exclude) Exclude specified tag
137
138 Input-output text formatting
139
140 -args (-argFormat) Format metadata as exiftool arguments
141 -b (-binary) Output metadata in binary format
142 -c FMT (-coordFormat) Set format for GPS coordinates
143 -charset [[TYPE=]CHARSET] Specify encoding for special characters
144 -csv[[+]=CSVFILE] Export/import tags in CSV format
145 -csvDelim STR Set delimiter for CSV file
146 -d FMT (-dateFormat) Set format for date/time values
147 -D (-decimal) Show tag ID numbers in decimal
148 -E,-ex,-ec (-escape(HTML|XML|C))Escape tag values for HTML, XML or C
149 -f (-forcePrint) Force printing of all specified tags
150 -g[NUM...] (-groupHeadings) Organize output by tag group
151 -G[NUM...] (-groupNames) Print group name for each tag
152 -h (-htmlFormat) Use HTML formatting for output
153 -H (-hex) Show tag ID numbers in hexadecimal
154 -htmlDump[OFFSET] Generate HTML-format binary dump
155 -j[[+]=JSONFILE] (-json) Export/import tags in JSON format
156 -l (-long) Use long 2-line output format
157 -L (-latin) Use Windows Latin1 encoding
158 -lang [LANG] Set current language
159 -listItem INDEX Extract specific item from a list
160 -n (--printConv) No print conversion
161 -p FMTFILE (-printFormat) Print output in specified format
162 -php Export tags as a PHP Array
163 -s[NUM] (-short) Short output format (-s for tag names)
164 -S (-veryShort) Very short output format
165 -sep STR (-separator) Set separator string for list items
166 -sort Sort output alphabetically
167 -struct Enable output of structured information
168 -t (-tab) Output in tab-delimited list format
169 -T (-table) Output in tabular format
170 -v[NUM] (-verbose) Print verbose messages
171 -w[+|!] EXT (-textOut) Write (or overwrite!) output text files
172 -W[+|!] FMT (-tagOut) Write output text file for each tag
173 -Wext EXT (-tagOutExt) Write only specified file types with -W
174 -X (-xmlFormat) Use RDF/XML output format
175
176 Processing control
177
178 -a (-duplicates) Allow duplicate tags to be extracted
179 -e (--composite) Do not generate composite tags
180 -ee[NUM] (-extractEmbedded) Extract information from embedded files
181 -ext[+] EXT (-extension) Process files with specified extension
182 -F[OFFSET] (-fixBase) Fix the base for maker notes offsets
183 -fast[NUM] Increase speed when extracting metadata
184 -fileOrder[NUM] [-]TAG Set file processing order
185 -i DIR (-ignore) Ignore specified directory name
186 -if[NUM] EXPR Conditionally process files
187 -m (-ignoreMinorErrors) Ignore minor errors and warnings
188 -o OUTFILE (-out) Set output file or directory name
189 -overwrite_original Overwrite original by renaming tmp file
190 -overwrite_original_in_place Overwrite original by copying tmp file
191 -P (-preserve) Preserve file modification date/time
192 -password PASSWD Password for processing protected files
193 -progress[NUM][:[TITLE]] Show file progress count
194 -q (-quiet) Quiet processing
195 -r[.] (-recurse) Recursively process subdirectories
196 -scanForXMP Brute force XMP scan
197 -u (-unknown) Extract unknown tags
198 -U (-unknown2) Extract unknown binary tags too
199 -wm MODE (-writeMode) Set mode for writing/creating tags
200 -z (-zip) Read/write compressed information
201
202 Other options
203
204 -@ ARGFILE Read command-line arguments from file
205 -k (-pause) Pause before terminating
206 -list[w|f|wf|g[NUM]|d|x] List various exiftool capabilities
207 -ver Print exiftool version number
208 -- End of options
209
210 Special features
211
212 -geotag TRKFILE Geotag images from specified GPS log
213 -globalTimeShift SHIFT Shift all formatted date/time values
214 -use MODULE Add features from plug-in module
215
216 Utilities
217
218 -delete_original[!] Delete "_original" backups
219 -restore_original Restore from "_original" backups
220
221 Advanced options
222
223 -api OPT[[^]=[VAL]] Set ExifTool API option
224 -common_args Define common arguments
225 -config CFGFILE Specify configuration file name
226 -echo[NUM] TEXT Echo text to stdout or stderr
227 -efile[NUM][!] ERRFILE Save names of files with errors
228 -execute[NUM] Execute multiple commands on one line
229 -fileNUM ALTFILE Load tags from alternate file
230 -list_dir List directories, not their contents
231 -srcfile FMT Process a different source file
232 -stay_open FLAG Keep reading -@ argfile even after EOF
233 -userParam PARAM[[^]=[VAL]] Set user parameter (API UserParam opt)
234
235 Option Details
236 Tag operations
237
238 -TAG Extract information for the specified tag (eg. "-CreateDate").
239 Multiple tags may be specified in a single command. A tag name is
240 the handle by which a piece of information is referenced. See
241 Image::ExifTool::TagNames for documentation on available tag
242 names. A tag name may include leading group names separated by
243 colons (eg. "-EXIF:CreateDate", or "-Doc1:XMP:Creator"), and each
244 group name may be prefixed by a digit to specify family number
245 (eg. "-1IPTC:City"). (Note that the API SavePath and SaveFormat
246 options must be used for the family 5 and 6 groups respectively to
247 be available.) Use the -listg option to list available group
248 names by family.
249
250 A special tag name of "All" may be used to indicate all meta
251 information (ie. -All). This is particularly useful when a group
252 name is specified to extract all information in a group (but
253 beware that unless the -a option is also used, some tags in the
254 group may be suppressed by same-named tags in other groups). The
255 wildcard characters "?" and "*" may be used in a tag name to match
256 any single character and zero or more characters respectively.
257 These may not be used in a group name, with the exception that a
258 group name of "*" (or "All") may be used to extract all instances
259 of a tag (as if -a was used). Note that arguments containing
260 wildcards must be quoted on the command line of most systems to
261 prevent shell globbing.
262
263 A "#" may be appended to the tag name to disable the print
264 conversion on a per-tag basis (see the -n option). This may also
265 be used when writing or copying tags.
266
267 If no tags are specified, all available information is extracted
268 (as if "-All" had been specified).
269
270 Note: Descriptions, not tag names, are shown by default when
271 extracting information. Use the -s option to see the tag names
272 instead.
273
274 --TAG
275 Exclude specified tag from extracted information. Same as the -x
276 option. Group names and wildcards are permitted as described
277 above for -TAG. Once excluded from the output, a tag may not be
278 re-included by a subsequent option. May also be used following a
279 -tagsFromFile option to exclude tags from being copied (when
280 redirecting to another tag, it is the source tag that should be
281 excluded), or to exclude groups from being deleted when deleting
282 all information (eg. "-all= --exif:all" deletes all but EXIF
283 information). But note that this will not exclude individual tags
284 from a group delete (unless a family 2 group is specified, see
285 note 4 below). Instead, individual tags may be recovered using
286 the -tagsFromFile option (eg. "-all= -tagsfromfile @ -artist").
287
288 To speed processing when reading XMP, exclusions in XMP groups
289 also bypass processing of the corresponding XMP property and any
290 contained properties. For example, "--xmp-crs:all" may speed
291 processing significantly in cases where a large number of XMP-crs
292 tags exist. To use this feature to bypass processing of a
293 specific XMP property, the property name must be used instead of
294 the ExifTool tag name (eg. "--xmp-crs:dabs"). Also, "XMP-all" may
295 be used to to indicate any XMP namespace (eg. "--xmp-all:dabs").
296
297 -TAG[+-^]=[VALUE]
298 Write a new value for the specified tag (eg. "-comment=wow"), or
299 delete the tag if no VALUE is given (eg. "-comment="). "+=" and
300 "-=" are used to add or remove existing entries from a list, or to
301 shift date/time values (see Image::ExifTool::Shift.pl and note 6
302 below for more details). "+=" may also be used to increment
303 numerical values (or decrement if VALUE is negative), and "-=" may
304 be used to conditionally delete or replace a tag (see "WRITING
305 EXAMPLES" for examples). "^=" is used to write an empty string
306 instead of deleting the tag when no VALUE is given, but otherwise
307 it is equivalent to "=". (Note that the caret must be quoted on
308 the Windows command line.)
309
310 TAG may contain one or more leading family 0, 1, 2 or 7 group
311 names, prefixed by optional family numbers, and separated colons.
312 If no group name is specified, the tag is created in the preferred
313 group, and updated in any other location where a same-named tag
314 already exists. The preferred group in JPEG and TIFF-format
315 images is the first group in the following list where TAG is
316 valid: 1) EXIF, 2) IPTC, 3) XMP.
317
318 The wildcards "*" and "?" may be used in tag names to assign the
319 same value to multiple tags. When specified with wildcards,
320 "Unsafe" tags are not written. A tag name of "All" is equivalent
321 to "*" (except that it doesn't require quoting, while arguments
322 with wildcards do on systems with shell globbing), and is often
323 used when deleting all metadata (ie. "-All=") or an entire group
324 (eg. "-XMP-dc:All=", see note 4 below). Note that not all groups
325 are deletable, and that the JPEG APP14 "Adobe" group is not
326 removed by default with "-All=" because it may affect the
327 appearance of the image. However, color space information is
328 removed, so the colors may be affected (but this may be avoided by
329 copying back the tags defined by the ColorSpaceTags shortcut).
330 Use the -listd option for a complete list of deletable groups, and
331 see note 5 below regarding the "APP" groups. Also, within an
332 image some groups may be contained within others, and these groups
333 are removed if the containing group is deleted:
334
335 JPEG Image:
336 - Deleting EXIF or IFD0 also deletes ExifIFD, GlobParamIFD,
337 GPS, IFD1, InteropIFD, MakerNotes, PrintIM and SubIFD.
338 - Deleting ExifIFD also deletes InteropIFD and MakerNotes.
339 - Deleting Photoshop also deletes IPTC.
340
341 TIFF Image:
342 - Deleting EXIF only removes ExifIFD which also deletes
343 InteropIFD and MakerNotes.
344
345 MOV/MP4 Video:
346 - Deleting ItemList also deletes Keys tags.
347
348 Notes:
349
350 1) Many tag values may be assigned in a single command. If two
351 assignments affect the same tag, the latter takes precedence
352 (except for list-type tags, for which both values are written).
353
354 2) In general, MakerNotes tags are considered "Permanent", and may
355 be edited but not created or deleted individually. This avoids
356 many potential problems, including the inevitable compatibility
357 problems with OEM software which may be very inflexible about the
358 information it expects to find in the maker notes.
359
360 3) Changes to PDF files by ExifTool are reversible (by deleting
361 the update with "-PDF-update:all=") because the original
362 information is never actually deleted from the file. So ExifTool
363 alone may not be used to securely edit metadata in PDF files.
364
365 4) Specifying "-GROUP:all=" deletes the entire group as a block
366 only if a single family 0 or 1 group is specified. Otherwise all
367 deletable tags in the specified group(s) are removed individually,
368 and in this case is it possible to exclude individual tags from a
369 mass delete. For example, "-time:all --Exif:Time:All" removes all
370 deletable Time tags except those in the EXIF. This difference
371 also applies if family 2 is specified when deleting all groups.
372 For example, "-2all:all=" deletes tags individually, while
373 "-all:all=" deletes entire blocks.
374
375 5) The "APP" group names ("APP0" through "APP15") are used to
376 delete JPEG application segments which are not associated with
377 another deletable group. For example, specifying "-APP14:All="
378 will NOT delete the APP14 "Adobe" segment because this is
379 accomplished with "-Adobe:All". But note that these unnamed APP
380 segments may not be excluded with "--APPxx:all" when deleting all
381 information.
382
383 6) When shifting a value, the shift is applied to the original
384 value of the tag, overriding any other values previously assigned
385 to the tag on the same command line. To shift a date/time value
386 and copy it to another tag in the same operation, use the
387 -globalTimeShift option.
388
389 Special feature: Integer values may be specified in hexadecimal
390 with a leading "0x", and simple rational values may be specified
391 as fractions.
392
393 -TAG<=DATFILE or -TAG<=FMT
394 Set the value of a tag from the contents of file DATFILE. The
395 file name may also be given by a FMT string where %d, %f and %e
396 represent the directory, file name and extension of the original
397 FILE (see the -w option for more details). Note that quotes are
398 required around this argument to prevent shell redirection since
399 it contains a "<" symbol. If DATFILE/FMT is not provided, the
400 effect is the same as "-TAG=", and the tag is simply deleted.
401 "+<=" or "-<=" may also be used to add or delete specific list
402 entries, or to shift date/time values.
403
404 -tagsFromFile SRCFILE or FMT
405 Copy tag values from SRCFILE to FILE. Tag names on the command
406 line after this option specify the tags to be copied, or excluded
407 from the copy. Wildcards are permitted in these tag names. If no
408 tags are specified, then all possible tags (see note 1 below) from
409 the source file are copied to same-named tags in the preferred
410 location of the output file (the same as specifying "-all"). More
411 than one -tagsFromFile option may be used to copy tags from
412 multiple files.
413
414 By default, this option will update any existing and writable
415 same-named tags in the output FILE, but will create new tags only
416 in their preferred groups. This allows some information to be
417 automatically transferred to the appropriate group when copying
418 between images of different formats. However, if a group name is
419 specified for a tag then the information is written only to this
420 group (unless redirected to another group, see below). If "All"
421 is used as a group name, then the specified tag(s) are written to
422 the same family 1 group they had in the source file (ie. the same
423 specific location, like ExifIFD or XMP-dc). For example, the
424 common operation of copying all writable tags to the same specific
425 locations in the output FILE is achieved by adding "-all:all". A
426 different family may be specified by adding a leading family
427 number to the group name (eg. "-0all:all" preserves the same
428 general location, like EXIF or XMP).
429
430 SRCFILE may be the same as FILE to move information around within
431 a single file. In this case, "@" may be used to represent the
432 source file (ie. "-tagsFromFile @"), permitting this feature to be
433 used for batch processing multiple files. Specified tags are then
434 copied from each file in turn as it is rewritten. For advanced
435 batch use, the source file name may also be specified using a FMT
436 string in which %d, %f and %e represent the directory, file name
437 and extension of FILE. (eg. the current FILE would be represented
438 by "%d%f.%e", with the same effect as "@"). See the -w option for
439 FMT string examples.
440
441 A powerful redirection feature allows a destination tag to be
442 specified for each copied tag. With this feature, information may
443 be written to a tag with a different name or group. This is done
444 using "'-DSTTAG<SRCTAG'" or "'-SRCTAG>DSTTAG'" on the command line
445 after -tagsFromFile, and causes the value of SRCTAG to be copied
446 from SRCFILE and written to DSTTAG in FILE. Has no effect unless
447 SRCTAG exists in SRCFILE. Note that this argument must be quoted
448 to prevent shell redirection, and there is no "=" sign as when
449 assigning new values. Source and/or destination tags may be
450 prefixed by a group name and/or suffixed by "#". Wildcards are
451 allowed in both the source and destination tag names. A
452 destination group and/or tag name of "All" or "*" writes to the
453 same family 1 group and/or tag name as the source (but the family
454 may be specified by adding a leading number to the group name, eg.
455 "0All" writes to the same family 0 group as the source). If no
456 destination group is specified, the information is written to the
457 preferred group. Whitespace around the ">" or "<" is ignored. As
458 a convenience, "-tagsFromFile @" is assumed for any redirected
459 tags which are specified without a prior -tagsFromFile option.
460 Copied tags may also be added or deleted from a list with
461 arguments of the form "'-SRCTAG+<DSTTAG'" or "'-SRCTAG-<DSTTAG'"
462 (but see Note 5 below).
463
464 An extension of the redirection feature allows strings involving
465 tag names to be used on the right hand side of the "<" symbol with
466 the syntax "'-DSTTAG<STR'", where tag names in STR are prefixed
467 with a "$" symbol. See the -p option and the "Advanced formatting
468 feature" section for more details about this syntax. Strings
469 starting with a "=" sign must insert a single space after the "<"
470 to avoid confusion with the "<=" operator which sets the tag value
471 from the contents of a file. A single space at the start of the
472 string is removed if it exists, but all other whitespace in the
473 string is preserved. See note 8 below about using the redirection
474 feature with list-type stags, shortcuts or when using wildcards in
475 tag names.
476
477 See "COPYING EXAMPLES" for examples using -tagsFromFile.
478
479 Notes:
480
481 1) Some tags (generally tags which may affect the appearance of
482 the image) are considered "Unsafe" to write, and are only copied
483 if specified explicitly (ie. no wildcards). See the tag name
484 documentation for more details about "Unsafe" tags.
485
486 2) Be aware of the difference between excluding a tag from being
487 copied (--TAG), and deleting a tag (-TAG=). Excluding a tag
488 prevents it from being copied to the destination image, but
489 deleting will remove a pre-existing tag from the image.
490
491 3) The maker note information is copied as a block, so it isn't
492 affected like other information by subsequent tag assignments on
493 the command line, and individual makernote tags may not be
494 excluded from a block copy. Also, since the PreviewImage
495 referenced from the maker notes may be rather large, it is not
496 copied, and must be transferred separately if desired.
497
498 4) The order of operations is to copy all specified tags at the
499 point of the -tagsFromFile option in the command line. Any tag
500 assignment to the right of the -tagsFromFile option is made after
501 all tags are copied. For example, new tag values are set in the
502 order One, Two, Three then Four with this command:
503
504 exiftool -One=1 -tagsFromFile s.jpg -Two -Four=4 -Three d.jpg
505
506 This is significant in the case where an overlap exists between
507 the copied and assigned tags because later operations may override
508 earlier ones.
509
510 5) The normal behaviour of copied tags differs from that of
511 assigned tags for list-type tags and conditional replacements
512 because each copy operation on a tag overrides any previous
513 operations. While this avoids duplicate list items when copying
514 groups of tags from a file containing redundant information, it
515 also prevents values of different tags from being copied into the
516 same list when this is the intent. To accumulate values from
517 different operations into the same list, add a "+" after the
518 initial "-" of the argument. For example:
519
520 exiftool -tagsfromfile @ '-subject<make' '-+subject<model' ...
521
522 Similarly, "-+DSTTAG" must be used when conditionally replacing a
523 tag to prevent overriding earlier conditions.
524
525 6) The -a option (allow duplicate tags) is always in effect when
526 copying tags from SRCFILE, but the highest priority tag is always
527 copied last so it takes precedence.
528
529 7) Structured tags are copied by default when copying tags. See
530 the -struct option for details.
531
532 8) With the redirection feature, copying a tag directly (ie.
533 "'-DSTTAG<SRCTAG'") is not the same as interpolating its value
534 inside a string (ie. "'-DSTTAG<$SRCTAG'") for source tags which
535 are list-type tags, shortcut tags, tag names containing wildcards,
536 or UserParam variables. When copying directly, the values of each
537 matching source tag are copied individually to the destination tag
538 (as if they were separate assignments). However, when
539 interpolated inside a string, list items and the values of
540 shortcut tags are concatenated (with a separator set by the -sep
541 option), and wildcards are not allowed. Also, UserParam variables
542 are available only when interpolated in a string. Another
543 difference is that a minor warning is generated if a tag doesn't
544 exist when interpolating its value in a string (with "$"), but
545 isn't when copying the tag directly.
546
547 Finally, the behaviour is different when a destination tag or
548 group of "All" is used. When copying directly, a destination
549 group and/or tag name of "All" writes to the same family 1 group
550 and/or tag name as the source. But when interpolated in a string,
551 the identity of the source tags are lost and the value is written
552 to all possible groups/tags. For example, the string form must be
553 used in the following command since the intent is to set the value
554 of all existing date/time tags from "CreateDate":
555
556 exiftool '-time:all<$createdate' -wm w FILE
557
558 -x TAG (-exclude)
559 Exclude the specified tag. There may be multiple -x options.
560 This has the same effect as --TAG on the command line. See the
561 --TAG documentation above for a complete description.
562
563 Input-output text formatting
564
565 Note that trailing spaces are removed from extracted values for most
566 output text formats. The exceptions are -b, -csv, -j and -X.
567
568 -args (-argFormat)
569 Output information in the form of exiftool arguments, suitable for
570 use with the -@ option when writing. May be combined with the -G
571 option to include group names. This feature may be used to
572 effectively copy tags between images, but allows the metadata to
573 be altered by editing the intermediate file ("out.args" in this
574 example):
575
576 exiftool -args -G1 --filename --directory src.jpg > out.args
577 exiftool -@ out.args -sep ', ' dst.jpg
578
579 Note: Be careful when copying information with this technique
580 since it is easy to write tags which are normally considered
581 "Unsafe". For instance, the FileName and Directory tags are
582 excluded in the example above to avoid renaming and moving the
583 destination file. Also note that the second command above will
584 produce warning messages for any tags which are not writable.
585
586 As well, the -sep option should be used as in the second command
587 above to maintain separate list items when writing metadata back
588 to image files, and the -struct option may be used when extracting
589 to preserve structured XMP information.
590
591 -b, --b (-binary, --binary)
592 Output requested metadata in binary format without tag names or
593 descriptions (-b or -binary). This option is mainly used for
594 extracting embedded images or other binary data, but it may also
595 be useful for some text strings since control characters (such as
596 newlines) are not replaced by '.' as they are in the default
597 output. By default, list items are separated by a newline when
598 extracted with the -b option, but this may be changed (see the
599 -sep option for details). May be combined with -j, -php or -X to
600 extract binary data in JSON, PHP or XML format, but note that
601 "Unsafe" tags are not extracted as binary unless they are
602 specified explicitly or the API RequestAll option is set to 3 or
603 higher.
604
605 With a leading double dash (--b or --binary), tags which contain
606 binary data are suppressed in the output when reading.
607
608 -c FMT (-coordFormat)
609 Set the print format for GPS coordinates. FMT uses the same
610 syntax as a "printf" format string. The specifiers correspond to
611 degrees, minutes and seconds in that order, but minutes and
612 seconds are optional. For example, the following table gives the
613 output for the same coordinate using various formats:
614
615 FMT Output
616 ------------------- ------------------
617 "%d deg %d' %.2f"\" 54 deg 59' 22.80" (default for reading)
618 "%d %d %.8f" 54 59 22.80000000 (default for copying)
619 "%d deg %.4f min" 54 deg 59.3800 min
620 "%.6f degrees" 54.989667 degrees
621
622 Notes:
623
624 1) To avoid loss of precision, the default coordinate format is
625 different when copying tags using the -tagsFromFile option.
626
627 2) If the hemisphere is known, a reference direction (N, S, E or
628 W) is appended to each printed coordinate, but adding a "+" to the
629 format specifier (eg. "%+.6f") prints a signed coordinate instead.
630
631 3) This print formatting may be disabled with the -n option to
632 extract coordinates as signed decimal degrees.
633
634 -charset [[TYPE=]CHARSET]
635 If TYPE is "ExifTool" or not specified, this option sets the
636 ExifTool character encoding for output tag values when reading and
637 input values when writing, with a default of "UTF8". If no
638 CHARSET is given, a list of available character sets is returned.
639 Valid CHARSET values are:
640
641 CHARSET Alias(es) Description
642 ---------- --------------- ----------------------------------
643 UTF8 cp65001, UTF-8 UTF-8 characters (default)
644 Latin cp1252, Latin1 Windows Latin1 (West European)
645 Latin2 cp1250 Windows Latin2 (Central European)
646 Cyrillic cp1251, Russian Windows Cyrillic
647 Greek cp1253 Windows Greek
648 Turkish cp1254 Windows Turkish
649 Hebrew cp1255 Windows Hebrew
650 Arabic cp1256 Windows Arabic
651 Baltic cp1257 Windows Baltic
652 Vietnam cp1258 Windows Vietnamese
653 Thai cp874 Windows Thai
654 DOSLatinUS cp437 DOS Latin US
655 DOSLatin1 cp850 DOS Latin1
656 DOSCyrillic cp866 DOS Cyrillic
657 MacRoman cp10000, Roman Macintosh Roman
658 MacLatin2 cp10029 Macintosh Latin2 (Central Europe)
659 MacCyrillic cp10007 Macintosh Cyrillic
660 MacGreek cp10006 Macintosh Greek
661 MacTurkish cp10081 Macintosh Turkish
662 MacRomanian cp10010 Macintosh Romanian
663 MacIceland cp10079 Macintosh Icelandic
664 MacCroatian cp10082 Macintosh Croatian
665
666 TYPE may be "FileName" to specify the encoding of file names on
667 the command line (ie. FILE arguments). In Windows, this triggers
668 use of wide-character i/o routines, thus providing support for
669 Unicode file names. See the "WINDOWS UNICODE FILE NAMES" section
670 below for details.
671
672 Other values of TYPE listed below are used to specify the internal
673 encoding of various meta information formats.
674
675 TYPE Description Default
676 --------- ------------------------------------------- -------
677 EXIF Internal encoding of EXIF "ASCII" strings (none)
678 ID3 Internal encoding of ID3v1 information Latin
679 IPTC Internal IPTC encoding to assume when Latin
680 IPTC:CodedCharacterSet is not defined
681 Photoshop Internal encoding of Photoshop IRB strings Latin
682 QuickTime Internal encoding of QuickTime strings MacRoman
683 RIFF Internal encoding of RIFF strings 0
684
685 See <https://exiftool.org/faq.html#Q10> for more information about
686 coded character sets, and the Image::ExifTool Options for more
687 details about the -charset settings.
688
689 -csv[[+]=CSVFILE]
690 Export information in CSV format, or import information if CSVFILE
691 is specified. When importing, the CSV file must be in exactly the
692 same format as the exported file. The first row of the CSVFILE
693 must be the ExifTool tag names (with optional group names) for
694 each column of the file, and values must be separated by commas.
695 A special "SourceFile" column specifies the files associated with
696 each row of information (and a SourceFile of "*" may be used to
697 define default tags to be imported for all files which are
698 combined with any tags specified for the specific SourceFile
699 processed). The -csvDelim option may be used to change the
700 input/output field delimiter if something other than a comma is
701 required.
702
703 The following examples demonstrate basic use of the -csv option:
704
705 # generate CSV file with common tags from all images in a directory
706 exiftool -common -csv dir > out.csv
707
708 # update metadata for all images in a directory from CSV file
709 exiftool -csv=a.csv dir
710
711 When importing, empty values are ignored unless the -f option is
712 used and the API MissingTagValue is set to an empty string (in
713 which case the tag is deleted). Also, FileName and Directory
714 columns are ignored if they exist (ie. ExifTool will not attempt
715 to write these tags with a CSV import), but all other columns are
716 imported. To force a tag to be deleted, use the -f option and set
717 the value to "-" in the CSV file (or to the MissingTagValue if
718 this API option was used). Multiple databases may be imported in
719 a single command.
720
721 When exporting a CSV file, the -g or -G option adds group names to
722 the tag headings. If the -a option is used to allow duplicate tag
723 names, the duplicate tags are only included in the CSV output if
724 the column headings are unique. Adding the -G4 option ensures a
725 unique column heading for each tag. The -b option may be added to
726 output binary data, encoded in base64 if necessary (indicated by
727 ASCII "base64:" as the first 7 bytes of the value). Values may
728 also be encoded in base64 if the -charset option is used and the
729 value contains invalid characters.
730
731 When exporting specific tags, the CSV columns are arranged in the
732 same order as the specified tags provided the column headings
733 exactly match the specified tag names, otherwise the columns are
734 sorted in alphabetical order.
735
736 When importing from a CSV file, only files specified on the
737 command line are processed. Any extra entries in the CSV file are
738 ignored.
739
740 List-type tags are stored as simple strings in a CSV file, but the
741 -sep option may be used to split them back into separate items
742 when importing.
743
744 Special feature: -csv+=CSVFILE may be used to add items to
745 existing lists. This affects only list-type tags. Also applies
746 to the -j option.
747
748 Note that this option is fundamentally different than all other
749 output format options because it requires information from all
750 input files to be buffered in memory before the output is written.
751 This may result in excessive memory usage when processing a very
752 large number of files with a single command. Also, it makes this
753 option incompatible with the -w and -W options. When processing a
754 large number of files, it is recommended to either use the JSON
755 (-j) or XML (-X) output format, or use -p to generate a fixed-
756 column CSV file instead of using the -csv option.
757
758 -csvDelim STR
759 Set the delimiter for separating CSV entries for CSV file
760 input/output via the -csv option. STR may contain "\t", "\n",
761 "\r" and "\\" to represent TAB, LF, CR and '\' respectively. A
762 double quote is not allowed in the delimiter. Default is ','.
763
764 -d FMT (-dateFormat)
765 Set the format for date/time tag values. The FMT string may
766 contain formatting codes beginning with a percent character ("%")
767 to represent the various components of a date/time value. The
768 specifics of the FMT syntax are system dependent -- consult the
769 "strftime" man page on your system for details. The default
770 format is equivalent to "%Y:%m:%d %H:%M:%S". This option has no
771 effect on date-only or time-only tags and ignores timezone
772 information if present. ExifTool adds a %f format code to
773 represent fractional seconds, and supports an optional width to
774 specify the number of digits after the decimal point (eg. %3f
775 would give something like .437), and a minus sign to drop the
776 decimal point (eg. "%-3f" would give 437). Only one -d option may
777 be used per command. Requires POSIX::strptime or Time::Piece for
778 the inversion conversion when writing.
779
780 -D (-decimal)
781 Show tag ID number in decimal when extracting information.
782
783 -E, -ex, -ec (-escapeHTML, -escapeXML, -escapeC)
784 Escape characters in output tag values for HTML (-E), XML (-ex) or
785 C (-ec). For HTML, all characters with Unicode code points above
786 U+007F are escaped as well as the following 5 characters: &
787 (&) ' (') " (") > (>) and < (<). For XML, only
788 these 5 characters are escaped. The -E option is implied with -h,
789 and -ex is implied with -X. For C, all control characters and the
790 backslash are escaped. The inverse conversion is applied when
791 writing tags.
792
793 -f (-forcePrint)
794 Force printing of tags even if they don't exist. This option
795 applies to tags specified on the command line, or with the -p, -if
796 or -tagsFromFile options. When -f is used, the value of any
797 missing tag is set to a dash ("-") by default, but this may be
798 configured via the API MissingTagValue option. -f is also used to
799 add a 'flags' attribute to the -listx output, or to allow tags to
800 be deleted when writing with the -csv=CSVFILE feature.
801
802 -g[NUM][:NUM...] (-groupHeadings)
803 Organize output by tag group. NUM specifies a group family
804 number, and may be 0 (general location), 1 (specific location), 2
805 (category), 3 (document number), 4 (instance number), 5 (metadata
806 path), 6 (EXIF/TIFF format), 7 (tag ID) or 8 (file number). -g0
807 is assumed if a family number is not specified. May be combined
808 with other options to add group names to the output. Multiple
809 families may be specified by separating them with colons. By
810 default the resulting group name is simplified by removing any
811 leading "Main:" and collapsing adjacent identical group names, but
812 this can be avoided by placing a colon before the first family
813 number (eg. -g:3:1). Use the -listg option to list group names
814 for a specified family. The API SavePath and SaveFormat options
815 are automatically enabled if the respective family 5 or 6 group
816 names are requested. See the API GetGroup documentation for more
817 information.
818
819 -G[NUM][:NUM...] (-groupNames)
820 Same as -g but print group name for each tag. -G0 is assumed if
821 NUM is not specified. May be combined with a number of other
822 options to add group names to the output. Note that NUM may be
823 added wherever -G is mentioned in the documentation. See the -g
824 option above for details.
825
826 -h (-htmlFormat)
827 Use HTML table formatting for output. Implies the -E option. The
828 formatting options -D, -H, -g, -G, -l and -s may be used in
829 combination with -h to influence the HTML format.
830
831 -H (-hex)
832 Show tag ID number in hexadecimal when extracting information.
833
834 -htmlDump[OFFSET]
835 Generate a dynamic web page containing a hex dump of the EXIF
836 information. This can be a very powerful tool for low-level
837 analysis of EXIF information. The -htmlDump option is also
838 invoked if the -v and -h options are used together. The verbose
839 level controls the maximum length of the blocks dumped. An OFFSET
840 may be given to specify the base for displayed offsets. If not
841 provided, the EXIF/TIFF base offset is used. Use -htmlDump0 for
842 absolute offsets. Currently only EXIF/TIFF and JPEG information
843 is dumped, but the -u option can be used to give a raw hex dump of
844 other file formats.
845
846 -j[[+]=JSONFILE] (-json)
847 Use JSON (JavaScript Object Notation) formatting for console
848 output, or import JSON file if JSONFILE is specified. This option
849 may be combined with -g to organize the output into objects by
850 group, or -G to add group names to each tag. List-type tags with
851 multiple items are output as JSON arrays unless -sep is used. By
852 default XMP structures are flattened into individual tags in the
853 JSON output, but the original structure may be preserved with the
854 -struct option (this also causes all list-type XMP tags to be
855 output as JSON arrays, otherwise single-item lists would be output
856 as simple strings). The -a option is implied when -json is used,
857 but entries with identical JSON names are suppressed in the
858 output. (-G4 may be used to ensure that all tags have unique JSON
859 names.) Adding the -D or -H option changes tag values to JSON
860 objects with "val" and "id" fields, and adding -l adds a "desc"
861 field, and a "num" field if the numerical value is different from
862 the converted "val". The -b option may be added to output binary
863 data, encoded in base64 if necessary (indicated by ASCII "base64:"
864 as the first 7 bytes of the value), and -t may be added to include
865 tag table information (see -t for details). The JSON output is
866 UTF-8 regardless of any -L or -charset option setting, but the
867 UTF-8 validation is disabled if a character set other than UTF-8
868 is specified. Note that ExifTool quotes JSON values only if they
869 don't look like numbers (regardless of the original storage format
870 or the relevant metadata specification).
871
872 If JSONFILE is specified, the file is imported and the tag
873 definitions from the file are used to set tag values on a per-file
874 basis. The special "SourceFile" entry in each JSON object
875 associates the information with a specific target file. An object
876 with a missing SourceFile or a SourceFile of "*" defines default
877 tags for all target files which are combined with any tags
878 specified for the specific SourceFile processed. The imported
879 JSON file must have the same format as the exported JSON files
880 with the exception that options exporting JSON objects instead of
881 simple values are not compatible with the import file format (ie.
882 export with -D, -H, -l, or -T is not compatable, and use -G
883 instead of -g). Additionally, tag names in the input JSON file
884 may be suffixed with a "#" to disable print conversion.
885
886 Unlike CSV import, empty values are not ignored, and will cause an
887 empty value to be written if supported by the specific metadata
888 type. Tags are deleted by using the -f option and setting the tag
889 value to "-" (or to the MissingTagValue setting if this API option
890 was used). Importing with -j+=JSONFILE causes new values to be
891 added to existing lists.
892
893 -l (-long)
894 Use long 2-line Canon-style output format. Adds a description and
895 unconverted value (if it is different from the converted value) to
896 the XML, JSON or PHP output when -X, -j or -php is used. May also
897 be combined with -listf, -listr or -listwf to add descriptions of
898 the file types.
899
900 -L (-latin)
901 Use Windows Latin1 encoding (cp1252) for output tag values instead
902 of the default UTF-8. When writing, -L specifies that input text
903 values are Latin1 instead of UTF-8. Equivalent to "-charset
904 latin".
905
906 -lang [LANG]
907 Set current language for tag descriptions and converted values.
908 LANG is "de", "fr", "ja", etc. Use -lang with no other arguments
909 to get a list of available languages. The default language is
910 "en" if -lang is not specified. Note that tag/group names are
911 always English, independent of the -lang setting, and translation
912 of warning/error messages has not yet been implemented. May also
913 be combined with -listx to output descriptions in one language
914 only.
915
916 By default, ExifTool uses UTF-8 encoding for special characters,
917 but the -L or -charset option may be used to invoke other
918 encodings. Note that ExifTool uses Unicode::LineBreak if
919 available to help preserve the column alignment of the plain text
920 output for languages with a variable-width character set.
921
922 Currently, the language support is not complete, but users are
923 welcome to help improve this by submitting their own translations.
924 To submit a translation, follow these steps (you must have Perl
925 installed for this):
926
927 1. Download and unpack the latest Image-ExifTool full
928 distribution.
929
930 2. 'cd' into the Image-ExifTool directory.
931
932 3. Run this command to make an XML file of the desired tags (eg.
933 EXIF):
934
935 ./exiftool -listx -exif:all > out.xml
936
937 4. Copy this text into a file called 'import.pl' in the exiftool
938 directory:
939
940 push @INC, 'lib';
941 require Image::ExifTool::TagInfoXML;
942 my $file = shift or die "Expected XML file name\n";
943 $Image::ExifTool::TagInfoXML::makeMissing = shift;
944 Image::ExifTool::TagInfoXML::BuildLangModules($file,8);
945
946 5. Run the 'import.pl' script to Import the XML file, generating
947 the 'MISSING' entries for your language (eg. Russian):
948
949 perl import.pl out.xml ru
950
951 6. Edit the generated language module
952 lib/Image/ExifTool/Lang/ru.pm, and search and replace all
953 'MISSING' strings in the file with your translations.
954
955 7. Email the module ('ru.pm' in this example) to philharvey66 at
956 gmail.com
957
958 8. Thank you!!
959
960 -listItem INDEX
961 For list-type tags, this causes only the item with the specified
962 index to be extracted. INDEX is 0 for the first item in the list.
963 Negative indices may also be used to reference items from the end
964 of the list. Has no effect on single-valued tags. Also applies
965 to tag values when copying from a tag, and in -if conditions.
966
967 -n (--printConv)
968 Disable print conversion for all tags. By default, extracted
969 values are converted to a more human-readable format, but the -n
970 option disables this conversion, revealing the machine-readable
971 values. For example:
972
973 > exiftool -Orientation -S a.jpg
974 Orientation: Rotate 90 CW
975 > exiftool -Orientation -S -n a.jpg
976 Orientation: 6
977
978 The print conversion may also be disabled on a per-tag basis by
979 suffixing the tag name with a "#" character:
980
981 > exiftool -Orientation# -Orientation -S a.jpg
982 Orientation: 6
983 Orientation: Rotate 90 CW
984
985 These techniques may also be used to disable the inverse print
986 conversion when writing. For example, the following commands all
987 have the same effect:
988
989 > exiftool -Orientation='Rotate 90 CW' a.jpg
990 > exiftool -Orientation=6 -n a.jpg
991 > exiftool -Orientation#=6 a.jpg
992
993 -p FMTFILE or STR (-printFormat)
994 Print output in the format specified by the given file or string.
995 The argument is interpreted as a string unless a file of that name
996 exists, in which case the string is loaded from the contents of
997 the file. Tag names in the format file or string begin with a "$"
998 symbol and may contain leading group names and/or a trailing "#"
999 (to disable print conversion). Case is not significant. Braces
1000 "{}" may be used around the tag name to separate it from
1001 subsequent text (and must be used if subsequent text begins with
1002 an alphanumeric character, hyphen, underline, colon or number
1003 sign). Use $$ to represent a "$" symbol, and $/ for a newline.
1004
1005 Multiple -p options may be used, each contributing a line (or
1006 more) of text to the output. Lines beginning with "#[HEAD]" and
1007 "#[TAIL]" are output before the first processed file and after the
1008 last processed file respectively. Lines beginning with "#[SECT]"
1009 and "#[ENDS]" are output before and after each section of files.
1010 A section is defined as a group of consecutive files with the same
1011 section header (eg. files are grouped by directory if "#[SECT]"
1012 contains $directory). Lines beginning with "#[BODY]" and lines
1013 not beginning with "#" are output for each processed file. Lines
1014 beginning with "#[IF]" are not output, but all BODY lines are
1015 skipped if any tag on an IF line doesn't exist. Other lines
1016 beginning with "#" are ignored. (To output a line beginning with
1017 "#", use "#[BODY]#".) For example, this format file:
1018
1019 # this is a comment line
1020 #[HEAD]-- Generated by ExifTool $exifToolVersion --
1021 File: $FileName - $DateTimeOriginal
1022 (f/$Aperture, ${ShutterSpeed}s, ISO $EXIF:ISO)
1023 #[TAIL]-- end --
1024
1025 with this command:
1026
1027 exiftool -p test.fmt a.jpg b.jpg
1028
1029 produces output like this:
1030
1031 -- Generated by ExifTool 12.70 --
1032 File: a.jpg - 2003:10:31 15:44:19
1033 (f/5.6, 1/60s, ISO 100)
1034 File: b.jpg - 2006:05:23 11:57:38
1035 (f/8.0, 1/13s, ISO 100)
1036 -- end --
1037
1038 The values of List-type tags with multiple items and Shortcut tags
1039 representing multiple tags are joined according the -sep option
1040 setting when interpolated in the string.
1041
1042 When -ee (-extractEmbedded) is combined with -p, embedded
1043 documents are effectively processed as separate input files.
1044
1045 If a specified tag does not exist, a minor warning is issued and
1046 the line with the missing tag is not printed. However, the -f
1047 option may be used to set the value of missing tags to '-' (but
1048 this may be configured via the API MissingTagValue option), or the
1049 -m option may be used to ignore minor warnings and leave the
1050 missing values empty. Alternatively, -q -q may be used to simply
1051 suppress the warning messages.
1052
1053 The "Advanced formatting feature" may be used to modify the values
1054 of individual tags within the -p option string.
1055
1056 Note that the API RequestTags option is automatically set for all
1057 tags used in the FMTFILE or STR. This allows all other tags to be
1058 ignored using -API IgnoreTags=all, resulting in reduced memory
1059 usage and increased speed.
1060
1061 -php Format output as a PHP Array. The -g, -G, -D, -H, -l, -sep and
1062 -struct options combine with -php, and duplicate tags are handled
1063 in the same way as with the -json option. As well, the -b option
1064 may be added to output binary data, and -t may be added to include
1065 tag table information (see -t for details). Here is a simple
1066 example showing how this could be used in a PHP script:
1067
1068 <?php
1069 eval('$array=' . `exiftool -php -q image.jpg`);
1070 print_r($array);
1071 ?>
1072
1073 -s[NUM] (-short)
1074 Short output format. Prints tag names instead of descriptions.
1075 Add NUM or up to 3 -s options for even shorter formats:
1076
1077 -s1 or -s - print tag names instead of descriptions
1078 -s2 or -s -s - no extra spaces to column-align values
1079 -s3 or -s -s -s - print values only (no tag names)
1080
1081 Also effective when combined with -t, -h, -X or -listx options.
1082
1083 -S (-veryShort)
1084 Very short format. The same as -s2 or two -s options. Tag names
1085 are printed instead of descriptions, and no extra spaces are added
1086 to column-align values.
1087
1088 -sep STR (-separator)
1089 Specify separator string for items in list-type tags. When
1090 reading, the default is to join list items with ", ". When
1091 writing, this option causes values assigned to list-type tags to
1092 be split into individual items at each substring matching STR
1093 (otherwise they are not split by default). Space characters in
1094 STR match zero or more whitespace characters in the value.
1095
1096 Note that an empty separator ("") is allowed, and will join items
1097 with no separator when reading, or split the value into individual
1098 characters when writing.
1099
1100 For pure binary output (-b used without -j, -php or -X), the first
1101 -sep option specifies a list-item separator, and a second -sep
1102 option specifies a terminator for the end of the list (or after
1103 each value if not a list). In these strings, "\n", "\r" and "\t"
1104 may be used to represent a newline, carriage return and tab
1105 respectively. By default, binary list items are separated by a
1106 newline, and no terminator is added.
1107
1108 -sort, --sort
1109 Sort output by tag description, or by tag name if the -s option is
1110 used. When sorting by description, the sort order will depend on
1111 the -lang option setting. Without the -sort option, tags appear
1112 in the order they were specified on the command line, or if not
1113 specified, the order they were extracted from the file. By
1114 default, tags are organized by groups when combined with the -g or
1115 -G option, but this grouping may be disabled with --sort.
1116
1117 -struct, --struct
1118 Output structured XMP information instead of flattening to
1119 individual tags. This option works well when combined with the
1120 XML (-X) and JSON (-j) output formats. For other output formats,
1121 XMP structures and lists are serialized into the same format as
1122 when writing structured information (see
1123 <https://exiftool.org/struct.html> for details). When copying,
1124 structured tags are copied by default unless --struct is used to
1125 disable this feature (although flattened tags may still be copied
1126 by specifying them individually unless -struct is used). These
1127 options have no effect when assigning new values since both
1128 flattened and structured tags may always be used when writing.
1129
1130 -t (-tab)
1131 Output a tab-delimited list of description/values (useful for
1132 database import). May be combined with -s to print tag names
1133 instead of descriptions, or -S to print tag values only, tab-
1134 delimited on a single line. The -t option may be combined with
1135 -j, -php or -X to add tag table information ("table", tag "id",
1136 and "index" for cases where multiple conditional tags exist with
1137 the same ID).
1138
1139 -T (-table)
1140 Output tag values in table form. Equivalent to -t -S -q -f.
1141
1142 -v[NUM] (-verbose)
1143 Print verbose messages. NUM specifies the level of verbosity in
1144 the range 0-5, with higher numbers being more verbose. If NUM is
1145 not given, then each -v option increases the level of verbosity by
1146 1. With any level greater than 0, most other options are ignored
1147 and normal console output is suppressed unless specific tags are
1148 extracted. Using -v0 causes the console output buffer to be
1149 flushed after each line (which may be useful to avoid delays when
1150 piping exiftool output), and prints the name of each processed
1151 file when writing and the new file name when renaming, moving or
1152 copying. Verbose levels above -v0 do not flush after each line.
1153 Also see the -progress option.
1154
1155 -w[+|!] EXT or FMT (-textOut)
1156 Write console output to files with names ending in EXT, one for
1157 each source file. The output file name is obtained by replacing
1158 the source file extension (including the '.') with the specified
1159 extension (and a '.' is added to the start of EXT if it doesn't
1160 already contain one). Alternatively, a FMT string may be used to
1161 give more control over the output file name and directory. In the
1162 format string, %d, %f and %e represent the directory, filename and
1163 extension of the source file, and %c represents a copy number
1164 which is automatically incremented if the file already exists. %d
1165 includes the trailing '/' if necessary, but %e does not include
1166 the leading '.'. For example:
1167
1168 -w %d%f.txt # same effect as "-w txt"
1169 -w dir/%f_%e.out # write files to "dir" as "FILE_EXT.out"
1170 -w dir2/%d%f.txt # write to "dir2", keeping dir structure
1171 -w a%c.txt # write to "a.txt" or "a1.txt" or "a2.txt"...
1172
1173 Existing files will not be changed unless an exclamation point is
1174 added to the option name (ie. -w! or -textOut!) to overwrite the
1175 file, or a plus sign (ie. -w+ or -textOut+) to append to the
1176 existing file. Both may be used (ie. -w+! or -textOut+!) to
1177 overwrite output files that didn't exist before the command was
1178 run, and append the output from multiple source files. For
1179 example, to write one output file for all source files in each
1180 directory:
1181
1182 exiftool -filename -createdate -T -w+! %d/out.txt -r DIR
1183
1184 Capitalized format codes %D, %F, %E and %C provide slightly
1185 different alternatives to the lower case versions. %D does not
1186 include the trailing '/', %F is the full filename including
1187 extension, %E includes the leading '.', and %C increments the
1188 count for each processed file (see below).
1189
1190 Notes:
1191
1192 1) In a Windows BAT file the "%" character is represented by "%%",
1193 so an argument like "%d%f.txt" is written as "%%d%%f.txt".
1194
1195 2) If the argument for -w does not contain a valid format code
1196 (eg. %f), then it is interpreted as a file extension, but there
1197 are three different ways to create a single output file from
1198 multiple source files:
1199
1200 # 1. Shell redirection
1201 exiftool FILE1 FILE2 ... > out.txt
1202
1203 # 2. With the -w option and a zero-width format code
1204 exiftool -w+! %0fout.txt FILE1 FILE2 ...
1205
1206 # 3. With the -W option (see the -W option below)
1207 exiftool -W+! out.txt FILE1 FILE2 ...
1208
1209 Advanced features:
1210
1211 A substring of the original file name, directory or extension may
1212 be taken by specifying a field width immediately following the '%'
1213 character. If the width is negative, the substring is taken from
1214 the end. The substring position (characters to ignore at the
1215 start or end of the string) may be given by a second optional
1216 value after a decimal point. For example:
1217
1218 Input File Name Format Specifier Output File Name
1219 ---------------- ---------------- ----------------
1220 Picture-123.jpg %7f.txt Picture.txt
1221 Picture-123.jpg %-.4f.out Picture.out
1222 Picture-123.jpg %7f.%-3f Picture.123
1223 Picture-123a.jpg Meta%-3.1f.txt Meta123.txt
1224
1225 (Note that special characters may have a width of greater than
1226 one.)
1227
1228 For %d and %D, the field width/position specifiers may be applied
1229 to the directory levels instead of substring position by using a
1230 colon instead of a decimal point in the format specifier. For
1231 example:
1232
1233 Source Dir Format Result Notes
1234 ------------ ------ ---------- ------------------
1235 pics/2012/02 %2:d pics/2012/ take top 2 levels
1236 pics/2012/02 %-:1d pics/2012/ up one directory level
1237 pics/2012/02 %:1d 2012/02/ ignore top level
1238 pics/2012/02 %1:1d 2012/ take 1 level after top
1239 pics/2012/02 %-1:D 02 bottom level folder name
1240 /Users/phil %:2d phil/ ignore top 2 levels
1241
1242 (Note that the root directory counts as one level when an absolute
1243 path is used as in the last example above.)
1244
1245 For %c, these modifiers have a different effects. If a field
1246 width is given, the copy number is padded with zeros to the
1247 specified width. A leading '-' adds a dash before the copy
1248 number, and a '+' adds an underline. By default, the copy number
1249 is omitted from the first file of a given name, but this can be
1250 changed by adding a decimal point to the modifier. For example:
1251
1252 -w A%-cZ.txt # AZ.txt, A-1Z.txt, A-2Z.txt ...
1253 -w B%5c.txt # B.txt, B00001.txt, B00002.txt ...
1254 -w C%.c.txt # C0.txt, C1.txt, C2.txt ...
1255 -w D%-.c.txt # D-0.txt, D-1.txt, D-2.txt ...
1256 -w E%-.4c.txt # E-0000.txt, E-0001.txt, E-0002.txt ...
1257 -w F%-.4nc.txt # F-0001.txt, F-0002.txt, F-0003.txt ...
1258 -w G%+c.txt # G.txt, G_1.txt G_2.txt ...
1259 -w H%-lc.txt # H.txt, H-b.txt, H-c.txt ...
1260 -w I.%.3uc.txt # I.AAA.txt, I.AAB.txt, I.AAC.txt ...
1261
1262 A special feature allows the copy number to be incremented for
1263 each processed file by using %C (upper case) instead of %c. This
1264 allows a sequential number to be added to output file names, even
1265 if the names are different. For %C, a copy number of zero is not
1266 omitted as it is with %c. A leading '-' causes the number to be
1267 reset at the start of each new directory, and '+' has no effect.
1268 The number before the decimal place gives the starting index, the
1269 number after the decimal place gives the field width. The
1270 following examples show the output filenames when used with the
1271 command "exiftool rose.jpg star.jpg jet.jpg ...":
1272
1273 -w %C%f.txt # 0rose.txt, 1star.txt, 2jet.txt
1274 -w %f-%10C.txt # rose-10.txt, star-11.txt, jet-12.txt
1275 -w %.3C-%f.txt # 000-rose.txt, 001-star.txt, 002-jet.txt
1276 -w %57.4C%f.txt # 0057rose.txt, 0058star.txt, 0059jet.txt
1277
1278 All format codes may be modified by 'l' or 'u' to specify lower or
1279 upper case respectively (ie. %le for a lower case file extension).
1280 When used to modify %c or %C, the numbers are changed to an
1281 alphabetical base (see example H above). Also, %c and %C may be
1282 modified by 'n' to count using natural numbers starting from 1,
1283 instead of 0 (see example F above).
1284
1285 This same FMT syntax is used with the -o and -tagsFromFile
1286 options, although %c and %C are only valid for output file names.
1287
1288 -W[+|!] FMT (-tagOut)
1289 This enhanced version of the -w option allows a separate output
1290 file to be created for each extracted tag. See the -w option
1291 documentation above for details of the basic functionality.
1292 Listed here are the differences between -W and -w:
1293
1294 1) With -W, a new output file is created for each extracted tag.
1295
1296 2) -W supports four additional format codes: %t, %g and %s
1297 represent the tag name, group name, and suggested extension for
1298 the output file (based on the format of the data), and %o
1299 represents the value of the OriginalRawFileName or
1300 OriginalFileName tag from the input file (including extension).
1301 The %g code may be followed by a single digit to specify the group
1302 family number (eg. %g1), otherwise family 0 is assumed. The
1303 substring width/position/case specifiers may be used with these
1304 format codes in exactly the same way as with %f and %e.
1305
1306 3) The argument for -W is interpreted as a file name if it
1307 contains no format codes. (For -w, this would be a file
1308 extension.) This change allows a simple file name to be
1309 specified, which, when combined with the append feature, provides
1310 a method to write metadata from multiple source files to a single
1311 output file without the need for shell redirection. For example,
1312 the following pairs of commands give the same result:
1313
1314 # overwriting existing text file
1315 exiftool test.jpg > out.txt # shell redirection
1316 exiftool test.jpg -W+! out.txt # equivalent -W option
1317
1318 # append to existing text file
1319 exiftool test.jpg >> out.txt # shell redirection
1320 exiftool test.jpg -W+ out.txt # equivalent -W option
1321
1322 4) Adding the -v option to -W sends a list of the tags and output
1323 file names to the console instead of giving a verbose dump of the
1324 entire file. (Unless appending all output to one file for each
1325 source file by using -W+ with an output file FMT that does not
1326 contain %t, %g, %s or %o.)
1327
1328 5) Individual list items are stored in separate files when -W is
1329 combined with -b, but note that for separate files to be created
1330 %c or %C must be used in FMT to give the files unique names.
1331
1332 -Wext EXT, --Wext EXT (-tagOutExt)
1333 This option is used to specify the type of output file(s) written
1334 by the -W option. An output file is written only if the suggested
1335 extension matches EXT. Multiple -Wext options may be used to
1336 write more than one type of file. Use --Wext to write all but the
1337 specified type(s).
1338
1339 -X (-xmlFormat)
1340 Use ExifTool-specific RDF/XML formatting for console output.
1341 Implies the -a option, so duplicate tags are extracted. The
1342 formatting options -b, -D, -H, -l, -s, -sep, -struct and -t may be
1343 used in combination with -X to affect the output, but note that
1344 the tag ID (-D, -H and -t), binary data (-b) and structured output
1345 (-struct) options are not effective for the short output (-s).
1346 Another restriction of -s is that only one tag with a given group
1347 and name may appear in the output. Note that the tag ID options
1348 (-D, -H and -t) will produce non-standard RDF/XML unless the -l
1349 option is also used.
1350
1351 By default, -X outputs flattened tags, so -struct should be added
1352 if required to preserve XMP structures. List-type tags with
1353 multiple values are formatted as an RDF Bag, but they are combined
1354 into a single string when -s or -sep is used. Using -L changes
1355 the XML encoding from "UTF-8" to "windows-1252". Other -charset
1356 settings change the encoding only if there is a corresponding
1357 standard XML character set. The -b option causes binary data
1358 values to be written, encoded in base64 if necessary. The -t
1359 option adds tag table information to the output (see -t for
1360 details).
1361
1362 Note: This output is NOT the same as XMP because it uses
1363 dynamically-generated property names corresponding to the ExifTool
1364 tag names with ExifTool family 1 group names as namespaces, and
1365 not the standard XMP properties and namespaces. To write XMP
1366 instead, use the -o option with an XMP extension for the output
1367 file.
1368
1369 Processing control
1370
1371 -a, --a (-duplicates, --duplicates)
1372 Allow (-a) or suppress (--a) duplicate tag names to be extracted.
1373 By default, duplicate tags are suppressed when reading unless the
1374 -ee or -X options are used or the Duplicates option is enabled in
1375 the configuration file. When writing, this option allows multiple
1376 Warning messages to be shown. Duplicate tags are always extracted
1377 when copying.
1378
1379 -e (--composite)
1380 Extract existing tags only -- don't generate composite tags.
1381
1382 -ee[NUM] (-extractEmbedded)
1383 Extract information from embedded documents in EPS files, embedded
1384 EPS information and JPEG and Jpeg2000 images in PDF files,
1385 embedded MPF images in JPEG and MPO files, streaming metadata in
1386 AVCHD videos, and the resource fork of Mac OS files. Implies the
1387 -a option. Use -g3 or -G3 to identify the originating document
1388 for extracted information. Embedded documents containing sub-
1389 documents are indicated with dashes in the family 3 group name.
1390 (eg. "Doc2-3" is the 3rd sub-document of the 2nd embedded
1391 document.) Note that this option may increase processing time
1392 substantially, especially for PDF files with many embedded images
1393 or videos with streaming metadata.
1394
1395 When used with -ee, the -p option is evaluated for each embedded
1396 document as if it were a separate input file. This allows, for
1397 example, generation of GPS track logs from timed metadata in
1398 videos. See <https://exiftool.org/geotag.html#Inverse> for
1399 examples.
1400
1401 Setting NUM to 2 causes the H264 video stream in MP4 videos to be
1402 parsed until the first Supplemental Enhancement Information (SEI)
1403 message is decoded, or 3 to parse the entire H624 stream and
1404 decode all SEI information. For M2TS videos, a setting of 3
1405 causes the entire file to be parsed in search of unlisted programs
1406 which may contain timed GPS.
1407
1408 -ext[+] EXT, --ext EXT (-extension)
1409 Process only files with (-ext) or without (--ext) a specified
1410 extension. There may be multiple -ext and --ext options. A plus
1411 sign may be added (ie. -ext+) to add the specified extension to
1412 the normally processed files. EXT may begin with a leading '.',
1413 which is ignored. Case is not significant. "*" may be used to
1414 process files with any extension (or none at all), as in the last
1415 three examples:
1416
1417 exiftool -ext JPG DIR # process only JPG files
1418 exiftool --ext cr2 --ext dng DIR # supported files but CR2/DNG
1419 exiftool -ext+ txt DIR # supported files plus TXT
1420 exiftool -ext "*" DIR # process all files
1421 exiftool -ext "*" --ext xml DIR # process all but XML files
1422 exiftool -ext "*" --ext . DIR # all but those with no ext
1423
1424 Using this option has two main advantages over specifying "*.EXT"
1425 on the command line: 1) It applies to files in subdirectories
1426 when combined with the -r option. 2) The -ext option is case-
1427 insensitive, which is useful when processing files on case-
1428 sensitive filesystems.
1429
1430 Note that all files specified on the command line will be
1431 processed regardless of extension unless the -ext option is used.
1432
1433 -F[OFFSET] (-fixBase)
1434 Fix the base for maker notes offsets. A common problem with some
1435 image editors is that offsets in the maker notes are not adjusted
1436 properly when the file is modified. This may cause the wrong
1437 values to be extracted for some maker note entries when reading
1438 the edited file. This option allows an integer OFFSET to be
1439 specified for adjusting the maker notes base offset. If no OFFSET
1440 is given, ExifTool takes its best guess at the correct base. Note
1441 that exiftool will automatically fix the offsets for images which
1442 store original offset information (eg. newer Canon models).
1443 Offsets are fixed permanently if -F is used when writing EXIF to
1444 an image. eg)
1445
1446 exiftool -F -exif:resolutionunit=inches image.jpg
1447
1448 -fast[NUM]
1449 Increase speed of extracting information. With -fast (or -fast1),
1450 ExifTool will not scan to the end of a JPEG image to check for an
1451 AFCP or PreviewImage trailer, or past the first comment in GIF
1452 images or the audio/video data in WAV/AVI files to search for
1453 additional metadata. These speed benefits are small when reading
1454 images directly from disk, but can be substantial if piping images
1455 through a network connection. For more substantial speed
1456 benefits, -fast2 also causes exiftool to avoid extracting any EXIF
1457 MakerNote information, and to stop processing at the IDAT chunk of
1458 PNG images and the mdat atom of QuickTime-format files (but note
1459 that some files may store metadata after this). -fast3 avoids
1460 extracting metadata from the file, and returns only pseudo System
1461 tags, but still reads the file header to obtain an educated guess
1462 at FileType. -fast4 doesn't even read the file header, and
1463 returns only System tags and a FileType based on the file
1464 extension. -fast5 also disables generation of the Composite tags
1465 (like -e). Has no effect when writing.
1466
1467 Note that a separate -fast setting may be used for evaluation of a
1468 -if condition, or when ordering files with the -fileOrder option.
1469 See the -if and -fileOrder options for details.
1470
1471 -fileOrder[NUM] [-]TAG
1472 Set file processing order according to the sorted value of the
1473 specified TAG. For example, to process files in order of date:
1474
1475 exiftool -fileOrder DateTimeOriginal DIR
1476
1477 Additional -fileOrder options may be added for secondary sort
1478 keys. Numbers are sorted numerically, and all other values are
1479 sorted alphabetically. Files missing the specified tag are sorted
1480 last. The sort order may be reversed by prefixing the tag name
1481 with a "-" (eg. "-fileOrder -createdate"). Print conversion of
1482 the sorted values is disabled with the -n option, or a "#"
1483 appended to the tag name. Other formatting options (eg. -d) have
1484 no effect on the sorted values. Note that the -fileOrder option
1485 can incur large performance penalty since it involves an
1486 additional initial processing pass of all files, but this impact
1487 may be reduced by specifying a NUM to effectively set the -fast
1488 level for the initial pass. For example, -fileOrder4 may be used
1489 if TAG is a pseudo System tag. If multiple -fileOrder options are
1490 used, the extraction is done at the lowest -fast level. Note that
1491 files are sorted across directory boundaries if multiple input
1492 directories are specified.
1493
1494 -i DIR (-ignore)
1495 Ignore specified directory name. DIR may be either an individual
1496 folder name, or a full path. If a full path is specified, it must
1497 match the Directory tag exactly to be ignored. Use multiple -i
1498 options to ignore more than one directory name. A special DIR
1499 value of "SYMLINKS" (case sensitive) may be specified to avoid
1500 recursing into directories which are symbolic links when the -r
1501 option is used. As well, a value of "HIDDEN" (case sensitive) may
1502 be used to ignore files with names that start with a "." (ie.
1503 hidden files on Unix systems) when scanning a directory.
1504
1505 -if[NUM] EXPR
1506 Specify a condition to be evaluated before processing each FILE.
1507 EXPR is a Perl-like logic expression containing tag names prefixed
1508 by "$" symbols. It is evaluated with the tags from each FILE in
1509 turn, and the file is processed only if the expression returns
1510 true. Unlike Perl variable names, tag names are not case
1511 sensitive and may contain a hyphen. As well, tag names may have a
1512 leading group names separated by colons, and/or a trailing "#"
1513 character to disable print conversion. The expression $GROUP:all
1514 evaluates to 1 if any tag exists in the specified "GROUP", or 0
1515 otherwise (see note 2 below). When multiple -if options are used,
1516 all conditions must be satisfied to process the file. Returns an
1517 exit status of 2 if all files fail the condition. Below are a few
1518 examples:
1519
1520 # extract shutterspeed from all Canon images in a directory
1521 exiftool -shutterspeed -if '$make eq "Canon"' dir
1522
1523 # add one hour to all images created on or after Apr. 2, 2006
1524 exiftool -alldates+=1 -if '$CreateDate ge "2006:04:02"' dir
1525
1526 # set EXIF ISO value if possible, unless it is set already
1527 exiftool '-exif:iso<iso' -if 'not $exif:iso' dir
1528
1529 # find images containing a specific keyword (case insensitive)
1530 exiftool -if '$keywords =~ /harvey/i' -filename dir
1531
1532 Adding NUM to the -if option causes a separate processing pass to
1533 be executed for evaluating EXPR at a -fast level given by NUM (see
1534 the -fast option documentation for details). Without NUM, only
1535 one processing pass is done at the level specified by the -fast
1536 option. For example, using -if5 is possible if EXPR uses only
1537 pseudo System tags, and may significantly speed processing if
1538 enough files fail the condition.
1539
1540 The expression has access to the current ExifTool object through
1541 $self, and the following special functions are available to allow
1542 short-circuiting of the file processing. Both functions have a
1543 return value of 1. Case is significant for function names.
1544
1545 End() - end processing after this file
1546 EndDir() - end processing of files in the current directory
1547 after this file (not compatible with -fileOrder)
1548
1549 Notes:
1550
1551 1) The -n and -b options also apply to tags used in EXPR.
1552
1553 2) Some binary data blocks are not extracted unless specified
1554 explicitly. These tags are not available for use in the -if
1555 condition unless they are also specified on the command line. The
1556 alternative is to use the $GROUP:all syntax. (eg. Use $exif:all
1557 instead of $exif in EXPR to test for the existence of EXIF tags.)
1558
1559 3) Tags in the string are interpolated in a similar way to -p
1560 before the expression is evaluated. In this interpolation, $/ is
1561 converted to a newline and $$ represents a single "$" symbol. So
1562 Perl variables, if used, require a double "$", and regular
1563 expressions ending in $/ must use $$/ instead.
1564
1565 4) The condition accesses only tags from the file being processed
1566 unless the -fileNUM option is used to read an alternate file and
1567 the corresponding family 8 group name is specified for the tag.
1568 See the -fileNUM option details for more information.
1569
1570 5) The -a option has no effect on the evaluation of the
1571 expression, and the values of duplicate tags are accessible only
1572 by specifying a group name (such as a family 4 instance number,
1573 eg. $Copy1:TAG, $Copy2:TAG, etc).
1574
1575 6) A special "OK" UserParam is available to test the success of
1576 the previous command when -execute was used, and may be used like
1577 any other tag in the condition (ie. "$OK").
1578
1579 7) The API RequestTags option is automatically set for all tags
1580 used in the -if condition.
1581
1582 -m (-ignoreMinorErrors)
1583 Ignore minor errors and warnings. This enables writing to files
1584 with minor errors and disables some validation checks which could
1585 result in minor warnings. Generally, minor errors/warnings
1586 indicate a problem which usually won't result in loss of metadata
1587 if ignored. However, there are exceptions, so ExifTool leaves it
1588 up to you to make the final decision. Minor errors and warnings
1589 are indicated by "[minor]" at the start of the message. Warnings
1590 which affect processing when ignored are indicated by "[Minor]"
1591 (with a capital "M"). Note that this causes missing values in
1592 -tagsFromFile, -p and -if strings to be set to an empty string
1593 rather than an undefined value.
1594
1595 -o OUTFILE or FMT (-out)
1596 Set the output file or directory name when writing information.
1597 Without this option, when any "real" tags are written the original
1598 file is renamed to "FILE_original" and output is written to FILE.
1599 When writing only FileName and/or Directory "pseudo" tags, -o
1600 causes the file to be copied instead of moved, but directories
1601 specified for either of these tags take precedence over that
1602 specified by the -o option.
1603
1604 OUTFILE may be "-" to write to stdout. The output file name may
1605 also be specified using a FMT string in which %d, %f and %e
1606 represent the directory, file name and extension of FILE. Also,
1607 %c may be used to add a copy number. See the -w option for FMT
1608 string examples.
1609
1610 The output file is taken to be a directory name if it already
1611 exists as a directory or if the name ends with '/'. Output
1612 directories are created if necessary. Existing files will not be
1613 overwritten. Combining the -overwrite_original option with -o
1614 causes the original source file to be erased after the output file
1615 is successfully written.
1616
1617 A special feature of this option allows the creation of certain
1618 types of files from scratch, or with the metadata from another
1619 type of file. The following file types may be created using this
1620 technique:
1621
1622 XMP, EXIF, EXV, MIE, ICC/ICM, VRD, DR4
1623
1624 The output file type is determined by the extension of OUTFILE
1625 (specified as "-.EXT" when writing to stdout). The output file is
1626 then created from a combination of information in FILE (as if the
1627 -tagsFromFile option was used), and tag values assigned on the
1628 command line. If no FILE is specified, the output file may be
1629 created from scratch using only tags assigned on the command line.
1630
1631 -overwrite_original
1632 Overwrite the original FILE (instead of preserving it by adding
1633 "_original" to the file name) when writing information to an
1634 image. Caution: This option should only be used if you already
1635 have separate backup copies of your image files. The overwrite is
1636 implemented by renaming a temporary file to replace the original.
1637 This deletes the original file and replaces it with the edited
1638 version in a single operation. When combined with -o, this option
1639 causes the original file to be deleted if the output file was
1640 successfully written (ie. the file is moved instead of copied).
1641
1642 -overwrite_original_in_place
1643 Similar to -overwrite_original except that an extra step is added
1644 to allow the original file attributes to be preserved. For
1645 example, on a Mac this causes the original file creation date,
1646 type, creator, label color, icon, Finder tags, other extended
1647 attributes and hard links to the file to be preserved (but note
1648 that the Mac OS resource fork is always preserved unless
1649 specifically deleted with "-rsrc:all="). This is implemented by
1650 opening the original file in update mode and replacing its data
1651 with a copy of a temporary file before deleting the temporary.
1652 The extra step results in slower performance, so the
1653 -overwrite_original option should be used instead unless
1654 necessary.
1655
1656 Note that this option reverts to the behaviour of the
1657 -overwrite_original option when also writing the FileName and/or
1658 Directory tags.
1659
1660 -P (-preserve)
1661 Preserve the filesystem modification date/time ("FileModifyDate")
1662 of the original file when writing. Note that some filesystems
1663 store a creation date (ie. "FileCreateDate" on Windows and Mac
1664 systems) which is not affected by this option. This creation date
1665 is preserved on Windows systems where Win32API::File and
1666 Win32::API are available regardless of this setting. For other
1667 systems, the -overwrite_original_in_place option may be used if
1668 necessary to preserve the creation date. The -P option is
1669 superseded by any value written to the FileModifyDate tag.
1670
1671 -password PASSWD
1672 Specify password to allow processing of password-protected PDF
1673 documents. If a password is required but not given, a warning is
1674 issued and the document is not processed. This option is ignored
1675 if a password is not required.
1676
1677 -progress[NUM][:[TITLE]]
1678 Show the progress when processing files. Without a colon, the
1679 -progress option adds a progress count in brackets after the name
1680 of each processed file, giving the current file number and the
1681 total number of files to be processed. Implies the -v0 option,
1682 causing the names of processed files to also be printed when
1683 writing. When combined with the -if option, the total count
1684 includes all files before the condition is applied, but files that
1685 fail the condition will not have their names printed. If NUM is
1686 specified, the progress is shown every NUM input files.
1687
1688 If followed by a colon (ie. -progress:), the console window title
1689 is set according to the specified TITLE string. If no TITLE is
1690 given, a default TITLE string of "ExifTool %p%%" is assumed. In
1691 the string, %f represents the file name, %p is the progress as a
1692 percent, %r is the progress as a ratio, %##b is a progress bar of
1693 width "##" (where "##" is an integer specifying the bar width in
1694 characters, or 20 characters by default if "##" is omitted), and
1695 %% is a % character. May be combined with the normal -progress
1696 option to also show the progress count in console messages. (Note:
1697 For this feature to function correctly on Mac/Linux, stderr must
1698 go to the console.)
1699
1700 -q (-quiet)
1701 Quiet processing. One -q suppresses normal informational
1702 messages, and a second -q suppresses warnings as well. Error
1703 messages can not be suppressed, although minor errors may be
1704 downgraded to warnings with the -m option, which may then be
1705 suppressed with "-q -q".
1706
1707 -r[.] (-recurse)
1708 Recursively process files in subdirectories. Only meaningful if
1709 FILE is a directory name. Subdirectories with names beginning
1710 with "." are not processed unless "." is added to the option name
1711 (ie. -r. or -recurse.). By default, exiftool will also follow
1712 symbolic links to directories if supported by the system, but this
1713 may be disabled with "-i SYMLINKS" (see the -i option for
1714 details). Combine this with -ext options to control the types of
1715 files processed.
1716
1717 -scanForXMP
1718 Scan all files (even unsupported formats) for XMP information
1719 unless found already. When combined with the -fast option, only
1720 unsupported file types are scanned. Warning: It can be time
1721 consuming to scan large files.
1722
1723 -u (-unknown)
1724 Extract values of unknown tags. Add another -u to also extract
1725 unknown information from binary data blocks. This option applies
1726 to tags with numerical tag ID's, and causes tag names like
1727 "Exif_0xc5d9" to be generated for unknown information. It has no
1728 effect on information types which have human-readable tag ID's
1729 (such as XMP), since unknown tags are extracted automatically from
1730 these formats.
1731
1732 -U (-unknown2)
1733 Extract values of unknown tags as well as unknown information from
1734 some binary data blocks. This is the same as two -u options.
1735
1736 -wm MODE (-writeMode)
1737 Set mode for writing/creating tags. MODE is a string of one or
1738 more characters from the list below. The default write mode is
1739 "wcg".
1740
1741 w - Write existing tags
1742 c - Create new tags
1743 g - create new Groups as necessary
1744
1745 For example, use "-wm cg" to only create new tags (and avoid
1746 editing existing ones).
1747
1748 The level of the group is the SubDirectory level in the metadata
1749 structure. For XMP or IPTC this is the full XMP/IPTC block (the
1750 family 0 group), but for EXIF this is the individual IFD (the
1751 family 1 group).
1752
1753 -z (-zip)
1754 When reading, causes information to be extracted from .gz and .bz2
1755 compressed images (only one image per archive; requires gzip and
1756 bzip2 to be available). When writing, causes compressed
1757 information to be written if supported by the metadata format (eg.
1758 PNG supports compressed textual metadata, JXL supports compressed
1759 EXIF and XML, and MIE supports any compressed metadata), disables
1760 the recommended padding in embedded XMP (saving 2424 bytes when
1761 writing XMP in a file), and writes XMP in shorthand format -- the
1762 equivalent of setting the API Compress=1 and
1763 Compact="NoPadding,Shorthand".
1764
1765 Other options
1766
1767 -@ ARGFILE
1768 Read command-line arguments from the specified file. The file
1769 contains one argument per line (NOT one option per line -- some
1770 options require additional arguments, and all arguments must be
1771 placed on separate lines). Blank lines and lines beginning with
1772 "#" are ignored (unless they start with "#[CSTR]", in which case
1773 the rest of the line is treated as a C string, allowing standard C
1774 escape sequences such as "\n" for a newline). White space at the
1775 start of a line is removed. Normal shell processing of arguments
1776 is not performed, which among other things means that arguments
1777 should not be quoted and spaces are treated as any other
1778 character. ARGFILE may exist relative to either the current
1779 directory or the exiftool directory unless an absolute pathname is
1780 given.
1781
1782 For example, the following ARGFILE will set the value of Copyright
1783 to "Copyright YYYY, Phil Harvey", where "YYYY" is the year of
1784 CreateDate:
1785
1786 -d
1787 %Y
1788 -copyright<Copyright $createdate, Phil Harvey
1789
1790 Arguments in ARGFILE behave exactly the same as if they were
1791 entered at the location of the -@ option on the command line, with
1792 the exception that the -config and -common_args options may not be
1793 used in an ARGFILE.
1794
1795 -k (-pause)
1796 Pause with the message "-- press any key --" or "-- press RETURN
1797 --" (depending on your system) before terminating. This option is
1798 used to prevent the command window from closing when run as a
1799 Windows drag and drop application.
1800
1801 -list, -listw, -listf, -listr, -listwf, -listg[NUM], -listd, -listx
1802 Print a list of all valid tag names (-list), all writable tag
1803 names (-listw), all supported file extensions (-listf), all
1804 recognized file extensions (-listr), all writable file extensions
1805 (-listwf), all tag groups [in a specified family] (-listg[NUM]),
1806 all deletable tag groups (-listd), or an XML database of tag
1807 details including language translations (-listx). The -list,
1808 -listw and -listx options may be followed by an additional
1809 argument of the form "-GROUP:All" to list only tags in a specific
1810 group, where "GROUP" is one or more family 0-2 group names
1811 (excepting EXIF IFD groups) separated by colons. With -listg, NUM
1812 may be given to specify the group family, otherwise family 0 is
1813 assumed. The -l option may be combined with -listf, -listr or
1814 -listwf to add file descriptions to the list. The -lang option
1815 may be combined with -listx to output descriptions in a single
1816 language. Here are some examples:
1817
1818 -list # list all tag names
1819 -list -EXIF:All # list all EXIF tags
1820 -list -xmp:time:all # list all XMP tags relating to time
1821 -listw -XMP-dc:All # list all writable XMP-dc tags
1822 -listf # list all supported file extensions
1823 -listr # list all recognized file extensions
1824 -listwf # list all writable file extensions
1825 -listg1 # list all groups in family 1
1826 -listd # list all deletable groups
1827 -listx -EXIF:All # list database of EXIF tags in XML format
1828 -listx -XMP:All -s # list short XML database of XMP tags
1829
1830 When combined with -listx, the -s option shortens the output by
1831 omitting the descriptions and values (as in the last example
1832 above), and -f adds 'flags' and 'struct' attributes if applicable.
1833 The flags are formatted as a comma-separated list of the following
1834 possible values: Avoid, Binary, List, Mandatory, Permanent,
1835 Protected, Unknown and Unsafe (see the Tag Name documentation).
1836 For XMP List tags, the list type (Alt, Bag or Seq) is added to the
1837 flags, and flattened structure tags are indicated by a Flattened
1838 flag with 'struct' giving the ID of the parent structure.
1839
1840 Note that none of the -list options require an input FILE.
1841
1842 -ver Print exiftool version number. The -v option may be added to
1843 print addition system information (see the README file of the full
1844 distribution for more details about optional libraries), or -v2 to
1845 also list the Perl include directories.
1846
1847 -- Indicates the end of options. Any remaining arguments are treated
1848 as file names, even if they begin with a dash ("-").
1849
1850 Special features
1851
1852 -geotag TRKFILE
1853 Geotag images from the specified GPS track log file. Using the
1854 -geotag option is equivalent to writing a value to the "Geotag"
1855 tag. The GPS position is interpolated from the track at a time
1856 specified by the value written to the "Geotime" tag. If "Geotime"
1857 is not specified, the value is copied from "DateTimeOriginal#"
1858 (the "#" is added to copy the unformatted value, avoiding
1859 potential conflicts with the -d option). For example, the
1860 following two commands are equivalent:
1861
1862 exiftool -geotag trk.log image.jpg
1863 exiftool -geotag trk.log "-Geotime<DateTimeOriginal#" image.jpg
1864
1865 When the "Geotime" value is converted to UTC, the local system
1866 timezone is assumed unless the date/time value contains a
1867 timezone. Writing "Geotime" causes the following tags to be
1868 written (provided they can be calculated from the track log, and
1869 they are supported by the destination metadata format):
1870 GPSLatitude, GPSLatitudeRef, GPSLongitude, GPSLongitudeRef,
1871 GPSAltitude, GPSAltitudeRef, GPSDateStamp, GPSTimeStamp,
1872 GPSDateTime, GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef,
1873 GPSImgDirection, GPSImgDirectionRef, GPSPitch, GPSRoll,
1874 GPSCoordinates, AmbientTemperature and CameraElevationAngle. By
1875 default, in image files tags are created in EXIF, and updated in
1876 XMP only if they already exist. In QuickTime-format files
1877 GPSCoordinates is created in the preferred location (ItemList by
1878 default) as well as in XMP. However, "EXIF:Geotime",
1879 "XMP:Geotime" or "QuickTime:Geotime" may be specified to write to
1880 write only to one group. Also, "ItemList:Geotime", "Keys:Geotime"
1881 or "UserData:Geotime" may be used to write to a specific location
1882 in QuickTime-format files. Note that GPSPitch and GPSRoll are
1883 non-standard, and require user-defined tags in order to be
1884 written.
1885
1886 The "Geosync" tag may be used to specify a time correction which
1887 is applied to each "Geotime" value for synchronization with GPS
1888 time. For example, the following command compensates for image
1889 times which are 1 minute and 20 seconds behind GPS:
1890
1891 exiftool -geosync=+1:20 -geotag a.log DIR
1892
1893 Advanced "Geosync" features allow a piecewise linear time drift
1894 correction and synchronization from previously geotagged images.
1895 See "geotag.html" in the full ExifTool distribution for more
1896 information.
1897
1898 Multiple -geotag options may be used to concatenate GPS track log
1899 data. Also, a single -geotag option may be used to load multiple
1900 track log files by using wildcards in the TRKFILE name, but note
1901 that in this case TRKFILE must be quoted on most systems (with the
1902 notable exception of Windows) to prevent filename expansion. For
1903 example:
1904
1905 exiftool -geotag "TRACKDIR/*.log" IMAGEDIR
1906
1907 Currently supported track file formats are GPX, NMEA RMC/GGA/GLL,
1908 KML, IGC, Garmin XML and TCX, Magellan PMGNTRK, Honeywell PTNTHPR,
1909 Bramor gEO, Winplus Beacon TXT, and GPS/IMU CSV files. See
1910 "GEOTAGGING EXAMPLES" for examples. Also see "geotag.html" in the
1911 full ExifTool distribution and the Image::ExifTool Options for
1912 more details and for information about geotag configuration
1913 options.
1914
1915 -globalTimeShift SHIFT
1916 Shift all formatted date/time values by the specified amount when
1917 reading. Does not apply to unformatted (-n) output. SHIFT takes
1918 the same form as the date/time shift when writing (see
1919 Image::ExifTool::Shift.pl for details), with a negative shift
1920 being indicated with a minus sign ("-") at the start of the SHIFT
1921 string. For example:
1922
1923 # return all date/times, shifted back by 1 hour
1924 exiftool -globalTimeShift -1 -time:all a.jpg
1925
1926 # set the file name from the shifted CreateDate (-1 day) for
1927 # all images in a directory
1928 exiftool "-filename<createdate" -globaltimeshift "-0:0:1 0:0:0" \
1929 -d %Y%m%d-%H%M%S.%%e dir
1930
1931 -use MODULE
1932 Add features from specified plug-in MODULE. Currently, the MWG
1933 module is the only plug-in module distributed with exiftool. This
1934 module adds read/write support for tags as recommended by the
1935 Metadata Working Group. As a convenience, "-use MWG" is assumed if
1936 the group name prefix starts with "MWG:" exactly for any requested
1937 tag. See the MWG Tags documentation for more details. Note that
1938 this option is not reversible, and remains in effect until the
1939 application terminates, even across the -execute option.
1940
1941 Utilities
1942
1943 -restore_original
1944 -delete_original[!]
1945 These utility options automate the maintenance of the "_original"
1946 files created by exiftool. They have no effect on files without
1947 an "_original" copy. The -restore_original option restores the
1948 specified files from their original copies by renaming the
1949 "_original" files to replace the edited versions. For example,
1950 the following command restores the originals of all JPG images in
1951 directory "DIR":
1952
1953 exiftool -restore_original -ext jpg DIR
1954
1955 The -delete_original option deletes the "_original" copies of all
1956 files specified on the command line. Without a trailing "!" this
1957 option prompts for confirmation before continuing. For example,
1958 the following command deletes "a.jpg_original" if it exists, after
1959 asking "Are you sure?":
1960
1961 exiftool -delete_original a.jpg
1962
1963 These options may not be used with other options to read or write
1964 tag values in the same command, but may be combined with options
1965 such -ext, -if, -r, -q and -v.
1966
1967 Advanced options
1968
1969 Among other things, the advanced options allow complex processing to be
1970 performed from a single command without the need for additional
1971 scripting. This may be particularly useful for implementations such as
1972 Windows drag-and-drop applications. These options may also be used to
1973 improve performance in multi-pass processing by reducing the overhead
1974 required to load exiftool for each invocation.
1975
1976 -api [OPT[[^]=[VAL]]]
1977 Set ExifTool API option. OPT is an API option name. The option
1978 value is set to 1 if =VAL is omitted. If VAL is omitted, the
1979 option value is set to undef if "=" is used, or an empty string
1980 with "^=". If OPT is not specified a list of available options is
1981 returned. The option name is not case senstive, but the option
1982 values are. See Image::ExifTool Options for option details. This
1983 overrides API options set via the config file.
1984
1985 -common_args
1986 Specifies that all arguments following this option are common to
1987 all executed commands when -execute is used. This and the -config
1988 option are the only options that may not be used inside a -@
1989 ARGFILE. Note that by definition this option and its arguments
1990 MUST come after all other options on the command line.
1991
1992 -config CFGFILE
1993 Load specified configuration file instead of the default
1994 ".ExifTool_config". If used, this option must come before all
1995 other arguments on the command line and applies to all -execute'd
1996 commands. This file is used to create user-defined tags as well
1997 as set default ExifTool options. The CFGFILE must exist relative
1998 to the current working directory or the exiftool application
1999 directory unless an absolute path is specified. Loading of the
2000 default config file may be disabled by setting CFGFILE to an empty
2001 string (ie. ""). See <https://exiftool.org/config.html> and
2002 config_files/example.config in the full ExifTool distribution for
2003 details about the configuration file syntax.
2004
2005 -echo[NUM] TEXT
2006 Echo TEXT to stdout (-echo or -echo1) or stderr (-echo2). Text is
2007 output as the command line is parsed, before the processing of any
2008 input files. NUM may also be 3 or 4 to output text (to stdout or
2009 stderr respectively) after processing is complete. For -echo3 and
2010 -echo4, "${status}" may be used in the TEXT string to represent
2011 the numerical exit status of the command (see "EXIT STATUS").
2012
2013 -efile[NUM][!] ERRFILE
2014 Save the names of files giving errors (NUM missing or 1), files
2015 that were unchanged (NUM is 2), files that fail the -if condition
2016 (NUM is 4), files that were updated (NUM is 8), files that were
2017 created (NUM is 16), or any combination thereof by summing NUM
2018 (eg. -efile3 is the same has having both -efile and -efile2
2019 options with the same ERRFILE). By default, file names are
2020 appended to any existing ERRFILE, but ERRFILE is overwritten if an
2021 exclamation point is added to the option (eg. -efile!). Saves the
2022 name of the file specified by the -srcfile option if applicable.
2023
2024 -execute[NUM]
2025 Execute command for all arguments up to this point on the command
2026 line (plus any arguments specified by -common_args). The result
2027 is as if the commands were executed as separate command lines
2028 (with the exception of the -config and -use options which remain
2029 in effect for subsequent commands). Allows multiple commands to
2030 be executed from a single command line. NUM is an optional number
2031 that is echoed in the "{ready}" message when using the -stay_open
2032 feature. If a NUM is specified, the -q option no longer
2033 suppresses the output "{readyNUM}" message.
2034
2035 -fileNUM ALTFILE
2036 Read tags from an alternate source file. Among other things, this
2037 allows tags from different files to be compared and combined using
2038 the -if and -p options. NUM is any string of digits. Tags from
2039 alternate files are accessed via the corresponding family 8 group
2040 name (eg. "File1:TAG" for the -file1 option, "File2:TAG" for
2041 -file2, etc). ALTFILE may contain filename formatting codes like
2042 the -w option (%d, %f, etc), and/or tag names with a leading "$"
2043 symbol to access tags from the source file in the same way as the
2044 -p option (so any other dollar symbol in the file name must be
2045 doubled, eg. "money$$.jpg"). For example, assuming that the
2046 OriginalFileName tag has been set in the edited file, a command to
2047 copy Rights from the original file could look like this:
2048
2049 exiftool -file1 '$originalfilename' '-rights<file1:rights' edited.jpg
2050
2051 Composite tags may access tags from alternate files using the
2052 appropriate (case-sensitive) family 8 group name.
2053
2054 -list_dir
2055 List directories themselves instead of their contents. This
2056 option effectively causes directories to be treated as normal
2057 files when reading and writing. For example, with this option the
2058 output of the "ls -la" command on Mac/Linux may be approximated by
2059 this exiftool command:
2060
2061 exiftool -list_dir -T -ls-l -api systemtags -fast5 .* *
2062
2063 (The -T option formats the output in tab-separated columns, -ls-l
2064 is a shortcut tag, the API SystemTags option is required to
2065 extract some necessary tags, and the -fast5 option is added for
2066 speed since only system tags are being extracted.)
2067
2068 -srcfile FMT
2069 Specify a different source file to be processed based on the name
2070 of the original FILE. This may be useful in some special
2071 situations for processing related preview images or sidecar files.
2072 See the -w option for a description of the FMT syntax. Note that
2073 file name FMT strings for all options are based on the original
2074 FILE specified from the command line, not the name of the source
2075 file specified by -srcfile.
2076
2077 For example, to copy metadata from NEF files to the corresponding
2078 JPG previews in a directory where other JPG images may exist:
2079
2080 exiftool -ext nef -tagsfromfile @ -srcfile %d%f.jpg dir
2081
2082 If more than one -srcfile option is specified, the files are
2083 tested in order and the first existing source file is processed.
2084 If none of the source files already exist, then exiftool uses the
2085 first -srcfile specified.
2086
2087 A FMT of "@" may be used to represent the original FILE, which may
2088 be useful when specifying multiple -srcfile options (eg. to fall
2089 back to processing the original FILE if no sidecar exists).
2090
2091 When this option is used, two special UserParam tags
2092 (OriginalFileName and OriginalDirectory) are generated to allow
2093 access to the original FILE name and directory.
2094
2095 -stay_open FLAG
2096 If FLAG is 1 or "True" (case insensitive), causes exiftool keep
2097 reading from the -@ ARGFILE even after reaching the end of file.
2098 This feature allows calling applications to pre-load exiftool,
2099 thus avoiding the overhead of loading exiftool for each command.
2100 The procedure is as follows:
2101
2102 1) Execute "exiftool -stay_open True -@ ARGFILE", where ARGFILE is
2103 the name of an existing (possibly empty) argument file or "-" to
2104 pipe arguments from the standard input.
2105
2106 2) Write exiftool command-line arguments to ARGFILE, one argument
2107 per line (see the -@ option for details).
2108
2109 3) Write "-execute\n" to ARGFILE, where "\n" represents a newline
2110 sequence. (Note: You may need to flush your write buffers here if
2111 using buffered output.) ExifTool will then execute the command
2112 with the arguments received up to this point, send a "{ready}"
2113 message to stdout when done (unless the -q or -T option is used),
2114 and continue trying to read arguments for the next command from
2115 ARGFILE. To aid in command/response synchronization, any number
2116 appended to the -execute option is echoed in the "{ready}"
2117 message. For example, "-execute613" results in "{ready613}".
2118 When this number is added, -q no longer suppresses the "{ready}"
2119 message. (Also, see the -echo3 and -echo4 options for additional
2120 ways to pass signals back to your application.)
2121
2122 4) Repeat steps 2 and 3 for each command.
2123
2124 5) Write "-stay_open\nFalse\n" (or "-stay_open\n0\n") to ARGFILE
2125 when done. This will cause exiftool to process any remaining
2126 command-line arguments then exit normally.
2127
2128 The input ARGFILE may be changed at any time before step 5 above
2129 by writing the following lines to the currently open ARGFILE:
2130
2131 -stay_open
2132 True
2133 -@
2134 NEWARGFILE
2135
2136 This causes ARGFILE to be closed, and NEWARGFILE to be kept open.
2137 (Without the -stay_open here, exiftool would have returned to
2138 reading arguments from ARGFILE after reaching the end of
2139 NEWARGFILE.)
2140
2141 Note: When writing arguments to a disk file there is a delay of
2142 up to 0.01 seconds after writing "-execute\n" before exiftool
2143 starts processing the command. This delay may be avoided by
2144 sending a CONT signal to the exiftool process immediately after
2145 writing "-execute\n". (There is no associated delay when writing
2146 arguments via a pipe with "-@ -", so the signal is not necessary
2147 when using this technique.)
2148
2149 -userParam PARAM[[^]=[VAL]]
2150 Set user parameter. PARAM is an arbitrary user parameter name.
2151 This is an interface to the API UserParam option (see the
2152 Image::ExifTool Options documentation), and provides a method to
2153 access user-defined parameters in arguments to the -if and -p
2154 options as if they were any other tag. Appending a hash tag ("#")
2155 to PARAM (eg. "-userParam MyTag#=yes") also causes the parameter
2156 to be extracted as a normal tag in the UserParam group. Similar
2157 to the -api option, the parameter value is set to 1 if =VAL is
2158 omitted, undef if just VAL is omitted with "=", or an empty string
2159 if VAL is omitted with "^=".
2160
2161 exiftool -p '$test from $filename' -userparam test=Hello FILE
2162
2163 Advanced formatting feature
2164
2165 An advanced formatting feature allows modification of the value of any
2166 tag interpolated within a -if or -p option argument, or a -tagsFromFile
2167 redirection string. Tag names within these strings are prefixed by a
2168 "$" symbol, and an arbitrary Perl expression may be applied to the tag
2169 value by placing braces around the tag name and inserting the
2170 expression after the name, separated by a semicolon (ie.
2171 "${TAG;EXPR}"). The expression acts on the value of the tag through
2172 the default input variable ($_), and has access to the full ExifTool
2173 API through the current ExifTool object ($self) and the tag key ($tag).
2174 It may contain any valid Perl code, including translation ("tr///") and
2175 substitution ("s///") operations, but note that braces within the
2176 expression must be balanced. The example below prints the camera Make
2177 with spaces translated to underlines, and multiple consecutive
2178 underlines replaced by a single underline:
2179
2180 exiftool -p '${make;tr/ /_/;s/__+/_/g}' image.jpg
2181
2182 An "@" may be added after the tag name to make the expression act on
2183 individual list items for list-type tags, simplifying list processing.
2184 Set $_ to undef to remove an item from the list. As an example, the
2185 following command returns all subjects not containing the string "xxx":
2186
2187 exiftool -p '${subject@;$_=undef if /xxx/}' image.jpg
2188
2189 A default expression of "tr(/\\?*:|"<>\0)()d" is assumed if the
2190 expression is empty (ie. "${TAG;}"). This removes the characters / \ ?
2191 * : | < > and null from the printed value. (These characters are
2192 illegal in Windows file names, so this feature is useful if tag values
2193 are used in file names.)
2194
2195 Helper functions
2196
2197 "DateFmt"
2198
2199 Simplifies reformatting of individual date/time values. This function
2200 acts on a standard EXIF-formatted date/time value in $_ and formats it
2201 according to the specified format string (see the -d option). To avoid
2202 trying to reformat an already-formatted date/time value, a "#" must be
2203 added to the tag name (as in the example below) if the -d option is
2204 also used. For example:
2205
2206 exiftool -p '${createdate#;DateFmt("%Y-%m-%d_%H%M%S")}' a.jpg
2207
2208 "ShiftTime"
2209
2210 Shifts EXIF-formatted date/time string by a specified amount. Start
2211 with a leading minus sign to shift backwards in time. See
2212 Image::ExifTool::Shift.pl for details about shift syntax. For example,
2213 to shift a date/time value back by one year:
2214
2215 exiftool -p '${createdate;ShiftTime("-1:0:0 0")}' a.jpg
2216
2217 "NoDups"
2218
2219 Removes duplicate items from a list with a separator specified by the
2220 -sep option. This function is most useful when copying list-type tags.
2221 For example, the following command may be used to remove duplicate
2222 Keywords:
2223
2224 exiftool -sep '##' '-keywords<${keywords;NoDups}' a.jpg
2225
2226 The -sep option is necessary to split the string back into individual
2227 list items when writing to a list-type tag.
2228
2229 An optional flag argument may be set to 1 to cause "NoDups" to set $_
2230 to undef if no duplicates existed, thus preventing the file from being
2231 rewritten unnecessarily:
2232
2233 exiftool -sep '##' '-keywords<${keywords;NoDups(1)}' a.jpg
2234
2235 Note that function names are case sensitive.
2236
2237 ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
2238 function largely redundant, with all the functionality except the
2239 ability to avoid rewriting the file if there are no duplicates, but
2240 with the advantage the duplicates may be removed when accumulating list
2241 items from multiple sources. An equivalent to the above commands using
2242 this feature would be:
2243
2244 exiftool -tagsfromfile @ -keywords -api nodups a.jpg
2245
2247 In Windows, command-line arguments are specified using the current code
2248 page and are recoded automatically to the system code page. This
2249 recoding is not done for arguments in ExifTool arg files, so by default
2250 filenames in arg files use the system code page. Unfortunately, these
2251 code pages are not complete character sets, so not all file names may
2252 be represented.
2253
2254 ExifTool 9.79 and later allow the file name encoding to be specified
2255 with "-charset filename=CHARSET", where "CHARSET" is the name of a
2256 valid ExifTool character set, preferably "UTF8" (see the -charset
2257 option for a complete list). Setting this triggers the use of Windows
2258 wide-character i/o routines, thus providing support for most Unicode
2259 file names (see note 4). But note that it is not trivial to pass
2260 properly encoded file names on the Windows command line (see
2261 <https://exiftool.org/faq.html#Q18> for details), so placing them in a
2262 UTF-8 encoded -@ argfile and using "-charset filename=utf8" is
2263 recommended if possible.
2264
2265 A warning is issued if a specified filename contains special characters
2266 and the filename character set was not provided. However, the warning
2267 may be disabled by setting "-charset filename=""", and ExifTool may
2268 still function correctly if the system code page matches the character
2269 set used for the file names.
2270
2271 When a directory name is provided, the file name encoding need not be
2272 specified (unless the directory name contains special characters), and
2273 ExifTool will automatically use wide-character routines to scan the
2274 directory.
2275
2276 The filename character set applies to the FILE arguments as well as
2277 filename arguments of -@, -geotag, -o, -p, -srcfile, -tagsFromFile,
2278 -csv=, -j= and -TAG<=. However, it does not apply to the -config
2279 filename, which always uses the system character set. The "-charset
2280 filename=" option must come before the -@ option to be effective, but
2281 the order doesn't matter with respect to other options.
2282
2283 Notes:
2284
2285 1) FileName and Directory tag values still use the same encoding as
2286 other tag values, and are converted to/from the filename character set
2287 when writing/reading if specified.
2288
2289 2) Unicode support is not yet implemented for other Windows-based
2290 systems like Cygwin.
2291
2292 3) See "WRITING READ-ONLY FILES" below for a note about editing read-
2293 only files with Unicode names.
2294
2295 4) Unicode file names with surrogate pairs (code points over U+FFFF)
2296 still cause problems.
2297
2299 In general, ExifTool may be used to write metadata to read-only files
2300 provided that the user has write permission in the directory. However,
2301 there are three cases where file write permission is also required:
2302
2303 1) When using the -overwrite_original_in_place option.
2304
2305 2) When writing only pseudo System tags (eg. FileModifyDate).
2306
2307 3) On Windows if the file has Unicode characters in its name, and a)
2308 the -overwrite_original option is used, or b) the "_original" backup
2309 already exists.
2310
2311 Hidden files in Windows behave as read-only files when attempting to
2312 write any real tags to the file -- an error is generated when using the
2313 -overwrite_original_in_place, otherwise writing should be successful
2314 and the hidden attribute will be removed. But the -if option may be
2315 used to avoid processing hidden files (provided Win32API::File is
2316 available):
2317
2318 exiftool -if "$fileattributes !~ /Hidden/" ...
2319
2321 Note: Beware when cutting and pasting these examples into your
2322 terminal! Some characters such as single and double quotes and hyphens
2323 may have been changed into similar-looking yet functionally-different
2324 characters by the text formatter used to display this documentation.
2325 Also note that Windows users must use double quotes instead of single
2326 quotes as below around arguments containing special characters.
2327
2328 exiftool -a -u -g1 a.jpg
2329 Print all meta information in an image, including duplicate and
2330 unknown tags, sorted by group (for family 1). For performance
2331 reasons, this command may not extract all available metadata.
2332 (Metadata in embedded documents, metadata extracted by external
2333 utilities, and metadata requiring excessive processing time may
2334 not be extracted). Add "-ee3" and "-api RequestAll=3" to the
2335 command to extract absolutely everything available.
2336
2337 exiftool -common dir
2338 Print common meta information for all images in "dir". "-common"
2339 is a shortcut tag representing common EXIF meta information.
2340
2341 exiftool -T -createdate -aperture -shutterspeed -iso dir > out.txt
2342 List specified meta information in tab-delimited column form for
2343 all images in "dir" to an output text file named "out.txt".
2344
2345 exiftool -s -ImageSize -ExposureTime b.jpg
2346 Print ImageSize and ExposureTime tag names and values.
2347
2348 exiftool -l -canon c.jpg d.jpg
2349 Print standard Canon information from two image files.
2350
2351 exiftool -r -w .txt -common pictures
2352 Recursively extract common meta information from files in
2353 "pictures" directory, writing text output to ".txt" files with the
2354 same names.
2355
2356 exiftool -b -ThumbnailImage image.jpg > thumbnail.jpg
2357 Save thumbnail image from "image.jpg" to a file called
2358 "thumbnail.jpg".
2359
2360 exiftool -b -JpgFromRaw -w _JFR.JPG -ext NEF -r .
2361 Recursively extract JPG image from all Nikon NEF files in the
2362 current directory, adding "_JFR.JPG" for the name of the output
2363 JPG files.
2364
2365 exiftool -a -b -W %d%f_%t%-c.%s -preview:all dir
2366 Extract all types of preview images (ThumbnailImage, PreviewImage,
2367 JpgFromRaw, etc.) from files in directory "dir", adding the tag
2368 name to the output preview image file names.
2369
2370 exiftool -d '%r %a, %B %e, %Y' -DateTimeOriginal -S -s -ext jpg .
2371 Print formatted date/time for all JPG files in the current
2372 directory.
2373
2374 exiftool -IFD1:XResolution -IFD1:YResolution image.jpg
2375 Extract image resolution from EXIF IFD1 information (thumbnail
2376 image IFD).
2377
2378 exiftool '-*resolution*' image.jpg
2379 Extract all tags with names containing the word "Resolution" from
2380 an image.
2381
2382 exiftool -xmp:author:all -a image.jpg
2383 Extract all author-related XMP information from an image.
2384
2385 exiftool -xmp -b a.jpg > out.xmp
2386 Extract complete XMP data record intact from "a.jpg" and write it
2387 to "out.xmp" using the special "XMP" tag (see the Extra tags in
2388 Image::ExifTool::TagNames).
2389
2390 exiftool -p '$filename has date $dateTimeOriginal' -q -f dir
2391 Print one line of output containing the file name and
2392 DateTimeOriginal for each image in directory "dir".
2393
2394 exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
2395 Extract all GPS positions from an AVCHD video.
2396
2397 exiftool -icc_profile -b -w icc image.jpg
2398 Save complete ICC_Profile from an image to an output file with the
2399 same name and an extension of ".icc".
2400
2401 exiftool -htmldump -w tmp/%f_%e.html t/images
2402 Generate HTML pages from a hex dump of EXIF information in all
2403 images from the "t/images" directory. The output HTML files are
2404 written to the "tmp" directory (which is created if it didn't
2405 exist), with names of the form 'FILENAME_EXT.html'.
2406
2407 exiftool -a -b -ee -embeddedimage -W Image_%.3g3.%s file.pdf
2408 Extract embedded JPG and JP2 images from a PDF file. The output
2409 images will have file names like "Image_#.jpg" or "Image_#.jp2",
2410 where "#" is the ExifTool family 3 embedded document number for
2411 the image.
2412
2414 Note that quotes are necessary around arguments which contain certain
2415 special characters such as ">", "<" or any white space. These quoting
2416 techniques are shell dependent, but the examples below will work for
2417 most Unix shells. With the Windows cmd shell however, double quotes
2418 should be used (eg. -Comment="This is a new comment").
2419
2420 exiftool -Comment='This is a new comment' dst.jpg
2421 Write new comment to a JPG image (replaces any existing comment).
2422
2423 exiftool -comment= -o newdir -ext jpg .
2424 Remove comment from all JPG images in the current directory,
2425 writing the modified images to a new directory.
2426
2427 exiftool -keywords=EXIF -keywords=editor dst.jpg
2428 Replace existing keyword list with two new keywords ("EXIF" and
2429 "editor").
2430
2431 exiftool -Keywords+=word -o newfile.jpg src.jpg
2432 Copy a source image to a new file, and add a keyword ("word") to
2433 the current list of keywords.
2434
2435 exiftool -exposurecompensation+=-0.5 a.jpg
2436 Decrement the value of ExposureCompensation by 0.5 EV. Note that
2437 += with a negative value is used for decrementing because the -=
2438 operator is used for conditional deletion (see next example).
2439
2440 exiftool -credit-=xxx dir
2441 Delete Credit information from all files in a directory where the
2442 Credit value was "xxx".
2443
2444 exiftool -xmp:description-de='kühl' -E dst.jpg
2445 Write alternate language for XMP:Description, using HTML character
2446 escaping to input special characters.
2447
2448 exiftool -all= dst.jpg
2449 Delete all meta information from an image. Note: You should NOT
2450 do this to RAW images (except DNG) since proprietary RAW image
2451 formats often contain information in the makernotes that is
2452 necessary for converting the image.
2453
2454 exiftool -all= -comment='lonely' dst.jpg
2455 Delete all meta information from an image and add a comment back
2456 in. (Note that the order is important: "-comment='lonely' -all="
2457 would also delete the new comment.)
2458
2459 exiftool -all= --jfif:all dst.jpg
2460 Delete all meta information except JFIF group from an image.
2461
2462 exiftool -Photoshop:All= dst.jpg
2463 Delete Photoshop meta information from an image (note that the
2464 Photoshop information also includes IPTC).
2465
2466 exiftool -r -XMP-crss:all= DIR
2467 Recursively delete all XMP-crss information from images in a
2468 directory.
2469
2470 exiftool '-ThumbnailImage<=thumb.jpg' dst.jpg
2471 Set the thumbnail image from specified file (Note: The quotes are
2472 necessary to prevent shell redirection).
2473
2474 exiftool '-JpgFromRaw<=%d%f_JFR.JPG' -ext NEF -r .
2475 Recursively write JPEG images with filenames ending in "_JFR.JPG"
2476 to the JpgFromRaw tag of like-named files with extension ".NEF" in
2477 the current directory. (This is the inverse of the "-JpgFromRaw"
2478 command of the "READING EXAMPLES" section above.)
2479
2480 exiftool -DateTimeOriginal-='0:0:0 1:30:0' dir
2481 Adjust original date/time of all images in directory "dir" by
2482 subtracting one hour and 30 minutes. (This is equivalent to
2483 "-DateTimeOriginal-=1.5". See Image::ExifTool::Shift.pl for
2484 details.)
2485
2486 exiftool -createdate+=3 -modifydate+=3 a.jpg b.jpg
2487 Add 3 hours to the CreateDate and ModifyDate timestamps of two
2488 images.
2489
2490 exiftool -AllDates+=1:30 -if '$make eq "Canon"' dir
2491 Shift the values of DateTimeOriginal, CreateDate and ModifyDate
2492 forward by 1 hour and 30 minutes for all Canon images in a
2493 directory. (The AllDates tag is provided as a shortcut for these
2494 three tags, allowing them to be accessed via a single tag.)
2495
2496 exiftool -xmp:city=Kingston image1.jpg image2.nef
2497 Write a tag to the XMP group of two images. (Without the "xmp:"
2498 this tag would get written to the IPTC group since "City" exists
2499 in both, and IPTC is preferred by default.)
2500
2501 exiftool -LightSource-='Unknown (0)' dst.tiff
2502 Delete "LightSource" tag only if it is unknown with a value of 0.
2503
2504 exiftool -whitebalance-=auto -WhiteBalance=tung dst.jpg
2505 Set "WhiteBalance" to "Tungsten" only if it was previously "Auto".
2506
2507 exiftool -comment-= -comment='new comment' a.jpg
2508 Write a new comment only if the image doesn't have one already.
2509
2510 exiftool -o %d%f.xmp dir
2511 Create XMP meta information data files for all images in "dir".
2512
2513 exiftool -o test.xmp -owner=Phil -title='XMP File'
2514 Create an XMP data file only from tags defined on the command
2515 line.
2516
2517 exiftool '-ICC_Profile<=%d%f.icc' image.jpg
2518 Write ICC_Profile to an image from a ".icc" file of the same name.
2519
2520 exiftool -hierarchicalkeywords='{keyword=one,children={keyword=B}}'
2521 Write structured XMP information. See
2522 <https://exiftool.org/struct.html> for more details.
2523
2524 exiftool -trailer:all= image.jpg
2525 Delete any trailer found after the end of image (EOI) in a JPEG
2526 file. A number of digital cameras store a large PreviewImage
2527 after the JPEG EOI, and the file size may be reduced significantly
2528 by deleting this trailer. See the JPEG Tags documentation for a
2529 list of recognized JPEG trailers.
2530
2532 These examples demonstrate the ability to copy tag values between
2533 files.
2534
2535 exiftool -tagsFromFile src.cr2 dst.jpg
2536 Copy the values of all writable tags from "src.cr2" to "dst.jpg",
2537 writing the information to same-named tags in the preferred
2538 groups.
2539
2540 exiftool -TagsFromFile src.jpg -all:all dst.jpg
2541 Copy the values of all writable tags from "src.jpg" to "dst.jpg",
2542 preserving the original tag groups.
2543
2544 exiftool -all= -tagsfromfile src.jpg -exif:all dst.jpg
2545 Erase all meta information from "dst.jpg" image, then copy EXIF
2546 tags from "src.jpg".
2547
2548 exiftool -exif:all= -tagsfromfile @ -all:all -unsafe bad.jpg
2549 Rebuild all EXIF meta information from scratch in an image. This
2550 technique can be used in JPEG images to repair corrupted EXIF
2551 information which otherwise could not be written due to errors.
2552 The "Unsafe" tag is a shortcut for unsafe EXIF tags in JPEG images
2553 which are not normally copied. See the tag name documentation for
2554 more details about unsafe tags.
2555
2556 exiftool -Tagsfromfile a.jpg out.xmp
2557 Copy meta information from "a.jpg" to an XMP data file. If the
2558 XMP data file "out.xmp" already exists, it will be updated with
2559 the new information. Otherwise the XMP data file will be created.
2560 Only metadata-only files may be created like this (files
2561 containing images may be edited but not created). See "WRITING
2562 EXAMPLES" above for another technique to generate XMP files.
2563
2564 exiftool -tagsFromFile a.jpg -XMP:All= -ThumbnailImage= -m b.jpg
2565 Copy all meta information from "a.jpg" to "b.jpg", deleting all
2566 XMP information and the thumbnail image from the destination.
2567
2568 exiftool -TagsFromFile src.jpg -title -author=Phil dst.jpg
2569 Copy title from one image to another and set a new author name.
2570
2571 exiftool -TagsFromFile a.jpg -ISO -TagsFromFile b.jpg -comment dst.jpg
2572 Copy ISO from one image and Comment from another image to a
2573 destination image.
2574
2575 exiftool -tagsfromfile src.jpg -exif:all --subifd:all dst.jpg
2576 Copy only the EXIF information from one image to another,
2577 excluding SubIFD tags.
2578
2579 exiftool '-FileModifyDate<DateTimeOriginal' dir
2580 Use the original date from the meta information to set the same
2581 file's filesystem modification date for all images in a directory.
2582 (Note that "-TagsFromFile @" is assumed if no other -TagsFromFile
2583 is specified when redirecting information as in this example.)
2584
2585 exiftool -TagsFromFile src.jpg '-xmp:all<all' dst.jpg
2586 Copy all possible information from "src.jpg" and write in XMP
2587 format to "dst.jpg".
2588
2589 exiftool '-Description<${FileName;s/\.[^.]*$//}' dir
2590 Set the image Description from the file name after removing the
2591 extension. This example uses the "Advanced formatting feature" to
2592 perform a substitution operation to remove the last dot and
2593 subsequent characters from the file name.
2594
2595 exiftool -@ iptc2xmp.args -iptc:all= a.jpg
2596 Translate IPTC information to XMP with appropriate tag name
2597 conversions, and delete the original IPTC information from an
2598 image. This example uses iptc2xmp.args, which is a file included
2599 with the ExifTool distribution that contains the required
2600 arguments to convert IPTC information to XMP format. Also
2601 included with the distribution are xmp2iptc.args (which performs
2602 the inverse conversion) and a few more .args files for other
2603 conversions between EXIF, IPTC and XMP.
2604
2605 exiftool -tagsfromfile %d%f.CR2 -r -ext JPG dir
2606 Recursively rewrite all "JPG" images in "dir" with information
2607 copied from the corresponding "CR2" images in the same
2608 directories.
2609
2610 exiftool '-keywords+<make' image.jpg
2611 Add camera make to list of keywords.
2612
2613 exiftool '-comment<ISO=$exif:iso Exposure=${shutterspeed}' dir
2614 Set the Comment tag of all images in "dir" from the values of the
2615 EXIF:ISO and ShutterSpeed tags. The resulting comment will be in
2616 the form "ISO=100 Exposure=1/60".
2617
2618 exiftool -TagsFromFile src.jpg -icc_profile dst.jpg
2619 Copy ICC_Profile from one image to another.
2620
2621 exiftool -TagsFromFile src.jpg -all:all dst.mie
2622 Copy all meta information in its original form from a JPEG image
2623 to a MIE file. The MIE file will be created if it doesn't exist.
2624 This technique can be used to store the metadata of an image so it
2625 can be inserted back into the image (with the inverse command)
2626 later in a workflow.
2627
2628 exiftool -o dst.mie -all:all src.jpg
2629 This command performs exactly the same task as the command above,
2630 except that the -o option will not write to an output file that
2631 already exists.
2632
2633 exiftool -b -jpgfromraw -w %d%f_%ue.jpg -execute -b -previewimage -w
2634 %d%f_%ue.jpg -execute -tagsfromfile @ -srcfile %d%f_%ue.jpg
2635 -overwrite_original -common_args --ext jpg DIR
2636 [Advanced] Extract JpgFromRaw or PreviewImage from all but JPG
2637 files in DIR, saving them with file names like "image_EXT.jpg",
2638 then add all meta information from the original files to the
2639 extracted images. Here, the command line is broken into three
2640 sections (separated by -execute options), and each is executed as
2641 if it were a separate command. The -common_args option causes the
2642 "--ext jpg DIR" arguments to be applied to all three commands, and
2643 the -srcfile option allows the extracted JPG image to be the
2644 source file for the third command (whereas the RAW files are the
2645 source files for the other two commands).
2646
2648 By writing the "FileName" and "Directory" tags, files are renamed
2649 and/or moved to new directories. This can be particularly useful and
2650 powerful for organizing files by date when combined with the -d option.
2651 New directories are created as necessary, but existing files will not
2652 be overwritten. The format codes %d, %f and %e may be used in the new
2653 file name to represent the directory, name and extension of the
2654 original file, and %c may be used to add a copy number if the file
2655 already exists (see the -w option for details). Note that if used
2656 within a date format string, an extra '%' must be added to pass these
2657 codes through the date/time parser. (And further note that in a
2658 Windows batch file, all '%' characters must also be escaped, so in this
2659 extreme case '%%%%f' is necessary to pass a simple '%f' through the two
2660 levels of parsing.) See <https://exiftool.org/filename.html> for
2661 additional documentation and examples.
2662
2663 exiftool -filename=new.jpg dir/old.jpg
2664 Rename "old.jpg" to "new.jpg" in directory "dir".
2665
2666 exiftool -directory=%e dir
2667 Move all files from directory "dir" into directories named by the
2668 original file extensions.
2669
2670 exiftool '-Directory<DateTimeOriginal' -d %Y/%m/%d dir
2671 Move all files in "dir" into a directory hierarchy based on year,
2672 month and day of "DateTimeOriginal". eg) This command would move
2673 the file "dir/image.jpg" with a "DateTimeOriginal" of "2005:10:12
2674 16:05:56" to "2005/10/12/image.jpg".
2675
2676 exiftool -o . '-Directory<DateTimeOriginal' -d %Y/%m/%d dir
2677 Same effect as above except files are copied instead of moved.
2678
2679 exiftool '-filename<%f_${model;}.%e' dir
2680 Rename all files in "dir" by adding the camera model name to the
2681 file name. The semicolon after the tag name inside the braces
2682 causes characters which are invalid in Windows file names to be
2683 deleted from the tag value (see the "Advanced formatting feature"
2684 for an explanation).
2685
2686 exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir
2687 Rename all images in "dir" according to the "CreateDate" date and
2688 time, adding a copy number with leading '-' if the file already
2689 exists ("%-c"), and preserving the original file extension (%e).
2690 Note the extra '%' necessary to escape the filename codes (%c and
2691 %e) in the date format string.
2692
2693 exiftool -r '-FileName<CreateDate' -d %Y-%m-%d/%H%M_%%f.%%e dir
2694 Both the directory and the filename may be changed together via
2695 the "FileName" tag if the new "FileName" contains a '/'. The
2696 example above recursively renames all images in a directory by
2697 adding a "CreateDate" timestamp to the start of the filename, then
2698 moves them into new directories named by date.
2699
2700 exiftool '-FileName<${CreateDate}_$filenumber.jpg' -d %Y%m%d -ext jpg .
2701 Set the filename of all JPG images in the current directory from
2702 the CreateDate and FileNumber tags, in the form
2703 "20060507_118-1861.jpg".
2704
2706 ExifTool implements geotagging from GPS log files via 3 special tags:
2707 Geotag (which for convenience is also implemented as an exiftool
2708 option), Geosync and Geotime. The examples below highlight some
2709 geotagging features. See <https://exiftool.org/geotag.html> for
2710 additional documentation. (Note that geotagging from known GPS
2711 coordinates is done by writing the GPS tags directly rather than using
2712 the -geotag option.)
2713
2714 exiftool -geotag track.log a.jpg
2715 Geotag an image ("a.jpg") from position information in a GPS track
2716 log ("track.log"). Since the "Geotime" tag is not specified, the
2717 value of DateTimeOriginal is used for geotagging. Local system
2718 time is assumed unless DateTimeOriginal contains a timezone.
2719
2720 exiftool -geotag t.log -geotime='2009:04:02 13:41:12-05:00' a.jpg
2721 Geotag an image with the GPS position for a specific time.
2722
2723 exiftool -geotag log.gpx '-xmp:geotime<createdate' dir
2724 Geotag all images in directory "dir" with XMP tags instead of EXIF
2725 tags, based on the image CreateDate.
2726
2727 exiftool -geotag a.log -geosync=-20 dir
2728 Geotag images in directory "dir", accounting for image timestamps
2729 which were 20 seconds ahead of GPS.
2730
2731 exiftool -geotag a.log -geosync=1.jpg -geosync=2.jpg dir
2732 Geotag images using time synchronization from two previously
2733 geotagged images (1.jpg and 2.jpg), synchronizing the image and
2734 GPS times using a linear time drift correction.
2735
2736 exiftool -geotag a.log '-geotime<${createdate}+01:00' dir
2737 Geotag images in "dir" using CreateDate with the specified
2738 timezone. If CreateDate already contained a timezone, then the
2739 timezone specified on the command line is ignored.
2740
2741 exiftool -geotag= a.jpg
2742 Delete GPS tags which may have been added by the geotag feature.
2743 Note that this does not remove all GPS tags -- to do this instead
2744 use "-gps:all=".
2745
2746 exiftool -xmp:geotag= a.jpg
2747 Delete XMP GPS tags which were added by the geotag feature.
2748
2749 exiftool -xmp:geotag=track.log a.jpg
2750 Geotag an image with XMP tags, using the time from
2751 DateTimeOriginal.
2752
2753 exiftool -geotag a.log -geotag b.log -r dir
2754 Combine multiple track logs and geotag an entire directory tree of
2755 images.
2756
2757 exiftool -geotag 'tracks/*.log' -r dir
2758 Read all track logs from the "tracks" directory.
2759
2760 exiftool -p gpx.fmt dir > out.gpx
2761 Generate a GPX track log from all images in directory "dir". This
2762 example uses the "gpx.fmt" file included in the full ExifTool
2763 distribution package and assumes that the images in "dir" have all
2764 been previously geotagged.
2765
2767 cat a.jpg | exiftool -
2768 Extract information from stdin.
2769
2770 exiftool image.jpg -thumbnailimage -b | exiftool -
2771 Extract information from an embedded thumbnail image.
2772
2773 cat a.jpg | exiftool -iptc:keywords+=fantastic - > b.jpg
2774 Add an IPTC keyword in a pipeline, saving output to a new file.
2775
2776 curl -s http://a.domain.com/bigfile.jpg | exiftool -fast -
2777 Extract information from an image over the internet using the cURL
2778 utility. The -fast option prevents exiftool from scanning for
2779 trailer information, so only the meta information header is
2780 transferred.
2781
2782 exiftool a.jpg -thumbnailimage -b | exiftool -comment=wow - | exiftool
2783 a.jpg -thumbnailimage'<=-'
2784 Add a comment to an embedded thumbnail image. (Why anyone would
2785 want to do this I don't know, but I've included this as an example
2786 to illustrate the flexibility of ExifTool.)
2787
2789 Interrupting exiftool with a CTRL-C or SIGINT will not result in
2790 partially written files or temporary files remaining on the hard disk.
2791 The exiftool application traps SIGINT and defers it until the end of
2792 critical processes if necessary, then does a proper cleanup before
2793 exiting.
2794
2796 The exiftool application exits with a status of 0 on success, or 1 if
2797 an error occurred, or 2 if all files failed the -if condition (for any
2798 of the commands if -execute was used).
2799
2801 Copyright 2003-2023, Phil Harvey
2802
2803 This is free software; you can redistribute it and/or modify it under
2804 the same terms as Perl itself.
2805
2807 Image::ExifTool(3pm), Image::ExifTool::TagNames(3pm),
2808 Image::ExifTool::Shortcuts(3pm), Image::ExifTool::Shift.pl
2809
2810
2811
2812perl v5.36.1 2023-11-21 EXIFTOOL(1)