exiftool_vendored 11.96.0 → 12.08.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +172 -2
  3. data/bin/MANIFEST +8 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +43 -42
  7. data/bin/exiftool +148 -69
  8. data/bin/lib/Image/ExifTool.pm +159 -110
  9. data/bin/lib/Image/ExifTool.pod +114 -87
  10. data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  11. data/bin/lib/Image/ExifTool/APE.pm +2 -2
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -7
  13. data/bin/lib/Image/ExifTool/Canon.pm +37 -11
  14. data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
  15. data/bin/lib/Image/ExifTool/DPX.pm +56 -2
  16. data/bin/lib/Image/ExifTool/DarwinCore.pm +20 -3
  17. data/bin/lib/Image/ExifTool/EXE.pm +8 -5
  18. data/bin/lib/Image/ExifTool/Exif.pm +15 -6
  19. data/bin/lib/Image/ExifTool/Font.pm +9 -2
  20. data/bin/lib/Image/ExifTool/GIF.pm +5 -0
  21. data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
  22. data/bin/lib/Image/ExifTool/Geotag.pm +2 -2
  23. data/bin/lib/Image/ExifTool/GoPro.pm +56 -22
  24. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  25. data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -2
  26. data/bin/lib/Image/ExifTool/ID3.pm +91 -12
  27. data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
  28. data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
  29. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  30. data/bin/lib/Image/ExifTool/M2TS.pm +44 -24
  31. data/bin/lib/Image/ExifTool/MacOS.pm +152 -38
  32. data/bin/lib/Image/ExifTool/Minolta.pm +6 -2
  33. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
  34. data/bin/lib/Image/ExifTool/Nikon.pm +162 -18
  35. data/bin/lib/Image/ExifTool/Olympus.pm +39 -17
  36. data/bin/lib/Image/ExifTool/PNG.pm +14 -3
  37. data/bin/lib/Image/ExifTool/PPM.pm +5 -5
  38. data/bin/lib/Image/ExifTool/Panasonic.pm +148 -14
  39. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +33 -0
  40. data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
  41. data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
  42. data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
  43. data/bin/lib/Image/ExifTool/QuickTime.pm +269 -29
  44. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +463 -75
  45. data/bin/lib/Image/ExifTool/README +21 -20
  46. data/bin/lib/Image/ExifTool/RIFF.pm +15 -3
  47. data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
  48. data/bin/lib/Image/ExifTool/RTF.pm +12 -7
  49. data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
  50. data/bin/lib/Image/ExifTool/Shift.pl +1 -0
  51. data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
  52. data/bin/lib/Image/ExifTool/Sony.pm +425 -34
  53. data/bin/lib/Image/ExifTool/TagLookup.pm +1961 -1874
  54. data/bin/lib/Image/ExifTool/TagNames.pod +394 -86
  55. data/bin/lib/Image/ExifTool/Validate.pm +4 -4
  56. data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
  57. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +23 -15
  58. data/bin/lib/Image/ExifTool/Writer.pl +44 -21
  59. data/bin/lib/Image/ExifTool/XMP.pm +42 -5
  60. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  61. data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
  62. data/bin/perl-Image-ExifTool.spec +42 -41
  63. data/lib/exiftool_vendored/version.rb +1 -1
  64. metadata +8 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5a75cdf33b026b2b63463fbcb090685d29bbcbc336814074ab715d6c6218bea7
4
- data.tar.gz: 0c75f45324460338a833b814fa05a6a9b6c9737380b5e0d47e0dfa00d9edfcbe
3
+ metadata.gz: de420a08613ea979229474f4e30c7fb955722a925df577be54f7ecd1d699a0cc
4
+ data.tar.gz: cf0aceff1910dfbfbdf48f45fb128d288c98600eda74278552e7b8c46929c112
5
5
  SHA512:
6
- metadata.gz: c3e543aba5a56b22240e4f76d84665bf0c0912410062e70b503f157c87023c8db7f1386ea50ece249a38c8e903056f9bb6bfa45a17d266834d940cf485010350
7
- data.tar.gz: 810e53957fbe2aecb16a80a9ae9364c8160bcbe68050bc0432399cefb92da1e3ad3b45ffd5919877614809ec1e007a16de539f7bb4c77171cc3cb3a919548e8f
6
+ metadata.gz: fac07325ff3360e702016c0e2c131f9a388c471ee3d04850516c6afb100416a93da6caaf35388e1cfc3d6763a357492294defeb7aff2b11ee5d00d6c8a980a31
7
+ data.tar.gz: 85f7e37ceeb7571857c83de445151f67c54e55fb2293c68ea3e02b556555f8b982825b9bce2ed8ec5c0e8a4acc09318a562af7dbeed115b180fe610089d86d86
@@ -4,9 +4,178 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: https://exiftool.org/rss.xml
6
6
 
