exiftool_vendored 11.94.0 → 12.06.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 (62) hide show
  1. checksums.yaml +5 -5
  2. data/bin/Changes +163 -3
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +32 -32
  7. data/bin/exiftool +152 -52
  8. data/bin/lib/Image/ExifTool.pm +166 -115
  9. data/bin/lib/Image/ExifTool.pod +108 -81
  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 +6 -3
  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 +16 -3
  17. data/bin/lib/Image/ExifTool/Exif.pm +15 -6
  18. data/bin/lib/Image/ExifTool/Font.pm +9 -2
  19. data/bin/lib/Image/ExifTool/GIF.pm +5 -0
  20. data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
  21. data/bin/lib/Image/ExifTool/Geotag.pm +69 -21
  22. data/bin/lib/Image/ExifTool/GoPro.pm +10 -1
  23. data/bin/lib/Image/ExifTool/H264.pm +1 -1
  24. data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -2
  25. data/bin/lib/Image/ExifTool/ID3.pm +91 -12
  26. data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
  27. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  28. data/bin/lib/Image/ExifTool/M2TS.pm +44 -24
  29. data/bin/lib/Image/ExifTool/MWG.pm +9 -1
  30. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Minolta.pm +3 -2
  32. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
  33. data/bin/lib/Image/ExifTool/Nikon.pm +156 -18
  34. data/bin/lib/Image/ExifTool/Olympus.pm +34 -17
  35. data/bin/lib/Image/ExifTool/PNG.pm +14 -3
  36. data/bin/lib/Image/ExifTool/PPM.pm +5 -5
  37. data/bin/lib/Image/ExifTool/Panasonic.pm +147 -13
  38. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +33 -0
  39. data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
  40. data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
  41. data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
  42. data/bin/lib/Image/ExifTool/QuickTime.pm +277 -33
  43. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +460 -67
  44. data/bin/lib/Image/ExifTool/README +21 -20
  45. data/bin/lib/Image/ExifTool/RIFF.pm +123 -3
  46. data/bin/lib/Image/ExifTool/RTF.pm +12 -7
  47. data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
  48. data/bin/lib/Image/ExifTool/Shift.pl +1 -0
  49. data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
  50. data/bin/lib/Image/ExifTool/Sony.pm +379 -12
  51. data/bin/lib/Image/ExifTool/TagLookup.pm +1959 -1874
  52. data/bin/lib/Image/ExifTool/TagNames.pod +346 -55
  53. data/bin/lib/Image/ExifTool/Validate.pm +4 -4
  54. data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
  55. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +26 -15
  56. data/bin/lib/Image/ExifTool/Writer.pl +52 -23
  57. data/bin/lib/Image/ExifTool/XMP.pm +41 -4
  58. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  59. data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
  60. data/bin/perl-Image-ExifTool.spec +31 -31
  61. data/lib/exiftool_vendored/version.rb +1 -1
  62. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: f8d1a45ceed2fce06b008315885667eccd1652c9
4
- data.tar.gz: 1d0c0e626deab2d61cd1e3c29e1314ac1817b342
2
+ SHA256:
3
+ metadata.gz: b6fbacc803486908bf63bd351d8ea3d31bbe0cf1217b6bbab9ef074cde3f0ee3
4
+ data.tar.gz: fcb3492aae1fbdf6587a73ea5546eed530c09ac20c67fc1a77057becd1e87b0b
5
5
  SHA512:
6
- metadata.gz: f0699566c7325efa24c989da7db409805a24f487a716ca96a0e4146858f667c72e0b77a429dcad2a06e0e790f5b74a800dc1cf2d576a365fb355c93ede814bba
7
- data.tar.gz: aa2d82f8be53730bb76ae38d68fc311c4ea0b68ba138e1f14afd98e2cbf2a801a5806a410516e910d7652899769b7d1fb62044d1ed18a42414de50a1e4f92564
6
+ metadata.gz: 7101bbb72920052732e86bb2c44b828bbb901f89363768ebc5346d5225db5919e79de5de2ca8b0af2c77ccd6d62a9f2bf677c61479b877d06fecb88bbd8b29f8
7
+ data.tar.gz: 0d08e16271b5bd6fe9c4f9d154190a799b3d4bd3b3bdd777a42afa4b29786595869a3068fbc213a68135559d275bcfcf07a08f22d9fdc242130770905ca826cc
@@ -4,15 +4,175 @@ 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
- Apr. 17, 2020 - Version 11.94
10
+ (I'll be on vacation from Aug 26 to Sep 3, 2020 so don't expect any
11
+ forum or email responses from me during this time - Phil H.)
12
+
13
+ Sept. 11, 2020 - Version 12.06
14
+
15
+ - Added read support for Lyrics3 metadata (and fixed problem where APE
16
+ metadata may be ignored if Lyrics3 exists)
17
+ - Added a new Panasonic VideoBurstMode value (thanks Klaus Homeister)
18
+ - Added a new Olympus MultipleExposureMode value
19
+ - Added a new Nikon LensID
20
+ - Added back conversions for XMP-dwc EventTime that were removed in 12.04 with
21
+ a patch to allow time-only values
22
+ - Decode GIF AspectRatio
23
+ - Decode Olympus FocusBracketStepSize (thanks Karsten)
24
+ - Extract PNG iDOT chunk in Binary format with the name AppleDataOffsets
25
+ - Process PNG images which do not start with mandatory IHDR chunk
26
+
27
+ Aug. 24, 2020 - Version 12.05
28
+
29
+ - Added a new Panasonic SelfTimer value (thanks Herb)
30
+ - Decode a few more DPX tags (thanks Harry Mallon)
31
+ - Extract AIFF APPL tag as ApplicationData
32
+ - Fixed bug writing QuickTime ItemList 'gnre' Genre values
33
+ - Fixed an incorrect value for Panasonic VideoBurstResolution (thanks Herb)
34
+ - Fixed problem when applying a time shift to some invalid makernote date/time
35
+ values
36
+
37
+ Aug. 10, 2020 - Version 12.04
38
+
39
+ - Added read support for Zeiss ZISRAW CZI files
40
+ - Added some new values for a couple of Olympus tags (thanks Sebastian)
41
+ - Decode a number of new tags for the Sony ILCE-7SM3 (thanks Jos Roost)
42
+ - Removed formatting restrictions on XMP-dwc:EventTime to allow a time-only
43
+ value to be written
44
+ - Moved new QuckTime ItemList tags added in version 12.02 to the proper group
45
+ (they were incorrectly added to the Keys group)
46
+ - Improved QuickTime -v3 output to show default language codes
47
+ - Patched -lang option to work for the values of somet tags with coded
48
+ translations
49
+ - Patched the format of a number of QuickTime tags when writing for improved
50
+ compatibility with iTunes and AtomicParsley
51
+ - Patched to write a default QuickTime language code of 0x0000 (null) instead
52
+ of 0x55c4 ('und')
53
+
54
+ July 29, 2020 - Version 12.03
55
+
56
+ - Added family 7 group names to allow tag ID's to be specified when reading
57
+ and writing
58
+ - Fixed a couple of typos in tag values (thanks Herb)
59
+ - API Changes:
60
+ - Added HexTagIDs option
61
+ - Enhanced GetNewValue() to allow family 7 groups names to be used
62
+ - Internal Changes:
63
+ - Changed Composite tag ID's to use "-" instead of "::" as a separator
11
64
 
