exiftool-vendored.exe 12.62.0 → 12.65.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.
- package/LICENSE +254 -254
- package/bin/exiftool_files/Changes +76 -1
- package/bin/exiftool_files/Makefile.PL +7 -1
- package/bin/exiftool_files/README +50 -46
- package/bin/exiftool_files/config_files/guano.config +161 -0
- package/bin/exiftool_files/exiftool.pl +105 -74
- package/bin/exiftool_files/lib/Image/ExifTool/7Z.pm +793 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +14 -7
- package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +8 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +4 -1
- package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +4 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +31 -14
- package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +8 -2
- package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +226 -28
- package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1467 -202
- package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +16 -1
- package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +939 -31
- package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +874 -63
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +23 -5
- package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +8 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +6 -6
- package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +5 -5
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +91 -30
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +20 -19
- package/bin/exiftool_files/lib/Image/ExifTool/README +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +11 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +227 -227
- package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +4 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +229 -30
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4757 -4633
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +706 -18
- package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +17 -1
- package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -7
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +35 -12
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +14 -2
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +32 -0
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +96 -28
- package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +5 -5
- package/bin/exiftool_files/lib/Image/ExifTool.pm +176 -128
- package/bin/exiftool_files/lib/Image/ExifTool.pod +109 -53
- package/package.json +3 -2
|
@@ -14,49 +14,49 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
14
14
|
|
|
15
15
|
File Types
|
|
16
16
|
------------+-------------+-------------+-------------+------------
|
|
17
|
-
360 r/w |
|
|
18
|
-
3FR r |
|
|
19
|
-
3G2 r/w |
|
|
20
|
-
3GP r/w |
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
17
|
+
360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
|
|
18
|
+
3FR r | DR4 r/w/c | J2C r | O r | RIFF r
|
|
19
|
+
3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
|
|
20
|
+
3GP r/w | DV r | JP2 r/w | ODS r | RTF r
|
|
21
|
+
7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
|
22
|
+
A r | DVR-MS r | JSON r | OFR r | RWL r/w
|
|
23
|
+
AA r | DYLIB r | JXL r | OGG r | RWZ r
|
|
24
|
+
AAE r | EIP r | K25 r | OGV r | RM r
|
|
25
|
+
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
|
26
|
+
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
|
27
|
+
AFM r | ERF r/w | LA r | ORF r/w | SO r
|
|
28
|
+
AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
|
|
29
|
+
AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
|
|
30
|
+
APE r | EXR r | LNK r | PAC r | SRW r/w
|
|
31
|
+
ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
|
|
32
|
+
ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
|
|
33
|
+
ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
|
|
34
|
+
AVI r | FITS r | MACOS r | PCX r | TIFF r/w
|
|
35
|
+
AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
|
|
36
|
+
AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
|
|
37
|
+
BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
|
|
38
|
+
BPG r | FLV r | MIFF r | PFA r | TXT r
|
|
39
|
+
BTF r | FPF r | MKA r | PFB r | VCF r
|
|
40
|
+
CHM r | FPX r | MKS r | PFM r | VNT r
|
|
41
|
+
COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
|
|
42
|
+
CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
|
|
43
|
+
CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
|
44
|
+
CRM r/w | GZ r | MODD r | PICT r | WDP r/w
|
|
45
|
+
CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
|
|
46
|
+
CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
|
47
|
+
CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
|
48
|
+
CUR r | HEIF r/w | MP3 r | PPT r | WMV r
|
|
49
|
+
CZI r | HTML r | MP4 r/w | PPTX r | WPG r
|
|
50
|
+
DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
|
|
51
|
+
DCP r/w | ICO r | MPG r | PSB r/w | WV r
|
|
52
|
+
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
|
|
53
|
+
DFONT r | IDML r | MQV r/w | PSP r | XCF r
|
|
54
|
+
DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
|
|
55
|
+
DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
|
|
56
|
+
DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
|
|
57
|
+
DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
|
|
58
|
+
DOC r | INX r | NKSC r/w | RAM r |
|
|
59
|
+
DOCX r | ISO r | NRW r/w | RAR r |
|
|
60
60
|
|
|
61
61
|
Meta Information
|
|
62
62
|
----------------------+----------------------+---------------------
|
|
@@ -108,8 +108,8 @@ your home directory, then you would type the following commands in a
|
|
|
108
108
|
terminal window to extract and run ExifTool:
|
|
109
109
|
|
|
110
110
|
cd ~/Desktop
|
|
111
|
-
gzip -dc Image-ExifTool-12.
|
|
112
|
-
cd Image-ExifTool-12.
|
|
111
|
+
gzip -dc Image-ExifTool-12.65.tar.gz | tar -xf -
|
|
112
|
+
cd Image-ExifTool-12.65
|
|
113
113
|
./exiftool t/images/ExifTool.jpg
|
|
114
114
|
|
|
115
115
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -158,8 +158,11 @@ for calculating digest values and providing other features listed below:
|
|
|
158
158
|
Win32::API (for proper handling of Windows file times)
|
|
159
159
|
Win32::FindFile (for Windows Unicode directory support, app only)
|
|
160
160
|
Win32API::File (for Windows Unicode file names and file times)
|
|
161
|
+
Compress::Raw::Lzma (for reading encoded 7z files)
|
|
161
162
|
IO::Compress::RawDeflate (for writing FLIF images)
|
|
162
163
|
IO::Uncompress::RawInflate (for reading FLIF images)
|
|
164
|
+
IO::Compress::Brotli (for writing compressed JXL metadata)
|
|
165
|
+
IO::Uncompress::Brotli (for reading compressed JXL metadata)
|
|
163
166
|
|
|
164
167
|
COPYRIGHT AND LICENSE
|
|
165
168
|
|
|
@@ -202,10 +205,11 @@ distribution package:
|
|
|
202
205
|
fotoware.config - Definitions for writing Fotoware XMP tags
|
|
203
206
|
frameCount.config - Extract FrameCount from MP4 videos
|
|
204
207
|
gps2utm.config - Generate UTM coordinate tags from GPS info
|
|
205
|
-
|
|
208
|
+
guano.config - Decode individual tags from Guano metadata
|
|
206
209
|
nksc.config - Decode tags in Nikon ViewNX NKSC files
|
|
207
210
|
photoshop_paths.config - For extracting or copying Photoshop paths
|
|
208
211
|
picasa_faces.config - Convert from Picasa to MWG/MP face regions
|
|
212
|
+
pix4d.config - Definitions for writing Pix4D XMP tags
|
|
209
213
|
rotate_regions.config - Rotate MWG and MP region tags
|
|
210
214
|
tiff_version.config - Determine the version of a TIFF file
|
|
211
215
|
time_zone.config - Calculate time zone from EXIF tags
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
# File: Guano.config
|
|
3
|
+
#
|
|
4
|
+
# Description: User-defined Composite tag definitions to extract individual entries
|
|
5
|
+
# from the RIFF:Guano text block.
|
|
6
|
+
#
|
|
7
|
+
# Requires exiftool version 12.63+
|
|
8
|
+
#
|
|
9
|
+
# See GUANO - Grand Unified Acoustic Notation Ontology
|
|
10
|
+
# https://github.com/riggsd/guano-spec/blob/master/guano_specification.md
|
|
11
|
+
#
|
|
12
|
+
# The code itself is simply a regex match. If other entries are needed,
|
|
13
|
+
# then all that needs to be done is to copy/paste one of the blocks, change
|
|
14
|
+
# the name and edit the regex
|
|
15
|
+
#
|
|
16
|
+
# Examples:
|
|
17
|
+
# This will list the Make and Model from the Guano text block, if they exist
|
|
18
|
+
# exiftool -config Guano.config -GuanoModel -GuanoMake /path/to/files/
|
|
19
|
+
#
|
|
20
|
+
# Lists all the Guano entries in the Guano text block
|
|
21
|
+
# exiftool -config Guano.config -Guano* /path/to/files/
|
|
22
|
+
#
|
|
23
|
+
# Revisions: 2023/06/09 - Bryan K. Williams (aka StarGeek) Created
|
|
24
|
+
#------------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
%Image::ExifTool::UserDefined = (
|
|
27
|
+
'Image::ExifTool::Composite' => {
|
|
28
|
+
GuanoVersion => {
|
|
29
|
+
Require => 'Guano',
|
|
30
|
+
ValueConv => '$val =~ /GUANO\|Version:\s+(.*)/m ? $1 : undef',
|
|
31
|
+
},
|
|
32
|
+
GuanoMake => {
|
|
33
|
+
Require => 'Guano',
|
|
34
|
+
ValueConv => '$val =~ /Make:\s+(.*)/m ? $1 : undef',
|
|
35
|
+
},
|
|
36
|
+
GuanoModel => {
|
|
37
|
+
Require => 'Guano',
|
|
38
|
+
ValueConv => '$val =~ /Model:\s+(.*)/m ? $1 : undef',
|
|
39
|
+
},
|
|
40
|
+
GuanoFirmwareVersion => {
|
|
41
|
+
Require => 'Guano',
|
|
42
|
+
ValueConv => '$val =~ /Firmware Version:\s+(.*)/m ? $1 : undef',
|
|
43
|
+
},
|
|
44
|
+
GuanoSerial => {
|
|
45
|
+
Require => 'Guano',
|
|
46
|
+
ValueConv => '$val =~ /Serial:\s+(.*)/m ? $1 : undef',
|
|
47
|
+
},
|
|
48
|
+
GuanoTimestamp => {
|
|
49
|
+
Require => 'Guano',
|
|
50
|
+
Groups => { 2 => 'Time' },
|
|
51
|
+
ValueConv => '$val =~ /Timestamp:\s+(.*)/m ? $1 : undef',
|
|
52
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
|
53
|
+
},
|
|
54
|
+
GuanoLocPosition => {
|
|
55
|
+
Require => 'Guano',
|
|
56
|
+
Groups => { 2 => 'Location' },
|
|
57
|
+
ValueConv => '$val =~ /Loc Position:\s+(.*)/m ? $1 : undef',
|
|
58
|
+
PrintConv => q{
|
|
59
|
+
require Image::ExifTool::GPS;
|
|
60
|
+
my @v = split ' ', $val;
|
|
61
|
+
return Image::ExifTool::GPS::ToDMS($self, $v[0], 1, "N") . ', ' .
|
|
62
|
+
Image::ExifTool::GPS::ToDMS($self, $v[1], 1, "E");
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
GuanoLocElevation => {
|
|
66
|
+
Require => 'Guano',
|
|
67
|
+
Groups => { 2 => 'Location' },
|
|
68
|
+
ValueConv => '$val =~ /Loc Elevation:\s+(.*)/m ? $1 : undef',
|
|
69
|
+
},
|
|
70
|
+
GuanoTemperatureInt => {
|
|
71
|
+
Require => 'Guano',
|
|
72
|
+
ValueConv => '$val =~ /Temperature Int:\s+(.*)/m ? $1 : undef',
|
|
73
|
+
},
|
|
74
|
+
GuanoFilterHP => {
|
|
75
|
+
Require => 'Guano',
|
|
76
|
+
ValueConv => '$val =~ /^Filter HP:\s+(.*)/m ? $1 : undef',
|
|
77
|
+
},
|
|
78
|
+
GuanoAnabatBatteryVoltage => {
|
|
79
|
+
Require => 'Guano',
|
|
80
|
+
ValueConv => '$val =~ /Anabat\|Battery voltage:\s+(.*)/m ? $1 : undef',
|
|
81
|
+
},
|
|
82
|
+
GuanoAnabatMicrophone => {
|
|
83
|
+
Require => 'Guano',
|
|
84
|
+
ValueConv => '$val =~ /Anabat\|Microphone:\s+(.*)/m ? $1 : undef',
|
|
85
|
+
},
|
|
86
|
+
GuanoAnabatActivation => {
|
|
87
|
+
Require => 'Guano',
|
|
88
|
+
ValueConv => '$val =~ /Anabat\|Activation:\s+(.*)/m ? $1 : undef',
|
|
89
|
+
},
|
|
90
|
+
GuanoAnabatZcSensitivity => {
|
|
91
|
+
Require => 'Guano',
|
|
92
|
+
ValueConv => '$val =~ /Anabat\|Zc Sensitivity:\s+(.*)/m ? $1 : undef',
|
|
93
|
+
},
|
|
94
|
+
GuanoAnabatTriggerMinFreq => {
|
|
95
|
+
Require => 'Guano',
|
|
96
|
+
ValueConv => '$val =~ /Anabat\|Trigger min freq:\s+(.*)/m ? $1 : undef',
|
|
97
|
+
},
|
|
98
|
+
GuanoAnabatTriggerMaxFreq => {
|
|
99
|
+
Require => 'Guano',
|
|
100
|
+
ValueConv => '$val =~ /Anabat\|Trigger max freq:\s+(.*)/m ? $1 : undef',
|
|
101
|
+
},
|
|
102
|
+
GuanoAnabatMinEvent => {
|
|
103
|
+
Require => 'Guano',
|
|
104
|
+
ValueConv => '$val =~ /Anabat\|Min event:\s+(.*)/m ? $1 : undef',
|
|
105
|
+
},
|
|
106
|
+
GuanoAnabatTriggerWindow => {
|
|
107
|
+
Require => 'Guano',
|
|
108
|
+
ValueConv => '$val =~ /Anabat\|Trigger Window:\s+(.*)/m ? $1 : undef',
|
|
109
|
+
},
|
|
110
|
+
GuanoAnabatMaximumFileDuration => {
|
|
111
|
+
Require => 'Guano',
|
|
112
|
+
ValueConv => '$val =~ /Anabat\|Maximum File Duration:\s+(.*)/m ? $1 : undef',
|
|
113
|
+
},
|
|
114
|
+
GuanoSBVersion => {
|
|
115
|
+
Require => 'Guano',
|
|
116
|
+
ValueConv => '$val =~ /SB\|Version:\s+(.*)/m ? $1 : undef',
|
|
117
|
+
},
|
|
118
|
+
GuanoSBSpeciesAutoID => {
|
|
119
|
+
Require => 'Guano',
|
|
120
|
+
ValueConv => '$val =~ /SB\|Species Auto ID:\s+(.*)/m ? $1 : undef',
|
|
121
|
+
},
|
|
122
|
+
GuanoSpeciesAutoID => {
|
|
123
|
+
Require => 'Guano',
|
|
124
|
+
ValueConv => '$val =~ /Species Auto ID:\s+(.*)/m ? $1 : undef',
|
|
125
|
+
},
|
|
126
|
+
GuanoSpeciesManualID => {
|
|
127
|
+
Require => 'Guano',
|
|
128
|
+
ValueConv => '$val =~ /Species Manual ID:\s+(.*)/m ? $1 : undef',
|
|
129
|
+
},
|
|
130
|
+
GuanoSampleRate => {
|
|
131
|
+
Require => 'Guano',
|
|
132
|
+
ValueConv => '$val =~ /Samplerate:\s+(.*)/m ? $1 : undef',
|
|
133
|
+
},
|
|
134
|
+
GuanoLength => {
|
|
135
|
+
Require => 'Guano',
|
|
136
|
+
ValueConv => '$val =~ /Length:\s+(.*)/m ? $1 : undef',
|
|
137
|
+
},
|
|
138
|
+
GuanoTE => {
|
|
139
|
+
Require => 'Guano',
|
|
140
|
+
ValueConv => '$val =~ /TE:\s+(.*)/m ? $1 : undef',
|
|
141
|
+
},
|
|
142
|
+
GuanoSBFilterHP => {
|
|
143
|
+
Require => 'Guano',
|
|
144
|
+
ValueConv => '$val =~ /SB\|Filter HP:\s+(.*)/m ? $1 : undef',
|
|
145
|
+
},
|
|
146
|
+
GuanoNote => {
|
|
147
|
+
Require => 'Guano',
|
|
148
|
+
ValueConv => '$val =~ /Note:\s+(.*)/m ? $1 : undef',
|
|
149
|
+
},
|
|
150
|
+
GuanoSBRegion => {
|
|
151
|
+
Require => 'Guano',
|
|
152
|
+
ValueConv => '$val =~ /SB\|Region:\s+(.*)/m ? $1 : undef',
|
|
153
|
+
},
|
|
154
|
+
GuanoSBClassifier => {
|
|
155
|
+
Require => 'Guano',
|
|
156
|
+
ValueConv => '$val =~ /SB\|Classifier:\s+(.*)/m ? $1 : undef',
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
);
|
|
160
|
+
#------------------------------------------------------------------------------
|
|
161
|
+
1; #end
|
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.65';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -290,8 +290,11 @@ my @recommends = qw(
|
|
|
290
290
|
POSIX::strptime
|
|
291
291
|
Time::Local
|
|
292
292
|
Unicode::LineBreak
|
|
293
|
+
Compress::Raw::Lzma
|
|
293
294
|
IO::Compress::RawDeflate
|
|
294
295
|
IO::Uncompress::RawInflate
|
|
296
|
+
IO::Compress::Brotli
|
|
297
|
+
IO::Uncompress::Brotli
|
|
295
298
|
Win32::API
|
|
296
299
|
Win32::FindFile
|
|
297
300
|
Win32API::File
|
|
@@ -736,6 +739,13 @@ for (;;) {
|
|
|
736
739
|
print "ExifTool version $version$str$Image::ExifTool::RELEASE\n";
|
|
737
740
|
printf "Perl version %s%s\n", $], (defined ${^UNICODE} ? " (-C${^UNICODE})" : '');
|
|
738
741
|
print "Platform: $^O\n";
|
|
742
|
+
if ($verbose > 8) {
|
|
743
|
+
print "Current Dir: " . Cwd::getcwd() . "\n" if (eval { require Cwd });
|
|
744
|
+
print "Script Name: $0\n";
|
|
745
|
+
print "Exe Name: $^X\n";
|
|
746
|
+
print "Exe Dir: $Image::ExifTool::exeDir\n";
|
|
747
|
+
print "Exe Path: $exePath\n";
|
|
748
|
+
}
|
|
739
749
|
print "Optional libraries:\n";
|
|
740
750
|
foreach (@recommends) {
|
|
741
751
|
next if /^Win32/ and $^O ne 'MSWin32';
|
|
@@ -817,11 +827,17 @@ for (;;) {
|
|
|
817
827
|
/^(-?)(a|duplicates)$/i and $mt->Options(Duplicates => ($1 ? 0 : 1)), next;
|
|
818
828
|
if ($a eq 'api') {
|
|
819
829
|
my $opt = shift;
|
|
820
|
-
defined $opt
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
830
|
+
if (defined $opt and length $opt) {
|
|
831
|
+
my $val = ($opt =~ s/=(.*)//s) ? $1 : 1;
|
|
832
|
+
# empty string means an undefined value unless ^= is used
|
|
833
|
+
$val = undef unless $opt =~ s/\^$// or length $val;
|
|
834
|
+
$mt->Options($opt => $val);
|
|
835
|
+
} else {
|
|
836
|
+
print "Available API Options:\n";
|
|
837
|
+
my $availableOptions = Image::ExifTool::AvailableOptions();
|
|
838
|
+
printf(" %-17s - %s\n", $$_[0], $$_[2]) foreach @$availableOptions;
|
|
839
|
+
$helped = 1;
|
|
840
|
+
}
|
|
825
841
|
next;
|
|
826
842
|
}
|
|
827
843
|
/^arg(s|format)$/i and $argFormat = 1, next;
|
|
@@ -1463,6 +1479,10 @@ if ($csv and $csv eq 'CSV' and not $isWriting) {
|
|
|
1463
1479
|
$binaryOutput = 0;
|
|
1464
1480
|
$setCharset = 'default' unless defined $setCharset;
|
|
1465
1481
|
}
|
|
1482
|
+
if (%printFmt) {
|
|
1483
|
+
Warn "The -csv option has no effect when -p is used\n";
|
|
1484
|
+
undef $csv;
|
|
1485
|
+
}
|
|
1466
1486
|
require Image::ExifTool::XMP if $setCharset;
|
|
1467
1487
|
}
|
|
1468
1488
|
|
|
@@ -2361,7 +2381,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2361
2381
|
next unless defined $val;
|
|
2362
2382
|
if ($structOpt and ref $val) {
|
|
2363
2383
|
# serialize structure if necessary
|
|
2364
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
|
|
2384
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val) unless $xml or $json;
|
|
2365
2385
|
} elsif (ref $val eq 'ARRAY') {
|
|
2366
2386
|
if (defined $listItem) {
|
|
2367
2387
|
# take only the specified item
|
|
@@ -2510,7 +2530,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2510
2530
|
my $tok = "$group:$tagName";
|
|
2511
2531
|
if ($outFormat > 0) {
|
|
2512
2532
|
if ($structOpt and ref $val) {
|
|
2513
|
-
$val = Image::ExifTool::XMP::SerializeStruct($val);
|
|
2533
|
+
$val = Image::ExifTool::XMP::SerializeStruct($et, $val);
|
|
2514
2534
|
}
|
|
2515
2535
|
if ($escapeHTML) {
|
|
2516
2536
|
$val =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./;
|
|
@@ -2857,7 +2877,7 @@ sub SetImageInfo($$$)
|
|
|
2857
2877
|
}
|
|
2858
2878
|
unless ($isStdout) {
|
|
2859
2879
|
$outfile = NextUnusedFilename($outfile);
|
|
2860
|
-
if ($et->Exists($outfile) and not $doSetFileName) {
|
|
2880
|
+
if ($et->Exists($outfile, 1) and not $doSetFileName) {
|
|
2861
2881
|
Warn "Error: '${outfile}' already exists - $infile\n";
|
|
2862
2882
|
EFile($infile);
|
|
2863
2883
|
++$countBadWr;
|
|
@@ -2988,7 +3008,7 @@ sub SetImageInfo($$$)
|
|
|
2988
3008
|
$outfile = Image::ExifTool::GetNewFileName(defined $outfile ? $outfile : $file, $newDir);
|
|
2989
3009
|
}
|
|
2990
3010
|
$outfile = NextUnusedFilename($outfile, $infile);
|
|
2991
|
-
if ($et->Exists($outfile)) {
|
|
3011
|
+
if ($et->Exists($outfile, 1)) {
|
|
2992
3012
|
if ($infile eq $outfile) {
|
|
2993
3013
|
undef $outfile; # not changing the file name after all
|
|
2994
3014
|
# (allow for case-insensitive filesystems)
|
|
@@ -4068,6 +4088,8 @@ sub SuggestedExtension($$$)
|
|
|
4068
4088
|
$ext = 'dr4';
|
|
4069
4089
|
} elsif ($$valPt =~ /^(.{10}|.{522})(\x11\x01|\x00\x11)/s) {
|
|
4070
4090
|
$ext = 'pict';
|
|
4091
|
+
} elsif ($$valPt =~ /^\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl/s) {
|
|
4092
|
+
$ext = 'jxl';
|
|
4071
4093
|
} else {
|
|
4072
4094
|
$ext = 'dat';
|
|
4073
4095
|
}
|
|
@@ -4214,7 +4236,7 @@ sub NextUnusedFilename($;$)
|
|
|
4214
4236
|
}
|
|
4215
4237
|
$filename .= substr($fmt, $pos); # add rest of file name
|
|
4216
4238
|
# return now with filename unless file exists
|
|
4217
|
-
return $filename unless ($mt->Exists($filename) and not defined $usedFileName{$filename}) or $usedFileName{$filename};
|
|
4239
|
+
return $filename unless ($mt->Exists($filename, 1) and not defined $usedFileName{$filename}) or $usedFileName{$filename};
|
|
4218
4240
|
if (defined $okfile) {
|
|
4219
4241
|
return $filename if $filename eq $okfile;
|
|
4220
4242
|
my ($fn, $ok) = (AbsPath($filename), AbsPath($okfile));
|
|
@@ -4294,7 +4316,7 @@ sub OpenOutputFile($;@)
|
|
|
4294
4316
|
$outfile .= $textOut;
|
|
4295
4317
|
}
|
|
4296
4318
|
my $mode = '>';
|
|
4297
|
-
if ($mt->Exists($outfile)) {
|
|
4319
|
+
if ($mt->Exists($outfile, 1)) {
|
|
4298
4320
|
unless ($textOverwrite) {
|
|
4299
4321
|
Warn "Output file $outfile already exists for $file\n";
|
|
4300
4322
|
return ();
|
|
@@ -4614,49 +4636,49 @@ DESCRIPTION
|
|
|
4614
4636
|
|
|
4615
4637
|
File Types
|
|
4616
4638
|
------------+-------------+-------------+-------------+------------
|
|
4617
|
-
360 r/w |
|
|
4618
|
-
3FR r |
|
|
4619
|
-
3G2 r/w |
|
|
4620
|
-
3GP r/w |
|
|
4621
|
-
|
|
4622
|
-
|
|
4623
|
-
|
|
4624
|
-
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
|
|
4631
|
-
|
|
4632
|
-
|
|
4633
|
-
|
|
4634
|
-
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
|
|
4640
|
-
|
|
4641
|
-
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
4639
|
+
360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
|
|
4640
|
+
3FR r | DR4 r/w/c | J2C r | O r | RIFF r
|
|
4641
|
+
3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
|
|
4642
|
+
3GP r/w | DV r | JP2 r/w | ODS r | RTF r
|
|
4643
|
+
7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
|
4644
|
+
A r | DVR-MS r | JSON r | OFR r | RWL r/w
|
|
4645
|
+
AA r | DYLIB r | JXL r | OGG r | RWZ r
|
|
4646
|
+
AAE r | EIP r | K25 r | OGV r | RM r
|
|
4647
|
+
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
|
4648
|
+
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
|
4649
|
+
AFM r | ERF r/w | LA r | ORF r/w | SO r
|
|
4650
|
+
AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
|
|
4651
|
+
AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
|
|
4652
|
+
APE r | EXR r | LNK r | PAC r | SRW r/w
|
|
4653
|
+
ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
|
|
4654
|
+
ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
|
|
4655
|
+
ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
|
|
4656
|
+
AVI r | FITS r | MACOS r | PCX r | TIFF r/w
|
|
4657
|
+
AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
|
|
4658
|
+
AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
|
|
4659
|
+
BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
|
|
4660
|
+
BPG r | FLV r | MIFF r | PFA r | TXT r
|
|
4661
|
+
BTF r | FPF r | MKA r | PFB r | VCF r
|
|
4662
|
+
CHM r | FPX r | MKS r | PFM r | VNT r
|
|
4663
|
+
COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
|
|
4664
|
+
CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
|
|
4665
|
+
CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
|
4666
|
+
CRM r/w | GZ r | MODD r | PICT r | WDP r/w
|
|
4667
|
+
CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
|
|
4668
|
+
CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
|
4669
|
+
CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
|
4670
|
+
CUR r | HEIF r/w | MP3 r | PPT r | WMV r
|
|
4671
|
+
CZI r | HTML r | MP4 r/w | PPTX r | WPG r
|
|
4672
|
+
DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
|
|
4673
|
+
DCP r/w | ICO r | MPG r | PSB r/w | WV r
|
|
4674
|
+
DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
|
|
4675
|
+
DFONT r | IDML r | MQV r/w | PSP r | XCF r
|
|
4676
|
+
DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
|
|
4677
|
+
DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
|
|
4678
|
+
DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
|
|
4679
|
+
DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
|
|
4680
|
+
DOC r | INX r | NKSC r/w | RAM r |
|
|
4681
|
+
DOCX r | ISO r | NRW r/w | RAR r |
|
|
4660
4682
|
|
|
4661
4683
|
Meta Information
|
|
4662
4684
|
----------------------+----------------------+---------------------
|
|
@@ -4867,8 +4889,8 @@ OPTIONS
|
|
|
4867
4889
|
may be used to conditionally delete or replace a tag (see "WRITING
|
|
4868
4890
|
EXAMPLES" for examples). "^=" is used to write an empty string
|
|
4869
4891
|
instead of deleting the tag when no *VALUE* is given, but otherwise
|
|
4870
|
-
it is equivalent to "="
|
|
4871
|
-
|
|
4892
|
+
it is equivalent to "=". (Note that the caret must be quoted on the
|
|
4893
|
+
Windows command line.)
|
|
4872
4894
|
|
|
4873
4895
|
*TAG* may contain one or more leading family 0, 1, 2 or 7 group
|
|
4874
4896
|
names, prefixed by optional family numbers, and separated colons.
|
|
@@ -4939,7 +4961,8 @@ OPTIONS
|
|
|
4939
4961
|
delete JPEG application segments which are not associated with
|
|
4940
4962
|
another deletable group. For example, specifying "-APP14:All=" will
|
|
4941
4963
|
NOT delete the APP14 "Adobe" segment because this is accomplished
|
|
4942
|
-
with "-Adobe:All".
|
|
4964
|
+
with "-Adobe:All". But note that these unnamed APP segments may not
|
|
4965
|
+
be excluded with "--APPxx:all" when deleting all information.
|
|
4943
4966
|
|
|
4944
4967
|
6) When shifting a value, the shift is applied to the original
|
|
4945
4968
|
value of the tag, overriding any other values previously assigned
|
|
@@ -5581,7 +5604,7 @@ OPTIONS
|
|
|
5581
5604
|
|
|
5582
5605
|
produces output like this:
|
|
5583
5606
|
|
|
5584
|
-
-- Generated by ExifTool 12.
|
|
5607
|
+
-- Generated by ExifTool 12.65 --
|
|
5585
5608
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5586
5609
|
(f/5.6, 1/60s, ISO 100)
|
|
5587
5610
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -6110,13 +6133,10 @@ OPTIONS
|
|
|
6110
6133
|
Perl variables, if used, require a double "$", and regular
|
|
6111
6134
|
expressions ending in $/ must use $$/ instead.
|
|
6112
6135
|
|
|
6113
|
-
4) The condition
|
|
6114
|
-
|
|
6115
|
-
|
|
6116
|
-
|
|
6117
|
-
|
|
6118
|
-
exiftool -if EXPR -p '$directory/$filename' -ext nef DIR > nef.txt
|
|
6119
|
-
exiftool -@ nef.txt -srcfile %d%f.xmp ...
|
|
6136
|
+
4) The condition accesses only tags from the file being processed
|
|
6137
|
+
unless the -fileNUM option is used to read an alternate file and
|
|
6138
|
+
the corresponding family 8 group name is specified for the tag. See
|
|
6139
|
+
the -fileNUM option details for more information.
|
|
6120
6140
|
|
|
6121
6141
|
5) The -a option has no effect on the evaluation of the expression,
|
|
6122
6142
|
and the values of duplicate tags are accessible only by specifying
|
|
@@ -6303,11 +6323,12 @@ OPTIONS
|
|
|
6303
6323
|
When reading, causes information to be extracted from .gz and .bz2
|
|
6304
6324
|
compressed images (only one image per archive; requires gzip and
|
|
6305
6325
|
bzip2 to be available). When writing, causes compressed information
|
|
6306
|
-
to be written if supported by the metadata format (eg.
|
|
6307
|
-
textual metadata
|
|
6308
|
-
|
|
6309
|
-
|
|
6310
|
-
|
|
6326
|
+
to be written if supported by the metadata format (eg. PNG supports
|
|
6327
|
+
compressed textual metadata, JXL supports compressed EXIF and XML,
|
|
6328
|
+
and MIE supports any compressed metadata), disables the recommended
|
|
6329
|
+
padding in embedded XMP (saving 2424 bytes when writing XMP in a
|
|
6330
|
+
file), and writes XMP in shorthand format -- the equivalent of
|
|
6331
|
+
setting the API Compress=1 and Compact="NoPadding,Shorthand".
|
|
6311
6332
|
|
|
6312
6333
|
Other options
|
|
6313
6334
|
-@ *ARGFILE*
|
|
@@ -6507,12 +6528,13 @@ OPTIONS
|
|
|
6507
6528
|
improve performance in multi-pass processing by reducing the overhead
|
|
6508
6529
|
required to load exiftool for each invocation.
|
|
6509
6530
|
|
|
6510
|
-
-api *OPT[[^]=[VAL]]*
|
|
6531
|
+
-api [*OPT[[^]=[VAL]]*]
|
|
6511
6532
|
Set ExifTool API option. *OPT* is an API option name. The option
|
|
6512
6533
|
value is set to 1 if *=VAL* is omitted. If *VAL* is omitted, the
|
|
6513
6534
|
option value is set to undef if "=" is used, or an empty string
|
|
6514
|
-
with "^=".
|
|
6515
|
-
|
|
6535
|
+
with "^=". If *OPT* is not specified a list of available options is
|
|
6536
|
+
returned. See Image::ExifTool Options for option details. This
|
|
6537
|
+
overrides API options set via the config file.
|
|
6516
6538
|
|
|
6517
6539
|
-common_args
|
|
6518
6540
|
Specifies that all arguments following this option are common to
|
|
@@ -6763,6 +6785,15 @@ OPTIONS
|
|
|
6763
6785
|
|
|
6764
6786
|
Note that function names are case sensitive.
|
|
6765
6787
|
|
|
6788
|
+
ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
|
|
6789
|
+
function largely redundant, with all the functionality except the
|
|
6790
|
+
ability to avoid rewriting the file if there are no duplicates, but with
|
|
6791
|
+
the advantage the duplicates may be removed when accumulating list items
|
|
6792
|
+
from multiple sources. An equivalent to the above commands using this
|
|
6793
|
+
feature would be:
|
|
6794
|
+
|
|
6795
|
+
exiftool -tagsfromfile @ -keywords -api nodups a.jpg
|
|
6796
|
+
|
|
6766
6797
|
WINDOWS UNICODE FILE NAMES
|
|
6767
6798
|
In Windows, command-line arguments are specified using the current code
|
|
6768
6799
|
page and are recoded automatically to the system code page. This
|