7
- Note: The most recent production release is Version 11.85. (Other versions are
7
+ Note: The most recent production release is Version 12.00. (Other versions are
8
8
  considered development releases, and are not uploaded to CPAN.)
9
9
 
10
+ Oct. 15, 2020 - Version 12.08
11
+
12
+ - Added read support for MacOS "._" sidecar files
13
+ - Added a new Sony LensType (thanks Jos Roost)
14
+ - Recognize Mac OS X xattr files
15
+ - Extract ThumbnailImage from MP4 videos of more dashcam models
16
+ - Improved decoding of a number of Sony tags (thanks Jos Roost)
17
+ - Fixed problem where the special -if EndDir() function didn't work properly
18
+ for directories after the one in which it was initially called
19
+ - Patched to support new IGC date format when geotagging
20
+ - Patched to read DLL files with an invalid size in the header
21
+
22
+ Oct. 2, 2020 - Version 12.07
23
+
24
+ - Added support for GoPro .360 videos
25
+ - Added some new Canon RF and Nikkor Z lenses (thanks LibRaw)
26
+ - Added some new Sony LensType and CreativeStyle values and decode some
27
+ ICLE-7C tags (thanks Jos Roost)
28
+ - Added a number of new Olympus SceneMode values (thanks Herb)
29
+ - Added a new Nikon LensID
30
+ - Decode more timed metadata from Insta360 videos (thanks Thomas Allen)
31
+ - Decode timed GPS from videos of more Garmin dashcam models
32
+ - Decode a new GoPro video tag
33
+ - Reformat time-only EventTime values when writing and prevent arbitrary
34
+ strings from being written
35
+ - Patched to accept backslashes in SourceFile entries for -csv option
36
+
37
+ Sept. 11, 2020 - Version 12.06
38
+
39
+ - Added read support for Lyrics3 metadata (and fixed problem where APE
40
+ metadata may be ignored if Lyrics3 exists)
41
+ - Added a new Panasonic VideoBurstMode value (thanks Klaus Homeister)
42
+ - Added a new Olympus MultipleExposureMode value
43
+ - Added a new Nikon LensID
44
+ - Added back conversions for XMP-dwc EventTime that were removed in 12.04 with
45
+ a patch to allow time-only values
46
+ - Decode GIF AspectRatio
47
+ - Decode Olympus FocusBracketStepSize (thanks Karsten)
48
+ - Extract PNG iDOT chunk in Binary format with the name AppleDataOffsets
49
+ - Process PNG images which do not start with mandatory IHDR chunk
50
+
51
+ Aug. 24, 2020 - Version 12.05
52
+
53
+ - Added a new Panasonic SelfTimer value (thanks Herb)
54
+ - Decode a few more DPX tags (thanks Harry Mallon)
55
+ - Extract AIFF APPL tag as ApplicationData
56
+ - Fixed bug writing QuickTime ItemList 'gnre' Genre values
57
+ - Fixed an incorrect value for Panasonic VideoBurstResolution (thanks Herb)
58
+ - Fixed problem when applying a time shift to some invalid makernote date/time
59
+ values
60
+
61
+ Aug. 10, 2020 - Version 12.04
62
+
63
+ - Added read support for Zeiss ZISRAW CZI files
64
+ - Added some new values for a couple of Olympus tags (thanks Sebastian)
65
+ - Decode a number of new tags for the Sony ILCE-7SM3 (thanks Jos Roost)
66
+ - Removed formatting restrictions on XMP-dwc:EventTime to allow a time-only
67
+ value to be written
68
+ - Moved new QuckTime ItemList tags added in version 12.02 to the proper group
69
+ (they were incorrectly added to the Keys group)
70
+ - Improved QuickTime -v3 output to show default language codes
71
+ - Patched -lang option to work for the values of somet tags with coded
72
+ translations
73
+ - Patched the format of a number of QuickTime tags when writing for improved
74
+ compatibility with iTunes and AtomicParsley
75
+ - Patched to write a default QuickTime language code of 0x0000 (null) instead
76
+ of 0x55c4 ('und')
77
+
78
+ July 29, 2020 - Version 12.03
79
+
80
+ - Added family 7 group names to allow tag ID's to be specified when reading
81
+ and writing
82
+ - Fixed a couple of typos in tag values (thanks Herb)
83
+ - API Changes:
84
+ - Added HexTagIDs option
85
+ - Enhanced GetNewValue() to allow family 7 groups names to be used
86
+ - Internal Changes:
87
+ - Changed Composite tag ID's to use "-" instead of "::" as a separator
88
+
89
+ July 27, 2020 - Version 12.02
90
+
91
+ - Added support for a number of new QuickTime ItemList tags
92
+ - Added support for writing XMP-xmp:RatingPercent
93
+ - Added a new Sony LensType (thanks Jos Roost and LibRaw)
94
+ - Added a new Pentax LensType (thanks James O'Neill)
95
+ - Decode barcodes from Ricoh APP5 RMETA segment
96
+ - Decode a few new QuickTime tags written by Ricoh and Garmin cameras
97
+ - Decode timed GPS from Sony A7R IV MP4 videos
98
+ - Decode timed GPS from 70mai dashcam videos
99
+ - Decode a few new Panasonic tags (thanks Klaus Homeister)
100
+ - Decode altitude and more accurate latitude/longitude from Transcend Driver
101
+ Pro 230 MP4 videos
102
+ - Improved decoding of some Canon EOS 1DXmkIII custom functions
103
+ - Allow integer QuickTime TrackNumber and DiskNumber values
104
+ - Relax validity check of QuickTime:ContentCreateDate when writing with -n
105
+ - Removed "Com" from the start of some unknown ItemList tag names
106
+ - Patched CanonCustom decoding for bug in Canon EOS-1DX firmware
107
+ - Changed QuickTime CleanAperture tags decode as signed rationals
108
+
109
+ June 24, 2020 - Version 12.01
110
+
111
+ - Added a new NEFCompression value (thanks Warren Hatch)
112
+ - Added a new Sony LensType (thanks Jos Roost)
113
+ - Decode timed GPS from Rove Stealth 4K dashcam videos
114
+ - Fixed bug which would corrupt TIFF images with 16-bit image data offsets
115
+ when writing (these are very rare)
116
+
117
+ June 11, 2020 - Version 12.00 (production release)
118
+
119
+ - Added two new Olympus LensTypes (thanks Don Komarechka for one)
120
+ - Added two new Sony LensType values (thanks Jos Roost)
121
+ - Added a few new Nikon LensID's (thanks Mathieu Carbou)
122
+ - Added support for the Sony ZV-1 (thanks Jos Roost)
123
+ - Added a new CanonModelID (thanks Jos Roost)
124
+ - Added missing MimeType values for HEICS and HEIFS files
125
+ - Added definitions for a number of new XMP-crs tags
126
+ - Recognize WOFF and WOFF2 font files
127
+ - Decode streaming GPS from Roadhawk, EEEkit and 360Fly MP4 videos
128
+ - Decode a number of new tags for the Nikon D6 (thanks Warren Hatch)
129
+ - Decode a couple more AF tags for the D500/D850
130
+ - Decode a number of new Panasonic tags
131
+ - Improved Composite LensID logic (thanks Matt Stancliff)
132
+ - Enhanced -v option to state when a directory has 0 entries
133
+ - Removed a couple of incorrect Validate warnings for bilevel TIFF images
134
+ - Drop ContrastCurve tag when copying from NEF to JPEG
135
+ - Changed -csv output to add "Unknown" group name to column headings for
136
+ missing tags when -f and -G options are used
137
+ - Patched to support new XMP LensID format for Nikon cameras as written by
138
+ Apple Photos (thanks Mattsta)
139
+ - Fixed problem extracting metadata from Sigma DP2 Quattro X3F files
140
+ - Fixed End() and EndDir() functions so they work when writing and when the -v
141
+ option is used
142
+ - Fixed problem recognizing some PGM files
143
+ - Fixed bug in offsets for some Photoshop information in -v3 output
144
+ - Fixed problem writing a list containing empty elements inside an XMP
145
+ structure
146
+ - API Changes:
147
+ - Added NoMultiExif option
148
+ - Changed FilterW option to not write tag if $_ is set to undef
149
+
150
+ May 11, 2020 - Version 11.99
151
+
152
+ - Added a new Nikon LensID (thanks Mykyta Kozlov)
153
+ - Added a new Canon LensType
154
+ - Added a newn PentaxModelID
155
+ - Decode a few new QuickTime tags
156
+ - Decode new ID3 Grouping tag
157
+ - Decode a few more MinoltaRaw tags (thanks LibRaw)
158
+ - Fixed runtime warning which could occur when reading corrupted RTF files
159
+ - Fixed another potential pitfall in M2TS Duration calculation
160
+ - Fixed problem extracting some unknown QuickTime:Keys tags
161
+ - Fixed problem decoding Nikon D850 orientation tags
162
+ - Fixed bug where TIFF image data may not be padded to an even number of bytes
163
+
164
+ May 1, 2020 - Version 11.98
165
+
166
+ - Added a new Nikon LensID (thanks Warren Hatch)
167
+ - Added a new Sony LensType (thanks LibRaw)
168
+ - Added a new Canon LensType
169
+ - Patched to extract EXIF with an "Exif\0\0" header from WebP images
170
+ - Enhanced -efile option and added to the documentation
171
+ - Minor tweak to -htmlDump output (disallow locking of empty selection)
172
+ - Fixed problem determining Duration of some M2TS videos
173
+
174
+ Apr. 27, 2020 - Version 11.97
175
+
176
+ - Added experimental -efile option (undocumented)
177
+ - Decode NMEA GGA sentence from streaming GPS of some dashcam videos
178
+
10
179
  Apr. 24, 2020 - Version 11.96
11
180
 
12
181
  - Decode streaming GPS from Lucas LK-7900 Ace AVI videos
@@ -15,7 +184,8 @@ Apr. 24, 2020 - Version 11.96
15
184
 
16
185
  Apr. 23, 2020 - Version 11.95
17
186
 
18
- - Added Exit() and ExitDir() functions for use in -if conditions
187
+ - Added Exit() and ExitDir() functions for use in -if conditions (NOTE: these
188
+ function names changed to End() and EndDir() in ExifTool 11.96)
19
189
  - Enhanced -geotag feature to support a more flexible input CSV file format
20
190
  - Enhanced -if and API Filter options to allow access to ExifTool object via
21
191
  $self
@@ -169,6 +169,7 @@ html/TagNames/Vorbis.html
169
169
  html/TagNames/WTV.html
170
170
  html/TagNames/XMP.html
171
171
  html/TagNames/ZIP.html
172
+ html/TagNames/ZISRAW.html
172
173
  html/TagNames/iWork.html
173
174
  html/TagNames/index.html
174
175
  html/TagNames/style.css
@@ -410,6 +411,7 @@ lib/Image/ExifTool/XMP.pm
410
411
  lib/Image/ExifTool/XMP2.pl
411
412
  lib/Image/ExifTool/XMPStruct.pl
412
413
  lib/Image/ExifTool/ZIP.pm
414
+ lib/Image/ExifTool/ZISRAW.pm
413
415
  lib/Image/ExifTool/iWork.pm
414
416
  perl-Image-ExifTool.spec
415
417
  t/AFCP.t
@@ -650,6 +652,8 @@ t/MWG_6.out
650
652
  t/MWG_7.out
651
653
  t/MXF.t
652
654
  t/MXF_2.out
655
+ t/MacOS.t
656
+ t/MacOS_2.out
653
657
  t/Matroska.t
654
658
  t/Matroska_2.out
655
659
  t/Minolta.t
@@ -915,6 +919,8 @@ t/ZIP_4.out
915
919
  t/ZIP_5.out
916
920
  t/ZIP_6.out
917
921
  t/ZIP_7.out
922
+ t/ZISRAW.t
923
+ t/ZISRAW_2.out
918
924
  t/images/AFCP.jpg
919
925
  t/images/AIFF.aif
920
926
  t/images/APE.ape
@@ -1003,6 +1009,7 @@ t/images/MOI.moi
1003
1009
  t/images/MP3.mp3
1004
1010
  t/images/MWG.jpg
1005
1011
  t/images/MXF.mxf
1012
+ t/images/MacOS.macos
1006
1013
  t/images/Matroska.mkv
1007
1014
  t/images/Minolta.jpg
1008
1015
  t/images/Minolta.mrw
@@ -1089,4 +1096,5 @@ t/images/XMP8.xmp
1089
1096
  t/images/XMP9.xmp
1090
1097
  t/images/ZIP.gz
1091
1098
  t/images/ZIP.zip
1099
+ t/images/ZISRAW.czi
1092
1100
  t/images/iWork.numbers
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "11.96"
50
+ "version" : "12.08"
51
51
  }
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 11.96
31
+ version: 12.08
data/bin/README CHANGED
@@ -14,46 +14,47 @@ supported by ExifTool (r = read, w = write, c = create):
14
14
 
15
15
  File Types
16
16
  ------------+-------------+-------------+-------------+------------
17
- 3FR r | DR4 r/w/c | ITC r | ODP r | RIFF r
18
- 3G2 r/w | DSS r | J2C r | ODS r | RSRC r
19
- 3GP r/w | DV r | JNG r/w | ODT r | RTF r
20
- A r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
21
- AA r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
22
- AAE r | DYLIB r | JSON r | OGV r | RWZ r
23
- AAX r/w | EIP r | K25 r | OPUS r | RM r
24
- ACR r | EPS r/w | KDC r | ORF r/w | SEQ r
25
- AFM r | EPUB r | KEY r | OTF r | SKETCH r
26
- AI r/w | ERF r/w | LA r | PAC r | SO r
27
- AIFF r | EXE r | LFP r | PAGES r | SR2 r/w
28
- APE r | EXIF r/w/c | LNK r | PBM r/w | SRF r
29
- ARQ r/w | EXR r | LRV r/w | PCD r | SRW r/w
30
- ARW r/w | EXV r/w/c | M2TS r | PCX r | SVG r
31
- ASF r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
32
- AVI r | FFF r/w | MAX r | PDF r/w | THM r/w
33
- AVIF r/w | FITS r | MEF r/w | PEF r/w | TIFF r/w
34
- AZW r | FLA r | MIE r/w/c | PFA r | TORRENT r
35
- BMP r | FLAC r | MIFF r | PFB r | TTC r
36
- BPG r | FLIF r/w | MKA r | PFM r | TTF r
37
- BTF r | FLV r | MKS r | PGF r | TXT r
38
- CHM r | FPF r | MKV r | PGM r/w | VCF r
39
- COS r | FPX r | MNG r/w | PLIST r | VRD r/w/c
40
- CR2 r/w | GIF r/w | MOBI r | PICT r | VSD r
41
- CR3 r/w | GPR r/w | MODD r | PMP r | WAV r
42
- CRM r/w | GZ r | MOI r | PNG r/w | WDP r/w
43
- CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
44
- CS1 r/w | HDR r | MOV r/w | PPT r | WEBM r
45
- CSV r | HEIC r/w | MP3 r | PPTX r | WMA r
46
- DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
47
- DCP r/w | HTML r | MPC r | PSB r/w | WTV r
48
- DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
49
- DFONT r | ICS r | MPO r/w | PSP r | X3F r/w
50
- DIVX r | IDML r | MQV r/w | QTIF r/w | XCF r
51
- DJVU r | IIQ r/w | MRW r/w | R3D r | XLS r
52
- DLL r | IND r/w | MXF r | RA r | XLSX r
53
- DNG r/w | INSP r/w | NEF r/w | RAF r/w | XMP r/w/c
54
- DOC r | INSV r | NRW r/w | RAM r | ZIP r
55
- DOCX r | INX r | NUMBERS r | RAR r |
56
- DPX r | ISO r | O r | RAW r/w |
17
+ 360 r/w | DPX r | ITC r | ODP r | RSRC r
18
+ 3FR r | DR4 r/w/c | J2C r | ODS r | RTF r
19
+ 3G2 r/w | DSS r | JNG r/w | ODT r | RW2 r/w
20
+ 3GP r/w | DV r | JP2 r/w | OFR r | RWL r/w
21
+ A r | DVB r/w | JPEG r/w | OGG r | RWZ r
22
+ AA r | DVR-MS r | JSON r | OGV r | RM r
23
+ AAE r | DYLIB r | K25 r | OPUS r | SEQ r
24
+ AAX r/w | EIP r | KDC r | ORF r/w | SKETCH r
25
+ ACR r | EPS r/w | KEY r | OTF r | SO r
26
+ AFM r | EPUB r | LA r | PAC r | SR2 r/w
27
+ AI r/w | ERF r/w | LFP r | PAGES r | SRF r
28
+ AIFF r | EXE r | LNK r | PBM r/w | SRW r/w
29
+ APE r | EXIF r/w/c | LRV r/w | PCD r | SVG r
30
+ ARQ r/w | EXR r | M2TS r | PCX r | SWF r
31
+ ARW r/w | EXV r/w/c | M4A/V r/w | PDB r | THM r/w
32
+ ASF r | F4A/V r/w | MACOS r | PDF r/w | TIFF r/w
33
+ AVI r | FFF r/w | MAX r | PEF r/w | TORRENT r
34
+ AVIF r/w | FITS r | MEF r/w | PFA r | TTC r
35
+ AZW r | FLA r | MIE r/w/c | PFB r | TTF r
36
+ BMP r | FLAC r | MIFF r | PFM r | TXT r
37
+ BPG r | FLIF r/w | MKA r | PGF r | VCF r
38
+ BTF r | FLV r | MKS r | PGM r/w | VRD r/w/c
39
+ CHM r | FPF r | MKV r | PLIST r | VSD r
40
+ COS r | FPX r | MNG r/w | PICT r | WAV r
41
+ CR2 r/w | GIF r/w | MOBI r | PMP r | WDP r/w
42
+ CR3 r/w | GPR r/w | MODD r | PNG r/w | WEBP r
43
+ CRM r/w | GZ r | MOI r | PPM r/w | WEBM r
44
+ CRW r/w | HDP r/w | MOS r/w | PPT r | WMA r
45
+ CS1 r/w | HDR r | MOV r/w | PPTX r | WMV r
46
+ CSV r | HEIC r/w | MP3 r | PS r/w | WTV r
47
+ CZI r | HEIF r/w | MP4 r/w | PSB r/w | WV r
48
+ DCM r | HTML r | MPC r | PSD r/w | X3F r/w
49
+ DCP r/w | ICC r/w/c | MPG r | PSP r | XCF r
50
+ DCR r | ICS r | MPO r/w | QTIF r/w | XLS r
51
+ DFONT r | IDML r | MQV r/w | R3D r | XLSX r
52
+ DIVX r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
53
+ DJVU r | IND r/w | MXF r | RAF r/w | ZIP r
54
+ DLL r | INSP r/w | NEF r/w | RAM r |
55
+ DNG r/w | INSV r | NRW r/w | RAR r |
56
+ DOC r | INX r | NUMBERS r | RAW r/w |
57
+ DOCX r | ISO r | O r | RIFF r |
57
58
 
58
59
  Meta Information
59
60
  ----------------------+----------------------+---------------------
@@ -105,8 +106,8 @@ your home directory, then you would type the following commands in a
105
106
  terminal window to extract and run ExifTool:
106
107
 
107
108
  cd ~/Desktop
108
- gzip -dc Image-ExifTool-11.96.tar.gz | tar -xf -
109
- cd Image-ExifTool-11.96
109
+ gzip -dc Image-ExifTool-12.08.tar.gz | tar -xf -
110
+ cd Image-ExifTool-12.08
110
111
  ./exiftool t/images/ExifTool.jpg
111
112
 
112
113
  Note: These commands extract meta information from one of the test images.
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '11.96';
13
+ my $version = '12.08';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -90,6 +90,7 @@ my @csvFiles; # list of files when reading with CSV option (in ExifTool Ch
90
90
  my @csvTags; # order of tags for first file with CSV option (lower case)
91
91
  my @delFiles; # list of files to delete
92
92
  my @dynamicFiles; # list of -tagsFromFile files with dynamic names and -TAG<=FMT pairs
93
+ my @efile; # files for writing list of error/fail/same file names
93
94
  my @exclude; # list of excluded tags
94
95
  my (@echo3, @echo4);# stdout and stderr echo after processing is complete
95
96
  my @files; # list of files and directories to scan
@@ -140,6 +141,7 @@ my $deleteOrig; # 0=restore original files, 1=delete originals, 2=delete w/o
140
141
  my $disableOutput; # flag to disable normal output
141
142
  my $doSetFileName; # flag set if FileName may be written
142
143
  my $doUnzip; # flag to extract info from .gz and .bz2 files
144
+ my ($end,$endDir); # flags to end processing
143
145
  my $escapeC; # C-style escape
144
146
  my $escapeHTML; # flag to escape printed values for html
145
147
  my $evalWarning; # warning from eval
@@ -240,6 +242,8 @@ my %optArgs = (
240
242
  '-d' => 1, '-dateformat' => 1,
241
243
  '-D' => 0, # necessary to avoid matching lower-case equivalent
242
244
  '-echo' => 1, '-echo1' => 1, '-echo2' => 1, '-echo3' => 1, '-echo4' => 1,
245
+ '-efile' => 1, '-efile1' => 1, '-efile2' => 1, '-efile3' => 1, '-efile4' => 1,
246
+ '-efile!' => 1, '-efile1!' => 1, '-efile2!' => 1, '-efile3!' => 1, '-efile4!' => 1,
243
247
  '-ext' => 1, '--ext' => 1, '-ext+' => 1, '--ext+' => 1,
244
248
  '-extension' => 1, '--extension' => 1, '-extension+' => 1, '--extension+' => 1,
245
249
  '-fileorder' => 1,
@@ -290,8 +294,8 @@ my %altRecommends = (
290
294
  my %unescapeChar = ( 't'=>"\t", 'n'=>"\n", 'r'=>"\r" );
291
295
 
292
296
  # special subroutines used in -if condition
293
- sub Image::ExifTool::EndDir() { return $$mt{EndDir} = 1 }
294
- sub Image::ExifTool::End() { return $$mt{End} = 1 }
297
+ sub Image::ExifTool::EndDir() { return $endDir = 1 }
298
+ sub Image::ExifTool::End() { return $end = 1 }
295
299
 
296
300
  # exit routine
297
301
  sub Exit {
@@ -406,6 +410,7 @@ undef @delFiles;
406
410
  undef @dynamicFiles;
407
411
  undef @echo3;
408
412
  undef @echo4;
413
+ undef @efile;
409
414
  undef @exclude;
410
415
  undef @files;
411
416
  undef @newValues;
@@ -439,6 +444,8 @@ undef $deleteOrig;
439
444
  undef $disableOutput;
440
445
  undef $doSetFileName;
441
446
  undef $doUnzip;
447
+ undef $end;
448
+ undef $endDir;
442
449
  undef $escapeHTML;
443
450
  undef $escapeC;
444
451
  undef $evalWarning;
@@ -868,6 +875,15 @@ for (;;) {
868
875
  $mt->Options(Duplicates => 1);
869
876
  next;
870
877
  }
878
+ if (/^efile(\d)?(!)?$/i) {
879
+ my $arg = shift;
880
+ defined $arg or Error("Expecting file name for -$_ option\n"), $badCmd=1, next;
881
+ $efile[0] = $arg if not $1 or $1 & 0x01;
882
+ $efile[1] = $arg if $1 and $1 & 0x02;
883
+ $efile[2] = $arg if $1 and $1 & 0x04;
884
+ unlink $arg if $2;
885
+ next;
886
+ }
871
887
  # (-execute handled at top of loop)
872
888
  if (/^-?ext(ension)?(\+)?$/i) {
873
889
  my $ext = shift;
@@ -1742,13 +1758,17 @@ if (@dbKeys) {
1742
1758
  undef $evalWarning;
1743
1759
  local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
1744
1760
  foreach (@dbKeys) {
1761
+ my $db = $database{$_};
1762
+ tr/\\/\// and $database{$_} = $db; # allow for backslashes in SourceFile
1745
1763
  # (punt on using ConvertFileName here, so $absPath may be a mix of encodings)
1746
1764
  my $absPath = AbsPath($_);
1747
1765
  if (defined $absPath) {
1748
- $database{$absPath} = $database{$_} unless $database{$absPath};
1766
+ $database{$absPath} = $db unless $database{$absPath};
1749
1767
  if ($verbose and $verbose > 1) {
1750
1768
  print $vout "Imported entry for '${_}' (full path: '${absPath}')\n";
1751
1769
  }
1770
+ } elsif ($verbose and $verbose > 1) {
1771
+ print $vout "Imported entry for '${_}' (non-existent file)\n";
1752
1772
  }
1753
1773
  }
1754
1774
  }
@@ -1911,6 +1931,7 @@ sub GetImageInfo($$)
1911
1931
  if (@condition) {
1912
1932
  unless ($file eq '-' or $et->Exists($file)) {
1913
1933
  Warn "Error: File not found - $file\n";
1934
+ EFile($file);
1914
1935
  FileNotFound($file);
1915
1936
  ++$countBad;
1916
1937
  return;
@@ -1956,6 +1977,7 @@ sub GetImageInfo($$)
1956
1977
  }
1957
1978
  unless ($result) {
1958
1979
  $verbose and print $vout "-------- $file (failed condition)$progStr\n";
1980
+ EFile($file, 2);
1959
1981
  ++$countFailed;
1960
1982
  return;
1961
1983
  }
@@ -1976,6 +1998,7 @@ sub GetImageInfo($$)
1976
1998
  ++$countGoodWr;
1977
1999
  } else {
1978
2000
  Warn "Error renaming $original\n";
2001
+ EFile($file);
1979
2002
  ++$countBad;
1980
2003
  }
1981
2004
  return;
@@ -1986,7 +2009,7 @@ sub GetImageInfo($$)
1986
2009
  my ($fp, $outfile, $append);
1987
2010
  if ($textOut and $verbose and not $tagOut) {
1988
2011
  ($fp, $outfile, $append) = OpenOutputFile($orig);
1989
- $fp or ++$countBad, return;
2012
+ $fp or EFile($file), ++$countBad, return;
1990
2013
  # delete file if we exit prematurely (unless appending)
1991
2014
  $tmpText = $outfile unless $append;
1992
2015
  $et->Options(TextOut => $fp);
@@ -2018,6 +2041,7 @@ sub GetImageInfo($$)
2018
2041
  Warn "Error: File not found - $file\n";
2019
2042
  FileNotFound($file);
2020
2043
  $outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
2044
+ EFile($file);
2021
2045
  ++$countBad;
2022
2046
  return;
2023
2047
  }
@@ -2067,6 +2091,7 @@ sub GetImageInfo($$)
2067
2091
  }
2068
2092
  if ($info->{Error}) {
2069
2093
  Warn "Error: $info->{Error} - $file\n";
2094
+ EFile($file);
2070
2095
  ++$countBad;
2071
2096
  return;
2072
2097
  }
@@ -2077,7 +2102,7 @@ sub GetImageInfo($$)
2077
2102
  # or if there is none of the requested information available
2078
2103
  if ($binaryOutput or not %$info) {
2079
2104
  my $errs = $et->GetInfo('Warning', 'Error');
2080
- PrintErrors($et, $errs, $file) and $rtnVal = 1;
2105
+ PrintErrors($et, $errs, $file) and EFile($file), $rtnVal = 1;
2081
2106
  } elsif ($et->GetValue('Error') or ($$et{Validate} and $et->GetValue('Warning'))) {
2082
2107
  $rtnVal = 1;
2083
2108
  }
@@ -2085,7 +2110,7 @@ sub GetImageInfo($$)
2085
2110
  # open output file (or stdout if no output file) if not done already
2086
2111
  unless ($outfile or $tagOut) {
2087
2112
  ($fp, $outfile, $append) = OpenOutputFile($orig);
2088
- $fp or ++$countBad, return;
2113
+ $fp or EFile($file), ++$countBad, return;
2089
2114
  $tmpText = $outfile unless $append;
2090
2115
  }
2091
2116
 
@@ -2144,7 +2169,7 @@ sub GetImageInfo($$)
2144
2169
  }
2145
2170
  delete $printFmt{HEAD} unless $outfile; # print header only once per output file
2146
2171
  my $errs = $et->GetInfo('Warning', 'Error');
2147
- PrintErrors($et, $errs, $file);
2172
+ PrintErrors($et, $errs, $file) and EFile($file);
2148
2173
  } elsif (not $disableOutput) {
2149
2174
  my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep);
2150
2175
  if ($fp) {
@@ -2253,7 +2278,7 @@ TAG: foreach $tag (@foundTags) {
2253
2278
  # the same group, and if so suppress this tag instead
2254
2279
  next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
2255
2280
  $group eq $et->GetGroup($1, $showGroup);
2256
- $group = 'Unknown' if not $group and ($xml or $json);
2281
+ $group = 'Unknown' if not $group and ($xml or $json or $csv);
2257
2282
  if ($fp and not ($allGroup or $csv)) {
2258
2283
  if ($lastGroup ne $group) {
2259
2284
  if ($html) {
@@ -2636,6 +2661,7 @@ sub SetImageInfo($$$)
2636
2661
  $outfile = FilenameSPrintf($outOpt, $orig);
2637
2662
  if ($outfile eq '') {
2638
2663
  Warn "Error: Can't create file with zero-length name from $orig\n";
2664
+ EFile($infile);
2639
2665
  ++$countBadCr;
2640
2666
  return 0;
2641
2667
  }
@@ -2652,6 +2678,7 @@ sub SetImageInfo($$$)
2652
2678
  unless (CanCreate($outType)) {
2653
2679
  my $what = $srcType ? 'other types' : 'scratch';
2654
2680
  WarnOnce "Error: Can't create $outType files from $what\n";
2681
+ EFile($infile);
2655
2682
  ++$countBadCr;
2656
2683
  return 0;
2657
2684
  }
@@ -2689,6 +2716,7 @@ sub SetImageInfo($$$)
2689
2716
  $outfile = NextUnusedFilename($outfile);
2690
2717
  if ($et->Exists($outfile) and not $doSetFileName) {
2691
2718
  Warn "Error: '${outfile}' already exists - $infile\n";
2719
+ EFile($infile);
2692
2720
  ++$countBadWr;
2693
2721
  return 0;
2694
2722
  }
@@ -2709,7 +2737,7 @@ sub SetImageInfo($$$)
2709
2737
  $setTags = $tagsFromSrc || $setTags{$dyFile};
2710
2738
  } else {
2711
2739
  $fromFile = FilenameSPrintf($dyFile, $orig);
2712
- ++$countBadWr, return 0 unless defined $fromFile;
2740
+ defined $fromFile or EFile($infile), ++$countBadWr, return 0;
2713
2741
  $setTags = $setTags{$dyFile};
2714
2742
  }
2715
2743
  # do we have multiple -tagsFromFile options with this file?
@@ -2794,7 +2822,7 @@ sub SetImageInfo($$$)
2794
2822
  my $err;
2795
2823
  $err = "You shouldn't write FileName or Directory with TestFile" if defined $newFileName or defined $newDir;
2796
2824
  $err = "The -o option shouldn't be used with TestFile" if defined $outfile;
2797
- $err and Warn("Error: $err - $infile\n"), ++$countBadWr, return 0;
2825
+ $err and Warn("Error: $err - $infile\n"), EFile($infile), ++$countBadWr, return 0;
2798
2826
  $testName = FilenameSPrintf($testName, $orig);
2799
2827
  $testName = Image::ExifTool::GetNewFileName($file, $testName) if $file ne '';
2800
2828
  }
@@ -2821,6 +2849,7 @@ sub SetImageInfo($$$)
2821
2849
  $sameFile = $outfile; # same file, but the name has a different case
2822
2850
  } else {
2823
2851
  Warn "Error: '${outfile}' already exists - $infile\n";
2852
+ EFile($infile);
2824
2853
  ++$countBadWr;
2825
2854
  return 0;
2826
2855
  }
@@ -2840,6 +2869,7 @@ sub SetImageInfo($$$)
2840
2869
  unless ($numSet) {
2841
2870
  # no need to write if no tags set
2842
2871
  print $vout "Nothing changed in $file\n" if defined $verbose;
2872
+ EFile($infile, 1);
2843
2873
  ++$countSameWr;
2844
2874
  return 1;
2845
2875
  }
@@ -2847,6 +2877,7 @@ sub SetImageInfo($$$)
2847
2877
  if ($numSet == $numPseudo) {
2848
2878
  # no need to write if no real tags
2849
2879
  Warn("Error: Nothing to write - $file\n");
2880
+ EFile($infile, 1);
2850
2881
  ++$countBadWr;
2851
2882
  return 0;
2852
2883
  }
@@ -2858,6 +2889,7 @@ sub SetImageInfo($$$)
2858
2889
  } else {
2859
2890
  # file doesn't exist, and we can't create it
2860
2891
  Warn "Error: File not found - $file\n";
2892
+ EFile($infile);
2861
2893
  FileNotFound($file);
2862
2894
  ++$countBadWr;
2863
2895
  return 0;
@@ -2872,9 +2904,11 @@ sub SetImageInfo($$$)
2872
2904
  if ($r1 > 0 or $r2 > 0 or $r3 > 0 or $r4 > 0) {
2873
2905
  ++$countGoodWr;
2874
2906
  } elsif ($r1 < 0 or $r2 < 0 or $r3 < 0 or $r4 < 0) {
2907
+ EFile($infile);
2875
2908
  ++$countBadWr;
2876
2909
  return 0;
2877
2910
  } else {
2911
+ EFile($infile, 1);
2878
2912
  ++$countSameWr;
2879
2913
  }
2880
2914
  if (defined $hardLink or defined $symLink or defined $testName) {
@@ -2888,6 +2922,7 @@ sub SetImageInfo($$$)
2888
2922
  $outfile = "${file}_exiftool_tmp";
2889
2923
  if ($et->Exists($outfile)) {
2890
2924
  Warn("Error: Temporary file already exists: $outfile\n");
2925
+ EFile($infile);
2891
2926
  ++$countBadWr;
2892
2927
  return 0;
2893
2928
  }
@@ -2984,6 +3019,7 @@ sub SetImageInfo($$$)
2984
3019
  } else {
2985
3020
  close(NEW_FILE);
2986
3021
  Warn "Error opening $file for writing\n";
3022
+ EFile($infile);
2987
3023
  $et->Unlink($newFile);
2988
3024
  ++$countBadWr;
2989
3025
  }
@@ -3001,11 +3037,13 @@ sub SetImageInfo($$$)
3001
3037
  # unlink may fail if already renamed or no permission
3002
3038
  if (not $et->Unlink($file)) {
3003
3039
  Warn "Error renaming temporary file to $dstFile\n";
3040
+ EFile($infile);
3004
3041
  $et->Unlink($newFile);
3005
3042
  ++$countBadWr;
3006
3043
  # try renaming again now that the target has been deleted
3007
3044
  } elsif (not $et->Rename($newFile, $dstFile)) {
3008
3045
  Warn "Error renaming temporary file to $dstFile\n";
3046
+ EFile($infile);
3009
3047
  # (don't delete tmp file now because it is all we have left)
3010
3048
  ++$countBadWr;
3011
3049
  } else {
@@ -3027,6 +3065,7 @@ sub SetImageInfo($$$)
3027
3065
  ++$countGoodWr;
3028
3066
  }
3029
3067
  } elsif ($success) {
3068
+ EFile($infile, 1);
3030
3069
  if ($isTemporary) {
3031
3070
  # just erase the temporary file since no changes were made
3032
3071
  $et->Unlink($tmpFile);
@@ -3040,6 +3079,7 @@ sub SetImageInfo($$$)
3040
3079
  }
3041
3080
  print $vout "Nothing changed in $file\n" if defined $verbose;
3042
3081
  } else {
3082
+ EFile($infile);
3043
3083
  $et->Unlink($tmpFile) if defined $tmpFile;
3044
3084
  ++$countBadWr;
3045
3085
  }
@@ -3427,7 +3467,7 @@ sub DoSetFromFile($$$)
3427
3467
  ++$warns while $$info{"Warning ($warns)"};
3428
3468
  $numSet -= $warns;
3429
3469
  }
3430
- PrintErrors($et, $info, $file) and ++$countBadWr, return 0;
3470
+ PrintErrors($et, $info, $file) and EFile($file), ++$countBadWr, return 0;
3431
3471
  Warn "Warning: No writable tags set from $file\n" unless $numSet;
3432
3472
  return 1;
3433
3473
  }
@@ -3513,11 +3553,11 @@ sub ProcessFiles($;$)
3513
3553
  push(@$list, $file);
3514
3554
  } else {
3515
3555
  GetImageInfo($et, $file);
3516
- $$et{End} and Warn("End called - $file\n");
3556
+ $end and Warn("End called - $file\n");
3517
3557
  }