65
+ July 27, 2020 - Version 12.02
66
+
67
+ - Added support for a number of new QuickTime ItemList tags
68
+ - Added support for writing XMP-xmp:RatingPercent
69
+ - Added a new Sony LensType (thanks Jos Roost and LibRaw)
70
+ - Added a new Pentax LensType (thanks James O'Neill)
71
+ - Decode barcodes from Ricoh APP5 RMETA segment
72
+ - Decode a few new QuickTime tags written by Ricoh and Garmin cameras
73
+ - Decode timed GPS from Sony A7R IV MP4 videos
74
+ - Decode timed GPS from 70mai dashcam videos
75
+ - Decode a few new Panasonic tags (thanks Klaus Homeister)
76
+ - Decode altitude and more accurate latitude/longitude from Transcend Driver
77
+ Pro 230 MP4 videos
78
+ - Improved decoding of some Canon EOS 1DXmkIII custom functions
79
+ - Allow integer QuickTime TrackNumber and DiskNumber values
80
+ - Relax validity check of QuickTime:ContentCreateDate when writing with -n
81
+ - Removed "Com" from the start of some unknown ItemList tag names
82
+ - Patched CanonCustom decoding for bug in Canon EOS-1DX firmware
83
+ - Changed QuickTime CleanAperture tags decode as signed rationals
84
+
85
+ June 24, 2020 - Version 12.01
86
+
87
+ - Added a new NEFCompression value (thanks Warren Hatch)
12
88
  - Added a new Sony LensType (thanks Jos Roost)
89
+ - Decode timed GPS from Rove Stealth 4K dashcam videos
90
+ - Fixed bug which would corrupt TIFF images with 16-bit image data offsets
91
+ when writing (these are very rare)
92
+
93
+ June 11, 2020 - Version 12.00 (production release)
94
+
95
+ - Added two new Olympus LensTypes (thanks Don Komarechka for one)
96
+ - Added two new Sony LensType values (thanks Jos Roost)
97
+ - Added a few new Nikon LensID's (thanks Mathieu Carbou)
98
+ - Added support for the Sony ZV-1 (thanks Jos Roost)
99
+ - Added a new CanonModelID (thanks Jos Roost)
100
+ - Added missing MimeType values for HEICS and HEIFS files
101
+ - Added definitions for a number of new XMP-crs tags
102
+ - Recognize WOFF and WOFF2 font files
103
+ - Decode streaming GPS from Roadhawk, EEEkit and 360Fly MP4 videos
104
+ - Decode a number of new tags for the Nikon D6 (thanks Warren Hatch)
105
+ - Decode a couple more AF tags for the D500/D850
106
+ - Decode a number of new Panasonic tags
107
+ - Improved Composite LensID logic (thanks Matt Stancliff)
108
+ - Enhanced -v option to state when a directory has 0 entries
109
+ - Removed a couple of incorrect Validate warnings for bilevel TIFF images
110
+ - Drop ContrastCurve tag when copying from NEF to JPEG
111
+ - Changed -csv output to add "Unknown" group name to column headings for
112
+ missing tags when -f and -G options are used
113
+ - Patched to support new XMP LensID format for Nikon cameras as written by
114
+ Apple Photos (thanks Mattsta)
115
+ - Fixed problem extracting metadata from Sigma DP2 Quattro X3F files
116
+ - Fixed End() and EndDir() functions so they work when writing and when the -v
117
+ option is used
118
+ - Fixed problem recognizing some PGM files
119
+ - Fixed bug in offsets for some Photoshop information in -v3 output
120
+ - Fixed problem writing a list containing empty elements inside an XMP
121
+ structure
122
+ - API Changes:
123
+ - Added NoMultiExif option
124
+ - Changed FilterW option to not write tag if $_ is set to undef
125
+
126
+ May 11, 2020 - Version 11.99
127
+
128
+ - Added a new Nikon LensID (thanks Mykyta Kozlov)
129
+ - Added a new Canon LensType
130
+ - Added a newn PentaxModelID
131
+ - Decode a few new QuickTime tags
132
+ - Decode new ID3 Grouping tag
133
+ - Decode a few more MinoltaRaw tags (thanks LibRaw)
134
+ - Fixed runtime warning which could occur when reading corrupted RTF files
135
+ - Fixed another potential pitfall in M2TS Duration calculation
136
+ - Fixed problem extracting some unknown QuickTime:Keys tags
137
+ - Fixed problem decoding Nikon D850 orientation tags
138
+ - Fixed bug where TIFF image data may not be padded to an even number of bytes
139
+
140
+ May 1, 2020 - Version 11.98
141
+
142
+ - Added a new Nikon LensID (thanks Warren Hatch)
143
+ - Added a new Sony LensType (thanks LibRaw)
144
+ - Added a new Canon LensType
145
+ - Patched to extract EXIF with an "Exif\0\0" header from WebP images
146
+ - Enhanced -efile option and added to the documentation
147
+ - Minor tweak to -htmlDump output (disallow locking of empty selection)
148
+ - Fixed problem determining Duration of some M2TS videos
149
+
150
+ Apr. 27, 2020 - Version 11.97
151
+
152
+ - Added experimental -efile option (undocumented)
153
+ - Decode NMEA GGA sentence from streaming GPS of some dashcam videos
154
+
155
+ Apr. 24, 2020 - Version 11.96
156
+
157
+ - Decode streaming GPS from Lucas LK-7900 Ace AVI videos
158
+ - Changed new Exit/ExitDir function names to End/EndDir
159
+ - Fixed inconsistencies when using "-use mwg" together with the -wm option
160
+
161
+ Apr. 23, 2020 - Version 11.95
162
+
163
+ - Added Exit() and ExitDir() functions for use in -if conditions (NOTE: these
164
+ function names changed to End() and EndDir() in ExifTool 11.96)
165
+ - Enhanced -geotag feature to support a more flexible input CSV file format
166
+ - Enhanced -if and API Filter options to allow access to ExifTool object via
167
+ $self
168
+ - Fixed problem reading HEIC Exif with a missing header
169
+
170
+ Apr. 17, 2020 - Version 11.94
171
+
172
+ - Added support for QuickTime ItemList:GPSCoordinates
13
173
  - Added additional Validate test for overlapping EXIF values
174
+ - Added a new Sony LensType (thanks Jos Roost)
14
175
  - Added a new Nikon LensID
15
- - Added support for QuickTime ItemList:GPSCoordinates
16
176
  - Decode a few more Nikon tags (thanks Warren Hatch)
17
177
  - Decode Pentax ShutterType
18
178
  - Changed color of locked highlighted selection in -htmlDump output
@@ -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
@@ -915,6 +917,8 @@ t/ZIP_4.out
915
917
  t/ZIP_5.out
916
918
  t/ZIP_6.out
917
919
  t/ZIP_7.out
920
+ t/ZISRAW.t
921
+ t/ZISRAW_2.out
918
922
  t/images/AFCP.jpg
919
923
  t/images/AIFF.aif
920
924
  t/images/APE.ape
@@ -1089,4 +1093,5 @@ t/images/XMP8.xmp
1089
1093
  t/images/XMP9.xmp
1090
1094
  t/images/ZIP.gz
1091
1095
  t/images/ZIP.zip
1096
+ t/images/ZISRAW.czi
1092
1097
  t/images/iWork.numbers
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "11.94"
50
+ "version" : "12.06"
51
51
  }
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 11.94
31
+ version: 12.06
data/bin/README CHANGED
@@ -14,35 +14,36 @@ 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
17
+ 3FR r | DPX r | ISO r | O r | RAW r/w
18
+ 3G2 r/w | DR4 r/w/c | ITC r | ODP r | RIFF r
19
+ 3GP r/w | DSS r | J2C r | ODS r | RSRC r
20
+ A r | DV r | JNG r/w | ODT r | RTF r
21
+ AA r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
22
+ AAE r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
23
+ AAX r/w | DYLIB r | JSON r | OGV r | RWZ r
24
+ ACR r | EIP r | K25 r | OPUS r | RM r
25
+ AFM r | EPS r/w | KDC r | ORF r/w | SEQ r
26
+ AI r/w | EPUB r | KEY r | OTF r | SKETCH r
27
+ AIFF r | ERF r/w | LA r | PAC r | SO r
28
+ APE r | EXE r | LFP r | PAGES r | SR2 r/w
29
+ ARQ r/w | EXIF r/w/c | LNK r | PBM r/w | SRF r
30
+ ARW r/w | EXR r | LRV r/w | PCD r | SRW r/w
31
+ ASF r | EXV r/w/c | M2TS r | PCX r | SVG r
32
+ AVI r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
33
+ AVIF r/w | FFF r/w | MAX r | PDF r/w | THM r/w
34
+ AZW r | FITS r | MEF r/w | PEF r/w | TIFF r/w
35
+ BMP r | FLA r | MIE r/w/c | PFA r | TORRENT r
36
+ BPG r | FLAC r | MIFF r | PFB r | TTC r
37
+ BTF r | FLIF r/w | MKA r | PFM r | TTF r
38
+ CHM r | FLV r | MKS r | PGF r | TXT r
39
+ COS r | FPF r | MKV r | PGM r/w | VCF r
40
+ CR2 r/w | FPX r | MNG r/w | PLIST r | VRD r/w/c
41
+ CR3 r/w | GIF r/w | MOBI r | PICT r | VSD r
42
+ CRM r/w | GPR r/w | MODD r | PMP r | WAV r
43
+ CRW r/w | GZ r | MOI r | PNG r/w | WDP r/w
44
+ CS1 r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
45
+ CSV r | HDR r | MOV r/w | PPT r | WEBM r
46
+ CZI r | HEIC r/w | MP3 r | PPTX r | WMA r
46
47
  DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
