exiftool_vendored 12.34.0 → 12.38.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.
- checksums.yaml +4 -4
- data/bin/Changes +61 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +65 -37
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +6 -2
- data/bin/lib/Image/ExifTool/Canon.pm +143 -9
- data/bin/lib/Image/ExifTool/CanonCustom.pm +12 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
- data/bin/lib/Image/ExifTool/Exif.pm +13 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/GPS.pm +14 -10
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +108 -11
- data/bin/lib/Image/ExifTool/Nikon.pm +1203 -96
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +135 -71
- data/bin/lib/Image/ExifTool/OpenEXR.pm +4 -2
- data/bin/lib/Image/ExifTool/PNG.pm +1 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +14 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
- data/bin/lib/Image/ExifTool/Sony.pm +3 -1
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
- data/bin/lib/Image/ExifTool/TagLookup.pm +6363 -5846
- data/bin/lib/Image/ExifTool/TagNames.pod +1215 -39
- data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -11
- data/bin/lib/Image/ExifTool/Writer.pl +10 -5
- data/bin/lib/Image/ExifTool/XMP.pm +110 -24
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +51 -12
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11f1787f2c127a865c214cd1180708242a072c13219978b737518a30ff123c88
|
4
|
+
data.tar.gz: 85f5ca776ddb9b2c60171ef608fe574a5eb94a5b723c5ab62ed50046b4f051d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 526d5db616ff1f9b5f42fece2a56b670810b0a0865ebf7161ac55f5567dab893f137fef4226475776280b17272a8fde9689c06c3057517f417e5accaa925b39c
|
7
|
+
data.tar.gz: 2345cf3345e75e7fbace25c2293ffecdc503c5b744c85b794febccc24322aac3a8c2f052d07dd50b921cceca67ad9c197c5e4ce87eccea4efeb99ab200919f41
|
data/bin/Changes
CHANGED
@@ -7,11 +7,67 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.30. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Dec. 20, 2021 - Version 12.38
|
11
|
+
|
12
|
+
- Decode a number of new tags for the Nikon Z9 (thanks Warren Hatch)
|
13
|
+
- Patched incorrect decoding of AEBShotCount for the Canon EOS 90D
|
14
|
+
- Patched EXR reader to support long tag names
|
15
|
+
- Patched security issue (thanks Joe Lothan)
|
16
|
+
- Fixed an incorrect tag ID for a new Nikon MakerNote tag (github #108)
|
17
|
+
- Fixed XMP-exif:GPSMeasureMode conversions to match EXIF
|
18
|
+
- Fixed problem where some namespaces may be undeclared in the -X output when
|
19
|
+
using the -struct option
|
20
|
+
|
21
|
+
Dec. 8, 2021 - Version 12.37
|
22
|
+
|
23
|
+
- Decode timed GPS from Vantrue S1 dashcam MP4 videos
|
24
|
+
- Decode ColorData tags for the Canon EOS R3 (thanks LibRaw)
|
25
|
+
- Decode more makernotes tags for Nikon Z cameras (thanks Warren Hatch)
|
26
|
+
- Extract TransparentColor from GIF images
|
27
|
+
- Improved parsing of input time values for GPSTimeStamp to properly handle a
|
28
|
+
"." separator
|
29
|
+
- Improved warning when incorrectly using "
|
30
|
+
|
31
|
+
Nov. 16, 2021 - Version 12.36
|
32
|
+
|
33
|
+
- IMPORTANT: Fixed bug introduced in 12.35 which corrupted JPEG 2000 images
|
34
|
+
when removing all metadata with -all=
|
35
|
+
- Added feature to bypass processing of specified XMP namespaces and
|
36
|
+
properties (to improve performance in cases where the XMP suffers from
|
37
|
+
Adobe-editing bloat)
|
38
|
+
- Added a number of new XMP tags used by Lightroom 11.0
|
39
|
+
- Decode a number of new Nikon tags (thanks Warren Hatch)
|
40
|
+
- Made the Composite GPSPosition tag writable
|
41
|
+
- Fixed erroneous "Skipped unknown bytes after JPEG SOS" warning
|
42
|
+
- Fixed group for new writable Jpeg2000 color tags in -listx output
|
43
|
+
- Fixed problem finding files in Windows when using wildcards in file name and
|
44
|
+
a drive letter with no slash
|
45
|
+
|
46
|
+
Nov. 11, 2021 - Version 12.35
|
47
|
+
|
48
|
+
- Added ability to write ICC_Profile (and other color specifications) to
|
49
|
+
Jpeg2000 images
|
50
|
+
- Added %o code to -W option format string
|
51
|
+
- Added %f code to -d option for fractional seconds
|
52
|
+
- Added a couple of new Sony LensType values (thanks Jos Roost)
|
53
|
+
- Added a new CanonModelID (thanks Norbert Wasser)
|
54
|
+
- Added a new Nikon LensID
|
55
|
+
- Decode more Nikon MakerNotes tags for some new models (thanks Warren Hatch)
|
56
|
+
- Extract ThumbnailImage from some DJI drone videos
|
57
|
+
- Enhanced -ee option to extract metadata from all frames in a SEQ file
|
58
|
+
- Patched to avoid possible "Use of uninitialized value" runtime warning
|
59
|
+
- Fixed a couple of misspelt new ICC_Profile tag names (thanks Herb)
|
60
|
+
- Fixed problem generating the correct file extension when extracting
|
61
|
+
OriginalRawImage from a DNG file using the -W option with the %s format code
|
62
|
+
- Fixed bug introduced in 11.91 where exiftool couldn't find its libraries
|
63
|
+
when run via a soft link. Also changed to look for config file in the link
|
64
|
+
target directory instead of the directory of the link itself
|
65
|
+
|
10
66
|
Oct. 27, 2021 - Version 12.34
|
11
67
|
|
12
68
|
- Added support for ICC.2:2019 (Profile version 5.0.0 - iccMAX) color profiles
|
13
69
|
- Added ability to detect/delete a Windows Zone.Identifier alternate data
|
14
|
-
stream (ADS) via the new ZoneIdentifier tag
|
70
|
+
stream (ADS) via the new ZoneIdentifier tag (thanks Alex Xu)
|
15
71
|
- Added support for the Sony ILCE-7M4 (thanks Jos Roost)
|
16
72
|
- Added a new Sony lens (thanks LibRaw and Jos Roost)
|
17
73
|
- Added a new SonyModelID (thanks LibRaw)
|
@@ -19,7 +75,7 @@ Oct. 27, 2021 - Version 12.34
|
|
19
75
|
- Improved handling of some SVG files
|
20
76
|
- Patched -overwrite_original_in_place option to open the output file in
|
21
77
|
update mode rather than write mode (to allow some write optimizations on
|
22
|
-
certain filesystems)
|
78
|
+
certain filesystems) (thanks Joel Low)
|
23
79
|
- Fixed case of tag ID for new XMP-iptcExt:EventID (thanks Michael Steidl)
|
24
80
|
- Fixed problem extracting ICC_Profile information from some PDF files
|
25
81
|
- API Changes:
|
@@ -153,6 +209,8 @@ May 20, 2021 - Version 12.26 (production release)
|
|
153
209
|
- Fixed problem which could cause a "Wide character" warning and generate a
|
154
210
|
corrupted output file when writing some illegal values
|
155
211
|
|
212
|
+
History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
|
213
|
+
|
156
214
|
Apr. 22, 2021 - Version 12.25
|
157
215
|
|
158
216
|
- JPEG XL support is now official
|
@@ -635,6 +693,7 @@ Mar. 19, 2020 - Version 11.92
|
|
635
693
|
|
636
694
|
Mar. 5, 2020 - Version 11.91
|
637
695
|
|
696
|
+
- Added undocumented -xpath option for use by alternate Windows version
|
638
697
|
- Decode a couple of new Panasonic tags
|
639
698
|
- Documented -ec option (available since version 11.54)
|
640
699
|
- Reverted -htmlDump fix of 11.90 because it broke more than it fixed, and
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
|
|
107
107
|
terminal window to extract and run ExifTool:
|
108
108
|
|
109
109
|
cd ~/Desktop
|
110
|
-
gzip -dc Image-ExifTool-12.
|
111
|
-
cd Image-ExifTool-12.
|
110
|
+
gzip -dc Image-ExifTool-12.38.tar.gz | tar -xf -
|
111
|
+
cd Image-ExifTool-12.38
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
113
113
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -10,24 +10,26 @@
|
|
10
10
|
use strict;
|
11
11
|
require 5.004;
|
12
12
|
|
13
|
-
my $version = '12.
|
13
|
+
my $version = '12.38';
|
14
14
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
16
|
-
my $exeDir;
|
17
16
|
BEGIN {
|
18
17
|
# (undocumented -xpath option added in 11.91, must come before other options)
|
19
|
-
$
|
18
|
+
my $exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
|
20
19
|
# get exe directory
|
21
|
-
$exeDir = ($
|
20
|
+
my $exeDir = ($exePath =~ /(.*)[\\\/]/) ? $1 : '.';
|
21
|
+
my $incDir = ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
|
22
22
|
if (-l $0) {
|
23
23
|
my $lnk = eval { readlink $0 };
|
24
24
|
if (defined $lnk) {
|
25
25
|
my $lnkDir = ($lnk =~ /(.*)[\\\/]/) ? $1 : '.';
|
26
26
|
$exeDir = (($lnk =~ m(^/)) ? '' : $exeDir . '/') . $lnkDir;
|
27
|
+
$incDir = "$exeDir/lib";
|
27
28
|
}
|
28
29
|
}
|
30
|
+
$Image::ExifTool::exeDir = $exeDir; # use our exeDir for loading config file
|
29
31
|
# add lib directory at start of include path
|
30
|
-
unshift @INC,
|
32
|
+
unshift @INC, $incDir;
|
31
33
|
# load or disable config file if specified
|
32
34
|
if (@ARGV and lc($ARGV[0]) eq '-config') {
|
33
35
|
shift;
|
@@ -757,7 +759,7 @@ for (;;) {
|
|
757
759
|
}
|
758
760
|
my $fp = ($stayOpen == 1 ? \*STAYOPEN : \*ARGFILE);
|
759
761
|
unless ($mt->Open($fp, $argFile)) {
|
760
|
-
unless ($argFile !~ /^\// and $mt->Open($fp, "$exeDir/$argFile")) {
|
762
|
+
unless ($argFile !~ /^\// and $mt->Open($fp, "$Image::ExifTool::exeDir/$argFile")) {
|
761
763
|
Error "Error opening arg file $argFile\n";
|
762
764
|
$badCmd = 1;
|
763
765
|
next
|
@@ -1235,7 +1237,7 @@ for (;;) {
|
|
1235
1237
|
$textOverwrite += 2 if $t2 =~ /\+/; # append
|
1236
1238
|
if ($t1 ne 'W' and lc($t1) ne 'tagout') {
|
1237
1239
|
undef $tagOut;
|
1238
|
-
} elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[
|
1240
|
+
} elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgso]/) {
|
1239
1241
|
$tagOut = 0; # append tags to one file
|
1240
1242
|
} else {
|
1241
1243
|
$tagOut = 1; # separate file for each tag
|
@@ -1967,6 +1969,7 @@ sub GetImageInfo($$)
|
|
1967
1969
|
} else {
|
1968
1970
|
$pipe = qq{bzip2 -dc "$file" |};
|
1969
1971
|
}
|
1972
|
+
$$et{TRUST_PIPE} = 1;
|
1970
1973
|
}
|
1971
1974
|
}
|
1972
1975
|
# evaluate -if expression for conditional processing
|
@@ -2237,12 +2240,13 @@ sub GetImageInfo($$)
|
|
2237
2240
|
next unless defined $forcePrint;
|
2238
2241
|
$grp0 = $grp1 = 'Unknown';
|
2239
2242
|
}
|
2243
|
+
# add groups from structure fields
|
2244
|
+
AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
|
2240
2245
|
next if $groups{$grp1};
|
2241
2246
|
# include family 0 and 1 groups in URI except for internal tags
|
2242
2247
|
# (this will put internal tags in the "XML" group on readback)
|
2243
2248
|
$groups{$grp1} = $grp0;
|
2244
2249
|
push @groups, $grp1;
|
2245
|
-
AddGroups($$info{$tag}, $grp0, \%groups, \@groups) if ref $$info{$tag};
|
2246
2250
|
}
|
2247
2251
|
foreach $grp1 (@groups) {
|
2248
2252
|
my $grp = $groups{$grp1};
|
@@ -2365,7 +2369,8 @@ TAG: foreach $tag (@foundTags) {
|
|
2365
2369
|
}
|
2366
2370
|
my @groups = $et->GetGroup($tag);
|
2367
2371
|
$outfile and close($fp), undef($tmpText); # (shouldn't happen)
|
2368
|
-
|
2372
|
+
my $org = $et->GetValue('OriginalRawFileName') || $et->GetValue('OriginalFileName');
|
2373
|
+
($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext, $org);
|
2369
2374
|
$fp or ++$countBad, next TAG;
|
2370
2375
|
$tmpText = $outfile unless $append;
|
2371
2376
|
}
|
@@ -3464,18 +3469,26 @@ sub ConvertBinary($)
|
|
3464
3469
|
}
|
3465
3470
|
|
3466
3471
|
#------------------------------------------------------------------------------
|
3467
|
-
# Compare
|
3472
|
+
# Compare ValueConv and PrintConv values of a tag to see if they are equal
|
3468
3473
|
# Inputs: 0) value1, 1) value2
|
3469
3474
|
# Returns: true if they are equal
|
3470
3475
|
sub IsEqual($$)
|
3471
3476
|
{
|
3472
|
-
|
3473
|
-
|
3474
|
-
|
3475
|
-
|
3476
|
-
|
3477
|
-
|
3478
|
-
|
3477
|
+
my ($a, $b) = @_;
|
3478
|
+
# (scalar values are not print-converted)
|
3479
|
+
return 1 if $a eq $b or ref $a eq 'SCALAR';
|
3480
|
+
if (ref $a eq 'HASH' and ref $b eq 'HASH') {
|
3481
|
+
return 0 if scalar(keys %$a) != scalar(keys %$b);
|
3482
|
+
my $key;
|
3483
|
+
foreach $key (keys %$a) {
|
3484
|
+
return 0 unless IsEqual($$a{$key}, $$b{$key});
|
3485
|
+
}
|
3486
|
+
} else {
|
3487
|
+
return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
|
3488
|
+
my $i;
|
3489
|
+
for ($i=0; $i<scalar(@$a); ++$i) {
|
3490
|
+
return 0 unless IsEqual($$a[$i], $$b[$i]);
|
3491
|
+
}
|
3479
3492
|
}
|
3480
3493
|
return 1;
|
3481
3494
|
}
|
@@ -3803,7 +3816,7 @@ sub FindFileWindows($$)
|
|
3803
3816
|
my $enc = $et->Options('CharsetFileName');
|
3804
3817
|
$wildfile = $et->Decode($wildfile, $enc, undef, 'UTF8') if $enc and $enc ne 'UTF8';
|
3805
3818
|
$wildfile =~ tr/\\/\//; # use forward slashes
|
3806
|
-
my ($dir, $wildname) = ($wildfile =~ m{(
|
3819
|
+
my ($dir, $wildname) = ($wildfile =~ m{(.*[:/])(.*)}) ? ($1, $2) : ('', $wildfile);
|
3807
3820
|
if ($dir =~ /[*?]/) {
|
3808
3821
|
Warn "Wildcards don't work in the directory specification\n";
|
3809
3822
|
return ();
|
@@ -3943,7 +3956,7 @@ sub SuggestedExtension($$$)
|
|
3943
3956
|
$ext = 'xml';
|
3944
3957
|
} elsif ($$valPt =~ /^RIFF....WAVE/s) {
|
3945
3958
|
$ext = 'wav';
|
3946
|
-
} elsif ($tag eq '
|
3959
|
+
} elsif ($tag eq 'OriginalRawImage' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
|
3947
3960
|
$ext =~ s/^.*\.//s;
|
3948
3961
|
$ext = $ext ? lc($ext) : 'raw';
|
3949
3962
|
} elsif ($tag eq 'EXIF') {
|
@@ -3995,14 +4008,15 @@ sub LoadPrintFormat($)
|
|
3995
4008
|
# A sort of sprintf for filenames
|
3996
4009
|
# Inputs: 0) format string (%d=dir, %f=file name, %e=ext),
|
3997
4010
|
# 1) source filename or undef to test format string
|
3998
|
-
# 2-4) [%t %g %s only] tag name, ref to array of group names,
|
4011
|
+
# 2-4) [%t %g %s %o only] tag name, ref to array of group names,
|
4012
|
+
# suggested extension, original raw file name
|
3999
4013
|
# Returns: new filename or undef on error (or if no file and fmt contains token)
|
4000
4014
|
sub FilenameSPrintf($;$@)
|
4001
4015
|
{
|
4002
4016
|
my ($fmt, $file, @extra) = @_;
|
4003
4017
|
local $_;
|
4004
4018
|
# return format string straight away if no tokens
|
4005
|
-
return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[
|
4019
|
+
return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgso]/;
|
4006
4020
|
return undef unless defined $file;
|
4007
4021
|
CleanFilename($file); # make sure we are using forward slashes
|
4008
4022
|
# split filename into directory, file, extension
|
@@ -4016,9 +4030,9 @@ sub FilenameSPrintf($;$@)
|
|
4016
4030
|
}
|
4017
4031
|
$part{F} = $part{f} . $part{E};
|
4018
4032
|
($part{D} = $part{d}) =~ s{/+$}{};
|
4019
|
-
@part{qw(t g s)} = @extra;
|
4033
|
+
@part{qw(t g s o)} = @extra;
|
4020
4034
|
my ($filename, $pos) = ('', 0);
|
4021
|
-
while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([
|
4035
|
+
while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgso]))/g) {
|
4022
4036
|
$filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
|
4023
4037
|
$pos = pos($fmt);
|
4024
4038
|
my ($sign, $wid, $dot, $skip, $mod, $code) = ($2, $3, $4, $5 || 0, $6, $7);
|
@@ -4181,7 +4195,7 @@ sub OpenOutputFile($;@)
|
|
4181
4195
|
if ($textOut) {
|
4182
4196
|
$outfile = $file;
|
4183
4197
|
CleanFilename($outfile);
|
4184
|
-
if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[
|
4198
|
+
if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgsocC]/ or defined $tagOut) {
|
4185
4199
|
# make filename from printf-like $textOut
|
4186
4200
|
$outfile = FilenameSPrintf($textOut, $file, @args);
|
4187
4201
|
return () unless defined $outfile;
|
@@ -4718,6 +4732,14 @@ group delete (unless a family 2 group is specified, see note 4 below).
|
|
4718
4732
|
Instead, individual tags may be recovered using the B<-tagsFromFile> option
|
4719
4733
|
(eg. C<-all= -tagsfromfile @ -artist>).
|
4720
4734
|
|
4735
|
+
To speed processing when reading XMP, exclusions in XMP groups also bypass
|
4736
|
+
processing of the corresponding XMP property and any contained properties.
|
4737
|
+
For example, C<--xmp-crs:all> may speed processing significantly in cases
|
4738
|
+
where a large number of XMP-crs tags exist. To use this feature to bypass
|
4739
|
+
processing of a specific XMP property, the property name must be used
|
4740
|
+
instead of the ExifTool tag name (eg. C<--xmp-crs:dabs>). Also, C<XMP-all>
|
4741
|
+
may be used to to indicate any XMP namespace (eg. <C--xmp-all:dabs>).
|
4742
|
+
|
4721
4743
|
=item B<->I<TAG>[+-^]B<=>[I<VALUE>]
|
4722
4744
|
|
4723
4745
|
Write a new value for the specified tag (eg. C<-comment=wow>), or delete the
|
@@ -4728,7 +4750,8 @@ for more details). C<+=> may also be used to increment numerical values (or
|
|
4728
4750
|
decrement if I<VALUE> is negative), and C<-=> may be used to conditionally
|
4729
4751
|
delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
|
4730
4752
|
used to write an empty string instead of deleting the tag when no I<VALUE>
|
4731
|
-
is given, but otherwise it is equivalent to C
|
4753
|
+
is given, but otherwise it is equivalent to C<=>, but note that the caret
|
4754
|
+
must be quoted on the Windows command line.
|
4732
4755
|
|
4733
4756
|
I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
|
4734
4757
|
prefixed by optional family numbers, and separated colons. If no group name
|
@@ -5167,9 +5190,11 @@ various components of a date/time value. The specifics of the I<FMT> syntax
|
|
5167
5190
|
are system dependent -- consult the C<strftime> man page on your system for
|
5168
5191
|
details. The default format is equivalent to "%Y:%m:%d %H:%M:%S". This
|
5169
5192
|
option has no effect on date-only or time-only tags and ignores timezone
|
5170
|
-
information if present.
|
5171
|
-
|
5172
|
-
|
5193
|
+
information if present. ExifTool adds a C<%f> format code to represent
|
5194
|
+
fractional seconds, and supports an optional width to specify the number of
|
5195
|
+
digits after the decimal point (eg. C<%3f> would give something like
|
5196
|
+
C<.437>). Only one B<-d> option may be used per command. Requires
|
5197
|
+
POSIX::strptime or Time::Piece for the inversion conversion when writing.
|
5173
5198
|
|
5174
5199
|
=item B<-D> (B<-decimal>)
|
5175
5200
|
|
@@ -5396,7 +5421,8 @@ directory if C<#[SECT]> contains C<$directory>). Lines beginning with
|
|
5396
5421
|
C<#[BODY]> and lines not beginning with C<#> are output for each processed
|
5397
5422
|
file. Lines beginning with C<#[IF]> are not output, but all BODY lines are
|
5398
5423
|
skipped if any tag on an IF line doesn't exist. Other lines beginning with
|
5399
|
-
C<#> are ignored.
|
5424
|
+
C<#> are ignored. (To output a line beginning with C<#>, use C<#[BODY]#>.)
|
5425
|
+
For example, this format file:
|
5400
5426
|
|
5401
5427
|
# this is a comment line
|
5402
5428
|
#[HEAD]-- Generated by ExifTool $exifToolVersion --
|
@@ -5410,7 +5436,7 @@ with this command:
|
|
5410
5436
|
|
5411
5437
|
produces output like this:
|
5412
5438
|
|
5413
|
-
-- Generated by ExifTool 12.
|
5439
|
+
-- Generated by ExifTool 12.38 --
|
5414
5440
|
File: a.jpg - 2003:10:31 15:44:19
|
5415
5441
|
(f/5.6, 1/60s, ISO 100)
|
5416
5442
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5665,12 +5691,14 @@ between B<-W> and B<-w>:
|
|
5665
5691
|
|
5666
5692
|
1) With B<-W>, a new output file is created for each extracted tag.
|
5667
5693
|
|
5668
|
-
2) B<-W> supports
|
5669
|
-
|
5670
|
-
|
5671
|
-
|
5672
|
-
The
|
5673
|
-
|
5694
|
+
2) B<-W> supports four additional format codes: %t, %g and %s represent the
|
5695
|
+
tag name, group name, and suggested extension for the output file (based on
|
5696
|
+
the format of the data), and %o represents the value of the
|
5697
|
+
OriginalRawFileName or OriginalFileName tag from the input file (including
|
5698
|
+
extension). The %g code may be followed by a single digit to specify the
|
5699
|
+
group family number (eg. %g1), otherwise family 0 is assumed. The substring
|
5700
|
+
width/position/case specifiers may be used with these format codes in
|
5701
|
+
exactly the same way as with %f and %e.
|
5674
5702
|
|
5675
5703
|
3) The argument for B<-W> is interpreted as a file name if it contains no
|
5676
5704
|
format codes. (For B<-w>, this would be a file extension.) This change
|
@@ -5690,7 +5718,7 @@ example, the following pairs of commands give the same result:
|
|
5690
5718
|
4) Adding the B<-v> option to B<-W> sends a list of the tags and output file
|
5691
5719
|
names to the console instead of giving a verbose dump of the entire file.
|
5692
5720
|
(Unless appending all output to one file for each source file by using
|
5693
|
-
B<-W+> with an output file I<FMT> that does not contain %t,
|
5721
|
+
B<-W+> with an output file I<FMT> that does not contain %t, %g, %s or %o.)
|
5694
5722
|
|
5695
5723
|
5) Individual list items are stored in separate files when B<-W> is combined
|
5696
5724
|
with B<-b>, but note that for separate files to be created %c or %C must be
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
35
35
|
use Image::ExifTool::Validate;
|
36
36
|
use Image::ExifTool::MacOS;
|
37
37
|
|
38
|
-
$VERSION = '3.
|
38
|
+
$VERSION = '3.47';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -757,7 +757,7 @@ sub new
|
|
757
757
|
my (%tagNameInfo, %id, %longID, %longName, %shortName, %tableNum,
|
758
758
|
%tagLookup, %tagExists, %noLookup, %tableWritable, %sepTable, %case,
|
759
759
|
%structs, %compositeModules, %isPlugin, %flattened, %structLookup,
|
760
|
-
@writePseudo);
|
760
|
+
@writePseudo, %dupXmpTag);
|
761
761
|
$self->{TAG_NAME_INFO} = \%tagNameInfo;
|
762
762
|
$self->{ID_LOOKUP} = \%id;
|
763
763
|
$self->{LONG_ID} = \%longID;
|
@@ -905,6 +905,10 @@ TagID: foreach $tagID (@keys) {
|
|
905
905
|
foreach (@grps) {
|
906
906
|
warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
|
907
907
|
}
|
908
|
+
if ($isXMP and not $$tagInfo{Avoid} and not $$tagInfo{Struct}) {
|
909
|
+
$dupXmpTag{$name} and warn "Duplicate XMP tag $name\n";
|
910
|
+
$dupXmpTag{$name} = 1;
|
911
|
+
}
|
908
912
|
# validate Name (must not start with a digit or else XML output will not be valid;
|
909
913
|
# must not start with a dash or exiftool command line may get confused)
|
910
914
|
if ($name !~ /^[_A-Za-z][-\w]+$/ and
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.55';
|
92
92
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
@@ -954,6 +954,7 @@ $VERSION = '4.53';
|
|
954
954
|
0x80000435 => 'EOS Rebel T8i / 850D / X10i', #JR/PH
|
955
955
|
0x80000436 => 'EOS SL3 / 250D / Kiss X10', #25
|
956
956
|
0x80000437 => 'EOS 90D', #IB
|
957
|
+
0x80000450 => 'EOS R3', #42
|
957
958
|
0x80000453 => 'EOS R6', #PH
|
958
959
|
0x80000467 => 'PowerShot ZOOM',
|
959
960
|
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
@@ -1918,6 +1919,11 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
1918
1919
|
Name => 'ColorData10',
|
1919
1920
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData10' },
|
1920
1921
|
},
|
1922
|
+
{ # (int16u[3973]) - R3 ref IB
|
1923
|
+
Condition => '$count == 3973',
|
1924
|
+
Name => 'ColorData11',
|
1925
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorData11' },
|
1926
|
+
},
|
1921
1927
|
{
|
1922
1928
|
Name => 'ColorDataUnknown',
|
1923
1929
|
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorDataUnknown' },
|
@@ -7719,7 +7725,10 @@ my %ciMaxFocal = (
|
|
7719
7725
|
# Color data (MakerNotes tag 0x4001, count=1312,1313,1316) (ref PH)
|
7720
7726
|
%Image::ExifTool::Canon::ColorData7 = (
|
7721
7727
|
%binaryDataAttrs,
|
7722
|
-
NOTES =>
|
7728
|
+
NOTES => q{
|
7729
|
+
These tags are used by the EOS 1DX, 5DmkIII, 6D, 7DmkII, 100D, 650D, 700D,
|
7730
|
+
8000D, M and M2.
|
7731
|
+
},
|
7723
7732
|
FORMAT => 'int16s',
|
7724
7733
|
FIRST_ENTRY => 0,
|
7725
7734
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -7730,8 +7739,8 @@ my %ciMaxFocal = (
|
|
7730
7739
|
DataMember => 'ColorDataVersion',
|
7731
7740
|
RawConv => '$$self{ColorDataVersion} = $val',
|
7732
7741
|
PrintConv => {
|
7733
|
-
10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M)',
|
7734
|
-
11 => '11 (7DmkII/750D/760D)',
|
7742
|
+
10 => '10 (1DX/5DmkIII/6D/70D/100D/650D/700D/M/M2)',
|
7743
|
+
11 => '11 (7DmkII/750D/760D/8000D)',
|
7735
7744
|
},
|
7736
7745
|
},
|
7737
7746
|
# not really sure about the AsShot, Auto and Measured values any more - PH
|
@@ -7866,6 +7875,10 @@ my %ciMaxFocal = (
|
|
7866
7875
|
# Color data (MakerNotes tag 0x4001, count=1560,etc) (ref IB)
|
7867
7876
|
%Image::ExifTool::Canon::ColorData8 = (
|
7868
7877
|
%binaryDataAttrs,
|
7878
|
+
NOTES => q{
|
7879
|
+
These tags are used by the EOS 1DXmkII, 5DS, 5DSR, 5DmkIV, 6DmkII, 77D, 80D,
|
7880
|
+
200D, 800D, 1300D, 2000D, 4000D and 9000D.
|
7881
|
+
},
|
7869
7882
|
FORMAT => 'int16s',
|
7870
7883
|
FIRST_ENTRY => 0,
|
7871
7884
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -7876,10 +7889,10 @@ my %ciMaxFocal = (
|
|
7876
7889
|
DataMember => 'ColorDataVersion',
|
7877
7890
|
RawConv => '$$self{ColorDataVersion} = $val',
|
7878
7891
|
PrintConv => {
|
7879
|
-
12 => '12 (5DS/5DSR)',
|
7880
|
-
13 => '13 (80D)', #PH
|
7892
|
+
12 => '12 (1DXmkII/5DS/5DSR)',
|
7893
|
+
13 => '13 (80D/5DmkIV)', #PH
|
7881
7894
|
14 => '14 (1300D/2000D/4000D)', #IB
|
7882
|
-
15 => '15 (6DmkII/77D/200D/800D)', #IB
|
7895
|
+
15 => '15 (6DmkII/77D/200D/800D,9000D)', #IB
|
7883
7896
|
},
|
7884
7897
|
},
|
7885
7898
|
0x3f => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
@@ -8026,6 +8039,7 @@ my %ciMaxFocal = (
|
|
8026
8039
|
# Color data (MakerNotes tag 0x4001, count=1820,etc) (ref PH)
|
8027
8040
|
%Image::ExifTool::Canon::ColorData9 = (
|
8028
8041
|
%binaryDataAttrs,
|
8042
|
+
NOTES => 'These tags are used by the M6mkII, M50, M200, EOS R, RP, 90D, 250D and 850D',
|
8029
8043
|
FORMAT => 'int16s',
|
8030
8044
|
FIRST_ENTRY => 0,
|
8031
8045
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -8038,8 +8052,8 @@ my %ciMaxFocal = (
|
|
8038
8052
|
PrintConv => {
|
8039
8053
|
16 => '16 (M50)',
|
8040
8054
|
17 => '17 (EOS R)', # (and PowerShot SX740HS)
|
8041
|
-
18 => '18 (EOS RP)', # (and PowerShot SX70HS)
|
8042
|
-
19 => '19 (90D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
8055
|
+
18 => '18 (EOS RP/250D)', # (and PowerShot SX70HS)
|
8056
|
+
19 => '19 (90D/850D/M6mkII/M200)',# (and PowerShot G7XmkIII)
|
8043
8057
|
},
|
8044
8058
|
},
|
8045
8059
|
0x47 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
@@ -8150,6 +8164,7 @@ my %ciMaxFocal = (
|
|
8150
8164
|
# (same as ColorData9 but shifted up by 0x0e, ref PH)
|
8151
8165
|
%Image::ExifTool::Canon::ColorData10 = (
|
8152
8166
|
%binaryDataAttrs,
|
8167
|
+
NOTES => 'These tags are used by the R5, R5 and EOS 1DXmkIII.',
|
8153
8168
|
FORMAT => 'int16s',
|
8154
8169
|
FIRST_ENTRY => 0,
|
8155
8170
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
@@ -8268,6 +8283,125 @@ my %ciMaxFocal = (
|
|
8268
8283
|
},
|
8269
8284
|
);
|
8270
8285
|
|
8286
|
+
# Color data (MakerNotes tag 0x4001, count=3973, ref IB)
|
8287
|
+
%Image::ExifTool::Canon::ColorData11 = (
|
8288
|
+
%binaryDataAttrs,
|
8289
|
+
NOTES => 'These tags are used by the EOS R3',
|
8290
|
+
FORMAT => 'int16s',
|
8291
|
+
FIRST_ENTRY => 0,
|
8292
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
8293
|
+
DATAMEMBER => [ 0 ],
|
8294
|
+
IS_SUBDIR => [ 0x12c ],
|
8295
|
+
0x00 => {
|
8296
|
+
Name => 'ColorDataVersion',
|
8297
|
+
DataMember => 'ColorDataVersion',
|
8298
|
+
RawConv => '$$self{ColorDataVersion} = $val',
|
8299
|
+
PrintConv => {
|
8300
|
+
34 => '34 (R3)', #IB
|
8301
|
+
},
|
8302
|
+
},
|
8303
|
+
0x69 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
|
8304
|
+
0x6d => 'ColorTempAsShot',
|
8305
|
+
0x6e => { Name => 'WB_RGGBLevelsAuto', Format => 'int16s[4]' },
|
8306
|
+
0x72 => 'ColorTempAuto',
|
8307
|
+
0x73 => { Name => 'WB_RGGBLevelsMeasured', Format => 'int16s[4]' },
|
8308
|
+
0x77 => 'ColorTempMeasured',
|
8309
|
+
0x78 => { Name => 'WB_RGGBLevelsUnknown', Format => 'int16s[4]', Unknown => 1 },
|
8310
|
+
0x7c => { Name => 'ColorTempUnknown', Unknown => 1 },
|
8311
|
+
0x7d => { Name => 'WB_RGGBLevelsUnknown2', Format => 'int16s[4]', Unknown => 1 },
|
8312
|
+
0x81 => { Name => 'ColorTempUnknown2', Unknown => 1 },
|
8313
|
+
0x82 => { Name => 'WB_RGGBLevelsUnknown3', Format => 'int16s[4]', Unknown => 1 },
|
8314
|
+
0x86 => { Name => 'ColorTempUnknown3', Unknown => 1 },
|
8315
|
+
0x87 => { Name => 'WB_RGGBLevelsUnknown4', Format => 'int16s[4]', Unknown => 1 },
|
8316
|
+
0x8b => { Name => 'ColorTempUnknown4', Unknown => 1 },
|
8317
|
+
0x8c => { Name => 'WB_RGGBLevelsUnknown5', Format => 'int16s[4]', Unknown => 1 },
|
8318
|
+
0x90 => { Name => 'ColorTempUnknown5', Unknown => 1 },
|
8319
|
+
0x91 => { Name => 'WB_RGGBLevelsUnknown6', Format => 'int16s[4]', Unknown => 1 },
|
8320
|
+
0x95 => { Name => 'ColorTempUnknown6', Unknown => 1 },
|
8321
|
+
0x96 => { Name => 'WB_RGGBLevelsUnknown7', Format => 'int16s[4]', Unknown => 1 },
|
8322
|
+
0x9a => { Name => 'ColorTempUnknown7', Unknown => 1 },
|
8323
|
+
0x9b => { Name => 'WB_RGGBLevelsUnknown8', Format => 'int16s[4]', Unknown => 1 },
|
8324
|
+
0x9f => { Name => 'ColorTempUnknown8', Unknown => 1 },
|
8325
|
+
0xa0 => { Name => 'WB_RGGBLevelsUnknown9', Format => 'int16s[4]', Unknown => 1 },
|
8326
|
+
0xa4 => { Name => 'ColorTempUnknown9', Unknown => 1 },
|
8327
|
+
0xa5 => { Name => 'WB_RGGBLevelsUnknown10', Format => 'int16s[4]', Unknown => 1 },
|
8328
|
+
0xa9 => { Name => 'ColorTempUnknown10', Unknown => 1 },
|
8329
|
+
0xaa => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
|
8330
|
+
0xae => { Name => 'ColorTempUnknown11', Unknown => 1 },
|
8331
|
+
0xaf => { Name => 'WB_RGGBLevelsUnknown11', Format => 'int16s[4]', Unknown => 1 },
|
8332
|
+
0xb3 => { Name => 'ColorTempUnknown11', Unknown => 1 },
|
8333
|
+
0xb4 => { Name => 'WB_RGGBLevelsUnknown12', Format => 'int16s[4]', Unknown => 1 },
|
8334
|
+
0xb8 => { Name => 'ColorTempUnknown12', Unknown => 1 },
|
8335
|
+
0xb9 => { Name => 'WB_RGGBLevelsUnknown13', Format => 'int16s[4]', Unknown => 1 },
|
8336
|
+
0xbd => { Name => 'ColorTempUnknown13', Unknown => 1 },
|
8337
|
+
0xbe => { Name => 'WB_RGGBLevelsUnknown14', Format => 'int16s[4]', Unknown => 1 },
|
8338
|
+
0xc2 => { Name => 'ColorTempUnknown14', Unknown => 1 },
|
8339
|
+
0xc3 => { Name => 'WB_RGGBLevelsUnknown15', Format => 'int16s[4]', Unknown => 1 },
|
8340
|
+
0xc7 => { Name => 'ColorTempUnknown15', Unknown => 1 },
|
8341
|
+
0xc8 => { Name => 'WB_RGGBLevelsUnknown16', Format => 'int16s[4]', Unknown => 1 },
|
8342
|
+
0xcc => { Name => 'ColorTempUnknown16', Unknown => 1 },
|
8343
|
+
0xcd => { Name => 'WB_RGGBLevelsDaylight', Format => 'int16s[4]' },
|
8344
|
+
0xd1 => 'ColorTempDaylight',
|
8345
|
+
0xd2 => { Name => 'WB_RGGBLevelsShade', Format => 'int16s[4]' },
|
8346
|
+
0xd6 => 'ColorTempShade',
|
8347
|
+
0xd7 => { Name => 'WB_RGGBLevelsCloudy', Format => 'int16s[4]' },
|
8348
|
+
0xdb => 'ColorTempCloudy',
|
8349
|
+
0xdc => { Name => 'WB_RGGBLevelsTungsten', Format => 'int16s[4]' },
|
8350
|
+
0xe0 => 'ColorTempTungsten',
|
8351
|
+
0xe1 => { Name => 'WB_RGGBLevelsFluorescent',Format => 'int16s[4]' },
|
8352
|
+
0xe5 => 'ColorTempFluorescent',
|
8353
|
+
0xe6 => { Name => 'WB_RGGBLevelsKelvin', Format => 'int16s[4]' },
|
8354
|
+
0xea => 'ColorTempKelvin',
|
8355
|
+
0xeb => { Name => 'WB_RGGBLevelsFlash', Format => 'int16s[4]' },
|
8356
|
+
0xef => 'ColorTempFlash',
|
8357
|
+
0xf0 => { Name => 'WB_RGGBLevelsUnknown17', Format => 'int16s[4]', Unknown => 1 },
|
8358
|
+
0xf4 => { Name => 'ColorTempUnknown17', Unknown => 1 },
|
8359
|
+
0xf5 => { Name => 'WB_RGGBLevelsUnknown18', Format => 'int16s[4]', Unknown => 1 },
|
8360
|
+
0xf9 => { Name => 'ColorTempUnknown18', Unknown => 1 },
|
8361
|
+
0xfa => { Name => 'WB_RGGBLevelsUnknown19', Format => 'int16s[4]', Unknown => 1 },
|
8362
|
+
0xfe => { Name => 'ColorTempUnknown19', Unknown => 1 },
|
8363
|
+
0xff => { Name => 'WB_RGGBLevelsUnknown20', Format => 'int16s[4]', Unknown => 1 },
|
8364
|
+
0x103 => { Name => 'ColorTempUnknown20', Unknown => 1 },
|
8365
|
+
0x104 => { Name => 'WB_RGGBLevelsUnknown21', Format => 'int16s[4]', Unknown => 1 },
|
8366
|
+
0x108 => { Name => 'ColorTempUnknown21', Unknown => 1 },
|
8367
|
+
0x109 => { Name => 'WB_RGGBLevelsUnknown22', Format => 'int16s[4]', Unknown => 1 },
|
8368
|
+
0x10d => { Name => 'ColorTempUnknown22', Unknown => 1 },
|
8369
|
+
0x10e => { Name => 'WB_RGGBLevelsUnknown23', Format => 'int16s[4]', Unknown => 1 },
|
8370
|
+
0x112 => { Name => 'ColorTempUnknown23', Unknown => 1 },
|
8371
|
+
0x113 => { Name => 'WB_RGGBLevelsUnknown24', Format => 'int16s[4]', Unknown => 1 },
|
8372
|
+
0x117 => { Name => 'ColorTempUnknown24', Unknown => 1 },
|
8373
|
+
0x118 => { Name => 'WB_RGGBLevelsUnknown25', Format => 'int16s[4]', Unknown => 1 },
|
8374
|
+
0x11c => { Name => 'ColorTempUnknown25', Unknown => 1 },
|
8375
|
+
0x11d => { Name => 'WB_RGGBLevelsUnknown26', Format => 'int16s[4]', Unknown => 1 },
|
8376
|
+
0x121 => { Name => 'ColorTempUnknown26', Unknown => 1 },
|
8377
|
+
0x122 => { Name => 'WB_RGGBLevelsUnknown27', Format => 'int16s[4]', Unknown => 1 },
|
8378
|
+
0x126 => { Name => 'ColorTempUnknown27', Unknown => 1 },
|
8379
|
+
0x12c => {
|
8380
|
+
Name => 'ColorCalib',
|
8381
|
+
Format => 'undef[120]',
|
8382
|
+
Unknown => 1,
|
8383
|
+
SubDirectory => { TagTable => 'Image::ExifTool::Canon::ColorCalib' }
|
8384
|
+
},
|
8385
|
+
0x16b => {
|
8386
|
+
Name => 'PerChannelBlackLevel',
|
8387
|
+
Format => 'int16u[4]',
|
8388
|
+
},
|
8389
|
+
# 0x27c - PerChannelBlackLevel again
|
8390
|
+
0x280 => {
|
8391
|
+
Name => 'NormalWhiteLevel',
|
8392
|
+
Format => 'int16u',
|
8393
|
+
RawConv => '$val || undef',
|
8394
|
+
},
|
8395
|
+
0x281 => {
|
8396
|
+
Name => 'SpecularWhiteLevel',
|
8397
|
+
Format => 'int16u',
|
8398
|
+
},
|
8399
|
+
0x282 => {
|
8400
|
+
Name => 'LinearityUpperMargin',
|
8401
|
+
Format => 'int16u',
|
8402
|
+
},
|
8403
|
+
);
|
8404
|
+
|
8271
8405
|
# Unknown color data (MakerNotes tag 0x4001)
|
8272
8406
|
%Image::ExifTool::Canon::ColorDataUnknown = (
|
8273
8407
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|