3518
3558
  }
3519
3559
  $et->Options(CharsetFileName => $enc) if $utf8FileName{$file};
3520
- last if $$et{End};
3560
+ last if $end;
3521
3561
  }
3522
3562
  }
3523
3563
 
@@ -3595,7 +3635,7 @@ sub ScanDir($$;$)
3595
3635
  next if $file =~ /^\./ and ($recurse == 1 or $file eq '.' or $file eq '..');
3596
3636
  next if $ignore{$file} or ($ignore{SYMLINKS} and -l $path);
3597
3637
  ScanDir($et, $path, $list);
3598
- last if $$et{End};
3638
+ last if $end;
3599
3639
  next;
3600
3640
  }
3601
3641
  # apply rules from -ext options
@@ -3626,6 +3666,7 @@ sub ScanDir($$;$)
3626
3666
  {
3627
3667
  Warn("Not writing $path\n");
3628
3668
  WarnOnce("Use -overwrite_original_in_place to write files with Unicode surrogate characters\n");
3669
+ EFile($file);
3629
3670
  ++$countBad;
3630
3671
  next;
3631
3672
  }
@@ -3634,13 +3675,14 @@ sub ScanDir($$;$)
3634
3675
  push(@$list, $path);
3635
3676
  } else {
3636
3677
  GetImageInfo($et, $path);
3637
- if ($$et{End}) {
3678
+ if ($end) {
3638
3679
  Warn("End called - $file\n");
3639
3680
  last;
3640
3681
  }
3641
- if ($$et{EndDir}) {
3682
+ if ($endDir) {
3642
3683
  $dir =~ s(/$)();
3643
3684
  Warn("EndDir called - $path\n");
3685
+ undef $endDir;
3644
3686
  last;
3645
3687
  }
3646
3688
  }
@@ -3700,6 +3742,7 @@ sub FindFileWindows($$)
3700
3742
  $evalWarning =~ s/ at .*//s;
3701
3743
  Warn "Error: [Win32::FindFile] $evalWarning - $wildfile\n";
3702
3744
  undef @files;
3745
+ EFile($wildfile);
3703
3746
  ++$countBad;
3704
3747
  }
3705
3748
  return @files;
@@ -4026,8 +4069,8 @@ sub CreateDirectory($)
4026
4069
  }
