exiftool_vendored 11.99.0 → 12.11.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 +201 -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 +172 -99
- data/bin/lib/Image/ExifTool.pm +170 -117
- data/bin/lib/Image/ExifTool.pod +132 -97
- 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 +21 -10
- data/bin/lib/Image/ExifTool/Canon.pm +202 -13
- 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 +22 -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 +6 -1
- 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 +48 -22
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +86 -12
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -0
- data/bin/lib/Image/ExifTool/Import.pm +12 -9
- data/bin/lib/Image/ExifTool/JSON.pm +27 -4
- 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 +1 -1
- data/bin/lib/Image/ExifTool/MPF.pm +2 -2
- data/bin/lib/Image/ExifTool/MacOS.pm +154 -38
- data/bin/lib/Image/ExifTool/Matroska.pm +3 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +7 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +143 -17
- data/bin/lib/Image/ExifTool/Olympus.pm +40 -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 +34 -0
- data/bin/lib/Image/ExifTool/Parrot.pm +2 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +11 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +240 -37
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +419 -60
- data/bin/lib/Image/ExifTool/README +25 -21
- data/bin/lib/Image/ExifTool/RSRC.pm +17 -11
- data/bin/lib/Image/ExifTool/Radiance.pm +7 -2
- 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 +423 -39
- data/bin/lib/Image/ExifTool/Stim.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +5798 -5675
- data/bin/lib/Image/ExifTool/TagNames.pod +575 -100
- data/bin/lib/Image/ExifTool/Validate.pm +4 -4
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +30 -21
- data/bin/lib/Image/ExifTool/Writer.pl +49 -24
- data/bin/lib/Image/ExifTool/XMP.pm +99 -17
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -0
- 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 +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7f2c837f1bff7860cad5011a04c5671d88d4a761c197c2442c73791c5d87b22
|
4
|
+
data.tar.gz: 49b1ea22c9fe6668b08f0b021cbe492cc9b870d931d92a4fe127ba7ada41d757
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a66c9d7b5f2f9f4118ff5c4355fbff604a7173c0b6a90349e2884624a55e1216e77b9e00c958515447d58d5f9d3e612f48e6608aeea8ae6ee3528512c39db1b2
|
7
|
+
data.tar.gz: 6d74f8b745f7c964dad82bca92d98c07b318d4895d12d4f10cfc2e8c212d326abdd02e60afff8af7e936c2b89802277b4ae79b4f3d1da2642f0ffd9e4717d0eb
|
data/bin/Changes
CHANGED
@@ -4,9 +4,207 @@ 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
|
+
Nov. 27, 2020 - Version 12.11
|
11
|
+
|
12
|
+
- Added -csvDelim option
|
13
|
+
- Added new Canon and Olympus LensType values (thanks LibRaw)
|
14
|
+
- Added a warning if ICC_Profile is deleted from an image (github issue #63)
|
15
|
+
- EndDir() function for -if option now works when -fileOrder is used
|
16
|
+
- Changed FileSize conversion to use binary prefixes since that is how the
|
17
|
+
conversion is currently done (eg. MiB instead of MB)
|
18
|
+
- Patched -csv option so columns aren't resorted when using -G option and one
|
19
|
+
of the tags is missing from a file
|
20
|
+
- Fixed incompatiblity with Google Photos when writing UserData:GPSCoordinates
|
21
|
+
to MP4 videos
|
22
|
+
- Fixed problem where the tags available in a -p format string were limited to
|
23
|
+
the same as the -if[NUM] option when NUM was specified
|
24
|
+
- Fixed incorrect decoding of SourceFileIndex/SourceDirectoryIndex for Ricoh
|
25
|
+
models
|
26
|
+
|
27
|
+
Nov. 12, 2020 - Version 12.10
|
28
|
+
|
29
|
+
- Added -validate test for proper TIFF magic number in JPEG EXIF header
|
30
|
+
- Added support for Nikon Z7 LensData version 0801
|
31
|
+
- Added a new XMP-GPano tag
|
32
|
+
- Decode ColorData for the Canon EOS 1DXmkIII (thanks LibRaw)
|
33
|
+
- Decode more tags for the Sony ILCE-7SM3 (thanks Jos Roost)
|
34
|
+
- Automatically apply QuickTimeUTC option for CR3 files
|
35
|
+
- Improved decoding of XAttrMDLabel from MacOS files
|
36
|
+
- Ignore time zones when writing date/time values and using the -d option
|
37
|
+
- Enhanced -echo3 and -echo4 options to allow exit status to be returned
|
38
|
+
- Changed -execute so the -q option no longer suppresses the "{ready}" message
|
39
|
+
when a synchronization number is used (eg. -execute123)
|
40
|
+
|
41
|
+
Oct. 29, 2020 - Version 12.09
|
42
|
+
|
43
|
+
- Added ability to copy CanonMakerNotes from CR3 images to other file types
|
44
|
+
- Added read support for ON1 presets file (.ONP)
|
45
|
+
- Added two new CanonModelID values
|
46
|
+
- Added trailing "/" when writing QuickTime:GPSCoordinates
|
47
|
+
- Added a number of new XMP-crs tags
|
48
|
+
- Added a new Sony LensType (thanks Jos Roost)
|
49
|
+
- Added a new Nikon Z lens (thanks LibRaw)
|
50
|
+
- Added a new Canon LensType
|
51
|
+
- Decode ColorData for Canon EOS R5/R6
|
52
|
+
- Decode a couple of new HEIF tags
|
53
|
+
- Decode FirmwareVersion for Canon M50
|
54
|
+
- Improved decoding of Sony CreativeStyle tags (thanks Jos Roost)
|
55
|
+
- Improved parsing of Radiance files to recognize comments
|
56
|
+
- Renamed GIF AspectRatio tag to PixelAspectRatio
|
57
|
+
- Patched EndDir() feature so subdirectories are always processed when -r is
|
58
|
+
used (previously, EndDir() would end processing of a directory completely)
|
59
|
+
- Yet another tweak to the EventTime formatting rules (also allow time-only
|
60
|
+
values with fractional seconds and a time zone)
|
61
|
+
- Avoid loading GoPro module unnecessarily when reading MP4 videos from some
|
62
|
+
other cameras
|
63
|
+
- Fixed problem with an incorrect naming of CodecID tags in some MKV videos
|
64
|
+
- Fixed verbose output to avoid "adding" messages for existing flattened XMP
|
65
|
+
tags
|
66
|
+
|
67
|
+
Oct. 15, 2020 - Version 12.08
|
68
|
+
|
69
|
+
- Added read support for MacOS "._" sidecar files
|
70
|
+
- Added a new Sony LensType (thanks Jos Roost)
|
71
|
+
- Recognize Mac OS X xattr files
|
72
|
+
- Extract ThumbnailImage from MP4 videos of more dashcam models
|
73
|
+
- Improved decoding of a number of Sony tags (thanks Jos Roost)
|
74
|
+
- Fixed problem where the special -if EndDir() function didn't work properly
|
75
|
+
for directories after the one in which it was initially called
|
76
|
+
- Patched to read DLL files which don't have a .rsrc section (thanks Hank)
|
77
|
+
- Patched to support new IGC date format when geotagging
|
78
|
+
- Patched to read DLL files with an invalid size in the header
|
79
|
+
|
80
|
+
Oct. 2, 2020 - Version 12.07
|
81
|
+
|
82
|
+
- Added support for GoPro .360 videos
|
83
|
+
- Added some new Canon RF and Nikkor Z lenses (thanks LibRaw)
|
84
|
+
- Added some new Sony LensType and CreativeStyle values and decode some
|
85
|
+
ILCE-7C tags (thanks Jos Roost)
|
86
|
+
- Added a number of new Olympus SceneMode values (thanks Herb)
|
87
|
+
- Added a new Nikon LensID
|
88
|
+
- Decode more timed metadata from Insta360 videos (thanks Thomas Allen)
|
89
|
+
- Decode timed GPS from videos of more Garmin dashcam models
|
90
|
+
- Decode a new GoPro video tag
|
91
|
+
- Reformat time-only EventTime values when writing and prevent arbitrary
|
92
|
+
strings from being written
|
93
|
+
- Patched to accept backslashes in SourceFile entries for -csv option
|
94
|
+
|
95
|
+
Sept. 11, 2020 - Version 12.06
|
96
|
+
|
97
|
+
- Added read support for Lyrics3 metadata (and fixed problem where APE
|
98
|
+
metadata may be ignored if Lyrics3 exists)
|
99
|
+
- Added a new Panasonic VideoBurstMode value (thanks Klaus Homeister)
|
100
|
+
- Added a new Olympus MultipleExposureMode value
|
101
|
+
- Added a new Nikon LensID
|
102
|
+
- Added back conversions for XMP-dwc EventTime that were removed in 12.04 with
|
103
|
+
a patch to allow time-only values
|
104
|
+
- Decode GIF AspectRatio
|
105
|
+
- Decode Olympus FocusBracketStepSize (thanks Karsten)
|
106
|
+
- Extract PNG iDOT chunk in Binary format with the name AppleDataOffsets
|
107
|
+
- Process PNG images which do not start with mandatory IHDR chunk
|
108
|
+
|
109
|
+
Aug. 24, 2020 - Version 12.05
|
110
|
+
|
111
|
+
- Added a new Panasonic SelfTimer value (thanks Herb)
|
112
|
+
- Decode a few more DPX tags (thanks Harry Mallon)
|
113
|
+
- Extract AIFF APPL tag as ApplicationData
|
114
|
+
- Fixed bug writing QuickTime ItemList 'gnre' Genre values
|
115
|
+
- Fixed an incorrect value for Panasonic VideoBurstResolution (thanks Herb)
|
116
|
+
- Fixed problem when applying a time shift to some invalid makernote date/time
|
117
|
+
values
|
118
|
+
|
119
|
+
Aug. 10, 2020 - Version 12.04
|
120
|
+
|
121
|
+
- Added read support for Zeiss ZISRAW CZI files
|
122
|
+
- Added some new values for a couple of Olympus tags (thanks Sebastian)
|
123
|
+
- Decode a number of new tags for the Sony ILCE-7SM3 (thanks Jos Roost)
|
124
|
+
- Removed formatting restrictions on XMP-dwc:EventTime to allow a time-only
|
125
|
+
value to be written
|
126
|
+
- Moved new QuckTime ItemList tags added in version 12.02 to the proper group
|
127
|
+
(they were incorrectly added to the Keys group)
|
128
|
+
- Improved QuickTime -v3 output to show default language codes
|
129
|
+
- Patched -lang option to work for the values of somet tags with coded
|
130
|
+
translations
|
131
|
+
- Patched the format of a number of QuickTime tags when writing for improved
|
132
|
+
compatibility with iTunes and AtomicParsley
|
133
|
+
- Patched to write a default QuickTime language code of 0x0000 (null) instead
|
134
|
+
of 0x55c4 ('und')
|
135
|
+
|
136
|
+
July 29, 2020 - Version 12.03
|
137
|
+
|
138
|
+
- Added family 7 group names to allow tag ID's to be specified when reading
|
139
|
+
and writing
|
140
|
+
- Fixed a couple of typos in tag values (thanks Herb)
|
141
|
+
- API Changes:
|
142
|
+
- Added HexTagIDs option
|
143
|
+
- Enhanced GetNewValue() to allow family 7 groups names to be used
|
144
|
+
- Internal Changes:
|
145
|
+
- Changed Composite tag ID's to use "-" instead of "::" as a separator
|
146
|
+
|
147
|
+
July 27, 2020 - Version 12.02
|
148
|
+
|
149
|
+
- Added support for a number of new QuickTime ItemList tags
|
150
|
+
- Added support for writing XMP-xmp:RatingPercent
|
151
|
+
- Added a new Sony LensType (thanks Jos Roost and LibRaw)
|
152
|
+
- Added a new Pentax LensType (thanks James O'Neill)
|
153
|
+
- Decode barcodes from Ricoh APP5 RMETA segment
|
154
|
+
- Decode a few new QuickTime tags written by Ricoh and Garmin cameras
|
155
|
+
- Decode timed GPS from Sony A7R IV MP4 videos
|
156
|
+
- Decode timed GPS from 70mai dashcam videos
|
157
|
+
- Decode a few new Panasonic tags (thanks Klaus Homeister)
|
158
|
+
- Decode altitude and more accurate latitude/longitude from Transcend Driver
|
159
|
+
Pro 230 MP4 videos
|
160
|
+
- Improved decoding of some Canon EOS 1DXmkIII custom functions
|
161
|
+
- Allow integer QuickTime TrackNumber and DiskNumber values
|
162
|
+
- Relax validity check of QuickTime:ContentCreateDate when writing with -n
|
163
|
+
- Removed "Com" from the start of some unknown ItemList tag names
|
164
|
+
- Patched CanonCustom decoding for bug in Canon EOS-1DX firmware
|
165
|
+
- Changed QuickTime CleanAperture tags decode as signed rationals
|
166
|
+
|
167
|
+
June 24, 2020 - Version 12.01
|
168
|
+
|
169
|
+
- Added a new NEFCompression value (thanks Warren Hatch)
|
170
|
+
- Added a new Sony LensType (thanks Jos Roost)
|
171
|
+
- Decode timed GPS from Rove Stealth 4K dashcam videos
|
172
|
+
- Fixed bug which would corrupt TIFF images with 16-bit image data offsets
|
173
|
+
when writing (these are very rare)
|
174
|
+
|
175
|
+
June 11, 2020 - Version 12.00 (production release)
|
176
|
+
|
177
|
+
- Added two new Olympus LensTypes (thanks Don Komarechka for one)
|
178
|
+
- Added two new Sony LensType values (thanks Jos Roost)
|
179
|
+
- Added a few new Nikon LensID's (thanks Mathieu Carbou)
|
180
|
+
- Added support for the Sony ZV-1 (thanks Jos Roost)
|
181
|
+
- Added a new CanonModelID (thanks Jos Roost)
|
182
|
+
- Added missing MimeType values for HEICS and HEIFS files
|
183
|
+
- Added definitions for a number of new XMP-crs tags
|
184
|
+
- Recognize WOFF and WOFF2 font files
|
185
|
+
- Decode streaming GPS from Roadhawk, EEEkit and 360Fly MP4 videos
|
186
|
+
- Decode a number of new tags for the Nikon D6 (thanks Warren Hatch)
|
187
|
+
- Decode a couple more AF tags for the D500/D850
|
188
|
+
- Decode a number of new Panasonic tags
|
189
|
+
- Improved Composite LensID logic (thanks Matt Stancliff)
|
190
|
+
- Enhanced -v option to state when a directory has 0 entries
|
191
|
+
- Removed a couple of incorrect Validate warnings for bilevel TIFF images
|
192
|
+
- Drop ContrastCurve tag when copying from NEF to JPEG
|
193
|
+
- Changed -csv output to add "Unknown" group name to column headings for
|
194
|
+
missing tags when -f and -G options are used
|
195
|
+
- Patched to support new XMP LensID format for Nikon cameras as written by
|
196
|
+
Apple Photos (thanks Mattsta)
|
197
|
+
- Fixed problem extracting metadata from Sigma DP2 Quattro X3F files
|
198
|
+
- Fixed End() and EndDir() functions so they work when writing and when the -v
|
199
|
+
option is used
|
200
|
+
- Fixed problem recognizing some PGM files
|
201
|
+
- Fixed bug in offsets for some Photoshop information in -v3 output
|
202
|
+
- Fixed problem writing a list containing empty elements inside an XMP
|
203
|
+
structure
|
204
|
+
- API Changes:
|
205
|
+
- Added NoMultiExif option
|
206
|
+
- Changed FilterW option to not write tag if $_ is set to undef
|
207
|
+
|
10
208
|
May 11, 2020 - Version 11.99
|
11
209
|
|
12
210
|
- Added a new Nikon LensID (thanks Mykyta Kozlov)
|
@@ -44,7 +242,8 @@ Apr. 24, 2020 - Version 11.96
|
|
44
242
|
|
45
243
|
Apr. 23, 2020 - Version 11.95
|
46
244
|
|
47
|
-
- Added Exit() and ExitDir() functions for use in -if conditions
|
245
|
+
- Added Exit() and ExitDir() functions for use in -if conditions (NOTE: these
|
246
|
+
function names changed to End() and EndDir() in ExifTool 11.96)
|
48
247
|
- Enhanced -geotag feature to support a more flexible input CSV file format
|
49
248
|
- Enhanced -if and API Filter options to allow access to ExifTool object via
|
50
249
|
$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 | RIFF r
|
18
|
+
3FR r | DR4 r/w/c | J2C r | ODS r | RSRC r
|
19
|
+
3G2 r/w | DSS r | JNG r/w | ODT r | RTF r
|
20
|
+
3GP r/w | DV r | JP2 r/w | OFR r | RW2 r/w
|
21
|
+
A r | DVB r/w | JPEG r/w | OGG r | RWL r/w
|
22
|
+
AA r | DVR-MS r | JSON r | OGV r | RWZ r
|
23
|
+
AAE r | DYLIB r | K25 r | ONP r | RM r
|
24
|
+
AAX r/w | EIP r | KDC r | OPUS r | SEQ r
|
25
|
+
ACR r | EPS r/w | KEY r | ORF r/w | SKETCH r
|
26
|
+
AFM r | EPUB r | LA r | OTF r | SO r
|
27
|
+
AI r/w | ERF r/w | LFP r | PAC r | SR2 r/w
|
28
|
+
AIFF r | EXE r | LNK r | PAGES r | SRF r
|
29
|
+
APE r | EXIF r/w/c | LRV r/w | PBM r/w | SRW r/w
|
30
|
+
ARQ r/w | EXR r | M2TS r | PCD r | SVG r
|
31
|
+
ARW r/w | EXV r/w/c | M4A/V r/w | PCX r | SWF r
|
32
|
+
ASF r | F4A/V r/w | MACOS r | PDB r | THM r/w
|
33
|
+
AVI r | FFF r/w | MAX r | PDF r/w | TIFF r/w
|
34
|
+
AVIF r/w | FITS r | MEF r/w | PEF r/w | TORRENT r
|
35
|
+
AZW r | FLA r | MIE r/w/c | PFA r | TTC r
|
36
|
+
BMP r | FLAC r | MIFF r | PFB r | TTF r
|
37
|
+
BPG r | FLIF r/w | MKA r | PFM r | TXT r
|
38
|
+
BTF r | FLV r | MKS r | PGF r | VCF r
|
39
|
+
CHM r | FPF r | MKV r | PGM r/w | VRD r/w/c
|
40
|
+
COS r | FPX r | MNG r/w | PLIST r | VSD r
|
41
|
+
CR2 r/w | GIF r/w | MOBI r | PICT r | WAV r
|
42
|
+
CR3 r/w | GPR r/w | MODD r | PMP r | WDP r/w
|
43
|
+
CRM r/w | GZ r | MOI r | PNG r/w | WEBP r
|
44
|
+
CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBM r
|
45
|
+
CS1 r/w | HDR r | MOV r/w | PPT r | WMA r
|
46
|
+
CSV r | HEIC r/w | MP3 r | PPTX r | WMV r
|
47
|
+
CZI r | HEIF r/w | MP4 r/w | PS r/w | WTV r
|
48
|
+
DCM r | HTML r | MPC r | PSB r/w | WV r
|
49
|
+
DCP r/w | ICC r/w/c | MPG r | PSD r/w | X3F r/w
|
50
|
+
DCR r | ICS r | MPO r/w | PSP r | XCF r
|
51
|
+
DFONT r | IDML r | MQV r/w | QTIF r/w | XLS r
|
52
|
+
DIVX r | IIQ r/w | MRW r/w | R3D r | XLSX r
|
53
|
+
DJVU r | IND r/w | MXF r | RA r | XMP r/w/c
|
54
|
+
DLL r | INSP r/w | NEF r/w | RAF r/w | ZIP r
|
55
|
+
DNG r/w | INSV r | NRW r/w | RAM r |
|
56
|
+
DOC r | INX r | NUMBERS r | RAR r |
|
57
|
+
DOCX r | ISO r | O r | RAW r/w |
|
57
58
|
|
58
59
|
Meta Information
|
59
60
|
----------------------+----------------------+---------------------
|
@@ -105,8 +106,8 @@ your home directory, then you would type the following commands in a
|
|
105
106
|
terminal window to extract and run ExifTool:
|
106
107
|
|
107
108
|
cd ~/Desktop
|
108
|
-
gzip -dc Image-ExifTool-11.
|
109
|
-
cd Image-ExifTool-11
|
109
|
+
gzip -dc Image-ExifTool-12.11.tar.gz | tar -xf -
|
110
|
+
cd Image-ExifTool-12.11
|
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 = '11
|
13
|
+
my $version = '12.11';
|
14
14
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
16
16
|
my $exeDir;
|
@@ -136,11 +136,13 @@ my $countSameWr; # count files written OK but not changed
|
|
136
136
|
my $critical; # flag for critical operations (disable CTRL-C)
|
137
137
|
my $csv; # flag for CSV option (set to "CSV", or maybe "JSON" when writing)
|
138
138
|
my $csvAdd; # flag to add CSV information to existing lists
|
139
|
+
my $csvDelim; # delimiter for CSV files
|
139
140
|
my $csvSaveCount; # save counter for last CSV file loaded
|
140
141
|
my $deleteOrig; # 0=restore original files, 1=delete originals, 2=delete w/o asking
|
141
142
|
my $disableOutput; # flag to disable normal output
|
142
143
|
my $doSetFileName; # flag set if FileName may be written
|
143
144
|
my $doUnzip; # flag to extract info from .gz and .bz2 files
|
145
|
+
my ($end,$endDir,%endDir); # flags to end processing
|
144
146
|
my $escapeC; # C-style escape
|
145
147
|
my $escapeHTML; # flag to escape printed values for html
|
146
148
|
my $evalWarning; # warning from eval
|
@@ -238,6 +240,7 @@ my %optArgs = (
|
|
238
240
|
'-c' => 1, '-coordformat' => 1,
|
239
241
|
'-charset' => 0, # (optional arg; OK because arg cannot begin with "-")
|
240
242
|
'-config' => 1,
|
243
|
+
'-csvdelim' => 1,
|
241
244
|
'-d' => 1, '-dateformat' => 1,
|
242
245
|
'-D' => 0, # necessary to avoid matching lower-case equivalent
|
243
246
|
'-echo' => 1, '-echo1' => 1, '-echo2' => 1, '-echo3' => 1, '-echo4' => 1,
|
@@ -245,11 +248,12 @@ my %optArgs = (
|
|
245
248
|
'-efile!' => 1, '-efile1!' => 1, '-efile2!' => 1, '-efile3!' => 1, '-efile4!' => 1,
|
246
249
|
'-ext' => 1, '--ext' => 1, '-ext+' => 1, '--ext+' => 1,
|
247
250
|
'-extension' => 1, '--extension' => 1, '-extension+' => 1, '--extension+' => 1,
|
248
|
-
'-fileorder' => 1,
|
251
|
+
'-fileorder' => 1, '-fileorder0' => 1, '-fileorder1' => 1, '-fileorder2' => 1,
|
252
|
+
'-fileorder3' => 1, '-fileorder4' => 1, '-fileorder5' => 1,
|
249
253
|
'-geotag' => 1,
|
250
254
|
'-globaltimeshift' => 1,
|
251
255
|
'-i' => 1, '-ignore' => 1,
|
252
|
-
'-if' => 1, '-if0' => 1, '-if1' => 1, '-if2' => 1, '-if3' => 1, '-if4' => 1,
|
256
|
+
'-if' => 1, '-if0' => 1, '-if1' => 1, '-if2' => 1, '-if3' => 1, '-if4' => 1, '-if5' => 1,
|
253
257
|
'-lang' => 0, # (optional arg; cannot begin with "-")
|
254
258
|
'-listitem' => 1,
|
255
259
|
'-o' => 1, '-out' => 1,
|
@@ -293,8 +297,8 @@ my %altRecommends = (
|
|
293
297
|
my %unescapeChar = ( 't'=>"\t", 'n'=>"\n", 'r'=>"\r" );
|
294
298
|
|
295
299
|
# special subroutines used in -if condition
|
296
|
-
sub Image::ExifTool::EndDir() { return
|
297
|
-
sub Image::ExifTool::End() { return
|
300
|
+
sub Image::ExifTool::EndDir() { return $endDir = 1 }
|
301
|
+
sub Image::ExifTool::End() { return $end = 1 }
|
298
302
|
|
299
303
|
# exit routine
|
300
304
|
sub Exit {
|
@@ -365,13 +369,21 @@ if (grep /^-common_args$/i, @ARGV) {
|
|
365
369
|
# loop over sets of command-line arguments separated by "-execute"
|
366
370
|
Command: for (;;) {
|
367
371
|
|
368
|
-
|
369
|
-
|
372
|
+
if (@echo3) {
|
373
|
+
my $str = join "\n", @echo3, "\n";
|
374
|
+
$str =~ s/\$\{status\}/$rtnVal/ig;
|
375
|
+
print STDOUT $str;
|
376
|
+
}
|
377
|
+
if (@echo4) {
|
378
|
+
my $str = join "\n", @echo4, "\n";
|
379
|
+
$str =~ s/\$\{status\}/$rtnVal/ig;
|
380
|
+
print STDERR $str;
|
381
|
+
}
|
370
382
|
|
371
383
|
$rafStdin->Close() if $rafStdin;
|
372
384
|
undef $rafStdin;
|
373
385
|
|
374
|
-
# save
|
386
|
+
# save our previous return codes
|
375
387
|
$rtnValPrev = $rtnVal;
|
376
388
|
$rtnValApp = $rtnVal if $rtnVal;
|
377
389
|
|
@@ -386,7 +398,7 @@ if ($binaryStdout) {
|
|
386
398
|
|
387
399
|
# flush console and print "{ready}" message if -stay_open is in effect
|
388
400
|
if ($stayOpen >= 2) {
|
389
|
-
if ($quiet) {
|
401
|
+
if ($quiet and not defined $executeID) {
|
390
402
|
# flush output if possible
|
391
403
|
eval { require IO::Handle } and STDERR->flush(), STDOUT->flush();
|
392
404
|
} else {
|
@@ -420,6 +432,7 @@ undef %countLink;
|
|
420
432
|
undef %created;
|
421
433
|
undef %csvTags;
|
422
434
|
undef %database;
|
435
|
+
undef %endDir;
|
423
436
|
undef %filterExt;
|
424
437
|
undef %ignore;
|
425
438
|
undef %printFmt;
|
@@ -443,6 +456,8 @@ undef $deleteOrig;
|
|
443
456
|
undef $disableOutput;
|
444
457
|
undef $doSetFileName;
|
445
458
|
undef $doUnzip;
|
459
|
+
undef $end;
|
460
|
+
undef $endDir;
|
446
461
|
undef $escapeHTML;
|
447
462
|
undef $escapeC;
|
448
463
|
undef $evalWarning;
|
@@ -489,6 +504,7 @@ $countGoodCr = 0;
|
|
489
504
|
$countGoodWr = 0;
|
490
505
|
$countNewDir = 0;
|
491
506
|
$countSameWr = 0;
|
507
|
+
$csvDelim = ',';
|
492
508
|
$csvSaveCount = 0;
|
493
509
|
$fileTrailer = '';
|
494
510
|
$filterFlag = 0;
|
@@ -551,7 +567,7 @@ if (not $preserveTime and $^O eq 'MSWin32') {
|
|
551
567
|
for (;;) {
|
552
568
|
|
553
569
|
# execute the command now if no more arguments or -execute is used
|
554
|
-
if (not @ARGV or ($ARGV[0] =~ /^(-|\xe2\x88\x92)execute(\d
|
570
|
+
if (not @ARGV or ($ARGV[0] =~ /^(-|\xe2\x88\x92)execute(\d+)?$/i and not $endOfOpts)) {
|
555
571
|
if (@ARGV) {
|
556
572
|
$executeID = $2; # save -execute number for "{ready}" response
|
557
573
|
$helped = 1; # don't show help if we used -execute
|
@@ -810,7 +826,7 @@ for (;;) {
|
|
810
826
|
next;
|
811
827
|
}
|
812
828
|
/^config$/i and Warn("Ignored -config option (not first on command line)\n"), shift, next;
|
813
|
-
if (/^csv(\+?=.*)
|
829
|
+
if (/^csv(\+?=.*)?$/i) {
|
814
830
|
my $csvFile = $1;
|
815
831
|
# must process on 2nd pass so -f and -charset options are available
|
816
832
|
unless ($pass) {
|
@@ -830,7 +846,7 @@ for (;;) {
|
|
830
846
|
if ($mt->Open(\*CSVFILE, $csvFile)) {
|
831
847
|
binmode CSVFILE;
|
832
848
|
require Image::ExifTool::Import;
|
833
|
-
$msg = Image::ExifTool::Import::ReadCSV(\*CSVFILE, \%database, $forcePrint);
|
849
|
+
$msg = Image::ExifTool::Import::ReadCSV(\*CSVFILE, \%database, $forcePrint, $csvDelim);
|
834
850
|
close(CSVFILE);
|
835
851
|
} else {
|
836
852
|
$msg = "Error opening CSV file '${csvFile}'";
|
@@ -841,6 +857,11 @@ for (;;) {
|
|
841
857
|
$csv = 'CSV';
|
842
858
|
next;
|
843
859
|
}
|
860
|
+
if (/^csvdelim$/i) {
|
861
|
+
$csvDelim = shift;
|
862
|
+
defined $csvDelim or Error("Expecting argument for -csvDelim option\n"), $badCmd=1;
|
863
|
+
next;
|
864
|
+
}
|
844
865
|
if (/^d$/ or $a eq 'dateformat') {
|
845
866
|
my $fmt = shift;
|
846
867
|
$fmt or Error("Expecting date format for -d option\n"), $badCmd=1, next;
|
@@ -1755,13 +1776,17 @@ if (@dbKeys) {
|
|
1755
1776
|
undef $evalWarning;
|
1756
1777
|
local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
|
1757
1778
|
foreach (@dbKeys) {
|
1779
|
+
my $db = $database{$_};
|
1780
|
+
tr/\\/\// and $database{$_} = $db; # allow for backslashes in SourceFile
|
1758
1781
|
# (punt on using ConvertFileName here, so $absPath may be a mix of encodings)
|
1759
1782
|
my $absPath = AbsPath($_);
|
1760
1783
|
if (defined $absPath) {
|
1761
|
-
$database{$absPath} = $
|
1784
|
+
$database{$absPath} = $db unless $database{$absPath};
|
1762
1785
|
if ($verbose and $verbose > 1) {
|
1763
1786
|
print $vout "Imported entry for '${_}' (full path: '${absPath}')\n";
|
1764
1787
|
}
|
1788
|
+
} elsif ($verbose and $verbose > 1) {
|
1789
|
+
print $vout "Imported entry for '${_}' (non-existent file)\n";
|
1765
1790
|
}
|
1766
1791
|
}
|
1767
1792
|
}
|
@@ -1967,6 +1992,7 @@ sub GetImageInfo($$)
|
|
1967
1992
|
}
|
1968
1993
|
last unless $result;
|
1969
1994
|
}
|
1995
|
+
undef @foundTags if $fastCondition; # ignore if we didn't get all tags
|
1970
1996
|
}
|
1971
1997
|
unless ($result) {
|
1972
1998
|
$verbose and print $vout "-------- $file (failed condition)$progStr\n";
|
@@ -2220,7 +2246,9 @@ sub GetImageInfo($$)
|
|
2220
2246
|
my $noDups = ($json or ($xml and $outFormat > 0));
|
2221
2247
|
my $printConv = $et->Options('PrintConv');
|
2222
2248
|
my $lastGroup = '';
|
2249
|
+
my $i = -1;
|
2223
2250
|
TAG: foreach $tag (@foundTags) {
|
2251
|
+
++$i; # keep track on index in @foundTags
|
2224
2252
|
my $tagName = GetTagName($tag);
|
2225
2253
|
my ($group, $valList);
|
2226
2254
|
# get the value for this tag
|
@@ -2271,7 +2299,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2271
2299
|
# the same group, and if so suppress this tag instead
|
2272
2300
|
next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
|
2273
2301
|
$group eq $et->GetGroup($1, $showGroup);
|
2274
|
-
$group = 'Unknown' if not $group and ($xml or $json);
|
2302
|
+
$group = 'Unknown' if not $group and ($xml or $json or $csv);
|
2275
2303
|
if ($fp and not ($allGroup or $csv)) {
|
2276
2304
|
if ($lastGroup ne $group) {
|
2277
2305
|
if ($html) {
|
@@ -2338,26 +2366,38 @@ TAG: foreach $tag (@foundTags) {
|
|
2338
2366
|
}
|
2339
2367
|
# save information for CSV output
|
2340
2368
|
if ($csv) {
|
2341
|
-
my $
|
2342
|
-
$
|
2369
|
+
my $tn = $tagName;
|
2370
|
+
$tn .= '#' if $tag =~ /#/; # add ValueConv "#" suffix if used
|
2371
|
+
my $gt = $group ? "$group:$tn" : $tn;
|
2343
2372
|
# (tag-name case may be different if some tags don't exist
|
2344
2373
|
# in a file, so all logic must use lower-case tag names)
|
2345
|
-
my $lcTag = lc $
|
2374
|
+
my $lcTag = lc $gt;
|
2346
2375
|
# override existing entry only if top priority
|
2347
2376
|
next if defined $csvInfo{$lcTag} and $tag =~ /\(/;
|
2348
2377
|
$csvInfo{$lcTag} = $val;
|
2349
2378
|
if (defined $csvTags{$lcTag}) {
|
2350
2379
|
# overwrite with actual extracted tag name
|
2351
2380
|
# (note: can't check "if defined $val" here because -f may be used)
|
2352
|
-
$csvTags{$lcTag} = $
|
2353
|
-
|
2354
|
-
|
2355
|
-
|
2356
|
-
|
2357
|
-
|
2358
|
-
|
2359
|
-
|
2360
|
-
|
2381
|
+
$csvTags{$lcTag} = $gt if defined $$info{$tag};
|
2382
|
+
next;
|
2383
|
+
}
|
2384
|
+
# must check for "Unknown" group (for tags that don't exist)
|
2385
|
+
if ($group and defined $csvTags[$i] and $csvTags[$i] =~ /^(.*):$tn$/i) {
|
2386
|
+
next if $group eq 'Unknown'; # nothing more to do if we don't know tag group
|
2387
|
+
if ($1 eq 'unknown') {
|
2388
|
+
# replace unknown entry in CSV tag lookup and list
|
2389
|
+
delete $csvTags{$csvTags[$i]};
|
2390
|
+
$csvTags{$lcTag} = defined($val) ? $gt : '';
|
2391
|
+
$csvTags[$i] = $lcTag;
|
2392
|
+
next;
|
2393
|
+
}
|
2394
|
+
}
|
2395
|
+
# (don't save unextracted tag name unless -f was used)
|
2396
|
+
$csvTags{$lcTag} = defined($val) ? $gt : '';
|
2397
|
+
if (@csvFiles == 1) {
|
2398
|
+
push @csvTags, $lcTag; # save order of tags for first file
|
2399
|
+
} elsif (@csvTags) {
|
2400
|
+
undef @csvTags;
|
2361
2401
|
}
|
2362
2402
|
next;
|
2363
2403
|
}
|
@@ -3283,7 +3323,7 @@ sub FormatCSV($)
|
|
3283
3323
|
# the -b option is used to encode as Base64. It is unclear whether or not this
|
3284
3324
|
# is valid CSV, but some readers may not like it. (If this becomes a problem,
|
3285
3325
|
# in the future values may need to be truncated at the first NULL character.)
|
3286
|
-
$val = qq{"$val"} if $val =~ s/"/""/g or $val =~ /(^\s+|\s+$)/ or $val =~ /[
|
3326
|
+
$val = qq{"$val"} if $val =~ s/"/""/g or $val =~ /(^\s+|\s+$)/ or $val =~ /[\n\r]|\Q$csvDelim/;
|
3287
3327
|
return $val;
|
3288
3328
|
}
|
3289
3329
|
|
@@ -3296,9 +3336,9 @@ sub PrintCSV()
|
|
3296
3336
|
@csvTags or @csvTags = sort keys %csvTags;
|
3297
3337
|
# make a list of tags actually found
|
3298
3338
|
foreach $lcTag (@csvTags) {
|
3299
|
-
push @tags, $csvTags{$lcTag} if $csvTags{$lcTag};
|
3339
|
+
push @tags, FormatCSV($csvTags{$lcTag}) if $csvTags{$lcTag};
|
3300
3340
|
}
|
3301
|
-
print join(
|
3341
|
+
print join($csvDelim, 'SourceFile', @tags), "\n";
|
3302
3342
|
my $empty = defined($forcePrint) ? $forcePrint : '';
|
3303
3343
|
foreach $file (@csvFiles) {
|
3304
3344
|
my @vals = (FormatCSV($file)); # start with full file name
|
@@ -3309,7 +3349,7 @@ sub PrintCSV()
|
|
3309
3349
|
defined $val or push(@vals,$empty), next;
|
3310
3350
|
push @vals, FormatCSV($val);
|
3311
3351
|
}
|
3312
|
-
print join(
|
3352
|
+
print join($csvDelim, @vals), "\n";
|
3313
3353
|
}
|
3314
3354
|
}
|
3315
3355
|
|
@@ -3545,12 +3585,22 @@ sub ProcessFiles($;$)
|
|
3545
3585
|
if ($list) {
|
3546
3586
|
push(@$list, $file);
|
3547
3587
|
} else {
|
3588
|
+
if (%endDir) {
|
3589
|
+
my ($d, $f) = Image::ExifTool::SplitFileName($file);
|
3590
|
+
next if $endDir{$d};
|
3591
|
+
}
|
3548
3592
|
GetImageInfo($et, $file);
|
3549
|
-
|
3593
|
+
$end and Warn("End called - $file\n");
|
3594
|
+
if ($endDir) {
|
3595
|
+
Warn("EndDir called - $file\n");
|
3596
|
+
my ($d, $f) = Image::ExifTool::SplitFileName($file);
|
3597
|
+
$endDir{$d} = 1;
|
3598
|
+
undef $endDir;
|
3599
|
+
}
|
3550
3600
|
}
|
3551
3601
|
}
|
3552
3602
|
$et->Options(CharsetFileName => $enc) if $utf8FileName{$file};
|
3553
|
-
last if
|
3603
|
+
last if $end;
|
3554
3604
|
}
|
3555
3605
|
}
|
3556
3606
|
|
@@ -3561,7 +3611,7 @@ sub ScanDir($$;$)
|
|
3561
3611
|
{
|
3562
3612
|
local $_;
|
3563
3613
|
my ($et, $dir, $list) = @_;
|
3564
|
-
my (@fileList, $done, $file, $utf8Name, $winSurrogate);
|
3614
|
+
my (@fileList, $done, $file, $utf8Name, $winSurrogate, $endThisDir);
|
3565
3615
|
my $enc = $et->Options('CharsetFileName');
|
3566
3616
|
# recode as UTF-8 if necessary
|
3567
3617
|
if ($enc) {
|
@@ -3628,9 +3678,10 @@ sub ScanDir($$;$)
|
|
3628
3678
|
next if $file =~ /^\./ and ($recurse == 1 or $file eq '.' or $file eq '..');
|
3629
3679
|
next if $ignore{$file} or ($ignore{SYMLINKS} and -l $path);
|
3630
3680
|
ScanDir($et, $path, $list);
|
3631
|
-
last if
|
3681
|
+
last if $end;
|
3632
3682
|
next;
|
3633
3683
|
}
|
3684
|
+
next if $endThisDir;
|
3634
3685
|
# apply rules from -ext options
|
3635
3686
|
my $accepted;
|
3636
3687
|
if ($filterFlag) {
|
@@ -3668,14 +3719,16 @@ sub ScanDir($$;$)
|
|
3668
3719
|
push(@$list, $path);
|
3669
3720
|
} else {
|
3670
3721
|
GetImageInfo($et, $path);
|
3671
|
-
if (
|
3722
|
+
if ($end) {
|
3672
3723
|
Warn("End called - $file\n");
|
3673
3724
|
last;
|
3674
3725
|
}
|
3675
|
-
if (
|
3676
|
-
$
|
3726
|
+
if ($endDir) {
|
3727
|
+
$path =~ s(/$)();
|
3677
3728
|
Warn("EndDir called - $path\n");
|
3678
|
-
|
3729
|
+
$endDir{$path} = 1;
|
3730
|
+
$endThisDir = 1;
|
3731
|
+
undef $endDir;
|
3679
3732
|
}
|
3680
3733
|
}
|
3681
3734
|
}
|
@@ -4379,46 +4432,47 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4379
4432
|
|
4380
4433
|
File Types
|
4381
4434
|
------------+-------------+-------------+-------------+------------
|
4382
|
-
|
4383
|
-
|
4384
|
-
|
4385
|
-
|
4386
|
-
|
4387
|
-
|
4388
|
-
|
4389
|
-
|
4390
|
-
|
4391
|
-
|
4392
|
-
|
4393
|
-
|
4394
|
-
|
4395
|
-
|
4396
|
-
|
4397
|
-
|
4398
|
-
|
4399
|
-
|
4400
|
-
|
4401
|
-
|
4402
|
-
|
4403
|
-
|
4404
|
-
|
4405
|
-
|
4406
|
-
|
4407
|
-
|
4408
|
-
|
4409
|
-
|
4410
|
-
|
4411
|
-
|
4412
|
-
|
4413
|
-
|
4414
|
-
|
4415
|
-
|
4416
|
-
|
4417
|
-
|
4418
|
-
|
4419
|
-
|
4420
|
-
|
4421
|
-
|
4435
|
+
360 r/w | DPX r | ITC r | ODP r | RIFF r
|
4436
|
+
3FR r | DR4 r/w/c | J2C r | ODS r | RSRC r
|
4437
|
+
3G2 r/w | DSS r | JNG r/w | ODT r | RTF r
|
4438
|
+
3GP r/w | DV r | JP2 r/w | OFR r | RW2 r/w
|
4439
|
+
A r | DVB r/w | JPEG r/w | OGG r | RWL r/w
|
4440
|
+
AA r | DVR-MS r | JSON r | OGV r | RWZ r
|
4441
|
+
AAE r | DYLIB r | K25 r | ONP r | RM r
|
4442
|
+
AAX r/w | EIP r | KDC r | OPUS r | SEQ r
|
4443
|
+
ACR r | EPS r/w | KEY r | ORF r/w | SKETCH r
|
4444
|
+
AFM r | EPUB r | LA r | OTF r | SO r
|
4445
|
+
AI r/w | ERF r/w | LFP r | PAC r | SR2 r/w
|
4446
|
+
AIFF r | EXE r | LNK r | PAGES r | SRF r
|
4447
|
+
APE r | EXIF r/w/c | LRV r/w | PBM r/w | SRW r/w
|
4448
|
+
ARQ r/w | EXR r | M2TS r | PCD r | SVG r
|
4449
|
+
ARW r/w | EXV r/w/c | M4A/V r/w | PCX r | SWF r
|
4450
|
+
ASF r | F4A/V r/w | MACOS r | PDB r | THM r/w
|
4451
|
+
AVI r | FFF r/w | MAX r | PDF r/w | TIFF r/w
|
4452
|
+
AVIF r/w | FITS r | MEF r/w | PEF r/w | TORRENT r
|
4453
|
+
AZW r | FLA r | MIE r/w/c | PFA r | TTC r
|
4454
|
+
BMP r | FLAC r | MIFF r | PFB r | TTF r
|
4455
|
+
BPG r | FLIF r/w | MKA r | PFM r | TXT r
|
4456
|
+
BTF r | FLV r | MKS r | PGF r | VCF r
|
4457
|
+
CHM r | FPF r | MKV r | PGM r/w | VRD r/w/c
|
4458
|
+
COS r | FPX r | MNG r/w | PLIST r | VSD r
|
4459
|
+
CR2 r/w | GIF r/w | MOBI r | PICT r | WAV r
|
4460
|
+
CR3 r/w | GPR r/w | MODD r | PMP r | WDP r/w
|
4461
|
+
CRM r/w | GZ r | MOI r | PNG r/w | WEBP r
|
4462
|
+
CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBM r
|
4463
|
+
CS1 r/w | HDR r | MOV r/w | PPT r | WMA r
|
4464
|
+
CSV r | HEIC r/w | MP3 r | PPTX r | WMV r
|
4465
|
+
CZI r | HEIF r/w | MP4 r/w | PS r/w | WTV r
|
4466
|
+
DCM r | HTML r | MPC r | PSB r/w | WV r
|
4467
|
+
DCP r/w | ICC r/w/c | MPG r | PSD r/w | X3F r/w
|
4468
|
+
DCR r | ICS r | MPO r/w | PSP r | XCF r
|
4469
|
+
DFONT r | IDML r | MQV r/w | QTIF r/w | XLS r
|
4470
|
+
DIVX r | IIQ r/w | MRW r/w | R3D r | XLSX r
|
4471
|
+
DJVU r | IND r/w | MXF r | RA r | XMP r/w/c
|
4472
|
+
DLL r | INSP r/w | NEF r/w | RAF r/w | ZIP r
|
4473
|
+
DNG r/w | INSV r | NRW r/w | RAM r |
|
4474
|
+
DOC r | INX r | NUMBERS r | RAR r |
|
4475
|
+
DOCX r | ISO r | O r | RAW r/w |
|
4422
4476
|
|
4423
4477
|
Meta Information
|
4424
4478
|
----------------------+----------------------+---------------------
|
@@ -4468,13 +4522,14 @@ L<Input-output text formatting|/Input-output text formatting>
|
|
4468
4522
|
-c FMT (-coordFormat) Set format for GPS coordinates
|
4469
4523
|
-charset [[TYPE=]CHARSET] Specify encoding for special characters
|
4470
4524
|
-csv[[+]=CSVFILE] Export/import tags in CSV format
|
4525
|
+
-csvDelim STR Set delimiter for CSV file
|
4471
4526
|
-d FMT (-dateFormat) Set format for date/time values
|
4472
4527
|
-D (-decimal) Show tag ID numbers in decimal
|
4473
4528
|
-E,-ex,-ec (-escape(HTML|XML|C))Escape tag values for HTML, XML or C
|
4474
4529
|
-f (-forcePrint) Force printing of all specified tags
|
4475
4530
|
-g[NUM...] (-groupHeadings) Organize output by tag group
|
4476
4531
|
-G[NUM...] (-groupNames) Print group name for each tag
|
4477
|
-
-h (-htmlFormat) Use
|
4532
|
+
-h (-htmlFormat) Use HTML formatting for output
|
4478
4533
|
-H (-hex) Show tag ID numbers in hexadecimal
|
4479
4534
|
-htmlDump[OFFSET] Generate HTML-format binary dump
|
4480
4535
|
-j[[+]=JSONFILE] (-json) Export/import tags in JSON format
|
@@ -4620,7 +4675,7 @@ delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
|
|
4620
4675
|
used to write an empty string instead of deleting the tag when no I<VALUE>
|
4621
4676
|
is given, but otherwise it is equivalent to C<=>.
|
4622
4677
|
|
4623
|
-
I<TAG> may contain one or more leading family 0, 1 or
|
4678
|
+
I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
|
4624
4679
|
prefixed by optional family numbers, and separated colons. If no group name
|
4625
4680
|
is specified, the tag is created in the preferred group, and updated in any
|
4626
4681
|
other location where a same-named tag already exists. The preferred group
|
@@ -4675,7 +4730,7 @@ the specified group(s) are removed individually, and in this case is it
|
|
4675
4730
|
possible to exclude individual tags from a mass delete. For example,
|
4676
4731
|
C<-time:all --Exif:Time:All> removes all deletable Time tags except those in
|
4677
4732
|
the EXIF. This difference also applies if family 2 is specified when
|
4678
|
-
deleting all groups.
|
4733
|
+
deleting all groups. For example, C<-2all:all=> deletes tags individually,
|
4679
4734
|
while C<-all:all=> deletes entire blocks.
|
4680
4735
|
|
4681
4736
|
5) The "APP" group names ("APP0" through "APP15") are used to delete JPEG
|
@@ -4987,8 +5042,11 @@ tag names (with optional group names) for each column of the file, and
|
|
4987
5042
|
values must be separated by commas. A special "SourceFile" column specifies
|
4988
5043
|
the files associated with each row of information (and a SourceFile of "*"
|
4989
5044
|
may be used to define default tags to be imported for all files which are
|
4990
|
-
combined with any tags specified for the specific SourceFile processed).
|
4991
|
-
|
5045
|
+
combined with any tags specified for the specific SourceFile processed). The
|
5046
|
+
B<-csvDelim> option may be used to change the input/output field delimiter
|
5047
|
+
if something other than a comma is required.
|
5048
|
+
|
5049
|
+
The following examples demonstrate basic use of the B<-csv> option:
|
4992
5050
|
|
4993
5051
|
# generate CSV file with common tags from all images in a directory
|
4994
5052
|
exiftool -common -csv dir > out.csv
|
@@ -5035,6 +5093,11 @@ option. When processing a large number of files, it is recommended to
|
|
5035
5093
|
either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
|
5036
5094
|
generate a fixed-column CSV file instead of using the B<-csv> option.
|
5037
5095
|
|
5096
|
+
=item B<-csvDelim> I<STR>
|
5097
|
+
|
5098
|
+
Set the delimiter for separating CSV entries for the B<-csv> option.
|
5099
|
+
Default is ','.
|
5100
|
+
|
5038
5101
|
=item B<-d> I<FMT> (B<-dateFormat>)
|
5039
5102
|
|
5040
5103
|
Set the format for date/time tag values. The I<FMT> string may contain
|
@@ -5075,13 +5138,13 @@ B<-csv>=I<CSVFILE> feature.
|
|
5075
5138
|
|
5076
5139
|
Organize output by tag group. I<NUM> specifies a group family number, and
|
5077
5140
|
may be 0 (general location), 1 (specific location), 2 (category), 3
|
5078
|
-
(document number), 4 (instance number), 5 (metadata path)
|
5079
|
-
format). B<-g0> is assumed if a family number is not
|
5080
|
-
|
5081
|
-
Multiple families may be specified by separating them with colons.
|
5082
|
-
default the resulting group name is simplified by removing any leading
|
5141
|
+
(document number), 4 (instance number), 5 (metadata path), 6 (EXIF/TIFF
|
5142
|
+
format) or 7 (tag ID). B<-g0> is assumed if a family number is not
|
5143
|
+
specified. May be combined with other options to add group names to the
|
5144
|
+
output. Multiple families may be specified by separating them with colons.
|
5145
|
+
By default the resulting group name is simplified by removing any leading
|
5083
5146
|
C<Main:> and collapsing adjacent identical group names, but this can be
|
5084
|
-
avoided by placing a colon before the first family number (eg. B<-g:3:1>).
|
5147
|
+
avoided by placing a colon before the first family number (eg. B<-g:3:1>).
|
5085
5148
|
Use the B<-listg> option to list group names for a specified family. The
|
5086
5149
|
SavePath and SaveFormat API options are automatically enabled if the
|
5087
5150
|
respective family 5 or 6 group names are requested. See the
|
@@ -5286,7 +5349,7 @@ with this command:
|
|
5286
5349
|
|
5287
5350
|
produces output like this:
|
5288
5351
|
|
5289
|
-
-- Generated by ExifTool 11
|
5352
|
+
-- Generated by ExifTool 12.11 --
|
5290
5353
|
File: a.jpg - 2003:10:31 15:44:19
|
5291
5354
|
(f/5.6, 1/60s, ISO 100)
|
5292
5355
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5694,7 +5757,8 @@ extracting any EXIF MakerNote information. B<-fast3> avoids extracting
|
|
5694
5757
|
metadata from the file, and returns only pseudo System tags, but still reads
|
5695
5758
|
the file header to obtain an educated guess at FileType. B<-fast4> doesn't
|
5696
5759
|
even read the file header, and returns only System tags and a FileType based
|
5697
|
-
on the file extension.
|
5760
|
+
on the file extension. B<-fast5> also disables generation of the Composite
|
5761
|
+
tags (like B<-e>). Has no effect when writing.
|
5698
5762
|
|
5699
5763
|
Note that a separate B<-fast> setting may be used for evaluation of a B<-if>
|
5700
5764
|
condition, or when ordering files with the B<-fileOrder> option. See the
|
@@ -5719,7 +5783,9 @@ involves an additional processing pass of each file, but this impact may be
|
|
5719
5783
|
reduced by specifying a I<NUM> for the B<-fast> level used during the
|
5720
5784
|
metadata-extraction phase. For example, B<-fileOrder4> may be used if
|
5721
5785
|
I<TAG> is a pseudo System tag. If multiple B<-fileOrder> options are used,
|
5722
|
-
the extraction is done at the lowest B<-fast> level.
|
5786
|
+
the extraction is done at the lowest B<-fast> level. Note that files are
|
5787
|
+
sorted across directory boundaries if multiple input directories are
|
5788
|
+
specified.
|
5723
5789
|
|
5724
5790
|
=item B<-i> I<DIR> (B<-ignore>)
|
5725
5791
|
|
@@ -5760,7 +5826,7 @@ Adding I<NUM> to the B<-if> option causes a separate processing pass to be
|
|
5760
5826
|
executed for evaluating I<EXPR> at a B<-fast> level given by I<NUM> (see the
|
5761
5827
|
B<-fast> option documentation for details). Without I<NUM>, only one
|
5762
5828
|
processing pass is done at the level specified by the B<-fast> option. For
|
5763
|
-
example, using B<-
|
5829
|
+
example, using B<-if5> is possible if I<EXPR> uses only pseudo System tags,
|
5764
5830
|
and may significantly speed processing if enough files fail the condition.
|
5765
5831
|
|
5766
5832
|
The expression has access to the current ExifTool object through C<$self>,
|
@@ -5769,7 +5835,8 @@ of the file processing. Both functions have a return value of 1. Case is
|
|
5769
5835
|
significant for function names.
|
5770
5836
|
|
5771
5837
|
End() - end processing after this file
|
5772
|
-
EndDir() - end processing of files in this directory
|
5838
|
+
EndDir() - end processing of files in this directory (not
|
5839
|
+
compatible with the B<-fileOrder> option)
|
5773
5840
|
|
5774
5841
|
Notes:
|
5775
5842
|
|
@@ -6231,7 +6298,9 @@ about the configuration file syntax.
|
|
6231
6298
|
Echo I<TEXT> to stdout (B<-echo> or B<-echo1>) or stderr (B<-echo2>). Text
|
6232
6299
|
is output as the command line is parsed, before the processing of any input
|
6233
6300
|
files. I<NUM> may also be 3 or 4 to output text (to stdout or stderr
|
6234
|
-
respectively) after processing is complete.
|
6301
|
+
respectively) after processing is complete. For B<-echo3> and B<-echo4>,
|
6302
|
+
"${status}" may be used in the I<TEXT> string to represent the numerical
|
6303
|
+
exit status of the command (see L</EXIT STATUS>).
|
6235
6304
|
|
6236
6305
|
=item B<-efile>[I<NUM>][!] I<ERRFILE>
|
6237
6306
|
|
@@ -6252,7 +6321,8 @@ commands were executed as separate command lines (with the exception of the
|
|
6252
6321
|
B<-config> and B<-use> options which remain in effect for subsequent
|
6253
6322
|
commands). Allows multiple commands to be executed from a single command
|
6254
6323
|
line. I<NUM> is an optional number that is echoed in the "{ready}" message
|
6255
|
-
when using the B<-stay_open> feature.
|
6324
|
+
when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
|
6325
|
+
option no longer suppresses the output "{readyNUM}" message.
|
6256
6326
|
|
6257
6327
|
=item B<-srcfile> I<FMT>
|
6258
6328
|
|
@@ -6297,12 +6367,15 @@ line (see the B<-@> option for details).
|
|
6297
6367
|
|
6298
6368
|
3) Write C<-execute\n> to I<ARGFILE>, where C<\n> represents a newline
|
6299
6369
|
sequence. (Note: You may need to flush your write buffers here if using
|
6300
|
-
buffered output.)
|
6370
|
+
buffered output.) ExifTool will then execute the command with the arguments
|
6301
6371
|
received up to this point, send a "{ready}" message to stdout when done
|
6302
6372
|
(unless the B<-q> or B<-T> option is used), and continue trying to read
|
6303
6373
|
arguments for the next command from I<ARGFILE>. To aid in command/response
|
6304
6374
|
synchronization, any number appended to the C<-execute> option is echoed in
|
6305
|
-
the "{ready}" message. For example, C<-execute613> results in "{ready613}".
|
6375
|
+
the "{ready}" message. For example, C<-execute613> results in "{ready613}".
|
6376
|
+
When this number is added, B<-q> no longer suppresses the "{ready}" message.
|
6377
|
+
(Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
|
6378
|
+
signals back to your application.)
|
6306
6379
|
|
6307
6380
|
4) Repeat steps 2 and 3 for each command.
|
6308
6381
|
|
@@ -6317,7 +6390,7 @@ writing the following lines to the currently open I<ARGFILE>:
|
|
6317
6390
|
-@
|
6318
6391
|
NEWARGFILE
|
6319
6392
|
|
6320
|
-
This causes I<ARGFILE> to be closed, and I<NEWARGFILE> to be kept open.
|
6393
|
+
This causes I<ARGFILE> to be closed, and I<NEWARGFILE> to be kept open.
|
6321
6394
|
(Without the B<-stay_open> here, exiftool would have returned to reading
|
6322
6395
|
arguments from I<ARGFILE> after reaching the end of I<NEWARGFILE>.)
|
6323
6396
|
|