exiftool-vendored.exe 12.99.0 → 13.0.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.
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.99';
14
+ my $version = '13.00';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -2375,7 +2375,7 @@ sub GetImageInfo($$)
2375
2375
  $done2{$t2} = 1;
2376
2376
  }
2377
2377
  my $str = '';
2378
- ($v > 1 or $same) and $str = " ($same same tag" . ($same==1 ? '' : 's') . ')';
2378
+ $v and ($same or $v > 1) and $str = " ($same same tag" . ($same==1 ? '' : 's') . ')';
2379
2379
  if (not $allGroup) {
2380
2380
  print $fp "---- $g2 ----$str\n" if $g2 and ($str or @diffs);
2381
2381
  } elsif ($str and $g2) {
@@ -2415,12 +2415,12 @@ sub GetImageInfo($$)
2415
2415
  $grp .= ' ' x (15 - length($grp)) if length($grp) < 15 and $outFormat < 2;
2416
2416
  push @diffs, sprintf "< %s %s%s: %s\n", $grp, $name, $pad, Printable($val);
2417
2417
  if (defined $val2) {
2418
- $v < 3 and $grp = ' ' x length($grp), $name = ' ' x $len;
2418
+ $grp = ' ' x length($grp), $name = ' ' x $len if $v < 3;
2419
2419
  push @diffs, sprintf "> %s %s%s: %s\n", $grp, $name, $pad, Printable($val2);
2420
2420
  }
2421
2421
  } else {
2422
2422
  push @diffs, sprintf "< %s%s: %s\n", $name, $pad, Printable($val);
2423
- $v < 3 and $name = ' ' x $len;
2423
+ $name = ' ' x $len if $v < 3;
2424
2424
  push @diffs, sprintf "> %s%s %s\n", $name, $pad, Printable($val2) if defined $val2;
2425
2425
  }
2426
2426
  }
@@ -3635,7 +3635,7 @@ sub FormatJSON($$$;$)
3635
3635
  print $fp $bra;
3636
3636
  foreach (@$val) {
3637
3637
  print $fp ',' if $comma;
3638
- FormatJSON($fp, $_, $ind);
3638
+ FormatJSON($fp, $_, $ind, $quote);
3639
3639
  $comma = 1,
3640
3640
  }
3641
3641
  print $fp $ket,
@@ -3651,7 +3651,7 @@ sub FormatJSON($$$;$)
3651
3651
  if ($showTagID and $_ eq 'id' and $showTagID eq 'H' and $$val{$_} =~ /^\d+\.\d+$/) {
3652
3652
  print $fp qq{"$$val{$_}"};
3653
3653
  } else {
3654
- FormatJSON($fp, $$val{$_}, "$ind ");
3654
+ FormatJSON($fp, $$val{$_}, "$ind ", $quote);
3655
3655
  }
3656
3656
  $comma = 1,
3657
3657
  }
@@ -3817,7 +3817,14 @@ sub Printable($)
3817
3817
  $val = '(Binary data '.length($$val).' bytes)';
3818
3818
  }
3819
3819
  }
3820
- $val =~ tr/\0-\x1f\x7f/./; # translate unprintable characters
3820
+ if ($escapeC) {
3821
+ $val =~ s/([\0-\x1f\\\x7f])/$escC{$1} || sprintf('\x%.2x', ord $1)/eg;
3822
+ } else {
3823
+ # translate unprintable chars in value and remove trailing spaces
3824
+ $val =~ tr/\x01-\x1f\x7f/./;
3825
+ $val =~ s/\x00//g;
3826
+ $val =~ s/\s+$//;
3827
+ }
3821
3828
  return $val;
3822
3829
  }
3823
3830
 
@@ -4819,7 +4826,9 @@ sub Help()
4819
4826
  my $docFile = "$Image::ExifTool::exeDir/exiftool_files/windows_exiftool.txt";
4820
4827
  # try backslashes first if it seems we may be running in cmd.exe
4821
4828
  $docFile =~ tr/\//\\/ if $ENV{ComSpec} or $docFile =~ /\\/;
4822
- system(qq{more < "$docFile"}) and warn "Error running more $docFile\n";
4829
+ # trap warnings and run in eval to avoid Perl bug which gives "Can't spawn" warning on ^C
4830
+ local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
4831
+ eval { system(qq{more < "$docFile"}) };
4823
4832
  }
4824
4833
 
4825
4834
  # end
