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.
- checksums.yaml +4 -4
- data/bin/Changes +172 -2
- data/bin/MANIFEST +8 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +43 -42
- data/bin/exiftool +148 -69
- data/bin/lib/Image/ExifTool.pm +159 -110
- data/bin/lib/Image/ExifTool.pod +114 -87
- data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/APE.pm +2 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -7
- data/bin/lib/Image/ExifTool/Canon.pm +37 -11
- data/bin/lib/Image/ExifTool/CanonCustom.pm +82 -16
- data/bin/lib/Image/ExifTool/DPX.pm +56 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +20 -3
- data/bin/lib/Image/ExifTool/EXE.pm +8 -5
- data/bin/lib/Image/ExifTool/Exif.pm +15 -6
- data/bin/lib/Image/ExifTool/Font.pm +9 -2
- data/bin/lib/Image/ExifTool/GIF.pm +5 -0
- data/bin/lib/Image/ExifTool/GeoTiff.pm +2 -0
- data/bin/lib/Image/ExifTool/Geotag.pm +2 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +56 -22
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +2 -2
- data/bin/lib/Image/ExifTool/ID3.pm +91 -12
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
- data/bin/lib/Image/ExifTool/Lang/de.pm +3 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +44 -24
- data/bin/lib/Image/ExifTool/MacOS.pm +152 -38
- data/bin/lib/Image/ExifTool/Minolta.pm +6 -2
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
- data/bin/lib/Image/ExifTool/Nikon.pm +162 -18
- data/bin/lib/Image/ExifTool/Olympus.pm +39 -17
- data/bin/lib/Image/ExifTool/PNG.pm +14 -3
- data/bin/lib/Image/ExifTool/PPM.pm +5 -5
- data/bin/lib/Image/ExifTool/Panasonic.pm +148 -14
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +33 -0
- data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +269 -29
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +463 -75
- data/bin/lib/Image/ExifTool/README +21 -20
- data/bin/lib/Image/ExifTool/RIFF.pm +15 -3
- data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
- data/bin/lib/Image/ExifTool/RTF.pm +12 -7
- data/bin/lib/Image/ExifTool/Ricoh.pm +19 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -0
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +40 -33
- data/bin/lib/Image/ExifTool/Sony.pm +425 -34
- data/bin/lib/Image/ExifTool/TagLookup.pm +1961 -1874
- data/bin/lib/Image/ExifTool/TagNames.pod +394 -86
- data/bin/lib/Image/ExifTool/Validate.pm +4 -4
- data/bin/lib/Image/ExifTool/WriteExif.pl +3 -2
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +23 -15
- data/bin/lib/Image/ExifTool/Writer.pl +44 -21
- data/bin/lib/Image/ExifTool/XMP.pm +42 -5
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
- data/bin/perl-Image-ExifTool.spec +42 -41
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +8 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: de420a08613ea979229474f4e30c7fb955722a925df577be54f7ecd1d699a0cc
|
4
|
+
data.tar.gz: cf0aceff1910dfbfbdf48f45fb128d288c98600eda74278552e7b8c46929c112
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fac07325ff3360e702016c0e2c131f9a388c471ee3d04850516c6afb100416a93da6caaf35388e1cfc3d6763a357492294defeb7aff2b11ee5d00d6c8a980a31
|
7
|
+
data.tar.gz: 85f7e37ceeb7571857c83de445151f67c54e55fb2293c68ea3e02b556555f8b982825b9bce2ed8ec5c0e8a4acc09318a562af7dbeed115b180fe610089d86d86
|
data/bin/Changes
CHANGED
@@ -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
|
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
|
data/bin/MANIFEST
CHANGED
@@ -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
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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-
|
109
|
-
cd Image-ExifTool-
|
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.
|
data/bin/exiftool
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
use strict;
|
11
11
|
require 5.004;
|
12
12
|
|
13
|
-
my $version = '
|
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
|
294
|
-
sub Image::ExifTool::End() { return
|
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} = $
|
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
|
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
|
-
|
3556
|
+
$end and Warn("End called - $file\n");
|
3517
3557
|
}
|
3518
3558
|
}
|
3519
3559
|
$et->Options(CharsetFileName => $enc) if $utf8FileName{$file};
|
3520
|
-
last if
|
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
|
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 (
|
3678
|
+
if ($end) {
|
3638
3679
|
Warn("End called - $file\n");
|
3639
3680
|
last;
|
3640
3681
|
}
|
3641
|
-
if (
|
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
|
-
|
4325
|
-
|
4326
|
-
|
4327
|
-
|
4328
|
-
|
4329
|
-
|
4330
|
-
|
4331
|
-
|
4332
|
-
|
4333
|
-
|
4334
|
-
|
4335
|
-
|
4336
|
-
|
4337
|
-
|
4338
|
-
|
4339
|
-
|
4340
|
-
|
4341
|
-
|
4342
|
-
|
4343
|
-
|
4344
|
-
|
4345
|
-
|
4346
|
-
|
4347
|
-
|
4348
|
-
|
4349
|
-
|
4350
|
-
|
4351
|
-
|
4352
|
-
|
4353
|
-
|
4354
|
-
|
4355
|
-
|
4356
|
-
|
4357
|
-
|
4358
|
-
|
4359
|
-
|
4360
|
-
|
4361
|
-
|
4362
|
-
|
4363
|
-
|
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
|
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
|
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.
|
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)
|
5020
|
-
format). B<-g0> is assumed if a family number is not
|
5021
|
-
|
5022
|
-
Multiple families may be specified by separating them with colons.
|
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
|
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.)
|
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
|