47
48
  DCP r/w | HTML r | MPC r | PSB r/w | WTV r
48
49
  DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
@@ -53,7 +54,6 @@ supported by ExifTool (r = read, w = write, c = create):
53
54
  DNG r/w | INSP r/w | NEF r/w | RAF r/w | XMP r/w/c
54
55
  DOC r | INSV r | NRW r/w | RAM r | ZIP r
55
56
  DOCX r | INX r | NUMBERS r | RAR r |
56
- DPX r | ISO r | O r | RAW r/w |
57
57
 
58
58
  Meta Information
59
59
  ----------------------+----------------------+---------------------
@@ -105,8 +105,8 @@ your home directory, then you would type the following commands in a
105
105
  terminal window to extract and run ExifTool:
106
106
 
107
107
  cd ~/Desktop
108
- gzip -dc Image-ExifTool-11.94.tar.gz | tar -xf -
109
- cd Image-ExifTool-11.94
108
+ gzip -dc Image-ExifTool-12.06.tar.gz | tar -xf -
109
+ cd Image-ExifTool-12.06
110
110
  ./exiftool t/images/ExifTool.jpg
111
111
 
112
112
  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.94';
13
+ my $version = '12.06';
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,
@@ -289,6 +293,10 @@ my %altRecommends = (
289
293
 
290
294
  my %unescapeChar = ( 't'=>"\t", 'n'=>"\n", 'r'=>"\r" );
291
295
 
296
+ # special subroutines used in -if condition
297
+ sub Image::ExifTool::EndDir() { return $endDir = 1 }
298
+ sub Image::ExifTool::End() { return $end = 1 }
299
+
292
300
  # exit routine
293
301
  sub Exit {
294
302
  if ($pause) {
@@ -402,6 +410,7 @@ undef @delFiles;
402
410
  undef @dynamicFiles;
403
411
  undef @echo3;
404
412
  undef @echo4;
413
+ undef @efile;
405
414
  undef @exclude;
406
415
  undef @files;
407
416
  undef @newValues;
@@ -435,6 +444,8 @@ undef $deleteOrig;
435
444
  undef $disableOutput;
436
445
  undef $doSetFileName;
437
446
  undef $doUnzip;
447
+ undef $end;
448
+ undef $endDir;
438
449
  undef $escapeHTML;
439
450
  undef $escapeC;
440
451
  undef $evalWarning;
@@ -864,6 +875,15 @@ for (;;) {
864
875
  $mt->Options(Duplicates => 1);
865
876
  next;
866
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
+ }
867
887
  # (-execute handled at top of loop)
868
888
  if (/^-?ext(ension)?(\+)?$/i) {
869
889
  my $ext = shift;
@@ -1745,6 +1765,8 @@ if (@dbKeys) {
1745
1765
  if ($verbose and $verbose > 1) {
1746
1766
  print $vout "Imported entry for '${_}' (full path: '${absPath}')\n";
1747
1767
  }
1768
+ } elsif ($verbose and $verbose > 1) {
1769
+ print $vout "Imported entry for '${_}' (non-existent file)\n";
1748
1770
  }
1749
1771
  }
1750
1772
  }
@@ -1907,6 +1929,7 @@ sub GetImageInfo($$)
1907
1929
  if (@condition) {
1908
1930
  unless ($file eq '-' or $et->Exists($file)) {
1909
1931
  Warn "Error: File not found - $file\n";
1932
+ EFile($file);
1910
1933
  FileNotFound($file);
1911
1934
  ++$countBad;
1912
1935
  return;
@@ -1932,7 +1955,8 @@ sub GetImageInfo($$)
1932
1955
  # set package so eval'd functions are in Image::ExifTool namespace
1933
1956
  package Image::ExifTool;
1934
1957
 
1935
- #### eval "-if" condition (%info)
1958
+ my $self = $et;
1959
+ #### eval "-if" condition (%info, $self)
1936
1960
  $result = eval $cond;
1937
1961
 
1938
1962
  $@ and $evalWarning = $@;
@@ -1951,6 +1975,7 @@ sub GetImageInfo($$)
1951
1975
  }
1952
1976
  unless ($result) {
1953
1977
  $verbose and print $vout "-------- $file (failed condition)$progStr\n";
1978
+ EFile($file, 2);
1954
1979
  ++$countFailed;
1955
1980
  return;
1956
1981
  }
@@ -1971,6 +1996,7 @@ sub GetImageInfo($$)
1971
1996
  ++$countGoodWr;
1972
1997
  } else {
1973
1998
  Warn "Error renaming $original\n";
1999
+ EFile($file);
1974
2000
  ++$countBad;
1975
2001
  }
1976
2002
  return;
@@ -1981,7 +2007,7 @@ sub GetImageInfo($$)
1981
2007
  my ($fp, $outfile, $append);
1982
2008
  if ($textOut and $verbose and not $tagOut) {
1983
2009
  ($fp, $outfile, $append) = OpenOutputFile($orig);
1984
- $fp or ++$countBad, return;
2010
+ $fp or EFile($file), ++$countBad, return;
1985
2011
  # delete file if we exit prematurely (unless appending)
1986
2012
  $tmpText = $outfile unless $append;
1987
2013
  $et->Options(TextOut => $fp);
@@ -2013,6 +2039,7 @@ sub GetImageInfo($$)
2013
2039
  Warn "Error: File not found - $file\n";
2014
2040
  FileNotFound($file);
2015
2041
  $outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
2042
+ EFile($file);
2016
2043
  ++$countBad;
2017
2044
  return;
2018
2045
  }
@@ -2062,6 +2089,7 @@ sub GetImageInfo($$)
2062
2089
  }
2063
2090
  if ($info->{Error}) {
2064
2091
  Warn "Error: $info->{Error} - $file\n";
2092
+ EFile($file);
2065
2093
  ++$countBad;
2066
2094
  return;
2067
2095
  }
@@ -2072,7 +2100,7 @@ sub GetImageInfo($$)
2072
2100
  # or if there is none of the requested information available
2073
2101
  if ($binaryOutput or not %$info) {
2074
2102
  my $errs = $et->GetInfo('Warning', 'Error');
2075
- PrintErrors($et, $errs, $file) and $rtnVal = 1;
2103
+ PrintErrors($et, $errs, $file) and EFile($file), $rtnVal = 1;
2076
2104
  } elsif ($et->GetValue('Error') or ($$et{Validate} and $et->GetValue('Warning'))) {
2077
2105
  $rtnVal = 1;
2078
2106
  }
@@ -2080,7 +2108,7 @@ sub GetImageInfo($$)
2080
2108
  # open output file (or stdout if no output file) if not done already
2081
2109
  unless ($outfile or $tagOut) {
2082
2110
  ($fp, $outfile, $append) = OpenOutputFile($orig);
2083
- $fp or ++$countBad, return;
2111
+ $fp or EFile($file), ++$countBad, return;
2084
2112
  $tmpText = $outfile unless $append;
2085
2113
  }
2086
2114
 
@@ -2139,7 +2167,7 @@ sub GetImageInfo($$)
2139
2167
  }