4027
4070
  $dir .= '/';
4028
4071
  }
4072
+ ++$countNewDir if $created;
4029
4073
  }
4030
- ++$countNewDir if $created;
4031
4074
  return $created;
4032
4075
  }
4033
4076
 
@@ -4214,6 +4257,29 @@ sub ReadStayOpen($)
4214
4257
  }
4215
4258
  }
4216
4259
 
4260
+ #------------------------------------------------------------------------------
4261
+ # Add new entry to -efile output file
4262
+ # Inputs: 0) file name, 1) -efile option number (0=error, 1=same, 2=failed)
4263
+ sub EFile($$)
4264
+ {
4265
+ my $entry = shift;
4266
+ my $efile = $efile[shift || 0];
4267
+ if (defined $efile and length $entry and $entry ne '-') {
4268
+ my $err;
4269
+ CreateDirectory($efile);
4270
+ if ($mt->Open(\*EFILE_FILE, $efile, '>>')) {
4271
+ print EFILE_FILE $entry, "\n" or Warn("Error writing to $efile\n"), $err = 1;
4272
+ close EFILE_FILE;
4273
+ } else {
4274
+ Warn("Error opening '${efile}' for append\n");
4275
+ $err = 1;
4276
+ }
4277
+ if ($err) {
4278
+ defined $_ and $_ eq $efile and undef $_ foreach @efile;
4279
+ }
4280
+ }
4281
+ }
4282
+
4217
4283
  #------------------------------------------------------------------------------