@@ -2931,7 +2931,7 @@ my %opcodeInfo = (
2931
2931
  0xa433 => { Name => 'LensMake', Writable => 'string' }, #24
2932
2932
  0xa434 => { Name => 'LensModel', Writable => 'string' }, #24
2933
2933
  0xa435 => { Name => 'LensSerialNumber', Writable => 'string' }, #24
2934
- 0xa436 => { Name => 'Title', Writable => 'string', Avoid => 1 }, #33
2934
+ 0xa436 => { Name => 'ImageTitle', Writable => 'string' }, #33
2935
2935
  0xa437 => { Name => 'Photographer', Writable => 'string' }, #33
2936
2936
  0xa438 => { Name => 'ImageEditor', Writable => 'string' }, #33
2937
2937
  0xa439 => { Name => 'CameraFirmware', Writable => 'string' }, #33
@@ -31,7 +31,7 @@ use vars qw($VERSION);
31
31
  use Image::ExifTool qw(:Public);
32
32
  use Image::ExifTool::GPS;
33
33
 
34
- $VERSION = '1.78';
34
+ $VERSION = '1.79';
35
35
 
36
36
  sub JITTER() { return 2 } # maximum time jitter
37
37
 
@@ -1127,8 +1127,9 @@ sub SetGeoValues($$;$)
1127
1127
  $iExt = $i1;
1128
1128
  }
1129
1129
  if (abs($time - $tn) > $geoMaxExtSecs) {
1130
- $err or $err = 'Time is too far from nearest GPS fix'.' '.abs($time-$tn).' > '.$geoMaxExtSecs;
1131
- $et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), "\n") if $verbose > 2;
1130
+ $err or $err = 'Time is too far from nearest GPS fix';
1131
+ $et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), ' (',
1132
+ int(abs $time-$tn), " sec away)\n") if $verbose > 2;
1132
1133
  $fix = { } if $$geotag{DateTimeOnly};
