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.
- checksums.yaml +5 -5
- data/bin/Changes +163 -3
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +32 -32
- data/bin/exiftool +152 -52
- data/bin/lib/Image/ExifTool.pm +166 -115
- data/bin/lib/Image/ExifTool.pod +108 -81
- 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 +6 -3
- 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 +16 -3
- 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 +69 -21
- data/bin/lib/Image/ExifTool/GoPro.pm +10 -1
- 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/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/MWG.pm +9 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +3 -2
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +11 -10
- data/bin/lib/Image/ExifTool/Nikon.pm +156 -18
- data/bin/lib/Image/ExifTool/Olympus.pm +34 -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 +147 -13
- 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 +277 -33
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +460 -67
- data/bin/lib/Image/ExifTool/README +21 -20
- data/bin/lib/Image/ExifTool/RIFF.pm +123 -3
- 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 +379 -12
- data/bin/lib/Image/ExifTool/TagLookup.pm +1959 -1874
- data/bin/lib/Image/ExifTool/TagNames.pod +346 -55
- 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 +26 -15
- data/bin/lib/Image/ExifTool/Writer.pl +52 -23
- data/bin/lib/Image/ExifTool/XMP.pm +41 -4
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +123 -0
- data/bin/perl-Image-ExifTool.spec +31 -31
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b6fbacc803486908bf63bd351d8ea3d31bbe0cf1217b6bbab9ef074cde3f0ee3
|
4
|
+
data.tar.gz: fcb3492aae1fbdf6587a73ea5546eed530c09ac20c67fc1a77057becd1e87b0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7101bbb72920052732e86bb2c44b828bbb901f89363768ebc5346d5225db5919e79de5de2ca8b0af2c77ccd6d62a9f2bf677c61479b877d06fecb88bbd8b29f8
|
7
|
+
data.tar.gz: 0d08e16271b5bd6fe9c4f9d154190a799b3d4bd3b3bdd777a42afa4b29786595869a3068fbc213a68135559d275bcfcf07a08f22d9fdc242130770905ca826cc
|
data/bin/Changes
CHANGED
@@ -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
|
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
|
-
|
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
|
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
|
@@ -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
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
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 |
|
18
|
-
3G2 r/w |
|
19
|
-
3GP r/w |
|
20
|
-
A r |
|
21
|
-
AA r |
|
22
|
-
AAE r |
|
23
|
-
AAX r/w |
|
24
|
-
ACR r |
|
25
|
-
AFM r |
|
26
|
-
AI r/w |
|
27
|
-
AIFF r |
|
28
|
-
APE r |
|
29
|
-
ARQ r/w |
|
30
|
-
ARW r/w |
|
31
|
-
ASF r |
|
32
|
-
AVI r |
|
33
|
-
AVIF r/w |
|
34
|
-
AZW r |
|
35
|
-
BMP r |
|
36
|
-
BPG r |
|
37
|
-
BTF r |
|
38
|
-
CHM r |
|
39
|
-
COS r |
|
40
|
-
CR2 r/w |
|
41
|
-
CR3 r/w |
|
42
|
-
CRM r/w |
|
43
|
-
CRW r/w |
|
44
|
-
CS1 r/w |
|
45
|
-
CSV 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-
|
109
|
-
cd Image-ExifTool-
|
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.
|
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.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
|
-
|
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
|
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 |
|
4308
|
-
3G2 r/w |
|
4309
|
-
3GP r/w |
|
4310
|
-
A r |
|
4311
|
-
AA r |
|
4312
|
-
AAE r |
|
4313
|
-
AAX r/w |
|
4314
|
-
ACR r |
|
4315
|
-
AFM r |
|
4316
|
-
AI r/w |
|
4317
|
-
AIFF r |
|
4318
|
-
APE r |
|
4319
|
-
ARQ r/w |
|
4320
|
-
ARW r/w |
|
4321
|
-
ASF r |
|
4322
|
-
AVI r |
|
4323
|
-
AVIF r/w |
|
4324
|
-
AZW r |
|
4325
|
-
BMP r |
|
4326
|
-
BPG r |
|
4327
|
-
BTF r |
|
4328
|
-
CHM r |
|
4329
|
-
COS r |
|
4330
|
-
CR2 r/w |
|
4331
|
-
CR3 r/w |
|
4332
|
-
CRM r/w |
|
4333
|
-
CRW r/w |
|
4334
|
-
CS1 r/w |
|
4335
|
-
CSV 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
|
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
|
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.
|
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)
|
5003
|
-
format). B<-g0> is assumed if a family number is not
|
5004
|
-
|
5005
|
-
Multiple families may be specified by separating them with colons.
|
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
|
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.)
|
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
|