4218
4284
  # Print list of tags
4219
4285
  # Inputs: 0) message, 1-N) list of tag names
@@ -4321,46 +4387,47 @@ supported by ExifTool (r = read, w = write, c = create):
4321
4387
 
4322
4388
  File Types
4323
4389
  ------------+-------------+-------------+-------------+------------
4324
- 3FR r | DR4 r/w/c | ITC r | ODP r | RIFF r
4325
- 3G2 r/w | DSS r | J2C r | ODS r | RSRC r
4326
- 3GP r/w | DV r | JNG r/w | ODT r | RTF r
4327
- A r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
4328
- AA r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
4329
- AAE r | DYLIB r | JSON r | OGV r | RWZ r
4330
- AAX r/w | EIP r | K25 r | OPUS r | RM r
4331
- ACR r | EPS r/w | KDC r | ORF r/w | SEQ r
4332
- AFM r | EPUB r | KEY r | OTF r | SKETCH r
4333
- AI r/w | ERF r/w | LA r | PAC r | SO r
4334
- AIFF r | EXE r | LFP r | PAGES r | SR2 r/w
4335
- APE r | EXIF r/w/c | LNK r | PBM r/w | SRF r
4336
- ARQ r/w | EXR r | LRV r/w | PCD r | SRW r/w
4337
- ARW r/w | EXV r/w/c | M2TS r | PCX r | SVG r
4338
- ASF r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
4339
- AVI r | FFF r/w | MAX r | PDF r/w | THM r/w
4340
- AVIF r/w | FITS r | MEF r/w | PEF r/w | TIFF r/w
4341
- AZW r | FLA r | MIE r/w/c | PFA r | TORRENT r
4342
- BMP r | FLAC r | MIFF r | PFB r | TTC r
4343
- BPG r | FLIF r/w | MKA r | PFM r | TTF r
4344
- BTF r | FLV r | MKS r | PGF r | TXT r
4345
- CHM r | FPF r | MKV r | PGM r/w | VCF r
4346
- COS r | FPX r | MNG r/w | PLIST r | VRD r/w/c
4347
- CR2 r/w | GIF r/w | MOBI r | PICT r | VSD r
4348
- CR3 r/w | GPR r/w | MODD r | PMP r | WAV r
4349
- CRM r/w | GZ r | MOI r | PNG r/w | WDP r/w
4350
- CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
4351
- CS1 r/w | HDR r | MOV r/w | PPT r | WEBM r
4352
- CSV r | HEIC r/w | MP3 r | PPTX r | WMA r
4353
- DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
4354
- DCP r/w | HTML r | MPC r | PSB r/w | WTV r
4355
- DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
4356
- DFONT r | ICS r | MPO r/w | PSP r | X3F r/w
4357
- DIVX r | IDML r | MQV r/w | QTIF r/w | XCF r
4358
- DJVU r | IIQ r/w | MRW r/w | R3D r | XLS r
4359
- DLL r | IND r/w | MXF r | RA r | XLSX r
4360
- DNG r/w | INSP r/w | NEF r/w | RAF r/w | XMP r/w/c
4361
- DOC r | INSV r | NRW r/w | RAM r | ZIP r
4362
- DOCX r | INX r | NUMBERS r | RAR r |
4363
- DPX r | ISO r | O r | RAW r/w |
4390
+ 360 r/w | DPX r | ITC r | ODP r | RSRC r
4391
+ 3FR r | DR4 r/w/c | J2C r | ODS r | RTF r
4392
+ 3G2 r/w | DSS r | JNG r/w | ODT r | RW2 r/w
4393
+ 3GP r/w | DV r | JP2 r/w | OFR r | RWL r/w
4394
+ A r | DVB r/w | JPEG r/w | OGG r | RWZ r
4395
+ AA r | DVR-MS r | JSON r | OGV r | RM r
4396
+ AAE r | DYLIB r | K25 r | OPUS r | SEQ r
4397
+ AAX r/w | EIP r | KDC r | ORF r/w | SKETCH r
4398
+ ACR r | EPS r/w | KEY r | OTF r | SO r
4399
+ AFM r | EPUB r | LA r | PAC r | SR2 r/w
4400
+ AI r/w | ERF r/w | LFP r | PAGES r | SRF r
4401
+ AIFF r | EXE r | LNK r | PBM r/w | SRW r/w
4402
+ APE r | EXIF r/w/c | LRV r/w | PCD r | SVG r
4403
+ ARQ r/w | EXR r | M2TS r | PCX r | SWF r
4404
+ ARW r/w | EXV r/w/c | M4A/V r/w | PDB r | THM r/w
4405
+ ASF r | F4A/V r/w | MACOS r | PDF r/w | TIFF r/w
4406
+ AVI r | FFF r/w | MAX r | PEF r/w | TORRENT r
4407
+ AVIF r/w | FITS r | MEF r/w | PFA r | TTC r
4408
+ AZW r | FLA r | MIE r/w/c | PFB r | TTF r
4409
+ BMP r | FLAC r | MIFF r | PFM r | TXT r
4410
+ BPG r | FLIF r/w | MKA r | PGF r | VCF r
4411
+ BTF r | FLV r | MKS r | PGM r/w | VRD r/w/c
4412
+ CHM r | FPF r | MKV r | PLIST r | VSD r
4413
+ COS r | FPX r | MNG r/w | PICT r | WAV r
4414
+ CR2 r/w | GIF r/w | MOBI r | PMP r | WDP r/w
4415
+ CR3 r/w | GPR r/w | MODD r | PNG r/w | WEBP r
4416
+ CRM r/w | GZ r | MOI r | PPM r/w | WEBM r
4417
+ CRW r/w | HDP r/w | MOS r/w | PPT r | WMA r
4418
+ CS1 r/w | HDR r | MOV r/w | PPTX r | WMV r
4419
+ CSV r | HEIC r/w | MP3 r | PS r/w | WTV r
4420
+ CZI r | HEIF r/w | MP4 r/w | PSB r/w | WV r
4421
+ DCM r | HTML r | MPC r | PSD r/w | X3F r/w
4422
+ DCP r/w | ICC r/w/c | MPG r | PSP r | XCF r
4423
+ DCR r | ICS r | MPO r/w | QTIF r/w | XLS r
4424
+ DFONT r | IDML r | MQV r/w | R3D r | XLSX r
4425
+ DIVX r | IIQ r/w | MRW r/w | RA r | XMP r/w/c
4426
+ DJVU r | IND r/w | MXF r | RAF r/w | ZIP r
4427
+ DLL r | INSP r/w | NEF r/w | RAM r |
4428
+ DNG r/w | INSV r | NRW r/w | RAR r |
4429
+ DOC r | INX r | NUMBERS r | RAW r/w |
4430
+ DOCX r | ISO r | O r | RIFF r |
4364
4431
 