2140
2168
  delete $printFmt{HEAD} unless $outfile; # print header only once per output file
2141
2169
  my $errs = $et->GetInfo('Warning', 'Error');
2142
- PrintErrors($et, $errs, $file);
2170
+ PrintErrors($et, $errs, $file) and EFile($file);
2143
2171
  } elsif (not $disableOutput) {
2144
2172
  my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep);
2145
2173
  if ($fp) {
@@ -2248,7 +2276,7 @@ TAG: foreach $tag (@foundTags) {
2248
2276
  # the same group, and if so suppress this tag instead
2249
2277
  next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
2250
2278
  $group eq $et->GetGroup($1, $showGroup);
2251
- $group = 'Unknown' if not $group and ($xml or $json);
2279
+ $group = 'Unknown' if not $group and ($xml or $json or $csv);
2252
2280
  if ($fp and not ($allGroup or $csv)) {
2253
2281
  if ($lastGroup ne $group) {
2254
2282
  if ($html) {
@@ -2631,6 +2659,7 @@ sub SetImageInfo($$$)
2631
2659
  $outfile = FilenameSPrintf($outOpt, $orig);
2632
2660
  if ($outfile eq '') {
2633
2661
  Warn "Error: Can't create file with zero-length name from $orig\n";
2662
+ EFile($infile);
2634
2663
  ++$countBadCr;
2635
2664
  return 0;
2636
2665
  }
@@ -2647,6 +2676,7 @@ sub SetImageInfo($$$)
2647
2676
  unless (CanCreate($outType)) {
2648
2677
  my $what = $srcType ? 'other types' : 'scratch';
2649
2678
  WarnOnce "Error: Can't create $outType files from $what\n";
2679
+ EFile($infile);
2650
2680
  ++$countBadCr;
2651
2681
  return 0;
2652
2682
  }
@@ -2684,6 +2714,7 @@ sub SetImageInfo($$$)
2684
2714
  $outfile = NextUnusedFilename($outfile);
2685
2715
  if ($et->Exists($outfile) and not $doSetFileName) {
2686
2716
  Warn "Error: '${outfile}' already exists - $infile\n";
2717
+ EFile($infile);
2687
2718
  ++$countBadWr;
2688
2719
  return 0;
2689
2720
  }
@@ -2704,7 +2735,7 @@ sub SetImageInfo($$$)
2704
2735
  $setTags = $tagsFromSrc || $setTags{$dyFile};
2705
2736
  } else {
2706
2737
  $fromFile = FilenameSPrintf($dyFile, $orig);
2707
- ++$countBadWr, return 0 unless defined $fromFile;
2738
+ defined $fromFile or EFile($infile), ++$countBadWr, return 0;
2708
2739
  $setTags = $setTags{$dyFile};
2709
2740
  }
2710
2741
  # do we have multiple -tagsFromFile options with this file?
@@ -2789,7 +2820,7 @@ sub SetImageInfo($$$)
2789
2820
  my $err;
2790
2821
  $err = "You shouldn't write FileName or Directory with TestFile" if defined $newFileName or defined $newDir;
2791
2822
  $err = "The -o option shouldn't be used with TestFile" if defined $outfile;
2792
- $err and Warn("Error: $err - $infile\n"), ++$countBadWr, return 0;
2823
+ $err and Warn("Error: $err - $infile\n"), EFile($infile), ++$countBadWr, return 0;
2793
2824
  $testName = FilenameSPrintf($testName, $orig);
2794
2825
  $testName = Image::ExifTool::GetNewFileName($file, $testName) if $file ne '';
2795
2826
  }
@@ -2816,6 +2847,7 @@ sub SetImageInfo($$$)
2816
2847
  $sameFile = $outfile; # same file, but the name has a different case
2817
2848
  } else {
2818
2849
  Warn "Error: '${outfile}' already exists - $infile\n";
2850
+ EFile($infile);
2819
2851
  ++$countBadWr;
2820
2852
  return 0;
2821
2853
  }
@@ -2835,6 +2867,7 @@ sub SetImageInfo($$$)
2835
2867
  unless ($numSet) {
2836
2868
  # no need to write if no tags set
2837
2869
  print $vout "Nothing changed in $file\n" if defined $verbose;
2870
+ EFile($infile, 1);
2838
2871
  ++$countSameWr;
2839
2872
  return 1;
2840
2873
  }
@@ -2842,6 +2875,7 @@ sub SetImageInfo($$$)
2842
2875
  if ($numSet == $numPseudo) {
2843
2876
  # no need to write if no real tags
2844
2877
  Warn("Error: Nothing to write - $file\n");
2878
+ EFile($infile, 1);
2845
2879
  ++$countBadWr;
2846
2880
  return 0;
2847
2881
  }
@@ -2853,6 +2887,7 @@ sub SetImageInfo($$$)
2853
2887
  } else {
2854
2888
  # file doesn't exist, and we can't create it
2855
2889
  Warn "Error: File not found - $file\n";
2890
+ EFile($infile);
2856
2891
  FileNotFound($file);
2857
2892
  ++$countBadWr;
2858
2893
  return 0;
@@ -2867,9 +2902,11 @@ sub SetImageInfo($$$)
2867
2902
  if ($r1 > 0 or $r2 > 0 or $r3 > 0 or $r4 > 0) {
2868
2903
  ++$countGoodWr;
2869
2904
  } elsif ($r1 < 0 or $r2 < 0 or $r3 < 0 or $r4 < 0) {
2905
+ EFile($infile);
2870
2906
  ++$countBadWr;
2871
2907
  return 0;
2872
2908
  } else {
2909
+ EFile($infile, 1);
2873
2910
  ++$countSameWr;
2874
2911
  }
2875
2912
  if (defined $hardLink or defined $symLink or defined $testName) {
@@ -2883,6 +2920,7 @@ sub SetImageInfo($$$)
2883
2920
  $outfile = "${file}_exiftool_tmp";
2884
2921
  if ($et->Exists($outfile)) {
2885
2922
  Warn("Error: Temporary file already exists: $outfile\n");
2923
+ EFile($infile);
2886
2924
  ++$countBadWr;
2887
2925
  return 0;
2888
2926
  }
@@ -2979,6 +3017,7 @@ sub SetImageInfo($$$)
2979
3017
  } else {
2980
3018
  close(NEW_FILE);
2981
3019
  Warn "Error opening $file for writing\n";
3020
+ EFile($infile);
2982
3021
  $et->Unlink($newFile);
2983
3022
  ++$countBadWr;
2984
3023
  }
@@ -2996,11 +3035,13 @@ sub SetImageInfo($$$)
2996
3035
  # unlink may fail if already renamed or no permission
2997
3036
  if (not $et->Unlink($file)) {
2998
3037
  Warn "Error renaming temporary file to $dstFile\n";
3038
+ EFile($infile);
2999
3039
  $et->Unlink($newFile);
3000
3040
  ++$countBadWr;
3001
3041
  # try renaming again now that the target has been deleted
3002
3042
  } elsif (not $et->Rename($newFile, $dstFile)) {
3003
3043
  Warn "Error renaming temporary file to $dstFile\n";
3044
+ EFile($infile);
3004
3045
  # (don't delete tmp file now because it is all we have left)
3005
3046
  ++$countBadWr;
3006
3047
  } else {
@@ -3022,6 +3063,7 @@ sub SetImageInfo($$$)
3022
3063
  ++$countGoodWr;
3023
3064
  }
3024
3065
  } elsif ($success) {
3066
+ EFile($infile, 1);
3025
3067
  if ($isTemporary) {
3026
3068
  # just erase the temporary file since no changes were made
3027
3069
  $et->Unlink($tmpFile);
@@ -3035,6 +3077,7 @@ sub SetImageInfo($$$)
3035
3077
  }
3036
3078
  print $vout "Nothing changed in $file\n" if defined $verbose;
3037
3079
  } else {
3080
+ EFile($infile);
3038
3081
  $et->Unlink($tmpFile) if defined $tmpFile;
3039
3082
  ++$countBadWr;
3040
3083
  }
@@ -3422,7 +3465,7 @@ sub DoSetFromFile($$$)
3422
3465
  ++$warns while $$info{"Warning ($warns)"};
3423
3466
  $numSet -= $warns;
3424
3467
  }
