exiftool-vendored.exe 12.28.0 → 12.34.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.
Files changed (49) hide show
  1. package/bin/exiftool_files/Changes +108 -5
  2. package/bin/exiftool_files/README +2 -2
  3. package/bin/exiftool_files/arg_files/xmp2exif.args +2 -1
  4. package/bin/exiftool_files/config_files/example.config +1 -1
  5. package/bin/exiftool_files/exiftool.pl +40 -26
  6. package/bin/exiftool_files/fmt_files/gpx.fmt +1 -1
  7. package/bin/exiftool_files/fmt_files/gpx_wpt.fmt +1 -1
  8. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +16 -3
  9. package/bin/exiftool_files/lib/Image/ExifTool/CBOR.pm +331 -0
  10. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +35 -5
  11. package/bin/exiftool_files/lib/Image/ExifTool/Charset.pm +2 -0
  12. package/bin/exiftool_files/lib/Image/ExifTool/DPX.pm +13 -2
  13. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +98 -4
  14. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +1 -0
  15. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -2
  16. package/bin/exiftool_files/lib/Image/ExifTool/GoPro.pm +16 -1
  17. package/bin/exiftool_files/lib/Image/ExifTool/ICC_Profile.pm +96 -4
  18. package/bin/exiftool_files/lib/Image/ExifTool/ID3.pm +15 -3
  19. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -3
  20. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +60 -26
  21. package/bin/exiftool_files/lib/Image/ExifTool/Lang/nl.pm +60 -59
  22. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +81 -14
  23. package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +2 -2
  24. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +12 -3
  25. package/bin/exiftool_files/lib/Image/ExifTool/NikonSettings.pm +10 -2
  26. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +8 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/Other.pm +93 -0
  28. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +11 -12
  29. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +7 -6
  30. package/bin/exiftool_files/lib/Image/ExifTool/Panasonic.pm +2 -2
  31. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +2 -1
  32. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +67 -9
  33. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +133 -119
  34. package/bin/exiftool_files/lib/Image/ExifTool/README +9 -2
  35. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +6 -1
  36. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +47 -10
  37. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +80 -32
  38. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +139 -4
  39. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +224 -30
  40. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +1 -0
  41. package/bin/exiftool_files/lib/Image/ExifTool/WritePNG.pl +2 -0
  42. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +17 -3
  43. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +43 -0
  44. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +21 -8
  45. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +4 -1
  46. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +3 -1
  47. package/bin/exiftool_files/lib/Image/ExifTool.pm +8892 -8839
  48. package/bin/exiftool_files/lib/Image/ExifTool.pod +24 -15
  49. package/package.json +3 -3
@@ -36,7 +36,7 @@ use strict;
36
36
  use vars qw($VERSION $AUTOLOAD %stdCase);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
 
39
- $VERSION = '1.57';
39
+ $VERSION = '1.59';
40
40
 
41
41
  sub ProcessPNG_tEXt($$$);
42
42
  sub ProcessPNG_iTXt($$$);
@@ -89,7 +89,7 @@ $Image::ExifTool::PNG::colorType = -1;
89
89
 
90
90
  # data and text chunk types
91
91
  my %isDatChunk = ( IDAT => 1, JDAT => 1, JDAA => 1 );
92
- my %isTxtChunk = ( tEXt => 1, zTXt => 1, iTXt => 1 );
92
+ my %isTxtChunk = ( tEXt => 1, zTXt => 1, iTXt => 1, eXIf => 1 );
93
93
 
94
94
  # chunks that we shouldn't move other chunks across (ref 3)