4365
4432
  Meta Information
4366
4433
  ----------------------+----------------------+---------------------
@@ -4416,7 +4483,7 @@ L<Input-output text formatting|/Input-output text formatting>
4416
4483
  -f (-forcePrint) Force printing of all specified tags
4417
4484
  -g[NUM...] (-groupHeadings) Organize output by tag group
4418
4485
  -G[NUM...] (-groupNames) Print group name for each tag
4419
- -h (-htmlFormat) Use HMTL formatting for output
4486
+ -h (-htmlFormat) Use HTML formatting for output
4420
4487
  -H (-hex) Show tag ID numbers in hexadecimal
4421
4488
  -htmlDump[OFFSET] Generate HTML-format binary dump
4422
4489
  -j[[+]=JSONFILE] (-json) Export/import tags in JSON format
@@ -4491,6 +4558,7 @@ L<Advanced options|/Advanced options>
4491
4558
  -common_args Define common arguments
4492
4559
  -config CFGFILE Specify configuration file name
4493
4560
  -echo[NUM] TEXT Echo text to stdout or stderr
4561
+ -efile[NUM][!] ERRFILE Save names of files with errors
4494
4562
  -execute[NUM] Execute multiple commands on one line
4495
4563
  -srcfile FMT Process a different source file
4496
4564
  -stay_open FLAG Keep reading -@ argfile even after EOF