3425
- PrintErrors($et, $info, $file) and ++$countBadWr, return 0;
3468
+ PrintErrors($et, $info, $file) and EFile($file), ++$countBadWr, return 0;
3426
3469
  Warn "Warning: No writable tags set from $file\n" unless $numSet;
3427
3470
  return 1;
3428
3471
  }
@@ -3508,9 +3551,11 @@ sub ProcessFiles($;$)
3508
3551
  push(@$list, $file);
3509
3552
  } else {
3510
3553
  GetImageInfo($et, $file);
3554
+ $end and Warn("End called - $file\n");
3511
3555
  }
3512
3556
  }
3513
3557
  $et->Options(CharsetFileName => $enc) if $utf8FileName{$file};
3558
+ last if $end;
3514
3559
  }
3515
3560
  }
3516
3561
 
@@ -3588,6 +3633,7 @@ sub ScanDir($$;$)
3588
3633
  next if $file =~ /^\./ and ($recurse == 1 or $file eq '.' or $file eq '..');
3589
3634
  next if $ignore{$file} or ($ignore{SYMLINKS} and -l $path);
3590
3635
  ScanDir($et, $path, $list);
3636
+ last if $end;
3591
3637
  next;
3592
3638
  }
3593
3639
  # apply rules from -ext options
