exiftool-vendored.exe 13.37.0 → 13.40.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/bin/exiftool.exe +0 -0
- package/bin/exiftool_files/exiftool.pl +14 -4
- package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/DJI.pm +256 -20
- package/bin/exiftool_files/lib/Image/ExifTool/DSF.pm +138 -0
- package/bin/exiftool_files/lib/Image/ExifTool/EXE.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Font.pm +386 -118
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +10 -7
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +21 -2
- package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +6 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Google.pm +16 -6
- package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +11 -10
- package/bin/exiftool_files/lib/Image/ExifTool/LNK.pm +63 -2
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +32 -23
- package/bin/exiftool_files/lib/Image/ExifTool/MIEUnits.pod +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/OOXML.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +7 -2
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +3 -3
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +44 -35
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +19 -14
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +35 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +1383 -1217
- package/bin/exiftool_files/lib/Image/ExifTool/WavPack.pm +144 -0
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +12 -7
- package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +11 -5
- package/bin/exiftool_files/lib/Image/ExifTool.pm +46 -26
- package/bin/exiftool_files/lib/Image/ExifTool.pod +64 -56
- package/bin/exiftool_files/windows_exiftool.txt +67 -64
- package/package.json +4 -4
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
# File: WavPack.pm
|
|
3
|
+
#
|
|
4
|
+
# Description: Read metadata from WavPack audio files
|
|
5
|
+
#
|
|
6
|
+
# Revisions: 2025-09-24 - P. Harvey Created
|
|
7
|
+
#
|
|
8
|
+
# References: 1) https://www.wavpack.com/WavPack5FileFormat.pdf
|
|
9
|
+
#------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
package Image::ExifTool::WavPack;
|
|
12
|
+
|
|
13
|
+
use strict;
|
|
14
|
+
use vars qw($VERSION);
|
|
15
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
|
+
use Image::ExifTool::RIFF;
|
|
17
|
+
use Image::ExifTool::APE;
|
|
18
|
+
|
|
19
|
+
$VERSION = '1.00';
|
|
20
|
+
|
|
21
|
+
%Image::ExifTool::WavPack::Main = (
|
|
22
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
23
|
+
GROUPS => { 0 => 'File', 1 => 'File', 2 => 'Audio' },
|
|
24
|
+
FORMAT => 'int32u',
|
|
25
|
+
NOTES => q{
|
|
26
|
+
Tags extracted from the header of WavPack (WV and WVP) audio files. These
|
|
27
|
+
files may also contain RIFF, ID3 and/or APE metadata which is also extracted
|
|
28
|
+
by ExifTool. See L<https://www.wavpack.com/WavPack5FileFormat.pdf> for the
|
|
29
|
+
WavPack specification.
|
|
30
|
+
},
|
|
31
|
+
6.1 => {
|
|
32
|
+
Name => 'BytesPerSample',
|
|
33
|
+
Mask => 0x03,
|
|
34
|
+
ValueConv => '$val + 1',
|
|
35
|
+
},
|
|
36
|
+
6.2 => {
|
|
37
|
+
Name => 'AudioType',
|
|
38
|
+
Mask => 0x04,
|
|
39
|
+
PrintConv => { 0 => 'Stereo', 1 => 'Mono' },
|
|
40
|
+
},
|
|
41
|
+
6.3 => {
|
|
42
|
+
Name => 'Compression',
|
|
43
|
+
Mask => 0x08,
|
|
44
|
+
PrintConv => { 0 => 'Lossless', 1 => 'Hybrid' },
|
|
45
|
+
},
|
|
46
|
+
6.4 => {
|
|
47
|
+
Name => 'DataFormat',
|
|
48
|
+
Mask => 0x80,
|
|
49
|
+
PrintConv => { 0 => 'Integer', 1 => 'Floating Point' },
|
|
50
|
+
},
|
|
51
|
+
6.5 => {
|
|
52
|
+
Name => 'SampleRate',
|
|
53
|
+
Mask => 0x07800000,
|
|
54
|
+
Priority => 0, # ("Custom" is not very useful)
|
|
55
|
+
PrintConv => { # (NC)
|
|
56
|
+
0 => 6000,
|
|
57
|
+
1 => 8000,
|
|
58
|
+
2 => 9600,
|
|
59
|
+
3 => 11025,
|
|
60
|
+
4 => 12000,
|
|
61
|
+
5 => 16000,
|
|
62
|
+
6 => 22050,
|
|
63
|
+
7 => 24000,
|
|
64
|
+
8 => 32000,
|
|
65
|
+
9 => 44100,
|
|
66
|
+
10 => 48000,
|
|
67
|
+
11 => 64000,
|
|
68
|
+
12 => 88200,
|
|
69
|
+
13 => 96000,
|
|
70
|
+
14 => 192000,
|
|
71
|
+
15 => 'Custom',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
#------------------------------------------------------------------------------
|
|
77
|
+
# Extract metadata from a WavPack file
|
|
78
|
+
# Inputs: 0) ExifTool object reference, 1) dirInfo reference
|
|
79
|
+
# Returns: 1 on success, 0 if this wasn't a valid WavPack file
|
|
80
|
+
sub ProcessWV($$)
|
|
81
|
+
{
|
|
82
|
+
my ($et, $dirInfo) = @_;
|
|
83
|
+
my $raf = $$dirInfo{RAF};
|
|
84
|
+
my $buff;
|
|
85
|
+
|
|
86
|
+
# verify this is a valid WavPack file
|
|
87
|
+
return 0 unless $raf->Read($buff, 32) == 32;
|
|
88
|
+
return 0 unless $buff =~ /^wvpk.{4}[\x02\x10]\x04/s;
|
|
89
|
+
$et->SetFileType();
|
|
90
|
+
my %dirInfo = (
|
|
91
|
+
DataPt => \$buff,
|
|
92
|
+
DirStart => 0,
|
|
93
|
+
DirLen => length($buff),
|
|
94
|
+
);
|
|
95
|
+
$et->ProcessBinaryData(\%dirInfo, GetTagTable('Image::ExifTool::WavPack::Main'));
|
|
96
|
+
# historically, the RIFF module has handled RIFF-type WavPack files
|
|
97
|
+
$raf->Seek(0,0);
|
|
98
|
+
push @{$$et{PATH}}, 'RIFF'; # update metadata path
|
|
99
|
+
Image::ExifTool::RIFF::ProcessRIFF($et, $dirInfo);
|
|
100
|
+
# also look for ID3 and APE trailers (ProcessAPE also checks for ID3)
|
|
101
|
+
$$et{PATH}[-1] = 'APE';
|
|
102
|
+
Image::ExifTool::APE::ProcessAPE($et, $dirInfo);
|
|
103
|
+
pop @{$$et{PATH}};
|
|
104
|
+
return 1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
1; # end
|
|
108
|
+
|
|
109
|
+
__END__
|
|
110
|
+
|
|
111
|
+
=head1 NAME
|
|
112
|
+
|
|
113
|
+
Image::ExifTool::WavPack - Read metadata from WavPack audio files
|
|
114
|
+
|
|
115
|
+
=head1 SYNOPSIS
|
|
116
|
+
|
|
117
|
+
This module is used by Image::ExifTool
|
|
118
|
+
|
|
119
|
+
=head1 DESCRIPTION
|
|
120
|
+
|
|
121
|
+
This module contains definitions required by Image::ExifTool to read metadata
|
|
122
|
+
from WavPack audio files.
|
|
123
|
+
|
|
124
|
+
=head1 AUTHOR
|
|
125
|
+
|
|
126
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
127
|
+
|
|
128
|
+
This library is free software; you can redistribute it and/or modify it
|
|
129
|
+
under the same terms as Perl itself.
|
|
130
|
+
|
|
131
|
+
=head1 REFERENCES
|
|
132
|
+
|
|
133
|
+
=over 4
|
|
134
|
+
|
|
135
|
+
=item L<https://www.wavpack.com/WavPack5FileFormat.pdf>
|
|
136
|
+
|
|
137
|
+
=back
|
|
138
|
+
|
|
139
|
+
=head1 SEE ALSO
|
|
140
|
+
|
|
141
|
+
L<Image::ExifTool::TagNames/WavPack Tags>,
|
|
142
|
+
L<Image::ExifTool(3pm)|Image::ExifTool>
|
|
143
|
+
|
|
144
|
+
=cut
|
|
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
|
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
require Exporter;
|
|
52
52
|
|
|
53
|
-
$VERSION = '3.
|
|
53
|
+
$VERSION = '3.75';
|
|
54
54
|
@ISA = qw(Exporter);
|
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
|
56
56
|
|
|
@@ -4436,7 +4436,7 @@ sub ProcessXMP($$;$)
|
|
|
4436
4436
|
$buf2 = pack('C*', unpack("$fmt*",$buff));
|
|
4437
4437
|
}
|
|
4438
4438
|
if (Image::ExifTool::GetWarning()) {
|
|
4439
|
-
$et->Warn('Superfluous BOM at start of XMP');
|
|
4439
|
+
$et->Warn('Superfluous BOM at start of XMP') unless $$dirInfo{RAF};
|
|
4440
4440
|
$dataPt = \$buff; # use XMP with the BOM removed
|
|
4441
4441
|
} else {
|
|
4442
4442
|
$et->Warn('XMP is double UTF-encoded');
|
|
@@ -4487,13 +4487,16 @@ sub ProcessXMP($$;$)
|
|
|
4487
4487
|
$begin = join "\0", split //, $begin;
|
|
4488
4488
|
# must reset pos because it was killed by previous unsuccessful //g match
|
|
4489
4489
|
pos($$dataPt) = $dirStart;
|
|
4490
|
+
my $badEnc;
|
|
4490
4491
|
if ($$dataPt =~ /\G(\0)?\Q$begin\E\0./sg) {
|
|
4491
4492
|
# validate byte ordering by checking for U+FEFF character
|
|
4492
4493
|
if ($1) {
|
|
4493
4494
|
# should be big-endian since we had a leading \0
|
|
4494
|
-
$fmt = 'n'
|
|
4495
|
+
$fmt = 'n';
|
|
4496
|
+
$badEnc = 1 unless $$dataPt =~ /\G\xfe\xff/g;
|
|
4495
4497
|
} else {
|
|
4496
|
-
$fmt = 'v'
|
|
4498
|
+
$fmt = 'v';
|
|
4499
|
+
$badEnc = 1 unless $$dataPt =~ /\G\0\xff\xfe/g;
|
|
4497
4500
|
}
|
|
4498
4501
|
} else {
|
|
4499
4502
|
# check for UTF-32 encoding (with three \0's between characters)
|
|
@@ -4503,12 +4506,14 @@ sub ProcessXMP($$;$)
|
|
|
4503
4506
|
$fmt = 0; # set format to zero as indication we didn't find encoded XMP
|
|
4504
4507
|
} elsif ($1) {
|
|
4505
4508
|
# should be big-endian
|
|
4506
|
-
$fmt = 'N'
|
|
4509
|
+
$fmt = 'N';
|
|
4510
|
+
$badEnc = 1 unless $$dataPt =~ /\G\0\0\xfe\xff/g;
|
|
4507
4511
|
} else {
|
|
4508
|
-
$fmt = 'V'
|
|
4512
|
+
$fmt = 'V';
|
|
4513
|
+
$badEnc = 1 unless $$dataPt =~ /\G\0\0\0\xff\xfe\0\0/g;
|
|
4509
4514
|
}
|
|
4510
4515
|
}
|
|
4511
|
-
|
|
4516
|
+
$badEnc and $et->Warn('Invalid XMP encoding marker');
|
|
4512
4517
|
}
|
|
4513
4518
|
# warn if standard XMP is missing xpacket wrapper
|
|
4514
4519
|
if ($$et{XMP_NO_XPACKET} and $$et{OPTIONS}{Validate} and
|
|
@@ -499,11 +499,12 @@ my %sImageRegion = ( # new in 1.5
|
|
|
499
499
|
NAMESPACE => 'Iptc4xmpExt',
|
|
500
500
|
TABLE_DESC => 'XMP IPTC Extension',
|
|
501
501
|
NOTES => q{
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
502
|
+
This table contains tags defined by the IPTC Extension schema version 1.7
|
|
503
|
+
and IPTC Video Metadata version 1.3, plus the AI additions. The actual
|
|
504
|
+
namespace prefix is "Iptc4xmpExt", but ExifTool shortens this for the family
|
|
505
|
+
1 group name. (See
|
|
506
|
+
L<http://www.iptc.org/standards/photo-metadata/iptc-standard/> and
|
|
507
|
+
L<https://iptc.org/standards/video-metadata-hub/>.)
|
|
507
508
|
},
|
|
508
509
|
AboutCvTerm => {
|
|
509
510
|
Struct => \%sCVTermDetails,
|
|
@@ -769,6 +770,11 @@ my %sImageRegion = ( # new in 1.5
|
|
|
769
770
|
ImageRegion => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sImageRegion },
|
|
770
771
|
# new Extension 1.6 property
|
|
771
772
|
EventId => { Name => 'EventID', List => 'Bag' },
|
|
773
|
+
# new AI tags
|
|
774
|
+
AISystemUsed => { },
|
|
775
|
+
AISystemVersionUsed => { },
|
|
776
|
+
AIPromptInformation => { },
|
|
777
|
+
AIPromptWriterName => { },
|
|
772
778
|
);
|
|
773
779
|
|
|
774
780
|
#------------------------------------------------------------------------------
|
|
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
|
30
30
|
%static_vars $advFmtSelf $configFile @configFiles $noConfig);
|
|
31
31
|
|
|
32
|
-
$VERSION = '13.
|
|
32
|
+
$VERSION = '13.40';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -148,16 +148,16 @@ sub ReadValue($$$;$$$);
|
|
|
148
148
|
PCX PGF PSP PhotoCD Radiance Other::PFM PDF PostScript Photoshop::Header
|
|
149
149
|
Photoshop::Layers Photoshop::ImageData FujiFilm::RAFHeader FujiFilm::RAF
|
|
150
150
|
FujiFilm::IFD FujiFilm::MRAW Samsung::Trailer Sony::SRF2 Sony::SR2SubIFD
|
|
151
|
-
Sony::PMP ITC ID3 ID3::Lyrics3 FLAC AAC Ogg Vorbis
|
|
152
|
-
APE::OldHeader Audible MPC MPEG::Audio MPEG::Video MPEG::Xing
|
|
153
|
-
QuickTime::ImageFile QuickTime::Stream QuickTime::Tags360Fly
|
|
154
|
-
Matroska::StdTag MOI MXF DV Flash Flash::FLV Real::Media
|
|
155
|
-
Real::Metafile Red RIFF AIFF ASF TNEF WTV DICOM FITS XISF MIE
|
|
156
|
-
XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion
|
|
157
|
-
EXE::DebugRSDS EXE::DebugNB10 EXE::Misc EXE::MachO EXE::PEF
|
|
158
|
-
EXE::CHM LNK PCAP Font VCard Text VCard::VCalendar
|
|
159
|
-
ZIP ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork
|
|
160
|
-
MacOS MacOS::MDItem FlashPix::DocTable
|
|
151
|
+
Sony::PMP ITC ID3 ID3::Lyrics3 FLAC AAC Ogg Vorbis DSF WavPack APE
|
|
152
|
+
APE::NewHeader APE::OldHeader Audible MPC MPEG::Audio MPEG::Video MPEG::Xing
|
|
153
|
+
M2TS QuickTime QuickTime::ImageFile QuickTime::Stream QuickTime::Tags360Fly
|
|
154
|
+
Matroska Matroska::StdTag MOI MXF DV Flash Flash::FLV Real::Media
|
|
155
|
+
Real::Audio Real::Metafile Red RIFF AIFF ASF TNEF WTV DICOM FITS XISF MIE
|
|
156
|
+
JSON HTML XMP::SVG Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion
|
|
157
|
+
EXE::PEString EXE::DebugRSDS EXE::DebugNB10 EXE::Misc EXE::MachO EXE::PEF
|
|
158
|
+
EXE::ELF EXE::AR EXE::CHM LNK LNK::INI PCAP Font VCard Text VCard::VCalendar
|
|
159
|
+
VCard::VNote RSRC Rawzor ZIP ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork
|
|
160
|
+
ISO FLIR::AFF FLIR::FPF MacOS MacOS::MDItem FlashPix::DocTable
|
|
161
161
|
);
|
|
162
162
|
|
|
163
163
|
# alphabetical list of current Lang modules
|
|
@@ -194,13 +194,13 @@ $defaultLang = 'en'; # default language
|
|
|
194
194
|
# 3) PLIST must be in this list for the binary PLIST format, although it may
|
|
195
195
|
# cause a file to be checked twice for XML
|
|
196
196
|
@fileTypes = qw(JPEG EXV CRW DR4 TIFF GIF MRW RAF X3F JP2 PNG MIE MIFF PS PDF
|
|
197
|
-
PSD XMP BMP WPG BPG PPM RIFF AIFF ASF MOV MPEG Real SWF PSP
|
|
198
|
-
OGG FLAC APE MPC MKV MXF DV PMP IND PGF ICC ITC FLIR FLIF
|
|
199
|
-
LFP HTML VRD RTF FITS XISF XCF DSS QTIF FPX PICT ZIP
|
|
200
|
-
RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX
|
|
201
|
-
JUMBF RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV
|
|
202
|
-
LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS PCAP
|
|
203
|
-
TNEF DICOM PCD NKA ICO TXT AAC);
|
|
197
|
+
PSD XMP BMP WPG BPG PPM WV RIFF AIFF ASF MOV MPEG Real SWF PSP
|
|
198
|
+
FLV OGG FLAC APE MPC MKV MXF DV PMP IND PGF ICC ITC FLIR FLIF
|
|
199
|
+
FPF LFP HTML VRD RTF FITS XISF XCF DSF DSS QTIF FPX PICT ZIP
|
|
200
|
+
GZIP PLIST RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX
|
|
201
|
+
DPX RAW Font JUMBF RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV
|
|
202
|
+
Torrent VCard LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS PCAP
|
|
203
|
+
JSON MP3 TNEF DICOM PCD NKA ICO TXT AAC);
|
|
204
204
|
|
|
205
205
|
# file types that we can write (edit)
|
|
206
206
|
my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
|
|
@@ -304,6 +304,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
|
304
304
|
DPX => ['DPX', 'Digital Picture Exchange' ],
|
|
305
305
|
DR4 => ['DR4', 'Canon VRD version 4 Recipe'],
|
|
306
306
|
DS2 => ['DSS', 'Digital Speech Standard 2'],
|
|
307
|
+
DSF => ['DSF', 'DSF Stream File'],
|
|
307
308
|
DSS => ['DSS', 'Digital Speech Standard'],
|
|
308
309
|
DV => ['DV', 'Digital Video'],
|
|
309
310
|
DVB => ['MOV', 'Digital Video Broadcasting'],
|
|
@@ -543,6 +544,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
|
543
544
|
TTF => ['Font', 'True Type Font'],
|
|
544
545
|
TUB => 'PSP',
|
|
545
546
|
TXT => ['TXT', 'Text file'],
|
|
547
|
+
URL => ['LNK', 'Windows shortcut URL'],
|
|
546
548
|
VCARD=> ['VCard','Virtual Card'],
|
|
547
549
|
VCF => 'VCARD',
|
|
548
550
|
VOB => ['MPEG', 'Video Object'],
|
|
@@ -556,7 +558,8 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
|
556
558
|
WMA => ['ASF', 'Windows Media Audio'],
|
|
557
559
|
WMF => ['WMF', 'Windows Metafile Format'],
|
|
558
560
|
WMV => ['ASF', 'Windows Media Video'],
|
|
559
|
-
WV => ['
|
|
561
|
+
WV => ['WV', 'WavPack Audio'],
|
|
562
|
+
WVP => 'WV',
|
|
560
563
|
X3F => ['X3F', 'Sigma RAW format'],
|
|
561
564
|
XCF => ['XCF', 'GIMP native image format'],
|
|
562
565
|
XHTML=> ['HTML', 'Extensible HyperText Markup Language'],
|
|
@@ -571,6 +574,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
|
|
|
571
574
|
XLTM => [['ZIP','FPX'], 'Office Open XML Spreadsheet Template Macro-enabled'],
|
|
572
575
|
XLTX => [['ZIP','FPX'], 'Office Open XML Spreadsheet Template'],
|
|
573
576
|
XMP => ['XMP', 'Extensible Metadata Platform'],
|
|
577
|
+
VSDX => ['ZIP', 'Visio Diagram Document'],
|
|
574
578
|
WOFF => ['Font', 'Web Open Font Format'],
|
|
575
579
|
WOFF2=> ['Font', 'Web Open Font Format 2'],
|
|
576
580
|
WPG => ['WPG', 'WordPerfect Graphics'],
|
|
@@ -652,6 +656,7 @@ my %fileDescription = (
|
|
|
652
656
|
DPX => 'image/x-dpx',
|
|
653
657
|
DR4 => 'application/octet-stream', #PH (NC)
|
|
654
658
|
DS2 => 'audio/x-ds2',
|
|
659
|
+
DSF => 'audio/x-dsf',
|
|
655
660
|
DSS => 'audio/x-dss',
|
|
656
661
|
DV => 'video/x-dv',
|
|
657
662
|
'DVR-MS' => 'video/x-ms-dvr',
|
|
@@ -811,6 +816,7 @@ my %fileDescription = (
|
|
|
811
816
|
VCard=> 'text/vcard',
|
|
812
817
|
VRD => 'application/octet-stream', #PH (NC)
|
|
813
818
|
VSD => 'application/x-visio',
|
|
819
|
+
VSDX => 'application/vnd.ms-visio.drawing',
|
|
814
820
|
WDP => 'image/vnd.ms-photo',
|
|
815
821
|
WEBM => 'video/webm',
|
|
816
822
|
WMA => 'audio/x-ms-wma',
|
|
@@ -818,6 +824,7 @@ my %fileDescription = (
|
|
|
818
824
|
WMV => 'video/x-ms-wmv',
|
|
819
825
|
WPG => 'image/x-wpg',
|
|
820
826
|
WTV => 'video/x-ms-wtv',
|
|
827
|
+
WV => 'audio/x-wavpack',
|
|
821
828
|
X3F => 'image/x-sigma-x3f',
|
|
822
829
|
XCF => 'image/x-xcf',
|
|
823
830
|
XISF => 'image/x-xisf',
|
|
@@ -901,6 +908,7 @@ my %moduleName = (
|
|
|
901
908
|
TXT => 'Text',
|
|
902
909
|
VRD => 'CanonVRD',
|
|
903
910
|
WMF => 0,
|
|
911
|
+
WV => 'WavPack',
|
|
904
912
|
X3F => 'SigmaRaw',
|
|
905
913
|
XCF => 'GIMP',
|
|
906
914
|
);
|
|
@@ -933,6 +941,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
|
933
941
|
DOCX => 'PK\x03\x04',
|
|
934
942
|
DPX => '(SDPX|XPDS)',
|
|
935
943
|
DR4 => 'IIII[\x04|\x05]\0\x04\0',
|
|
944
|
+
DSF => 'DSD \x1c\0{7}.{16}fmt ',
|
|
936
945
|
DSS => '(\x02dss|\x03ds2)',
|
|
937
946
|
DV => '\x1f\x07\0[\x3f\xbf]', # (not tested if extension recognized)
|
|
938
947
|
DWF => '\(DWF V\d',
|
|
@@ -968,9 +977,9 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
|
968
977
|
JXL => '(\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl )',
|
|
969
978
|
LFP => '\x89LFP\x0d\x0a\x1a\x0a',
|
|
970
979
|
LIF => '\x70\0{3}.{4}\x2a.{4}<\0',
|
|
971
|
-
LNK => '.{4}\x01\x14\x02\0{5}\xc0\0{6}\x46',
|
|
980
|
+
LNK => '(.{4}\x01\x14\x02\0{5}\xc0\0{6}\x46|\[[InternetShortcut\][\x0d\x0a])',
|
|
972
981
|
LRI => 'LELR \0',
|
|
973
|
-
M2TS => '(
|
|
982
|
+
M2TS => '.{0,191}?\x47(.{187}|.{191})\x47(.{187}|.{191})\x47',
|
|
974
983
|
MacOS=> '\0\x05\x16\x07\0.\0\0Mac OS X ',
|
|
975
984
|
MIE => '~[\x10\x18]\x04.0MIE',
|
|
976
985
|
MIFF => 'id=ImageMagick',
|
|
@@ -1132,6 +1141,7 @@ my @availableOptions = (
|
|
|
1132
1141
|
[ 'GeoMaxHDOP', undef, 'geotag maximum HDOP' ],
|
|
1133
1142
|
[ 'GeoMaxPDOP', undef, 'geotag maximum PDOP' ],
|
|
1134
1143
|
[ 'GeoMinSats', undef, 'geotag minimum satellites' ],
|
|
1144
|
+
[ 'GeoHPosErr', undef, 'geotag GPSHPositioningError based on $GPSDOP' ],
|
|
1135
1145
|
[ 'GeoSpeedRef', undef, 'geotag GPSSpeedRef' ],
|
|
1136
1146
|
[ 'GlobalTimeShift', undef, 'apply time shift to all extracted date/time values' ],
|
|
1137
1147
|
[ 'GPSQuadrant', undef, 'quadrant for GPS if not otherwise known' ],
|
|
@@ -2292,7 +2302,8 @@ sub CleanWarning(;$)
|
|
|
2292
2302
|
return undef unless defined $evalWarning;
|
|
2293
2303
|
$str = $evalWarning;
|
|
2294
2304
|
}
|
|
2295
|
-
|
|
2305
|
+
# truncate at first " at " for warnings like "syntax error at (eval 80) line 1, at EOF"
|
|
2306
|
+
$str = $1 if $str =~ /(.*?) at /s;
|
|
2296
2307
|
$str =~ s/\s+$//s;
|
|
2297
2308
|
return $str;
|
|
2298
2309
|
}
|
|
@@ -5523,23 +5534,31 @@ sub AddCleanup($)
|
|
|
5523
5534
|
#------------------------------------------------------------------------------
|
|
5524
5535
|
# Add warning tag
|
|
5525
5536
|
# Inputs: 0) ExifTool object reference, 1) warning message
|
|
5526
|
-
# 2)
|
|
5527
|
-
#
|
|
5537
|
+
# 2) 0=normal warning, 1=minor, 2=minor with behavioural change when
|
|
5538
|
+
# ignored, 3=warning shouldn't be issued with Validate option,
|
|
5539
|
+
# bit 0x04 set causes warning count to not be incremented
|
|
5528
5540
|
# Returns: true if warning tag was added
|
|
5529
5541
|
sub Warn($$;$)
|
|
5530
5542
|
{
|
|
5531
5543
|
my ($self, $str, $ignorable) = @_;
|
|
5532
5544
|
my $noWarn = $$self{OPTIONS}{NoWarning};
|
|
5533
|
-
|
|
5545
|
+
my $noCount;
|
|
5546
|
+
while ($ignorable) {
|
|
5547
|
+
if ($ignorable & 0x04) {
|
|
5548
|
+
$noCount = 1;
|
|
5549
|
+
$ignorable &= 0x03 or last;
|
|
5550
|
+
}
|
|
5551
|
+
my $ignorable = $ignorable & 0x03;
|
|
5534
5552
|
return 0 if $$self{OPTIONS}{IgnoreMinorErrors};
|
|
5535
5553
|
return 0 if $ignorable eq '3' and $$self{OPTIONS}{Validate};
|
|
5536
5554
|
return 1 if defined $noWarn and eval { $str =~ /$noWarn/ };
|
|
5537
5555
|
$str = $ignorable eq '2' ? "[Minor] $str" : "[minor] $str";
|
|
5556
|
+
last;
|
|
5538
5557
|
}
|
|
5539
5558
|
unless (defined $noWarn and eval { $str =~ /$noWarn/ }) {
|
|
5540
5559
|
# add each warning only once but count number of occurrences
|
|
5541
5560
|
if ($$self{WAS_WARNED}{$str}) {
|
|
5542
|
-
++$$self{WAS_WARNED}{$str};
|
|
5561
|
+
++$$self{WAS_WARNED}{$str} unless $noCount;
|
|
5543
5562
|
} else {
|
|
5544
5563
|
$self->FoundTag('Warning', $str);
|
|
5545
5564
|
$$self{WAS_WARNED}{$str} = 1;
|
|
@@ -9575,6 +9594,7 @@ sub DoEscape($$)
|
|
|
9575
9594
|
sub SetFileType($;$$$)
|
|
9576
9595
|
{
|
|
9577
9596
|
my ($self, $fileType, $mimeType, $normExt) = @_;
|
|
9597
|
+
# use only the first FileType set if called again for the main document
|
|
9578
9598
|
unless ($$self{FileType} and not $$self{DOC_NUM}) {
|
|
9579
9599
|
my $baseType = $$self{FILE_TYPE};
|
|
9580
9600
|
my $ext = $$self{FILE_EXT};
|
|
@@ -54,62 +54,63 @@ Image::ExifTool - Read and write meta information
|
|
|
54
54
|
=head1 DESCRIPTION
|
|
55
55
|
|
|
56
56
|
Reads and writes meta information in a wide variety of files, including the
|
|
57
|
-
maker notes of many digital cameras by various manufacturers such as
|
|
58
|
-
Casio, DJI, FLIR, FujiFilm, GE, GoPro, HP, JVC/Victor, Kodak,
|
|
59
|
-
Minolta/Konica-Minolta, Nikon, Nintendo, Olympus/Epson,
|
|
60
|
-
Pentax/Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo,
|
|
61
|
-
Sony.
|
|
57
|
+
maker notes of many digital cameras by various manufacturers such as Apple,
|
|
58
|
+
Canon, Casio, DJI, FLIR, FujiFilm, GE, Google, GoPro, HP, JVC/Victor, Kodak,
|
|
59
|
+
Leaf, Minolta/Konica-Minolta, Nikon, Nintendo, Olympus/Epson,
|
|
60
|
+
Panasonic/Leica, Pentax/Asahi, Phase One, Reconyx, Ricoh, Samsung, Sanyo,
|
|
61
|
+
Sigma/Foveon and Sony.
|
|
62
62
|
|
|
63
63
|
Below is a list of file types and meta information formats currently
|
|
64
64
|
supported by ExifTool (r = read, w = write, c = create):
|
|
65
65
|
|
|
66
66
|
File Types
|
|
67
67
|
------------+-------------+-------------+-------------+------------
|
|
68
|
-
360 r/w |
|
|
69
|
-
3FR r |
|
|
70
|
-
3G2 r/w | DSS r |
|
|
71
|
-
3GP r/w | DV r |
|
|
72
|
-
7Z r | DVB r/w |
|
|
73
|
-
A r | DVR-MS r |
|
|
74
|
-
AA r | DYLIB r |
|
|
75
|
-
AAC r | EIP r |
|
|
76
|
-
AAE r | EPS r/w |
|
|
77
|
-
AAX r/w | EPUB r |
|
|
78
|
-
ACR r | ERF r/w |
|
|
79
|
-
AFM r | EXE r |
|
|
80
|
-
AI r/w | EXIF r/w/c |
|
|
81
|
-
AIFF r | EXR r |
|
|
82
|
-
APE r | EXV r/w/c |
|
|
83
|
-
ARQ r/w | F4A/V r/w |
|
|
84
|
-
ARW r/w | FFF r/w |
|
|
85
|
-
ASF r | FITS r |
|
|
86
|
-
AVI r | FLA r |
|
|
87
|
-
AVIF r/w | FLAC r |
|
|
88
|
-
AZW r | FLIF r/w |
|
|
89
|
-
BMP r | FLV r |
|
|
90
|
-
BPG r | FPF r |
|
|
91
|
-
BTF r | FPX r |
|
|
92
|
-
C2PA r | GIF r/w |
|
|
93
|
-
CHM r | GLV r/w |
|
|
94
|
-
COS r | GPR r/w |
|
|
95
|
-
CR2 r/w | GZ r |
|
|
96
|
-
CR3 r/w | HDP r/w |
|
|
97
|
-
CRM r/w | HDR r |
|
|
98
|
-
CRW r/w | HEIC r/w |
|
|
99
|
-
CS1 r/w | HEIF r/w |
|
|
100
|
-
CSV r | HTML r |
|
|
101
|
-
CUR r | ICC r/w/c |
|
|
102
|
-
CZI r | ICO r |
|
|
103
|
-
DCM r | ICS r |
|
|
104
|
-
DCP r/w | IDML r |
|
|
105
|
-
DCR r | IIQ r/w |
|
|
106
|
-
DFONT r | IND r/w |
|
|
107
|
-
DIVX r | INSP r/w |
|
|
108
|
-
DJVU r | INSV r |
|
|
109
|
-
DLL r | INX r |
|
|
110
|
-
DNG r/w | ISO r |
|
|
111
|
-
DOC r | ITC r |
|
|
112
|
-
DOCX r | J2C r |
|
|
68
|
+
360 r/w | DR4 r/w/c | JP2 r/w | ODT r | RWL r/w
|
|
69
|
+
3FR r | DSF r | JPEG r/w | OFR r | RWZ r
|
|
70
|
+
3G2 r/w | DSS r | JSON r | OGG r | RM r
|
|
71
|
+
3GP r/w | DV r | JXL r/w | OGV r | SEQ r
|
|
72
|
+
7Z r | DVB r/w | K25 r | ONP r | SKETCH r
|
|
73
|
+
A r | DVR-MS r | KDC r | OPUS r | SO r
|
|
74
|
+
AA r | DYLIB r | KEY r | ORF r/w | SR2 r/w
|
|
75
|
+
AAC r | EIP r | LA r | ORI r/w | SRF r
|
|
76
|
+
AAE r | EPS r/w | LFP r | OTF r | SRW r/w
|
|
77
|
+
AAX r/w | EPUB r | LIF r | PAC r | SVG r
|
|
78
|
+
ACR r | ERF r/w | LNK r | PAGES r | SWF r
|
|
79
|
+
AFM r | EXE r | LRV r/w | PBM r/w | THM r/w
|
|
80
|
+
AI r/w | EXIF r/w/c | M2TS r | PCAP r | TIFF r/w
|
|
81
|
+
AIFF r | EXR r | M4A/V r/w | PCAPNG r | TNEF r
|
|
82
|
+
APE r | EXV r/w/c | MACOS r | PCD r | TORRENT r
|
|
83
|
+
ARQ r/w | F4A/V r/w | MAX r | PCX r | TTC r
|
|
84
|
+
ARW r/w | FFF r/w | MEF r/w | PDB r | TTF r
|
|
85
|
+
ASF r | FITS r | MIE r/w/c | PDF r/w | TXT r
|
|
86
|
+
AVI r | FLA r | MIFF r | PEF r/w | URL r
|
|
87
|
+
AVIF r/w | FLAC r | MKA r | PFA r | VCF r
|
|
88
|
+
AZW r | FLIF r/w | MKS r | PFB r | VNT r
|
|
89
|
+
BMP r | FLV r | MKV r | PFM r | VRD r/w/c
|
|
90
|
+
BPG r | FPF r | MNG r/w | PGF r | VSD r
|
|
91
|
+
BTF r | FPX r | MOBI r | PGM r/w | VSDX r
|
|
92
|
+
C2PA r | GIF r/w | MODD r | PLIST r | WAV r
|
|
93
|
+
CHM r | GLV r/w | MOI r | PICT r | WDP r/w
|
|
94
|
+
COS r | GPR r/w | MOS r/w | PMP r | WEBP r/w
|
|
95
|
+
CR2 r/w | GZ r | MOV r/w | PNG r/w | WEBM r
|
|
96
|
+
CR3 r/w | HDP r/w | MP3 r | PPM r/w | WMA r
|
|
97
|
+
CRM r/w | HDR r | MP4 r/w | PPT r | WMV r
|
|
98
|
+
CRW r/w | HEIC r/w | MPC r | PPTX r | WOFF r
|
|
99
|
+
CS1 r/w | HEIF r/w | MPG r | PS r/w | WOFF2 r
|
|
100
|
+
CSV r | HTML r | MPO r/w | PSB r/w | WPG r
|
|
101
|
+
CUR r | ICC r/w/c | MQV r/w | PSD r/w | WTV r
|
|
102
|
+
CZI r | ICO r | MRC r | PSP r | WV r
|
|
103
|
+
DCM r | ICS r | MRW r/w | QTIF r/w | X3F r/w
|
|
104
|
+
DCP r/w | IDML r | MXF r | R3D r | XCF r
|
|
105
|
+
DCR r | IIQ r/w | NEF r/w | RA r | XISF r
|
|
106
|
+
DFONT r | IND r/w | NKA r | RAF r/w | XLS r
|
|
107
|
+
DIVX r | INSP r/w | NKSC r/w | RAM r | XLSX r
|
|
108
|
+
DJVU r | INSV r | NRW r/w | RAR r | XMP r/w/c
|
|
109
|
+
DLL r | INX r | NUMBERS r | RAW r/w | ZIP r
|
|
110
|
+
DNG r/w | ISO r | NXD r | RIFF r |
|
|
111
|
+
DOC r | ITC r | O r | RSRC r |
|
|
112
|
+
DOCX r | J2C r | ODP r | RTF r |
|
|
113
|
+
DPX r | JNG r/w | ODS r | RW2 r/w |
|
|
113
114
|
|
|
114
115
|
Meta Information
|
|
115
116
|
----------------------+----------------------+---------------------
|
|
@@ -795,6 +796,12 @@ ignored if the HDOP is greater than this. Default is undef.
|
|
|
795
796
|
Maximum Position (3D) Dilution Of Precision for geotagging. GPS fixes are
|
|
796
797
|
ignored if the PDOP is greater than this. Default is undef.
|
|
797
798
|
|
|
799
|
+
=item GeoHPosErr
|
|
800
|
+
|
|
801
|
+
Expression to set GPSHPositioningError based on value of GPSDOP when
|
|
802
|
+
geotagging. For example, use C<'$GPSDOP * 4'> to set GPSHPositioningError
|
|
803
|
+
to 4 times GPSDOP.
|
|
804
|
+
|
|
798
805
|
=item GeoMinSats
|
|
799
806
|
|
|
800
807
|
Minimum number of satellites for geotagging. GPS fixes are ignored if the
|
|
@@ -1082,13 +1089,14 @@ name documentation. Default is undef.
|
|
|
1082
1089
|
|
|
1083
1090
|
=item RequestTags
|
|
1084
1091
|
|
|
1085
|
-
List of additional tag and/or group names to request in
|
|
1092
|
+
List of additional tag and/or group names to request in subsequent calls to
|
|
1086
1093
|
L</ExtractInfo>. This option is useful only for tags/groups which aren't
|
|
1087
|
-
extracted unless specifically requested
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
name (eg. "MacOS:"). Names
|
|
1091
|
-
the list. Default is
|
|
1094
|
+
extracted unless specifically requested, or if L</IgnoreTags> is set to
|
|
1095
|
+
"All". Value may be a list reference, a delimited string of names (any
|
|
1096
|
+
delimiter is allowed), or undef to clear the current RequestTags list.
|
|
1097
|
+
Groups are requested by adding a colon after the name (eg. "MacOS:"). Names
|
|
1098
|
+
are converted to lower case as they are added to the list. Default is
|
|
1099
|
+
undef.
|
|
1092
1100
|
|
|
1093
1101
|
=item SaveBin
|
|
1094
1102
|
|