@@ -4561,7 +4629,7 @@ delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
4561
4629
  used to write an empty string instead of deleting the tag when no I<VALUE>
4562
4630
  is given, but otherwise it is equivalent to C<=>.
4563
4631
 
4564
- I<TAG> may contain one or more leading family 0, 1 or 2 group names,
4632
+ I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
4565
4633
  prefixed by optional family numbers, and separated colons. If no group name
4566
4634
  is specified, the tag is created in the preferred group, and updated in any
4567
4635
  other location where a same-named tag already exists. The preferred group
@@ -4616,7 +4684,7 @@ the specified group(s) are removed individually, and in this case is it
4616
4684
  possible to exclude individual tags from a mass delete. For example,
4617
4685
  C<-time:all --Exif:Time:All> removes all deletable Time tags except those in
4618
4686
  the EXIF. This difference also applies if family 2 is specified when
4619
- deleting all groups. For example, C<-2all:all=> deletes tags individually,
4687
+ deleting all groups. For example, C<-2all:all=> deletes tags individually,
4620
4688
  while C<-all:all=> deletes entire blocks.
4621
4689
 
4622
4690
  5) The "APP" group names ("APP0" through "APP15") are used to delete JPEG
@@ -5016,13 +5084,13 @@ B<-csv>=I<CSVFILE> feature.
5016
5084
 
