exiftool_vendored 11.94.0 → 12.06.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
|