exiftool_vendored 12.64.1 → 12.67.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 +46 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +30 -19
- data/bin/lib/Image/ExifTool/Apple.pm +14 -6
- data/bin/lib/Image/ExifTool/BigTIFF.pm +8 -1
- data/bin/lib/Image/ExifTool/Canon.pm +32 -12
- data/bin/lib/Image/ExifTool/FlashPix.pm +8 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +4 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +570 -67
- data/bin/lib/Image/ExifTool/NikonCustom.pm +862 -61
- data/bin/lib/Image/ExifTool/PDF.pm +18 -8
- data/bin/lib/Image/ExifTool/PLUS.pm +19 -4
- data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +18 -10
- data/bin/lib/Image/ExifTool/Samsung.pm +227 -227
- data/bin/lib/Image/ExifTool/Sony.pm +128 -24
- data/bin/lib/Image/ExifTool/TagLookup.pm +4609 -4592
- data/bin/lib/Image/ExifTool/TagNames.pod +474 -26
- data/bin/lib/Image/ExifTool/Writer.pl +8 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- data/bin/lib/Image/ExifTool.pm +120 -96
- data/bin/lib/Image/ExifTool.pod +41 -6
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +6 -188
@@ -21,7 +21,7 @@ use vars qw($VERSION $AUTOLOAD $lastFetched);
|
|
21
21
|
use Image::ExifTool qw(:DataAccess :Utils);
|
22
22
|
require Exporter;
|
23
23
|
|
24
|
-
$VERSION = '1.
|
24
|
+
$VERSION = '1.57';
|
25
25
|
|
26
26
|
sub FetchObject($$$$);
|
27
27
|
sub ExtractObject($$;$$);
|
@@ -112,10 +112,13 @@ my %supportedFilter = (
|
|
112
112
|
Keywords => {
|
113
113
|
List => 'string', # this is a string list
|
114
114
|
Notes => q{
|
115
|
-
stored as a string but treated as a comma-separated list of
|
116
|
-
reading if the string contains
|
117
|
-
|
118
|
-
|
115
|
+
stored as a string but treated as a comma- or semicolon-separated list of
|
116
|
+
items when reading if the string contains commas or semicolons, whichever is
|
117
|
+
more numerous, otherwise it is treated a space-separated list of items.
|
118
|
+
Written as a comma-separated list. The list behaviour may be defeated by
|
119
|
+
setting the API NoPDFList option. Note that the corresponding
|
120
|
+
XMP-pdf:Keywords tag is not treated as a list, so the NoPDFList option
|
121
|
+
should be used when copying between these two.
|
119
122
|
},
|
120
123
|
},
|
121
124
|
Creator => { },
|
@@ -1762,6 +1765,7 @@ sub ExpandArray($)
|
|
1762
1765
|
# 4) nesting depth, 5) dictionary capture type
|
1763
1766
|
sub ProcessDict($$$$;$$)
|
1764
1767
|
{
|
1768
|
+
local $_;
|
1765
1769
|
my ($et, $tagTablePtr, $dict, $xref, $nesting, $type) = @_;
|
1766
1770
|
my $verbose = $et->Options('Verbose');
|
1767
1771
|
my $unknown = $$tagTablePtr{EXTRACT_UNKNOWN};
|
@@ -2025,10 +2029,16 @@ sub ProcessDict($$$$;$$)
|
|
2025
2029
|
}
|
2026
2030
|
if ($$tagInfo{List} and not $$et{OPTIONS}{NoPDFList}) {
|
2027
2031
|
# separate tokens in comma or whitespace delimited lists
|
2028
|
-
my
|
2029
|
-
|
2030
|
-
|
2032
|
+
my $comma = $val =~ tr/,/,/;
|
2033
|
+
my $semi = $val =~ tr/;/;/;
|
2034
|
+
my $split;
|
2035
|
+
if ($comma or $semi) {
|
2036
|
+
$split = $comma > $semi ? ',+\\s*' : ';+\\s*';
|
2037
|
+
} else {
|
2038
|
+
$split = ' ';
|
2031
2039
|
}
|
2040
|
+
my @values = split $split, $val;
|
2041
|
+
$et->FoundTag($tagInfo, $_) foreach @values;
|
2032
2042
|
} else {
|
2033
2043
|
# a simple tag value
|
2034
2044
|
$et->FoundTag($tagInfo, $val);
|
@@ -14,7 +14,7 @@ use strict;
|
|
14
14
|
use vars qw($VERSION);
|
15
15
|
use Image::ExifTool::XMP;
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.02';
|
18
18
|
|
19
19
|
sub ValidateMediaSummary($);
|
20
20
|
|
@@ -2311,12 +2311,13 @@ my %mediaMatrix = (
|
|
2311
2311
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-plus', 2 => 'Author' },
|
2312
2312
|
NAMESPACE => 'plus',
|
2313
2313
|
NOTES => q{
|
2314
|
-
PLUS (Picture Licensing Universal System) License Data Format
|
2314
|
+
PLUS (Picture Licensing Universal System) License Data Format 2.0.1 XMP
|
2315
2315
|
tags. Note that all controlled-vocabulary tags in this table (ie. tags with
|
2316
2316
|
a fixed set of values) have raw values which begin with
|
2317
2317
|
"http://ns.useplus.org/ldf/vocab/", but to reduce clutter this prefix has
|
2318
|
-
been removed from the values shown below
|
2319
|
-
the
|
2318
|
+
been removed from the values shown below, and from the values read and
|
2319
|
+
written with the -n option. See L<http://ns.useplus.org/> for the complete
|
2320
|
+
specification.
|
2320
2321
|
},
|
2321
2322
|
Version => { Name => 'PLUSVersion' },
|
2322
2323
|
Licensee => {
|
@@ -2529,6 +2530,20 @@ my %mediaMatrix = (
|
|
2529
2530
|
Custom8 => { List => 'Bag', Writable => 'lang-alt' },
|
2530
2531
|
Custom9 => { List => 'Bag', Writable => 'lang-alt' },
|
2531
2532
|
Custom10 => { List => 'Bag', Writable => 'lang-alt' },
|
2533
|
+
DataMining => {
|
2534
|
+
%plusVocab,
|
2535
|
+
PrintConv => {
|
2536
|
+
'DMI-UNSPECIFIED' => 'Unspecified - no prohibition defined',
|
2537
|
+
'DMI-ALLOWED' => 'Allowed',
|
2538
|
+
'DMI-PROHIBITED-AIMLTRAINING' => 'Prohibited for AI/ML training',
|
2539
|
+
'DMI-PROHIBITED-GENAIMLTRAINING' => 'Prohibited for Generative AI/ML training',
|
2540
|
+
'DMI-PROHIBITED-EXCEPTSEARCHENGINEINDEXING' => 'Prohibited except for search engine indexing',
|
2541
|
+
'DMI-PROHIBITED' => 'Prohibited',
|
2542
|
+
'DMI-PROHIBITED-SEECONSTRAINT' => 'Prohibited, see plus:OtherConstraints',
|
2543
|
+
'DMI-PROHIBITED-SEEEMBEDDEDRIGHTSEXPR' => 'Prohibited, see iptcExt:EmbdEncRightsExpr',
|
2544
|
+
'DMI-PROHIBITED-SEELINKEDRIGHTSEXPR' => 'Prohibited, see iptcExt:LinkedEncRightsExpr',
|
2545
|
+
},
|
2546
|
+
},
|
2532
2547
|
);
|
2533
2548
|
|
2534
2549
|
#------------------------------------------------------------------------------
|
@@ -58,7 +58,7 @@ use Image::ExifTool::Exif;
|
|
58
58
|
use Image::ExifTool::GPS;
|
59
59
|
use Image::ExifTool::HP;
|
60
60
|
|
61
|
-
$VERSION = '3.
|
61
|
+
$VERSION = '3.43';
|
62
62
|
|
63
63
|
sub CryptShutterCount($$);
|
64
64
|
sub PrintFilter($$$);
|
@@ -175,6 +175,7 @@ sub DecodeAFPoints($$$$;$);
|
|
175
175
|
'4 2' => 'smc PENTAX-FA 80-320mm F4.5-5.6',
|
176
176
|
'4 3' => 'smc PENTAX-FA 43mm F1.9 Limited',
|
177
177
|
'4 6' => 'smc PENTAX-FA 35-80mm F4-5.6',
|
178
|
+
'4 7' => 'Irix 45mm F1.4', #27
|
178
179
|
'4 8' => 'Irix 150mm F2.8 Macro', #exiv2 issue 1084
|
179
180
|
'4 9' => 'Irix 11mm F4 Firefly', #27
|
180
181
|
'4 10' => 'Irix 15mm F2.4', #27
|
@@ -265,6 +266,7 @@ sub DecodeAFPoints($$$$;$);
|
|
265
266
|
'6 14' => 'smc PENTAX-FA* Macro 200mm F4 ED[IF]',
|
266
267
|
'7 0' => 'smc PENTAX-DA 21mm F3.2 AL Limited', #13
|
267
268
|
'7 58' => 'smc PENTAX-D FA Macro 100mm F2.8 WR', #PH - this bit of information cost me $600 ;)
|
269
|
+
# '7 58' also 'HD PENTAX-D FA MACRO 100mm F2.8 ED AW' (ref 27)
|
268
270
|
'7 75' => 'Tamron SP AF 70-200mm F2.8 Di LD [IF] Macro (A001)', #(Anton Bondar)
|
269
271
|
'7 201' => 'smc Pentax-DA L 50-200mm F4-5.6 ED WR', #(Bruce Rusk)
|
270
272
|
'7 202' => 'smc PENTAX-DA L 18-55mm F3.5-5.6 AL WR', #29
|
@@ -37,6 +37,7 @@
|
|
37
37
|
# 25) https://cconcolato.github.io/mp4ra/atoms.html
|
38
38
|
# 26) https://github.com/SamsungVR/android_upload_sdk/blob/master/SDKLib/src/main/java/com/samsung/msca/samsungvr/sdk/UserVideo.java
|
39
39
|
# 27) https://exiftool.org/forum/index.php?topic=11517.0
|
40
|
+
# 28) https://docs.mp3tag.de/mapping/
|
40
41
|
#------------------------------------------------------------------------------
|
41
42
|
|
42
43
|
package Image::ExifTool::QuickTime;
|
@@ -47,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
47
48
|
use Image::ExifTool::Exif;
|
48
49
|
use Image::ExifTool::GPS;
|
49
50
|
|
50
|
-
$VERSION = '2.
|
51
|
+
$VERSION = '2.87';
|
51
52
|
|
52
53
|
sub ProcessMOV($$;$);
|
53
54
|
sub ProcessKeys($$$);
|
@@ -3396,8 +3397,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
3396
3397
|
},
|
3397
3398
|
albm => { Name => 'Album', Avoid => 1 }, #(ffmpeg source)
|
3398
3399
|
apID => 'AppleStoreAccount',
|
3399
|
-
atID => {
|
3400
|
-
|
3400
|
+
atID => {
|
3401
|
+
# (ref 10 called this AlbumTitleID or TVSeries)
|
3402
|
+
Name => 'ArtistID', #28 (or Track ID ref https://gist.github.com/maf654321/2b44c7b15d798f0c52ee)
|
3401
3403
|
Format => 'int32u',
|
3402
3404
|
Writable => 'int32s', #27
|
3403
3405
|
},
|
@@ -3408,6 +3410,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
3408
3410
|
Format => 'int32u',
|
3409
3411
|
Writable => 'int32s', #27
|
3410
3412
|
},
|
3413
|
+
cmID => 'ComposerID', #28 (need sample to get format)
|
3411
3414
|
cprt => { Name => 'Copyright', Groups => { 2 => 'Author' } },
|
3412
3415
|
dscp => { Name => 'Description', Avoid => 1 },
|
3413
3416
|
desc => { Name => 'Description', Avoid => 1 }, #7
|
@@ -6100,10 +6103,10 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
6100
6103
|
PrintConv => { 0 => 'No', 1 => 'Yes' },
|
6101
6104
|
},
|
6102
6105
|
perf => 'Performer',
|
6103
|
-
plID => {
|
6104
|
-
|
6105
|
-
|
6106
|
-
|
6106
|
+
plID => {
|
6107
|
+
# (ref 10 called this PlayListID or TVSeason)
|
6108
|
+
Name => 'AlbumID', #28
|
6109
|
+
Format => 'int64u',
|
6107
6110
|
Writable => 'int32s', #27
|
6108
6111
|
},
|
6109
6112
|
purd => 'PurchaseDate', #7
|
@@ -6565,6 +6568,7 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
6565
6568
|
'rating.user' => 'UserRating', # (Canon ELPH 510 HS)
|
6566
6569
|
'collection.user' => 'UserCollection', #22
|
6567
6570
|
'Encoded_With' => 'EncodedWith',
|
6571
|
+
'content.identifier' => 'ContentIdentifier', #forum14874
|
6568
6572
|
#
|
6569
6573
|
# the following tags aren't in the com.apple.quicktime namespace:
|
6570
6574
|
#
|
@@ -9519,13 +9523,17 @@ sub ProcessMOV($$;$)
|
|
9519
9523
|
my $items = $$et{ItemInfo};
|
9520
9524
|
my ($id, $prop, $docNum, $lowest);
|
9521
9525
|
my $primary = $$et{PrimaryItem} || 0;
|
9522
|
-
ItemID: foreach $id (keys %$items) {
|
9526
|
+
ItemID: foreach $id (reverse sort { $a <=> $b } keys %$items) {
|
9523
9527
|
next unless $$items{$id}{Association};
|
9524
9528
|
my $item = $$items{$id};
|
9525
9529
|
foreach $prop (@{$$item{Association}}) {
|
9526
9530
|
next unless $prop == $index;
|
9527
9531
|
if ($id == $primary or (not $dontInherit{$tag} and
|
9528
|
-
(
|
9532
|
+
(($$item{RefersTo} and $$item{RefersTo}{$primary}) or
|
9533
|
+
# hack: assume Item 1 is from the main image (eg. hvc1 data)
|
9534
|
+
# to hack the case where the primary item (ie. main image)
|
9535
|
+
# doesn't directly reference this property
|
9536
|
+
(not $$item{RefersTo} and $id == 1))))
|
9529
9537
|
{
|
9530
9538
|
# this is associated with the primary item or an item describing
|
9531
9539
|
# the primary item, so consider this part of the main document
|
@@ -9536,7 +9544,7 @@ ItemID: foreach $id (keys %$items) {
|
|
9536
9544
|
# this property is already associated with an item that has
|
9537
9545
|
# an ExifTool document number, so use the lowest associated DocNum
|
9538
9546
|
$docNum = $$item{DocNum} if not defined $docNum or $docNum > $$item{DocNum};
|
9539
|
-
}
|
9547
|
+
} else {
|
9540
9548
|
# keep track of the lowest associated item ID
|
9541
9549
|
$lowest = $id;
|
9542
9550
|
}
|