5017
5085
  Organize output by tag group. I<NUM> specifies a group family number, and
5018
5086
  may be 0 (general location), 1 (specific location), 2 (category), 3
5019
- (document number), 4 (instance number), 5 (metadata path) or 6 (EXIF/TIFF
5020
- format). B<-g0> is assumed if a family number is not specified, and family
5021
- numbers may be added wherever B<-g> is mentioned in the documentation.
5022
- Multiple families may be specified by separating them with colons. By
5023
- default the resulting group name is simplified by removing any leading
5087
+ (document number), 4 (instance number), 5 (metadata path), 6 (EXIF/TIFF
5088
+ format) or 7 (tag ID). B<-g0> is assumed if a family number is not
5089
+ specified. May be combined with other options to add group names to the
5090
+ output. Multiple families may be specified by separating them with colons.
5091
+ By default the resulting group name is simplified by removing any leading
5024
5092
  C<Main:> and collapsing adjacent identical group names, but this can be
5025
- avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5093
+ avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5026
5094
  Use the B<-listg> option to list group names for a specified family. The
5027
5095
  SavePath and SaveFormat API options are automatically enabled if the
5028
5096
  respective family 5 or 6 group names are requested. See the
@@ -5227,7 +5295,7 @@ with this command:
5227
5295
 
5228
5296
  produces output like this:
5229
5297
 
5230
- -- Generated by ExifTool 11.96 --
5298
+ -- Generated by ExifTool 12.08 --
5231
5299
  File: a.jpg - 2003:10:31 15:44:19
5232
5300
  (f/5.6, 1/60s, ISO 100)
5233
5301
  File: b.jpg - 2006:05:23 11:57:38
@@ -6174,6 +6242,17 @@ is output as the command line is parsed, before the processing of any input
6174
6242
  files. I<NUM> may also be 3 or 4 to output text (to stdout or stderr
6175
6243
  respectively) after processing is complete.
6176
6244
 
6245
+ =item B<-efile>[I<NUM>][!] I<ERRFILE>
6246
+
6247
+ Save the names of files giving errors (I<NUM> missing or 1), files that were
6248
+ unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
6249
+ or any combination thereof (by summing I<NUM>, eg. B<-efile3> is the same
6250
+ has having both B<-efile> and B<-efile2> options with the same I<ERRFILE>).
6251
+ By default, file names are appended to any existing I<ERRFILE>, but
6252
+ I<ERRFILE> is overwritten if an exclamation point is added to the option
6253
+ (eg. B<-efile!>). Saves the name of the file specified by the B<-srcfile>
6254
+ option if applicable.
6255
+
6177
6256
  =item B<-execute>[I<NUM>]
6178
6257
 
6179
6258
  Execute command for all arguments up to this point on the command line (plus
@@ -6227,7 +6306,7 @@ line (see the B<-@> option for details).
6227
6306
 
6228
6307
  3) Write C<-execute\n> to I<ARGFILE>, where C<\n> represents a newline
6229
6308
  sequence. (Note: You may need to flush your write buffers here if using
6230
- buffered output.) Exiftool will then execute the command with the arguments
6309
+ buffered output.) ExifTool will then execute the command with the arguments
6231
6310
  received up to this point, send a "{ready}" message to stdout when done
6232
6311
  (unless the B<-q> or B<-T> option is used), and continue trying to read
6233
6312
  arguments for the next command from I<ARGFILE>. To aid in command/response