@@ -3618,6 +3664,7 @@ sub ScanDir($$;$)
3618
3664
  {
3619
3665
  Warn("Not writing $path\n");
3620
3666
  WarnOnce("Use -overwrite_original_in_place to write files with Unicode surrogate characters\n");
3667
+ EFile($file);
3621
3668
  ++$countBad;
3622
3669
  next;
3623
3670
  }
@@ -3626,6 +3673,15 @@ sub ScanDir($$;$)
3626
3673
  push(@$list, $path);
3627
3674
  } else {
3628
3675
  GetImageInfo($et, $path);
3676
+ if ($end) {
3677
+ Warn("End called - $file\n");
3678
+ last;
3679
+ }
3680
+ if ($endDir) {
3681
+ $dir =~ s(/$)();
3682
+ Warn("EndDir called - $path\n");
3683
+ last;
3684
+ }
3629
3685
  }
3630
3686
  }
3631
3687
  ++$countDir;
@@ -3683,6 +3739,7 @@ sub FindFileWindows($$)
3683
3739
  $evalWarning =~ s/ at .*//s;
3684
3740
  Warn "Error: [Win32::FindFile] $evalWarning - $wildfile\n";
3685
3741
  undef @files;
3742
+ EFile($wildfile);
3686
3743
  ++$countBad;
3687
3744
  }
3688
3745
  return @files;
@@ -4009,8 +4066,8 @@ sub CreateDirectory($)
4009
4066
  }
4010
4067
  $dir .= '/';
4011
4068
  }
4069
+ ++$countNewDir if $created;
4012
4070
  }
4013
- ++$countNewDir if $created;
4014
4071
  return $created;
4015
4072
  }
4016
4073
 
@@ -4197,6 +4254,29 @@ sub ReadStayOpen($)
4197
4254
  }
4198
4255
  }
4199
4256
 
4257
+ #------------------------------------------------------------------------------
4258
+ # Add new entry to -efile output file
4259
+ # Inputs: 0) file name, 1) -efile option number (0=error, 1=same, 2=failed)
4260
+ sub EFile($$)
4261
+ {
4262
+ my $entry = shift;
4263
+ my $efile = $efile[shift || 0];
4264
+ if (defined $efile and length $entry and $entry ne '-') {
4265
+ my $err;
4266
+ CreateDirectory($efile);
4267
+ if ($mt->Open(\*EFILE_FILE, $efile, '>>')) {
4268
+ print EFILE_FILE $entry, "\n" or Warn("Error writing to $efile\n"), $err = 1;
4269
+ close EFILE_FILE;
4270
+ } else {
4271
+ Warn("Error opening '${efile}' for append\n");
4272
+ $err = 1;
4273
+ }
4274
+ if ($err) {
4275
+ defined $_ and $_ eq $efile and undef $_ foreach @efile;
4276
+ }
4277
+ }
4278
+ }
4279
+
4200
4280
  #------------------------------------------------------------------------------
4201
4281
  # Print list of tags
4202
4282
  # Inputs: 0) message, 1-N) list of tag names
@@ -4304,35 +4384,36 @@ supported by ExifTool (r = read, w = write, c = create):
4304
4384
 
4305
4385
  File Types
4306
4386
  ------------+-------------+-------------+-------------+------------