95
95
  my %noLeapFrog = ( SAVE => 1, SEEK => 1, IHDR => 1, JHDR => 1, IEND => 1, MEND => 1,
@@ -478,6 +478,8 @@ my %unreg = ( Notes => 'unregistered' );
478
478
  if the L<Compress|../ExifTool.html#Compress> option is used and Compress::Zlib is available. Raw profile
479
479
  information is always created as compressed zTXt if Compress::Zlib is
480
480
  available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt.
481
+ User-defined tags may set an 'iTXt' flag in the tag definition to be written
482
+ only as iTXt.
481
483
 
482
484
  Alternate languages are accessed by suffixing the tag name with a '-',
483
485
  followed by an RFC 3066 language code (eg. "PNG:Comment-fr", or
@@ -1382,9 +1384,8 @@ sub ProcessPNG($$)
1382
1384
  # to add it as a text profile chunk if this isn't successful
1383
1385
  # (ie. if Compress::Zlib wasn't available)
1384
1386
  Add_iCCP($et, $outfile);
1385
- AddChunks($et, $outfile) or $err = 1; # all all text chunks
1386
- # add EXIF before end chunk if not found already
1387
- AddChunks($et, $outfile, 'IFD0') if $chunk eq $endChunk;
1387
+ AddChunks($et, $outfile) or $err = 1; # add all text chunks
1388
+ AddChunks($et, $outfile, 'IFD0') or $err = 1; # and eXIf chunk
1388
1389
  } elsif ($chunk eq 'PLTE') {
1389
1390
  # iCCP chunk must come before PLTE (and IDAT, handled above)
1390
1391
  # (ignore errors -- will add later as text profile if this fails)
@@ -1444,7 +1445,7 @@ sub ProcessPNG($$)
1444
1445
  } else {
1445
1446
  $msg = 'fixed';
1446
1447
  }
1447
- $et->WarnOnce("Text chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
1448
+ $et->WarnOnce("Text/EXIF chunk(s) found after $$et{FileType} $wasDat ($msg)", 1);
1448
1449
  }
1449
1450
  # read chunk data and CRC
1450
1451
  unless ($raf->Read($dbuf,$len)==$len and $raf->Read($cbuf, 4)==4) {
@@ -37,7 +37,7 @@ use vars qw($VERSION %leicaLensTypes);
37
37
  use Image::ExifTool qw(:DataAccess :Utils);
38
38
  use Image::ExifTool::Exif;
39
39
 
40
- $VERSION = '2.15';
40
+ $VERSION = '2.16';
41
41
 
42
42
  sub ProcessLeicaLEIC($$$);
43
43
  sub WhiteBalanceConv($;$$);
@@ -449,7 +449,7 @@ my %shootingMode = (
449
449
  same as the number printed on the camera body
450
450
  },
451
451
  PrintConv => q{
452
- return $val unless $val=~/^([A-Z]\d{2})(\d{2})(\d{2})(\d{2})(\d{4})/;
452
+ return $val unless $val=~/^([A-Z][0-9A-Z]{2})(\d{2})(\d{2})(\d{2})(\d{4})/;
453
453
  my $yr = $2 + ($2 < 70 ? 2000 : 1900);
454
454
  return "($1) $yr:$3:$4 no. $5";
455
455
  },
@@ -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.38';
61
+ $VERSION = '3.39';
62
62
 
63
63
  sub CryptShutterCount($$);
64
64
  sub PrintFilter($$$);
@@ -340,6 +340,7 @@ sub DecodeAFPoints($$$$;$);
340
340
  '8 64' => 'HD PENTAX-D FA* 50mm F1.4 SDM AW', #27
341
341
  '8 65' => 'HD PENTAX-D FA 70-210mm F4 ED SDM WR', #PH
342
342
  '8 66' => 'HD PENTAX-D FA 85mm F1.4 ED SDM AW', #James O'Neill
343
+ '8 195' => 'HD PENTAX DA* 16-50mm F2.8 ED PLM AW', #27
343
344
  '8 196' => 'HD PENTAX-DA* 11-18mm F2.8 ED DC AW', #29
344
345
  '8 197' => 'HD PENTAX-DA 55-300mm F4.5-6.3 ED PLM WR RE', #29
345
346
  '8 198' => 'smc PENTAX-DA L 18-50mm F4-5.6 DC WR RE', #29
@@ -47,7 +47,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
47
47
  use Image::ExifTool::Exif;
48
48
  use Image::ExifTool::GPS;
49
49
 
50
- $VERSION = '2.67';
50
+ $VERSION = '2.71';
51
51
 
52
52
  sub ProcessMOV($$;$);
53
53
  sub ProcessKeys($$$);
@@ -558,6 +558,7 @@ my %eeBox2 = (
558
558
  # *** this is where ExifTool writes XMP in MP4 videos (as per XMP spec) ***
559
559
  Condition => '$$valPt=~/^\xbe\x7a\xcf\xcb\x97\xa9\x42\xe8\x9c\x71\x99\x94\x91\xe3\xaf\xac/',
560
560
  WriteGroup => 'XMP', # (write main XMP tags here)
561
+ PreservePadding => 1,
561
562
  SubDirectory => {
562
563
  TagTable => 'Image::ExifTool::XMP::Main',
563
564
  Start => 16,
@@ -607,6 +608,7 @@ my %eeBox2 = (
607
608
  Name => 'PreviewImage',
608
609
  Condition => '$$valPt=~/^\xea\xf4\x2b\x5e\x1c\x98\x4b\x88\xb9\xfb\xb7\xdc\x40\x6e\x4d\x16/',
609
610
  Groups => { 2 => 'Preview' },
611
+ PreservePadding => 1,
610
612
  # 0x00 - undef[16]: UUID
611
613
  # 0x10 - int32u[2]: "0 1" (version and/or item count?)
612
614
  # 0x18 - int32u: PRVW atom size
@@ -734,6 +736,11 @@ my %eeBox2 = (
734
736
  Unknown => 1,
735
737
  Binary => 1,
736
738
  },
739
+ sefd => {
740
+ Name => 'SamsungTrailer',
741
+ SubDirectory => { TagTable => 'Image::ExifTool::Samsung::Trailer' },
742
+ },
743
+ # 'samn'? - seen in Vantrue N2S sample video
737
744
  );
738
745
 
739
746
  # MPEG-4 'ftyp' atom
@@ -2264,6 +2271,12 @@ my %eeBox2 = (
2264
2271
  # opax - 164 bytes unknown (center and affine arrays? ref 26)
2265
2272
  # opai - 32 bytes (maybe contains a serial number starting at byte 16? - PH) (rgb gains, degamma, gamma? ref 26)
2266
2273
  # intv - 16 bytes all zero
2274
+ # ---- Xaiomi ----
2275
+ mcvr => {
2276
+ Name => 'PreviewImage',
2277
+ Groups => { 2 => 'Preview' },
2278
+ Binary => 1,
2279
+ },
2267
2280
  # ---- Unknown ----
2268
2281
  # CDET - 128 bytes (unknown origin)
2269
2282
  # mtyp - 4 bytes all zero (some drone video)
@@ -2701,6 +2714,7 @@ my %eeBox2 = (
2701
2714
  colr => [{
2702
2715
  Name => 'ICC_Profile',
2703
2716
  Condition => '$$valPt =~ /^(prof|rICC)/',
2717
+ Permanent => 0, # (in QuickTime, this writes a zero-length box instead of deleting)
2704
2718
  SubDirectory => {
2705
2719
  TagTable => 'Image::ExifTool::ICC_Profile::Main',
2706
2720
  Start => 4,
@@ -6439,10 +6453,11 @@ my %eeBox2 = (
6439
6453
  # iTunes info ('----') atoms
6440
6454
  %Image::ExifTool::QuickTime::iTunesInfo = (
6441
6455
  PROCESS_PROC => \&ProcessMOV,
6442
- GROUPS => { 2 => 'Audio' },
6456
+ GROUPS => { 1 => 'iTunes', 2 => 'Audio' },
6443
6457
  NOTES => q{
6444
6458
  ExifTool will extract any iTunesInfo tags that exist, even if they are not
6445
- defined in this table.
6459
+ defined in this table. These tags belong to the family 1 "iTunes" group,
6460
+ and are not currently writable.
6446
6461
  },
6447
6462
  # 'mean'/'name'/'data' atoms form a triplet, but unfortunately
6448
6463
  # I haven't been able to find any documentation on this.
@@ -6503,9 +6518,45 @@ my %eeBox2 = (
6503
6518
  SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::EncodingParams' },
6504
6519
  },
6505
6520
  # also heard about 'iTunPGAP', but I haven't seen a sample
6506
- DISCNUMBER => 'DiscNumber', #PH
6507
- TRACKNUMBER => 'TrackNumber', #PH
6508
- popularimeter => 'Popularimeter', #PH
6521
+ # all tags below were added based on samples I have seen - PH
6522
+ DISCNUMBER => 'DiscNumber',
6523
+ TRACKNUMBER => 'TrackNumber',
6524
+ ARTISTS => 'Artists',
6525
+ CATALOGNUMBER => 'CatalogNumber',
6526
+ RATING => 'Rating',
6527
+ MEDIA => 'Media',
6528
+ SCRIPT => 'Script', # character set? (seen 'Latn')
6529
+ BARCODE => 'Barcode',
6530
+ LABEL => 'Label',
6531
+ MOOD => 'Mood',
6532
+ popularimeter => 'Popularimeter',
6533
+ 'Dynamic Range (DR)'=> 'DynamicRange',
6534
+ initialkey => 'InitialKey',
6535
+ originalyear => 'OriginalYear',
6536
+ originaldate => 'OriginalDate',
6537
+ '~length' => 'Length', # play length? (ie. duration?)
6538
+ replaygain_track_gain=>'ReplayTrackGain',
6539
+ replaygain_track_peak=>'ReplayTrackPeak',
6540
+ 'Volume Level (ReplayGain)'=> 'ReplayVolumeLevel',
6541
+ 'Dynamic Range (R128)'=> 'DynamicRangeR128',
6542
+ 'Volume Level (R128)' => 'VolumeLevelR128',
6543
+ 'Peak Level (Sample)' => 'PeakLevelSample',
6544
+ 'Peak Level (R128)' => 'PeakLevelR128',
6545
+ # also seen (many from forum12777):
6546
+ # 'MusicBrainz Album Release Country'
6547
+ # 'MusicBrainz Album Type'
6548
+ # 'MusicBrainz Album Status'
6549
+ # 'MusicBrainz Track Id'
6550
+ # 'MusicBrainz Release Track Id'
6551
+ # 'MusicBrainz Album Id'
6552
+ # 'MusicBrainz Album Artist Id'
6553
+ # 'MusicBrainz Artist Id'
6554
+ # 'Acoustid Id' (sic)
6555
+ # 'Tool Version'
6556
+ # 'Tool Name'
6557
+ # 'ISRC'
6558
+ # 'HDCD'
6559
+ # 'Waveform'
6509
6560
  );
6510
6561
 
6511
6562
  # iTunes audio encoding parameters
@@ -9064,6 +9115,12 @@ sub ProcessMOV($$;$)
9064
9115
  } else {
9065
9116
  my $t = PrintableTagID($tag,2);
9066
9117
  $et->VPrint(0,"$$et{INDENT}Tag '${t}' extends to end of file");
9118
+ if ($$tagTablePtr{"$tag-size"}) {
9119
+ my $pos = $raf->Tell();
9120
+ $raf->Seek(0, 2);
9121
+ $et->HandleTag($tagTablePtr, "$tag-size", $raf->Tell() - $pos);
9122
+ $et->HandleTag($tagTablePtr, "$tag-offset", $pos) if $$tagTablePtr{"$tag-offset"};
9123
+ }
9067
9124
  }
9068
9125
  last;
9069
9126
  }
@@ -9290,6 +9347,7 @@ ItemID: foreach $id (keys %$items) {
9290
9347
  Name => $name,
9291
9348
  Description => $desc,
9292
9349
  };
9350
+ $et->VPrint(0, $$et{INDENT}, "[adding QuickTime:$name]\n");
9293
9351
  AddTagToTable($tagTablePtr, $tag, $tagInfo);
9294
9352
  }
9295
9353
  # ignore 8-byte header
@@ -9301,9 +9359,9 @@ ItemID: foreach $id (keys %$items) {
9301
9359
  $val = \$buff;
9302
9360
  }
9303
9361
  }
9304
- undef %triplet;
9362
+ $$tagInfo{List} = 1; # (allow any of these tags to have multiple data elements)
9363
+ $et->VerboseInfo($tag, $tagInfo, Value => $val) if $verbose;
9305
9364
  } else {
9306
- undef %triplet if $tag eq 'mean';
9307
9365
  $triplet{$tag} = substr($val,4) if length($val) > 4;
9308
9366
  undef $tagInfo; # don't store this tag
9309
9367
  }
@@ -9369,7 +9427,7 @@ ItemID: foreach $id (keys %$items) {
9369
9427
  for (;;) {
9370
9428
  last if $pos + 16 > $size;
9371
9429
  my ($len, $type, $flags, $ctry, $lang) = unpack("x${pos}Na4Nnn", $val);
9372
- last if $pos + $len > $size;
9430
+ last if $pos + $len > $size or not $len;
9373
9431
  my ($value, $langInfo, $oldDir);
9374
9432
  my $format = $$tagInfo{Format};
9375
9433
  if ($type eq 'data' and $len >= 16) {