exiftool_vendored 12.96.0 → 12.98.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +22 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +35 -21
- data/bin/lib/File/RandomAccess.pm +5 -2
- data/bin/lib/Image/ExifTool/Canon.pm +1 -0
- data/bin/lib/Image/ExifTool/FujiFilm.pm +23 -1
- data/bin/lib/Image/ExifTool/InDesign.pm +18 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +3 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +8 -0
- data/bin/lib/Image/ExifTool/Nikon.pm +355 -62
- data/bin/lib/Image/ExifTool/NikonCustom.pm +421 -11
- data/bin/lib/Image/ExifTool/QuickTime.pm +7 -6
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -0
- data/bin/lib/Image/ExifTool/Sony.pm +6 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4831 -4816
- data/bin/lib/Image/ExifTool/TagNames.pod +193 -6
- data/bin/lib/Image/ExifTool/WritePDF.pl +47 -21
- data/bin/lib/Image/ExifTool/XMP.pm +8 -3
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +11 -8
- 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: c1a9880dae5035dc08ddc167d771f69b84d15bc6e5f8d4bcb2eb410c22dd531f
|
4
|
+
data.tar.gz: 6e3b103009afb397df4213f33c9f695a961a153b647264dadfbf3917aba063fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a09fd4ca266dd56cac58e246d5a899f34d90f0a93749e9b522129bb3d009e3d36b8ecef7187e54caf6c0a775ab7a9a234e32608b45ae08b778e4de9d3747872b
|
7
|
+
data.tar.gz: 4119e87dd640a1c9ee73041b5fb915b5cbfbee7c21689ebdefa826f933a35e29e40d7ec5cd952c68b62ab90c5cc544292346e7a45581f355b92ba7a49ca76ec1
|
data/bin/Changes
CHANGED
@@ -7,6 +7,27 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.76. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Oct. 8, 2024 - Version 12.98
|
11
|
+
|
12
|
+
- Added write support for PDF files with huge offsets
|
13
|
+
- Added a number of new Sony LensType values (thanks Jos Roost)
|
14
|
+
- Require -v4 or higher to output "JPG RST" lines
|
15
|
+
- Patched problem with -fast option when reading HEIC file via a pipe
|
16
|
+
- Patched to avoid hang when reading some corrupted XMP
|
17
|
+
|
18
|
+
Sept. 25, 2024 - Version 12.97
|
19
|
+
|
20
|
+
- Added ability to ignore up to 4095 bytes of garbage at the end of an INDD
|
21
|
+
file with the -m option
|
22
|
+
- Added a new Canon RFLensType value (thanks Norbert Wasser)
|
23
|
+
- Added a new Nikon Z LensID
|
24
|
+
- Decode a number of new Nikon Z6_3 tags (thanks Warren Hatch)
|
25
|
+
- Decode a few more FujiFilm tags (thanks Greybeard)
|
26
|
+
- Enhanced %C format code to allow file-name collisions to be avoided by using
|
27
|
+
a colon instead of a decimal in the format modifier
|
28
|
+
- Fixed bug which could result in hang when using %C code in an output file
|
29
|
+
name
|
30
|
+
|
10
31
|
Sept. 1, 2024 - Version 12.96
|
11
32
|
|
12
33
|
- More improvements to handling of trailers on video files (and add ability to
|
@@ -130,7 +151,7 @@ June 7, 2024 - Version 12.86
|
|
130
151
|
- Patched some Olympus WB_RBLevels tags to allow 4 values to be written as per
|
131
152
|
some newer models
|
132
153
|
- Fixed issue when writing IPTC date tags with a date/time value containing
|
133
|
-
subseconds with 4 or more digits
|
154
|
+
subseconds with 4 or more digits
|
134
155
|
|
135
156
|
May 21, 2024 - Version 12.85
|
136
157
|
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
109
109
|
terminal window to extract and run ExifTool:
|
110
110
|
|
111
111
|
cd ~/Desktop
|
112
|
-
gzip -dc Image-ExifTool-12.
|
113
|
-
cd Image-ExifTool-12.
|
112
|
+
gzip -dc Image-ExifTool-12.98.tar.gz | tar -xf -
|
113
|
+
cd Image-ExifTool-12.98
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
115
115
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -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.98';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -4301,17 +4301,20 @@ sub Num2Alpha($)
|
|
4301
4301
|
sub NextUnusedFilename($;$)
|
4302
4302
|
{
|
4303
4303
|
my ($fmt, $okfile) = @_;
|
4304
|
-
return $fmt unless $fmt =~ /%[-+]?\d
|
4304
|
+
return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lun]?[cC]/;
|
4305
4305
|
my %sep = ( '-' => '-', '+' => '_' );
|
4306
4306
|
my ($copy, $alpha) = (0, 'a');
|
4307
|
+
my $lastFile;
|
4307
4308
|
for (;;) {
|
4308
4309
|
my ($filename, $pos) = ('', 0);
|
4309
|
-
while ($fmt =~ /(%([-+]?)(\d*)(
|
4310
|
+
while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lun]?)([cC]))/g) {
|
4310
4311
|
$filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
|
4311
4312
|
$pos = pos($fmt);
|
4312
4313
|
my ($sign, $wid, $dec, $wid2, $mod, $tok) = ($2, $3 || 0, $4, $5 || 0, $6, $7);
|
4313
4314
|
my $seq;
|
4314
4315
|
if ($tok eq 'C') {
|
4316
|
+
# increment sequence number for %C on collision if ':' is used
|
4317
|
+
$sign eq '-' ? ++$seqFileDir : ++$seqFileNum if $copy and $dec eq ':';
|
4315
4318
|
$seq = $wid + ($sign eq '-' ? $seqFileDir : $seqFileNum) - 1;
|
4316
4319
|
$wid = $wid2;
|
4317
4320
|
} else {
|
@@ -4340,6 +4343,8 @@ sub NextUnusedFilename($;$)
|
|
4340
4343
|
my ($fn, $ok) = (AbsPath($filename), AbsPath($okfile));
|
4341
4344
|
return $okfile if defined $fn and defined $ok and $fn eq $ok;
|
4342
4345
|
}
|
4346
|
+
return $filename if defined $lastFile and $lastFile eq $filename;
|
4347
|
+
$lastFile = $filename;
|
4343
4348
|
++$copy;
|
4344
4349
|
++$alpha;
|
4345
4350
|
}
|
@@ -4639,6 +4644,10 @@ sub PrintErrors($$$)
|
|
4639
4644
|
return $$info{Error};
|
4640
4645
|
}
|
4641
4646
|
|
4647
|
+
#=====================================================================================
|
4648
|
+
# NOTE: Be sure to update windows_exiftool.txt with any changes to this documentation!
|
4649
|
+
#vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
|
4650
|
+
|
4642
4651
|
__END__
|
4643
4652
|
|
4644
4653
|
=head1 NAME
|
@@ -5170,16 +5179,14 @@ B<-struct> option for details.
|
|
5170
5179
|
E<quot>'-I<DSTTAG>E<lt>I<SRCTAG>'E<quot>) is not the same as interpolating
|
5171
5180
|
its value inside a string (ie. E<quot>'-I<DSTTAG>E<lt>$I<SRCTAG>'E<quot>)
|
5172
5181
|
for source tags which are list-type tags,
|
5173
|
-
L<shortcut tags|Image::ExifTool::Shortcuts>, tag names containing
|
5174
|
-
|
5175
|
-
|
5176
|
-
|
5177
|
-
|
5178
|
-
|
5179
|
-
|
5180
|
-
|
5181
|
-
interpolating its value in a string (with C<$>), but isn't when copying the
|
5182
|
-
tag directly.
|
5182
|
+
L<shortcut tags|Image::ExifTool::Shortcuts>, or tag names containing
|
5183
|
+
wildcards. When copying directly, the values of each matching source tag
|
5184
|
+
are copied individually to the destination tag (as if they were separate
|
5185
|
+
assignments). However, when interpolated inside a string, list items and
|
5186
|
+
the values of shortcut tags are concatenated (with a separator set by the
|
5187
|
+
B<-sep> option), and wildcards are not allowed.Another difference is that a
|
5188
|
+
minor warning is generated if a tag doesn't exist when interpolating its
|
5189
|
+
value in a string (with C<$>), but isn't when copying the tag directly.
|
5183
5190
|
|
5184
5191
|
Finally, the behaviour is different when a destination tag or group of
|
5185
5192
|
C<All> is used. When copying directly, a destination group and/or tag name
|
@@ -5655,7 +5662,7 @@ with this command:
|
|
5655
5662
|
|
5656
5663
|
produces output like this:
|
5657
5664
|
|
5658
|
-
-- Generated by ExifTool 12.
|
5665
|
+
-- Generated by ExifTool 12.98 --
|
5659
5666
|
File: a.jpg - 2003:10:31 15:44:19
|
5660
5667
|
(f/5.6, 1/60s, ISO 100)
|
5661
5668
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5897,7 +5904,13 @@ A leading '-' causes the number to be reset at the start of each new
|
|
5897
5904
|
directory (in the original directory structure if the files are being
|
5898
5905
|
moved), and '+' has no effect. The number before the decimal place gives
|
5899
5906
|
the starting index, the number after the decimal place gives the field
|
5900
|
-
width.
|
5907
|
+
width. To preserve synchronization with the processed file number, by
|
5908
|
+
default the copy number is not incremented to avoid file name collisions, so
|
5909
|
+
any existing same-named file will cause an error. However using a colon
|
5910
|
+
instead of a decimal point causes the number to be incremented to avoid
|
5911
|
+
collisions with existing files.
|
5912
|
+
|
5913
|
+
The following examples show the output filenames when used with the
|
5901
5914
|
command C<exiftool rose.jpg star.jpg jet.jpg ...>:
|
5902
5915
|
|
5903
5916
|
-w %C%f.txt # 0rose.txt, 1star.txt, 2jet.txt
|
@@ -6191,9 +6204,10 @@ B<-fileNUM> option is used to read an alternate file and the corresponding
|
|
6191
6204
|
family 8 group name is specified for the tag. See the B<-fileNUM> option
|
6192
6205
|
details for more information.
|
6193
6206
|
|
6194
|
-
5) The B<-a> option
|
6195
|
-
the values of duplicate tags are accessible
|
6196
|
-
(such as a family 4 instance number, eg.
|
6207
|
+
5) The B<-a> (Duplicates) option is implied when B<-if> is used without a
|
6208
|
+
fast I<NUM>, and the values of duplicate tags are accessible by specifying a
|
6209
|
+
group name in the expression (such as a family 4 instance number, eg.
|
6210
|
+
C<$Copy1:TAG>, C<$Copy2:TAG>, etc).
|
6197
6211
|
|
6198
6212
|
6) A special "OK" UserParam is available to test the success of the previous
|
6199
6213
|
command when B<-execute> was used, and may be used like any other tag in the
|
@@ -6459,9 +6473,9 @@ B<-f> adds 'flags' and 'struct' attributes if applicable. The flags are
|
|
6459
6473
|
formatted as a comma-separated list of the following possible values:
|
6460
6474
|
Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe
|
6461
6475
|
(see the L<Tag Name documentation|Image::ExifTool::TagNames>). For XMP List
|
6462
|
-
tags, the list type (Alt, Bag or Seq) is
|
6463
|
-
|
6464
|
-
|
6476
|
+
tags, the list type (Alt, Bag or Seq) is also given, and flattened structure
|
6477
|
+
tags are indicated by a Flattened flag with 'struct' giving the ID of the
|
6478
|
+
parent structure.
|
6465
6479
|
|
6466
6480
|
Note that none of the B<-list> options require an input I<FILE>.
|
6467
6481
|
|
@@ -41,7 +41,7 @@ require 5.002;
|
|
41
41
|
require Exporter;
|
42
42
|
|
43
43
|
use vars qw($VERSION @ISA @EXPORT_OK);
|
44
|
-
$VERSION = '1.
|
44
|
+
$VERSION = '1.13';
|
45
45
|
@ISA = qw(Exporter);
|
46
46
|
|
47
47
|
sub Read($$$);
|
@@ -158,7 +158,10 @@ sub Seek($$;$)
|
|
158
158
|
$self->Slurp(); # read whole file into buffer
|
159
159
|
$newPos = $num + $self->{LEN}; # relative to end of file
|
160
160
|
}
|
161
|
-
if ($newPos >= 0
|
161
|
+
if ($newPos >= 0 and
|
162
|
+
# can't go backwards in unbuffered non-seekable file
|
163
|
+
(not $self->{NoBuffer} or $newPos >= $self->{POS}))
|
164
|
+
{
|
162
165
|
$self->{POS} = $newPos;
|
163
166
|
$rtnVal = 1;
|
164
167
|
}
|
@@ -6999,6 +6999,7 @@ my %ciMaxFocal = (
|
|
6999
6999
|
314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
7000
7000
|
315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
7001
7001
|
316 => 'Canon RF 35mm F1.4 L VCM', #42
|
7002
|
+
318 => 'Canon RF 28-70mm F2.8 IS STM', #42
|
7002
7003
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
7003
7004
|
},
|
7004
7005
|
},
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
32
32
|
use Image::ExifTool::Exif;
|
33
33
|
|
34
|
-
$VERSION = '1.
|
34
|
+
$VERSION = '1.96';
|
35
35
|
|
36
36
|
sub ProcessFujiDir($$$);
|
37
37
|
sub ProcessFaceRec($$$);
|
@@ -1252,6 +1252,28 @@ my %faceCategories = (
|
|
1252
1252
|
ValueConv => 'my @v=reverse split(" ",$val);"@v"', # reverse to show width first
|
1253
1253
|
PrintConv => '$val=~tr/ /:/; $val',
|
1254
1254
|
},
|
1255
|
+
0x117 => {
|
1256
|
+
Name => 'RawZoomActive',
|
1257
|
+
Format => 'int32u',
|
1258
|
+
Count => 1,
|
1259
|
+
PrintConv => { 0 => 'No', 1 => 'Yes' },
|
1260
|
+
},
|
1261
|
+
0x118 => {
|
1262
|
+
Name => 'RawZoomTopLeft',
|
1263
|
+
Format => 'int16u',
|
1264
|
+
Count => 2,
|
1265
|
+
Notes => 'relative to RawCroppedImageSize',
|
1266
|
+
ValueConv => 'my @v=reverse split(" ",$val);"@v"', # reverse to show width first
|
1267
|
+
PrintConv => '$val=~tr/ /x/; $val',
|
1268
|
+
},
|
1269
|
+
0x119 => {
|
1270
|
+
Name => 'RawZoomSize',
|
1271
|
+
Format => 'int16u',
|
1272
|
+
Count => 2,
|
1273
|
+
Notes => 'relative to RawCroppedImageSize',
|
1274
|
+
ValueConv => 'my @v=reverse split(" ",$val);"@v"', # reverse to show width first
|
1275
|
+
PrintConv => '$val=~tr/ /x/; $val',
|
1276
|
+
},
|
1255
1277
|
0x121 => [
|
1256
1278
|
{
|
1257
1279
|
Name => 'RawImageSize',
|
@@ -14,7 +14,7 @@ use strict;
|
|
14
14
|
use vars qw($VERSION);
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.09';
|
18
18
|
|
19
19
|
# map for writing metadata to InDesign files (currently only write XMP)
|
20
20
|
my %indMap = (
|
@@ -101,8 +101,23 @@ sub ProcessIND($$)
|
|
101
101
|
for (;;) {
|
102
102
|
$raf->Read($hdr, 32) or last;
|
103
103
|
unless (length($hdr) == 32 and $hdr =~ /^\Q$objectHeaderGUID/) {
|
104
|
-
# this must be null padding or we have
|
105
|
-
$hdr =~ /^\0
|
104
|
+
# this must be null padding or we have a possible error
|
105
|
+
last if $hdr =~ /^\0+$/;
|
106
|
+
# (could be up to 4095 bytes of non-null garbage plus 4095 null bytes from ExifTool)
|
107
|
+
$raf->Read($buff, 8192) and $hdr .= $buff;
|
108
|
+
my $n = length $hdr;
|
109
|
+
$hdr =~ s/\0+$//; # remove trailing nulls
|
110
|
+
if ($n > 8190 or length($hdr) > 4095) {
|
111
|
+
$err = 'Corrupt file or unsupported InDesign version';
|
112
|
+
last;
|
113
|
+
}
|
114
|
+
my $non = 'Non-null padding at end of file';
|
115
|
+
if (not $outfile) {
|
116
|
+
$et->Warn($non, 1);
|
117
|
+
} elsif (not $et->Error($non, 1)) {
|
118
|
+
Write($outfile, $hdr) or $err = 1;
|
119
|
+
$writeLen += length $hdr;
|
120
|
+
}
|
106
121
|
last;
|
107
122
|
}
|
108
123
|
my $len = Get32u(\$hdr, 24);
|
@@ -16,7 +16,7 @@ use strict;
|
|
16
16
|
use vars qw($VERSION);
|
17
17
|
use Image::ExifTool qw(:DataAccess :Utils);
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.41';
|
20
20
|
|
21
21
|
sub ProcessJpeg2000Box($$$);
|
22
22
|
sub ProcessJUMD($$$);
|
@@ -574,6 +574,7 @@ my %j2cMarker = (
|
|
574
574
|
2 => {
|
575
575
|
Name => 'CompatibleBrands',
|
576
576
|
Format => 'undef[$size-8]',
|
577
|
+
List => 1, # (for documentation only)
|
577
578
|
# ignore any entry with a null, and return others as a list
|
578
579
|
ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a',
|
579
580
|
},
|
@@ -1543,7 +1544,7 @@ sub ProcessJP2($$)
|
|
1543
1544
|
|
1544
1545
|
# check to be sure this is a valid JPG2000 file
|
1545
1546
|
return 0 unless $raf->Read($hdr,12) == 12;
|
1546
|
-
unless ($hdr eq "\0\0\0\x0cjP \x0d\x0a\x87\x0a" or
|
1547
|
+
unless ($hdr eq "\0\0\0\x0cjP \x0d\x0a\x87\x0a" or # (ref 1)
|
1547
1548
|
$hdr eq "\0\0\0\x0cjP\x1a\x1a\x0d\x0a\x87\x0a" or # (ref 2)
|
1548
1549
|
$$et{IsJXL})
|
1549
1550
|
{
|
@@ -328,6 +328,14 @@ sub ParsePID($$$$$)
|
|
328
328
|
$more = 1; # read past unknown 0x15 packets if ExtractEmbedded > 2
|
329
329
|
}
|
330
330
|
}
|
331
|
+
# still have a lot of questions about how to decode this...
|
332
|
+
# (see https://exiftool.org/forum/index.php?topic=16486 and ../testpics/gps_video/forum16486.ts)
|
333
|
+
# } elsif ($type == 6) {
|
334
|
+
# my @a = unpack('x17x2NNx2nx2nx2nx2Cx2a4x2a5x2Nx2Nx2nx2Nx2Nx2Nx2nx2nx2Nx2nx2n', $$dataPt . " ");
|
335
|
+
# my $hi = shift @a;
|
336
|
+
# $a[0] = Image::ExifTool::ConvertUnixTime(($a[0] + $hi * 4294967296) * 1e-6, undef, 6);
|
337
|
+
# print "@a\n";
|
338
|
+
# $more = 1;
|
331
339
|
} elsif ($type < 0) {
|
332
340
|
if ($$dataPt =~ /^(.{164})?(.{24})A[NS][EW]/s) {
|
333
341
|
# (Blueskysea B4K, Novatek NT96670)
|