4307
- 3FR r | DR4 r/w/c | ITC r | ODP r | RIFF r
4308
- 3G2 r/w | DSS r | J2C r | ODS r | RSRC r
4309
- 3GP r/w | DV r | JNG r/w | ODT r | RTF r
4310
- A r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
4311
- AA r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
4312
- AAE r | DYLIB r | JSON r | OGV r | RWZ r
4313
- AAX r/w | EIP r | K25 r | OPUS r | RM r
4314
- ACR r | EPS r/w | KDC r | ORF r/w | SEQ r
4315
- AFM r | EPUB r | KEY r | OTF r | SKETCH r
4316
- AI r/w | ERF r/w | LA r | PAC r | SO r
4317
- AIFF r | EXE r | LFP r | PAGES r | SR2 r/w
4318
- APE r | EXIF r/w/c | LNK r | PBM r/w | SRF r
4319
- ARQ r/w | EXR r | LRV r/w | PCD r | SRW r/w
4320
- ARW r/w | EXV r/w/c | M2TS r | PCX r | SVG r
4321
- ASF r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
4322
- AVI r | FFF r/w | MAX r | PDF r/w | THM r/w
4323
- AVIF r/w | FITS r | MEF r/w | PEF r/w | TIFF r/w
4324
- AZW r | FLA r | MIE r/w/c | PFA r | TORRENT r
4325
- BMP r | FLAC r | MIFF r | PFB r | TTC r
4326
- BPG r | FLIF r/w | MKA r | PFM r | TTF r
4327
- BTF r | FLV r | MKS r | PGF r | TXT r
4328
- CHM r | FPF r | MKV r | PGM r/w | VCF r
4329
- COS r | FPX r | MNG r/w | PLIST r | VRD r/w/c
4330
- CR2 r/w | GIF r/w | MOBI r | PICT r | VSD r
4331
- CR3 r/w | GPR r/w | MODD r | PMP r | WAV r
4332
- CRM r/w | GZ r | MOI r | PNG r/w | WDP r/w
4333
- CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
4334
- CS1 r/w | HDR r | MOV r/w | PPT r | WEBM r
4335
- CSV r | HEIC r/w | MP3 r | PPTX r | WMA r
4387
+ 3FR r | DPX r | ISO r | O r | RAW r/w
4388
+ 3G2 r/w | DR4 r/w/c | ITC r | ODP r | RIFF r
4389
+ 3GP r/w | DSS r | J2C r | ODS r | RSRC r
4390
+ A r | DV r | JNG r/w | ODT r | RTF r
4391
+ AA r | DVB r/w | JP2 r/w | OFR r | RW2 r/w
4392
+ AAE r | DVR-MS r | JPEG r/w | OGG r | RWL r/w
4393
+ AAX r/w | DYLIB r | JSON r | OGV r | RWZ r
4394
+ ACR r | EIP r | K25 r | OPUS r | RM r
4395
+ AFM r | EPS r/w | KDC r | ORF r/w | SEQ r
4396
+ AI r/w | EPUB r | KEY r | OTF r | SKETCH r
4397
+ AIFF r | ERF r/w | LA r | PAC r | SO r
4398
+ APE r | EXE r | LFP r | PAGES r | SR2 r/w
4399
+ ARQ r/w | EXIF r/w/c | LNK r | PBM r/w | SRF r
4400
+ ARW r/w | EXR r | LRV r/w | PCD r | SRW r/w
4401
+ ASF r | EXV r/w/c | M2TS r | PCX r | SVG r
4402
+ AVI r | F4A/V r/w | M4A/V r/w | PDB r | SWF r
4403
+ AVIF r/w | FFF r/w | MAX r | PDF r/w | THM r/w
4404
+ AZW r | FITS r | MEF r/w | PEF r/w | TIFF r/w
4405
+ BMP r | FLA r | MIE r/w/c | PFA r | TORRENT r
4406
+ BPG r | FLAC r | MIFF r | PFB r | TTC r
4407
+ BTF r | FLIF r/w | MKA r | PFM r | TTF r
4408
+ CHM r | FLV r | MKS r | PGF r | TXT r
4409
+ COS r | FPF r | MKV r | PGM r/w | VCF r
4410
+ CR2 r/w | FPX r | MNG r/w | PLIST r | VRD r/w/c
4411
+ CR3 r/w | GIF r/w | MOBI r | PICT r | VSD r
4412
+ CRM r/w | GPR r/w | MODD r | PMP r | WAV r
4413
+ CRW r/w | GZ r | MOI r | PNG r/w | WDP r/w
4414
+ CS1 r/w | HDP r/w | MOS r/w | PPM r/w | WEBP r
4415
+ CSV r | HDR r | MOV r/w | PPT r | WEBM r
4416
+ CZI r | HEIC r/w | MP3 r | PPTX r | WMA r
4336
4417
  DCM r | HEIF r/w | MP4 r/w | PS r/w | WMV r
4337
4418
  DCP r/w | HTML r | MPC r | PSB r/w | WTV r
4338
4419
  DCR r | ICC r/w/c | MPG r | PSD r/w | WV r
@@ -4343,7 +4424,6 @@ supported by ExifTool (r = read, w = write, c = create):
4343
4424
  DNG r/w | INSP r/w | NEF r/w | RAF r/w | XMP r/w/c
4344
4425
  DOC r | INSV r | NRW r/w | RAM r | ZIP r
4345
4426
  DOCX r | INX r | NUMBERS r | RAR r |
4346
- DPX r | ISO r | O r | RAW r/w |
4347
4427
 
4348
4428
  Meta Information
4349
4429
  ----------------------+----------------------+---------------------
@@ -4399,7 +4479,7 @@ L<Input-output text formatting|/Input-output text formatting>
4399
4479
  -f (-forcePrint) Force printing of all specified tags
4400
4480
  -g[NUM...] (-groupHeadings) Organize output by tag group
4401
4481
  -G[NUM...] (-groupNames) Print group name for each tag
4402
- -h (-htmlFormat) Use HMTL formatting for output
4482
+ -h (-htmlFormat) Use HTML formatting for output
4403
4483
  -H (-hex) Show tag ID numbers in hexadecimal