1133
1134
  } else {
1134
1135
  $fix = $$points{$tn};
@@ -32,7 +32,7 @@ use strict;
32
32
  use vars qw($VERSION);
33
33
  use Image::ExifTool qw(:DataAccess :Utils);
34
34
 
35
- $VERSION = '1.25';
35
+ $VERSION = '1.26';
36
36
 
37
37
  # program map table "stream_type" lookup (ref 6/1/9)
38
38
  my %streamType = (
@@ -82,7 +82,7 @@ my %streamType = (
82
82
  0x86 => 'DTS-HD Audio',
83
83
  0x87 => 'E-AC-3 Audio',
84
84
  0x8a => 'DTS Audio',
85
- 0x90 => 'PGS Audio', #https://www.avsforum.com/threads/bass-eq-for-filtered-movies.2995212/page-399
85
+ 0x90 => 'Presentation Graphic Stream (subtitle)', #https://en.wikipedia.org/wiki/Program-specific_information
86
86
  0x91 => 'A52b/AC-3 Audio',
87
87
  0x92 => 'DVD_SPU vls Subtitle',
88
88
  0x94 => 'SDDS Audio',
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
  use Image::ExifTool::Exif;
17
17
 
18
- $VERSION = '1.10';
18
+ $VERSION = '1.11';
19
19
 
20
20
  sub WritePhaseOne($$$);
21
21
  sub ProcessPhaseOne($$$);
@@ -71,6 +71,7 @@ my @formatName = ( undef, 'string', 'int16s', undef, 'int32s' );
71
71
  # >2 = compressed
72
72
  # 5 = non-linear
73
73
  PrintConv => { #PH
74
+ 0 => 'Uncompressed', #https://github.com/darktable-org/darktable/issues/7308
74
75
  1 => 'RAW 1', #? (encrypted)
75
76
  2 => 'RAW 2', #? (encrypted)
76
77
  3 => 'IIQ L', # (now "L14", ref IB)
@@ -591,8 +591,8 @@ my %insvLimit = (
591
591
  GROUPS => { 2 => 'Location' },
592
592
  FIRST_ENTRY => 0,
593
593
  NOTES => q{
594
- Tags extracted from the tx3g sbtl timed metadata of Yuneec drones, and
595
- subtitle text in some other videos.
594
+ Tags extracted from the tx3g sbtl timed metadata of Yuneec and Autel drones,
595
+ and subtitle text in some other videos.
596
596
  },
597
597
  Lat => {
598
598
  Name => 'GPSLatitude',
@@ -619,6 +619,32 @@ my %insvLimit = (
619
619
  PrintConv => '$self->ConvertDateTime($val)',
620
620
  },
621
621
  Text => { Groups => { 2 => 'Other' } },
622
+ # the following tags are extracted from Autel Evo II drone videos
623
+ GPSDateTime => {
624
+ Groups => { 2 => 'Time' },
625
+ Description => 'GPS Date/Time',
626
+ PrintConv => '$self->ConvertDateTime($val)',
627
+ },
628
+ HomeLat => {
629
+ Name => 'GPSHomeLatitude',
630
+ RawConv => '$$self{FoundGPSLatitude} = 1; $val',
631
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
632
+ },
633
+ HomeLon => {
634
+ Name => 'GPSHomeLongitude',
635
+ PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
636
+ },
637
+ ISO => { },
638
+ SHUTTER => {
639
+ Name => 'ExposureTime',
640
+ ValueConv => '1 / $val',
641
+ PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)',
642
+ },
643
+ 'F-NUM' => {
644
+ Name => 'FNumber',
645
+ PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)',
646
+ },
647
+ EV => 'ExposureCompensation',
622
648
  );
623
649
 
624
650
  %Image::ExifTool::QuickTime::INSV_MakerNotes = (
@@ -2361,7 +2387,7 @@ sub ParseTag($$$)
2361
2387
  }
2362
2388
 
2363
2389
  #------------------------------------------------------------------------------
2364
- # Process Yuneec 'tx3g' sbtl metadata (ref PH)
2390
+ # Process Yuneec 'tx3g' and Autel sbtl metadata (ref PH)
2365
2391
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
2366
2392
  # Returns: 1 on success
2367
2393
  sub Process_tx3g($$$)
@@ -2369,13 +2395,49 @@ sub Process_tx3g($$$)
2369
2395
  my ($et, $dirInfo, $tagTablePtr) = @_;
2370
2396
  my $dataPt = $$dirInfo{DataPt};
2371
2397
  return 0 if length $$dataPt < 2;
2372
- pos($$dataPt) = 2; # skip 2-byte length word
2373
2398
  $et->VerboseDir('tx3g', undef, length($$dataPt)-2);
2374
- $et->HandleTag($tagTablePtr, 'Text', substr($$dataPt, 2));
2375
- if ($$dataPt =~ /^..\w{3} (\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2}) ?([-+])(\d{2}):?(\d{2})$/s) {
2399
+ my $text = substr($$dataPt, 2); # remove 2-byte length word
2400
+ $et->HandleTag($tagTablePtr, 'Text', $text);
2401
+ if ($text =~ /^HOME\(/) {
2402
+ # --- sample text from Autel Evo II drone ---
2403
+ # HOME(W: 109.318642, N: 40.769371) 2023-09-12 10:28:07
2404
+ # GPS(W: 109.339287, N: 40.768574, 2371.76m)
2405
+ # HDR ISO:100 SHUTTER:1000 EV:-0.7 F-NUM:1.8
2406
+ # F.PRY (1.0\xc2\xb0, -3.7\xc2\xb0, -59.0\xc2\xb0), G.PRY (-51.1\xc2\xb0, 0.0\xc2\xb0, -58.9\xc2\xb0)
2407
+ my $line;
2408
+ foreach $line (split /\x0a/, $text) {
2409
+ if ($line =~ /^HOME\(([EW]):\s*(\d+\.\d+),\s*([NS]):\s*(\d+\.\d+)\)\s*(.*)/) {
2410
+ my ($lon, $lat, $time) = ($2, $4, $5);
2411
+ $lon = -$lon if $1 eq 'W';
2412
+ $lat = -$lat if $3 eq 'S';
2413
+ $time =~ tr/-/:/; # (likely local time zone, but not confirmed)
2414
+ $et->HandleTag($tagTablePtr, GPSDateTime => $time);
2415
+ $et->HandleTag($tagTablePtr, HomeLat => $lat);
2416
+ $et->HandleTag($tagTablePtr, HomeLon => $lon);
2417
+ } elsif ($line =~ /^GPS\(([EW]):\s*(\d+\.\d+),\s*([NS]):\s*(\d+\.\d+),\s*(.*)m/) {
2418
+ my ($lon, $lat, $alt) = ($2, $4, $5);
2419
+ $lon = -$lon if $1 eq 'W';
2420
+ $lat = -$lat if $3 eq 'S';
2421
+ $et->HandleTag($tagTablePtr, Lat => $lat);
2422
+ $et->HandleTag($tagTablePtr, Lon => $lon);
2423
+ $et->HandleTag($tagTablePtr, Alt => $alt);
2424
+ } elsif ($line =~ /^F\.PRY\s*\((-?[\d.]+)\xc2\xb0,\s*(-?[\d.]+)\xc2\xb0,\s*(-?[\d.]+)\xc2\xb0/) {
2425
+ $et->HandleTag($tagTablePtr, Yaw => $1);
2426
+ $et->HandleTag($tagTablePtr, Pitch => $2);
2427
+ $et->HandleTag($tagTablePtr, Roll => $3);
2428
+ if ($line =~ /G\.PRY\s*\((-?[\d.]+)\xc2\xb0,\s*(-?[\d.]+)\xc2\xb0,\s*(-?[\d.]+)\xc2\xb0/) {
2429
+ $et->HandleTag($tagTablePtr, GimYaw => $1);
2430
+ $et->HandleTag($tagTablePtr, GimPitch => $2);
2431
+ $et->HandleTag($tagTablePtr, GimRoll => $3);
2432
+ }
2433
+ } else {
2434
+ $et->HandleTag($tagTablePtr, $1, $2) while $line =~ /([-\w]+):([^:]*[^:\s])(\s|$)/sg;
2435
+ }
2436
+ }
2437
+ } elsif ($text =~ /^\w{3} (\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2}) ?([-+])(\d{2}):?(\d{2})$/s) {
2376
2438
  $et->HandleTag($tagTablePtr, 'DateTime', "$1:$2:$3 $4$5$6:$7");
2377
2439
  } else {
2378
- $et->HandleTag($tagTablePtr, $1, $2) while $$dataPt =~ /(\w+):([^:]*[^:\s])(\s|$)/sg;
2440
+ $et->HandleTag($tagTablePtr, $1, $2) while $text =~ /(\w+):([^:]*[^:\s])(\s|$)/sg;
2379
2441
  }
2380
2442
  return 1;
2381
2443
  }
@@ -1349,7 +1349,7 @@ my %tagLookup = (
1349
1349
  'camerae-mountversion' => { 490 => 0xb },
1350
1350
  'cameraelevationangle' => { 124 => 0x9405, 524 => 'CameraElevationAngle' },
1351
1351
  'camerafilename' => { 507 => 'CameraFilename' },
1352
- 'camerafirmware' => { 124 => 0xa439 },
1352
+ 'camerafirmware' => { 124 => 0xa439, 524 => 'CameraFirmware' },
1353
1353
  'cameraid' => { 333 => 0x209, 413 => 'cmid', 429 => 0x209 },
1354
1354
  'cameraidentifier' => { 407 => 'camera.identifier' },
1355
1355
  'cameraimage' => { 495 => [\'Cameras','CamerasCameraImage'] },
@@ -3728,8 +3728,8 @@ my %tagLookup = (
3728
3728
  'imagedustoff' => { 300 => 0xfe443a45 },
3729
3729
  'imageeditcount' => { 388 => 0x41 },
3730
3730
  'imageediting' => { 388 => 0x32 },
3731
- 'imageeditingsoftware' => { 124 => 0xa43b },
3732
- 'imageeditor' => { 124 => 0xa438 },
3731
+ 'imageeditingsoftware' => { 124 => 0xa43b, 524 => 'ImageEditingSoftware' },
3732
+ 'imageeditor' => { 124 => 0xa438, 524 => 'ImageEditor' },
3733
3733
  'imageeffects' => { 420 => 0x1010 },
3734
3734
  'imagefileconstraints' => { 338 => 'ImageFileConstraints' },
3735
3735
  'imagefileformatasdelivered' => { 338 => 'ImageFileFormatAsDelivered' },
@@ -3805,9 +3805,10 @@ my %tagLookup = (
3805
3805
  'imagesuppliername' => { 338 => [\'ImageSupplier','ImageSupplierImageSupplierName'] },
3806
3806
  'imagetemperaturemax' => { 126 => 0x1 },
3807
3807
  'imagetemperaturemin' => { 126 => 0x2 },
3808
+ 'imagetitle' => { 124 => 0xa436, 524 => 'ImageTitle' },
3808
3809
  'imagetone' => { 388 => 0x4f },
3809
3810
  'imagetype' => { 136 => 0x82, 338 => 'ImageType' },
3810
- 'imageuniqueid' => { 1 => 0x15, 68 => 0x28, 124 => 0xa420, 522 => 'ImageUniqueID', 523 => 'ImageUniqueID' },
3811
+ 'imageuniqueid' => { 1 => 0x15, 68 => 0x28, 124 => 0xa420, 522 => 'ImageUniqueID', 523 => 'ImageUniqueID', 524 => 'ImageUniqueID' },
3811
3812
  'imagewidth' => { 124 => 0x100, 193 => 0xe, 397 => 0x10c, 502 => 'ImageWidth', 542 => 'ImageWidth' },
3812
3813
  'inclinationangle' => { 491 => 0x900f },
3813
3814
  'inclinationcorrection' => { 491 => 0x900e },
@@ -4796,7 +4797,7 @@ my %tagLookup = (
4796
4797
  'metadataauthorityidentifier' => { 531 => [\'metadataAuthority','metadataAuthorityIdentifier'] },
4797
4798
  'metadataauthorityname' => { 531 => [\'metadataAuthority','metadataAuthorityName'] },
4798
4799
  'metadatadate' => { 544 => 'MetadataDate' },
4799
- 'metadataeditingsoftware' => { 124 => 0xa43c },
4800
+ 'metadataeditingsoftware' => { 124 => 0xa43c, 524 => 'MetadataEditingSoftware' },
4800
4801
  'metadatalastedited' => { 531 => 'metadataLastEdited' },
4801
4802
  'metadatalasteditor' => { 531 => 'metadataLastEditor' },
4802
4803
  'metadatalasteditoridentifier' => { 531 => [\'metadataLastEditor','metadataLastEditorIdentifier'] },
@@ -5599,7 +5600,7 @@ my %tagLookup = (
5599
5600
  'photoeffectsgreen' => { 302 => 0x6 },
5600
5601
  'photoeffectsred' => { 302 => 0x4 },
5601
5602
  'photoeffectstype' => { 302 => 0x0 },
5602
- 'photographer' => { 124 => 0xa437 },
5603
+ 'photographer' => { 124 => 0xa437, 524 => 'Photographer' },
5603
5604
  'photographicsensitivity' => { 524 => 'PhotographicSensitivity' },
5604
5605
  'photoidentifier' => { 1 => 0x2b },
5605
5606
  'photoinfoplayback' => { 307 => '17.6', 316 => '33.6' },
@@ -5946,7 +5947,7 @@ my %tagLookup = (
5946
5947
  'rawdevcolorspace' => { 334 => 0x108, 335 => 0x109 },
5947
5948
  'rawdevcontrastvalue' => { 334 => 0x106, 335 => 0x105 },
5948
5949
  'rawdeveditstatus' => { 334 => 0x10b },
5949
- 'rawdevelopingsoftware' => { 124 => 0xa43a },
5950
+ 'rawdevelopingsoftware' => { 124 => 0xa43a, 524 => 'RAWDevelopingSoftware' },
5950
5951
  'rawdevelopmentprocess' => { 388 => 0x62 },
5951
5952
  'rawdevengine' => { 334 => 0x109, 335 => 0x10b },
5952
5953
  'rawdevexposurebiasvalue' => { 334 => 0x100, 335 => 0x100 },
@@ -6940,7 +6941,7 @@ my %tagLookup = (
6940
6941
  'timezoneinfo' => { 105 => 0x2 },
6941
6942
  'timezoneoffset' => { 124 => 0x882a },
6942
6943
  'tint' => { 407 => 'player.movie.visual.tint', 517 => 'Tint', 519 => 'Tint' },
6943
- 'title' => { 124 => 0xa436, 162 => 'Title', 337 => 'Title', 341 => 'Title', 352 => 0x65, 404 => 'Title', 405 => ['titl',"\xa9nam"], 407 => 'title', 413 => ['titl',"\xa9nam"], 520 => 'title', 533 => 'Title', 544 => 'Title' },
6944
+ 'title' => { 162 => 'Title', 337 => 'Title', 341 => 'Title', 352 => 0x65, 404 => 'Title', 405 => ['titl',"\xa9nam"], 407 => 'title', 413 => ['titl',"\xa9nam"], 520 => 'title', 533 => 'Title', 544 => 'Title' },
6944
6945
  'togglestyleamount' => { 517 => 'ToggleStyleAmount', 519 => 'ToggleStyleAmount' },
6945
6946
  'togglestyledigest' => { 517 => 'ToggleStyleDigest', 519 => 'ToggleStyleDigest' },
6946
6947
  'tonecomp' => { 241 => 0x81 },
@@ -9742,6 +9743,8 @@ my %tagExists = (
9742
9743
  'gpsframingaltitude' => 1,
9743
9744
  'gpsframinglatitude' => 1,
9744
9745
  'gpsframinglongitude' => 1,
9746
+ 'gpshomelatitude' => 1,
9747
+ 'gpshomelongitude' => 1,
9745
9748
  'gpshorizontalaccuracy' => 1,
9746
9749
  'gpsinfo' => 1,
9747
9750
  'gpslatitude2' => 1,
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 28150 tags, with 17488 unique tag names.
15
+ They contain a total of 28165 tags, with 17491 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -871,7 +871,7 @@ for the official EXIF 2.32 specification.
871
871
  0xa433 LensMake ExifIFD string
872
872
  0xa434 LensModel ExifIFD string
873
873
  0xa435 LensSerialNumber ExifIFD string
874
- 0xa436 Title ExifIFD string/
874
+ 0xa436 ImageTitle ExifIFD string
875
875
  0xa437 Photographer ExifIFD string
876
876
  0xa438 ImageEditor ExifIFD string
877
877
  0xa439 CameraFirmware ExifIFD string
@@ -4605,7 +4605,7 @@ These tags belong to the ExifTool XMP-exif family 1 group.
4605
4605
  GPSTrack rational
4606
4606
  GPSTrackRef string
4607
4607
  GPSVersionID string
4608
- ImageUniqueID string
4608
+ ImageUniqueID string/
4609
4609
  ISO integer+
4610
4610
  LightSource string
4611
4611
  MakerNote string
@@ -4686,6 +4686,7 @@ These tags belong to the ExifTool XMP-exifEX family 1 group.
4686
4686
  Acceleration rational
4687
4687
  SerialNumber string
4688
4688
  CameraElevationAngle rational
4689
+ CameraFirmware string
4689
4690
  OwnerName string
4690
4691
  CompositeImage integer
4691
4692
  CompositeImageCount integer+
@@ -4702,6 +4703,10 @@ These tags belong to the ExifTool XMP-exifEX family 1 group.
4702
4703
  CompImageValues rational_+
4703
4704
  Gamma rational
4704
4705
  Humidity rational
4706
+ ImageEditingSoftware string
4707
+ ImageEditor string
4708
+ ImageTitle string
4709
+ ImageUniqueID string
4705
4710
  InteropIndex string
4706
4711
  ISOSpeed integer
4707
4712
  ISOSpeedLatitudeyyy integer
@@ -4710,8 +4715,11 @@ These tags belong to the ExifTool XMP-exifEX family 1 group.
4710
4715
  LensModel string
4711
4716
  LensSerialNumber string
4712
4717
  LensInfo rational+
4718
+ MetadataEditingSoftware string
4719
+ Photographer string
4713
4720
  PhotographicSensitivity integer
4714
4721
  Pressure rational
4722
+ RAWDevelopingSoftware string
4715
4723
  RecommendedExposureIndex integer
4716
4724
  SensitivityType integer
4717
4725
  StandardOutputSensitivity integer
@@ -30187,22 +30195,29 @@ changed via the config file.
30187
30195
 
30188
30196
  =head3 QuickTime tx3g Tags
30189
30197
 
30190
- Tags extracted from the tx3g sbtl timed metadata of Yuneec drones, and
30191
- subtitle text in some other videos.
30198
+ Tags extracted from the tx3g sbtl timed metadata of Yuneec and Autel drones,
30199
+ and subtitle text in some other videos.
30192
30200
 
30193
- Tag ID Tag Name Writable
30194
- ------ -------- --------
30195
- 'Alt' GPSAltitude no
30196
- 'DateTime' DateTime no
30197
- 'GimPitch' GimbalPitch no
30198
- 'GimRoll' GimbalRoll no
30199
- 'GimYaw' GimbalYaw no
30200
- 'Lat' GPSLatitude no
30201
- 'Lon' GPSLongitude no
30202
- 'Pitch' Pitch no
30203
- 'Roll' Roll no
30204
- 'Text' Text no
30205
- 'Yaw' Yaw no
30201
+ Tag ID Tag Name Writable
30202
+ ------ -------- --------
30203
+ 'Alt' GPSAltitude no
30204
+ 'DateTime' DateTime no
30205
+ 'EV' ExposureCompensation no
30206
+ 'F-NUM' FNumber no
30207
+ 'GPSDateTime' GPSDateTime no
30208
+ 'GimPitch' GimbalPitch no
30209
+ 'GimRoll' GimbalRoll no
30210
+ 'GimYaw' GimbalYaw no
30211
+ 'HomeLat' GPSHomeLatitude no
30212
+ 'HomeLon' GPSHomeLongitude no
30213
+ 'ISO' ISO no
30214
+ 'Lat' GPSLatitude no
30215
+ 'Lon' GPSLongitude no
30216
+ 'Pitch' Pitch no
30217
+ 'Roll' Roll no
30218
+ 'SHUTTER' ExposureTime no
30219
+ 'Text' Text no
30220
+ 'Yaw' Yaw no
30206
30221
 
30207
30222
  =head3 QuickTime HTCInfo Tags
30208
30223
 
@@ -2016,6 +2016,7 @@ my %sPantryItem = (
2016
2016
  Writable => 'integer',
2017
2017
  List => 'Seq',
2018
2018
  AutoSplit => 1,
2019
+ Notes => 'deprecated',
2019
2020
  },
2020
2021
  OECF => {
2021
2022
  Name => 'Opto-ElectricConvFactor',
@@ -2267,7 +2268,7 @@ my %sPantryItem = (
2267
2268
  3 => 'Distant',
2268
2269
  },
2269
2270
  },
2270
- ImageUniqueID => { },
2271
+ ImageUniqueID => { Avoid => 1, Notes => 'moved to exifEX namespace in 2024 spec' },
2271
2272
  GPSVersionID => { Groups => { 2 => 'Location' } },
2272
2273
  GPSLatitude => { Groups => { 2 => 'Location' }, %latConv },
2273
2274
  GPSLongitude => { Groups => { 2 => 'Location' }, %longConv },
@@ -2509,6 +2510,15 @@ my %sPantryItem = (
2509
2510
  Values => { List => 'Seq', Writable => 'rational' },
2510
2511
  },
2511
2512
  },
2513
+ # new in Exif 3.0
2514
+ ImageUniqueID => { },
2515
+ ImageTitle => { },
2516
+ ImageEditor => { },
2517
+ Photographer => { Groups => { 2 => 'Author' } },
2518
+ CameraFirmware => { Groups => { 2 => 'Camera' } },
2519
+ RAWDevelopingSoftware => { },
2520
+ ImageEditingSoftware => { },
2521
+ MetadataEditingSoftware => { },
2512
2522
  );
2513
2523
 
2514
2524
  # Auxiliary namespace properties (aux) - not fully documented (ref PH)
@@ -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);
31
31
 
32
- $VERSION = '12.99';
32
+ $VERSION = '13.00';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -740,7 +740,7 @@ my %fileDescription = (
740
740
  OGV => 'video/ogg',
741
741
  ONP => 'application/on1',
742
742
  ORF => 'image/x-olympus-orf',
743
- OTF => 'application/x-font-otf',
743
+ OTF => 'application/font-otf',
744
744
  PAGES=> 'application/x-iwork-pages-sffpages',
745
745
  PBM => 'image/x-portable-bitmap',
746
746
  PCD => 'image/x-photo-cd',
@@ -798,8 +798,8 @@ my %fileDescription = (
798
798
  THMX => 'application/vnd.ms-officetheme',
799
799
  TIFF => 'image/tiff',
800
800
  Torrent => 'application/x-bittorrent',
801
- TTC => 'application/x-font-ttf',
802
- TTF => 'application/x-font-ttf',
801
+ TTC => 'application/font-ttf',
802
+ TTF => 'application/font-ttf',
803
803
  TXT => 'text/plain',
804
804
  VCard=> 'text/vcard',
805
805
  VRD => 'application/octet-stream', #PH (NC)
@@ -1,21 +1,16 @@
1
- This ExifTool package is intended to avoid problems of the PAR packed original ExifTool for Windows.
1
+ This readme is for the Windows ExifTool package by Oliver Betz.
2
+
3
+ This package is intended to avoid problems of the PAR packed original ExifTool for Windows.
2
4
 
3
5
  It consists of:
4
6
 
5
7
  * ExifTool by Phil Harvey https://exiftool.org/ resp. https://github.com/exiftool/exiftool
6
- * Strawberry Perl http://strawberryperl.com/
7
- * My tiny launcher https://oliverbetz.de/pages/Artikel/ExifTool-for-Windows
8
-
9
- Please note that there can be up to three exiftool scripts in the "exiftool_files" directory:
10
- * exiftool.pl - only this one is called by the launcher
11
- * exiftool - this is from the original ExifTool distribution
12
- * windows_exiftool - this is from the original ExifTool distribution
8
+ * Strawberry Perl https://strawberryperl.com/
9
+ * Tiny launcher by Oliver Betz https://oliverbetz.de/pages/Artikel/ExifTool-for-Windows
13
10
 
14
- The small proportion of my own content is licensed under the https://creativecommons.org/publicdomain/zero/1.0/legalcode CC0 license
15
- See https://exiftool.org/ and http://strawberryperl.com/ for the license of ExifTool and Strawberry Perl.
11
+ See https://exiftool.org/ and https://strawberryperl.com/ for the license of ExifTool and Strawberry Perl.
12
+ The launcher is licensed under the https://creativecommons.org/publicdomain/zero/1.0/legalcode CC0 license
16
13
 
17
14
  I make no warranties about the package, and disclaim liability for all uses of the package, to the fullest extent permitted by applicable law.
18
15
 
19
- Please send useful comments to mailto:ppl@oliverbetz.de - especially if you found bugs or improved something.
20
-
21
- Oliver Betz
16
+ Oliver Betz
@@ -312,8 +312,8 @@ OPTIONS
312
312
  Write a new value for the specified tag (eg. "-comment=wow"), or
313
313
  delete the tag if no *VALUE* is given (eg. "-comment="). "+=" and
314
314
  "-=" are used to add or remove existing entries from a list, or to
315
- shift date/time values (see Image::ExifTool::Shift.pl and note 6
316
- below for more details). "+=" may also be used to increment
315
+ shift date/time values (see Image::ExifTool::Shift.pl and notes 6
316
+ and 7 below for more details). "+=" may also be used to increment
317
317
  numerical values (or decrement if *VALUE* is negative), and "-="
318
318
  may be used to conditionally delete or replace a tag (see "WRITING
319
319
  EXAMPLES" for examples). "^=" is used to write an empty string
@@ -399,6 +399,10 @@ OPTIONS
399
399
  copy it to another tag in the same operation, use the
400
400
  -globalTimeShift option.
401
401
 
402
+ 7) The "+=" operator may not be used to shift a List-type date/time
403
+ tag (eg. XMP-dc:Date) because "+=" is used to add elements to the
404
+ list. Instead, the -globalTimeShift option should be used.
405
+
402
406
  Special feature: Integer values may be specified in hexadecimal
403
407
  with a leading "0x", and simple rational values may be specified as
404
408
  fractions.
@@ -1035,7 +1039,7 @@ OPTIONS
1035
1039
 
1036
1040
  produces output like this:
1037
1041
 
1038
- -- Generated by ExifTool 12.99 --
1042
+ -- Generated by ExifTool 13.00 --
1039
1043
  File: a.jpg - 2003:10:31 15:44:19
1040
1044
  (f/5.6, 1/60s, ISO 100)
1041
1045
  File: b.jpg - 2006:05:23 11:57:38
@@ -1879,8 +1883,8 @@ OPTIONS
1879
1883
  specified family of groups, with -G1 being the default. The -a
1880
1884
  option is implied. Adding -v includes a count of the number of tags
1881
1885
  that are the same in each group. The following text formatting
1882
- options are valid when -diff is used: -c, -charset, -d, -E, -L,
1883
- -lang, -n, -s, -sep, -struct and -w.
1886
+ options are valid when -diff is used: -c, -charset, -d, -E, -ec,
1887
+ -ex, -L, -lang, -n, -s, -sep, -struct and -w.
1884
1888
 
1885
1889
  -geotag *TRKFILE*
1886
1890
  Geotag images from the specified GPS track log file. Using the
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "exiftool-vendored.exe",
3
- "version": "12.99.0",
3
+ "version": "13.0.0",
4
4
  "description": "Vendored win32 ExifTool for Node.js",
5
5
  "main": "./index.js",
6
- "homepage": "https://github.com/mceachen/exiftool-vendored.exe#readme",
6
+ "homepage": "https://github.com/photostructure/exiftool-vendored.exe#readme",
7
7
  "bugs": {
8
- "url": "https://github.com/mceachen/exiftool-vendored.js/issues"
8
+ "url": "https://github.com/photostructure/exiftool-vendored.js/issues"
9
9
  },
10
10
  "repository": {
11
11
  "type": "git",
12
- "url": "https://github.com/mceachen/exiftool-vendored.exe.git"
12
+ "url": "git+ssh://git@github.com/photostructure/exiftool-vendored.exe.git"
13
13
  },
14
14
  "os": [
15
15
  "win32"
@@ -43,8 +43,8 @@
43
43
  },
44
44
  "devDependencies": {
45
45
  "axios": "^1.7.7",
46
- "mocha": "^10.7.3",
47
- "npm-check-updates": "^17.1.4",
46
+ "mocha": "^10.8.0",
47
+ "npm-check-updates": "^17.1.9",
48
48
  "prettier": "^3.3.3",
49
49
  "release-it": "^17.10.0",
50
50
  "unzipper": "^0.12.3",