4404
4484
  -htmlDump[OFFSET] Generate HTML-format binary dump
4405
4485
  -j[[+]=JSONFILE] (-json) Export/import tags in JSON format
@@ -4474,6 +4554,7 @@ L<Advanced options|/Advanced options>
4474
4554
  -common_args Define common arguments
4475
4555
  -config CFGFILE Specify configuration file name
4476
4556
  -echo[NUM] TEXT Echo text to stdout or stderr
4557
+ -efile[NUM][!] ERRFILE Save names of files with errors
4477
4558
  -execute[NUM] Execute multiple commands on one line
4478
4559
  -srcfile FMT Process a different source file
4479
4560
  -stay_open FLAG Keep reading -@ argfile even after EOF
@@ -4544,7 +4625,7 @@ delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
4544
4625
  used to write an empty string instead of deleting the tag when no I<VALUE>
4545
4626
  is given, but otherwise it is equivalent to C<=>.
4546
4627
 
4547
- I<TAG> may contain one or more leading family 0, 1 or 2 group names,
4628
+ I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
4548
4629
  prefixed by optional family numbers, and separated colons. If no group name
4549
4630
  is specified, the tag is created in the preferred group, and updated in any
4550
4631
  other location where a same-named tag already exists. The preferred group
@@ -4599,7 +4680,7 @@ the specified group(s) are removed individually, and in this case is it
4599
4680
  possible to exclude individual tags from a mass delete. For example,
4600
4681
  C<-time:all --Exif:Time:All> removes all deletable Time tags except those in
4601
4682
  the EXIF. This difference also applies if family 2 is specified when
4602
- deleting all groups. For example, C<-2all:all=> deletes tags individually,
4683
+ deleting all groups. For example, C<-2all:all=> deletes tags individually,
4603
4684
  while C<-all:all=> deletes entire blocks.
4604
4685
 
4605
4686
  5) The "APP" group names ("APP0" through "APP15") are used to delete JPEG
@@ -4999,13 +5080,13 @@ B<-csv>=I<CSVFILE> feature.
4999
5080
 
5000
5081
  Organize output by tag group. I<NUM> specifies a group family number, and
5001
5082
  may be 0 (general location), 1 (specific location), 2 (category), 3
5002
- (document number), 4 (instance number), 5 (metadata path) or 6 (EXIF/TIFF
5003
- format). B<-g0> is assumed if a family number is not specified, and family
5004
- numbers may be added wherever B<-g> is mentioned in the documentation.
5005
- Multiple families may be specified by separating them with colons. By
5006
- default the resulting group name is simplified by removing any leading
5083
+ (document number), 4 (instance number), 5 (metadata path), 6 (EXIF/TIFF
5084
+ format) or 7 (tag ID). B<-g0> is assumed if a family number is not
5085
+ specified. May be combined with other options to add group names to the
5086
+ output. Multiple families may be specified by separating them with colons.
5087
+ By default the resulting group name is simplified by removing any leading
5007
5088
  C<Main:> and collapsing adjacent identical group names, but this can be
5008
- avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5089
+ avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5009
5090
  Use the B<-listg> option to list group names for a specified family. The
5010
5091
  SavePath and SaveFormat API options are automatically enabled if the
5011
5092
  respective family 5 or 6 group names are requested. See the
@@ -5210,7 +5291,7 @@ with this command:
5210
5291
 
5211
5292
  produces output like this:
5212
5293
 
5213
- -- Generated by ExifTool 11.94 --
5294
+ -- Generated by ExifTool 12.06 --
5214
5295
  File: a.jpg - 2003:10:31 15:44:19
5215
5296
  (f/5.6, 1/60s, ISO 100)
5216
5297
  File: b.jpg - 2006:05:23 11:57:38
@@ -5687,6 +5768,14 @@ processing pass is done at the level specified by the B<-fast> option. For
5687
5768
  example, using B<-if4> is possible if I<EXPR> uses only pseudo System tags,
5688
5769
  and may significantly speed processing if enough files fail the condition.
5689
5770
 
5771
+ The expression has access to the current ExifTool object through C<$self>,
5772
+ and the following special functions are available to allow short-circuiting
5773
+ of the file processing. Both functions have a return value of 1. Case is
5774
+ significant for function names.
5775
+
5776
+ End() - end processing after this file
5777
+ EndDir() - end processing of files in this directory
5778
+
5690
5779
  Notes:
5691
5780
 
5692
5781
  1) The B<-n> and B<-b> options also apply to tags used in I<EXPR>.
@@ -6149,6 +6238,17 @@ is output as the command line is parsed, before the processing of any input
6149
6238
  files. I<NUM> may also be 3 or 4 to output text (to stdout or stderr
6150
6239
  respectively) after processing is complete.
6151
6240
 
6241
+ =item B<-efile>[I<NUM>][!] I<ERRFILE>
6242
+
6243
+ Save the names of files giving errors (I<NUM> missing or 1), files that were
6244
+ unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
6245
+ or any combination thereof (by summing I<NUM>, eg. B<-efile3> is the same
6246
+ has having both B<-efile> and B<-efile2> options with the same I<ERRFILE>).
6247
+ By default, file names are appended to any existing I<ERRFILE>, but
6248
+ I<ERRFILE> is overwritten if an exclamation point is added to the option
6249
+ (eg. B<-efile!>). Saves the name of the file specified by the B<-srcfile>
6250
+ option if applicable.
6251
+
6152
6252
  =item B<-execute>[I<NUM>]
6153
6253
 
6154
6254
  Execute command for all arguments up to this point on the command line (plus
@@ -6202,7 +6302,7 @@ line (see the B<-@> option for details).
6202
6302
 
6203
6303
  3) Write C<-execute\n> to I<ARGFILE>, where C<\n> represents a newline
6204
6304
  sequence. (Note: You may need to flush your write buffers here if using
6205
- buffered output.) Exiftool will then execute the command with the arguments
6305
+ buffered output.) ExifTool will then execute the command with the arguments
6206
6306
  received up to this point, send a "{ready}" message to stdout when done
6207
6307
  (unless the B<-q> or B<-T> option is used), and continue trying to read
6208
6308
  arguments for the next command from I<ARGFILE>. To aid in command/response