diff --git a/bin/exiftool_files/exiftool.pl b/bin/exiftool_files/exiftool.pl index 076a382..455e76c 100755 --- a/bin/exiftool_files/exiftool.pl +++ b/bin/exiftool_files/exiftool.pl @@ -11,7 +11,7 @@ use warnings; require 5.004; -my $version = '12.99'; +my $version = '13.00'; # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool' my $exePath; @@ -2375,7 +2375,7 @@ ($$) $done2{$t2} = 1; } my $str = ''; - ($v > 1 or $same) and $str = " ($same same tag" . ($same==1 ? '' : 's') . ')'; + $v and ($same or $v > 1) and $str = " ($same same tag" . ($same==1 ? '' : 's') . ')'; if (not $allGroup) { print $fp "---- $g2 ----$str\n" if $g2 and ($str or @diffs); } elsif ($str and $g2) { @@ -2415,12 +2415,12 @@ ($$) $grp .= ' ' x (15 - length($grp)) if length($grp) < 15 and $outFormat < 2; push @diffs, sprintf "< %s %s%s: %s\n", $grp, $name, $pad, Printable($val); if (defined $val2) { - $v < 3 and $grp = ' ' x length($grp), $name = ' ' x $len; + $grp = ' ' x length($grp), $name = ' ' x $len if $v < 3; push @diffs, sprintf "> %s %s%s: %s\n", $grp, $name, $pad, Printable($val2); } } else { push @diffs, sprintf "< %s%s: %s\n", $name, $pad, Printable($val); - $v < 3 and $name = ' ' x $len; + $name = ' ' x $len if $v < 3; push @diffs, sprintf "> %s%s %s\n", $name, $pad, Printable($val2) if defined $val2; } } @@ -3635,7 +3635,7 @@ ($$$;$) print $fp $bra; foreach (@$val) { print $fp ',' if $comma; - FormatJSON($fp, $_, $ind); + FormatJSON($fp, $_, $ind, $quote); $comma = 1, } print $fp $ket, @@ -3651,7 +3651,7 @@ ($$$;$) if ($showTagID and $_ eq 'id' and $showTagID eq 'H' and $$val{$_} =~ /^\d+\.\d+$/) { print $fp qq{"$$val{$_}"}; } else { - FormatJSON($fp, $$val{$_}, "$ind "); + FormatJSON($fp, $$val{$_}, "$ind ", $quote); } $comma = 1, } @@ -3817,7 +3817,14 @@ ($) $val = '(Binary data '.length($$val).' bytes)'; } } - $val =~ tr/\0-\x1f\x7f/./; # translate unprintable characters + if ($escapeC) { + $val =~ s/([\0-\x1f\\\x7f])/$escC{$1} || sprintf('\x%.2x', ord $1)/eg; + } else { + # translate unprintable chars in value and remove trailing spaces + $val =~ tr/\x01-\x1f\x7f/./; + $val =~ s/\x00//g; + $val =~ s/\s+$//; + } return $val; } @@ -4819,7 +4826,9 @@ () my $docFile = "$Image::ExifTool::exeDir/exiftool_files/windows_exiftool.txt"; # try backslashes first if it seems we may be running in cmd.exe $docFile =~ tr/\//\\/ if $ENV{ComSpec} or $docFile =~ /\\/; - system(qq{more < "$docFile"}) and warn "Error running more $docFile\n"; + # trap warnings and run in eval to avoid Perl bug which gives "Can't spawn" warning on ^C + local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] }; + eval { system(qq{more < "$docFile"}) }; } # end diff --git a/bin/exiftool_files/lib/Image/ExifTool.pm b/bin/exiftool_files/lib/Image/ExifTool.pm index 3689d58..c4a683c 100644 --- a/bin/exiftool_files/lib/Image/ExifTool.pm +++ b/bin/exiftool_files/lib/Image/ExifTool.pm @@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir %static_vars $advFmtSelf); -$VERSION = '12.99'; +$VERSION = '13.00'; $RELEASE = ''; @ISA = qw(Exporter); %EXPORT_TAGS = ( @@ -740,7 +740,7 @@ my %fileDescription = ( OGV => 'video/ogg', ONP => 'application/on1', ORF => 'image/x-olympus-orf', - OTF => 'application/x-font-otf', + OTF => 'application/font-otf', PAGES=> 'application/x-iwork-pages-sffpages', PBM => 'image/x-portable-bitmap', PCD => 'image/x-photo-cd', @@ -798,8 +798,8 @@ my %fileDescription = ( THMX => 'application/vnd.ms-officetheme', TIFF => 'image/tiff', Torrent => 'application/x-bittorrent', - TTC => 'application/x-font-ttf', - TTF => 'application/x-font-ttf', + TTC => 'application/font-ttf', + TTF => 'application/font-ttf', TXT => 'text/plain', VCard=> 'text/vcard', VRD => 'application/octet-stream', #PH (NC) diff --git a/bin/exiftool_files/lib/Image/ExifTool/Exif.pm b/bin/exiftool_files/lib/Image/ExifTool/Exif.pm index f3de903..19e7e15 100644 --- a/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +++ b/bin/exiftool_files/lib/Image/ExifTool/Exif.pm @@ -2931,7 +2931,7 @@ my %opcodeInfo = ( 0xa433 => { Name => 'LensMake', Writable => 'string' }, #24 0xa434 => { Name => 'LensModel', Writable => 'string' }, #24 0xa435 => { Name => 'LensSerialNumber', Writable => 'string' }, #24 - 0xa436 => { Name => 'Title', Writable => 'string', Avoid => 1 }, #33 + 0xa436 => { Name => 'ImageTitle', Writable => 'string' }, #33 0xa437 => { Name => 'Photographer', Writable => 'string' }, #33 0xa438 => { Name => 'ImageEditor', Writable => 'string' }, #33 0xa439 => { Name => 'CameraFirmware', Writable => 'string' }, #33 diff --git a/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat b/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat index eea7bb8..7cdc741 100644 Binary files a/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat and b/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat differ diff --git a/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm b/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm index 8b03174..674bd6e 100644 --- a/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +++ b/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm @@ -31,7 +31,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:Public); use Image::ExifTool::GPS; -$VERSION = '1.78'; +$VERSION = '1.79'; sub JITTER() { return 2 } # maximum time jitter @@ -1127,8 +1127,9 @@ sub SetGeoValues($$;$) $iExt = $i1; } if (abs($time - $tn) > $geoMaxExtSecs) { - $err or $err = 'Time is too far from nearest GPS fix'.' '.abs($time-$tn).' > '.$geoMaxExtSecs; - $et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), "\n") if $verbose > 2; + $err or $err = 'Time is too far from nearest GPS fix'; + $et->VPrint(2, ' Nearest fix: ', PrintFixTime($tn), ' (', + int(abs $time-$tn), " sec away)\n") if $verbose > 2; $fix = { } if $$geotag{DateTimeOnly}; } else { $fix = $$points{$tn}; diff --git a/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm b/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm index ad62473..e9f6b81 100644 --- a/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +++ b/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm @@ -32,7 +32,7 @@ use strict; use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); -$VERSION = '1.25'; +$VERSION = '1.26'; # program map table "stream_type" lookup (ref 6/1/9) my %streamType = ( @@ -82,7 +82,7 @@ my %streamType = ( 0x86 => 'DTS-HD Audio', 0x87 => 'E-AC-3 Audio', 0x8a => 'DTS Audio', - 0x90 => 'PGS Audio', #https://www.avsforum.com/threads/bass-eq-for-filtered-movies.2995212/page-399 + 0x90 => 'Presentation Graphic Stream (subtitle)', #https://en.wikipedia.org/wiki/Program-specific_information 0x91 => 'A52b/AC-3 Audio', 0x92 => 'DVD_SPU vls Subtitle', 0x94 => 'SDDS Audio', diff --git a/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm b/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm index 7c32dcf..72fd1e7 100644 --- a/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +++ b/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm @@ -15,7 +15,7 @@ use vars qw($VERSION); use Image::ExifTool qw(:DataAccess :Utils); use Image::ExifTool::Exif; -$VERSION = '1.10'; +$VERSION = '1.11'; sub WritePhaseOne($$$); sub ProcessPhaseOne($$$); @@ -71,6 +71,7 @@ my @formatName = ( undef, 'string', 'int16s', undef, 'int32s' ); # >2 = compressed # 5 = non-linear PrintConv => { #PH + 0 => 'Uncompressed', #https://github.com/darktable-org/darktable/issues/7308 1 => 'RAW 1', #? (encrypted) 2 => 'RAW 2', #? (encrypted) 3 => 'IIQ L', # (now "L14", ref IB) diff --git a/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl b/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl index bb91939..a7a8829 100644 --- a/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +++ b/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl @@ -591,8 +591,8 @@ package Image::ExifTool::QuickTime; GROUPS => { 2 => 'Location' }, FIRST_ENTRY => 0, NOTES => q{ - Tags extracted from the tx3g sbtl timed metadata of Yuneec drones, and - subtitle text in some other videos. + Tags extracted from the tx3g sbtl timed metadata of Yuneec and Autel drones, + and subtitle text in some other videos. }, Lat => { Name => 'GPSLatitude', @@ -619,6 +619,32 @@ package Image::ExifTool::QuickTime; PrintConv => '$self->ConvertDateTime($val)', }, Text => { Groups => { 2 => 'Other' } }, + # the following tags are extracted from Autel Evo II drone videos + GPSDateTime => { + Groups => { 2 => 'Time' }, + Description => 'GPS Date/Time', + PrintConv => '$self->ConvertDateTime($val)', + }, + HomeLat => { + Name => 'GPSHomeLatitude', + RawConv => '$$self{FoundGPSLatitude} = 1; $val', + PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', + }, + HomeLon => { + Name => 'GPSHomeLongitude', + PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")', + }, + ISO => { }, + SHUTTER => { + Name => 'ExposureTime', + ValueConv => '1 / $val', + PrintConv => 'Image::ExifTool::Exif::PrintExposureTime($val)', + }, + 'F-NUM' => { + Name => 'FNumber', + PrintConv => 'Image::ExifTool::Exif::PrintFNumber($val)', + }, + EV => 'ExposureCompensation', ); %Image::ExifTool::QuickTime::INSV_MakerNotes = ( @@ -2361,7 +2387,7 @@ ($$$) } #------------------------------------------------------------------------------ -# Process Yuneec 'tx3g' sbtl metadata (ref PH) +# Process Yuneec 'tx3g' and Autel sbtl metadata (ref PH) # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref # Returns: 1 on success sub Process_tx3g($$$) @@ -2369,13 +2395,49 @@ ($$$) my ($et, $dirInfo, $tagTablePtr) = @_; my $dataPt = $$dirInfo{DataPt}; return 0 if length $$dataPt < 2; - pos($$dataPt) = 2; # skip 2-byte length word $et->VerboseDir('tx3g', undef, length($$dataPt)-2); - $et->HandleTag($tagTablePtr, 'Text', substr($$dataPt, 2)); - if ($$dataPt =~ /^..\w{3} (\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2}) ?([-+])(\d{2}):?(\d{2})$/s) { + my $text = substr($$dataPt, 2); # remove 2-byte length word + $et->HandleTag($tagTablePtr, 'Text', $text); + if ($text =~ /^HOME\(/) { + # --- sample text from Autel Evo II drone --- + # HOME(W: 109.318642, N: 40.769371) 2023-09-12 10:28:07 + # GPS(W: 109.339287, N: 40.768574, 2371.76m) + # HDR ISO:100 SHUTTER:1000 EV:-0.7 F-NUM:1.8 + # 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) + my $line; + foreach $line (split /\x0a/, $text) { + if ($line =~ /^HOME\(([EW]):\s*(\d+\.\d+),\s*([NS]):\s*(\d+\.\d+)\)\s*(.*)/) { + my ($lon, $lat, $time) = ($2, $4, $5); + $lon = -$lon if $1 eq 'W'; + $lat = -$lat if $3 eq 'S'; + $time =~ tr/-/:/; # (likely local time zone, but not confirmed) + $et->HandleTag($tagTablePtr, GPSDateTime => $time); + $et->HandleTag($tagTablePtr, HomeLat => $lat); + $et->HandleTag($tagTablePtr, HomeLon => $lon); + } elsif ($line =~ /^GPS\(([EW]):\s*(\d+\.\d+),\s*([NS]):\s*(\d+\.\d+),\s*(.*)m/) { + my ($lon, $lat, $alt) = ($2, $4, $5); + $lon = -$lon if $1 eq 'W'; + $lat = -$lat if $3 eq 'S'; + $et->HandleTag($tagTablePtr, Lat => $lat); + $et->HandleTag($tagTablePtr, Lon => $lon); + $et->HandleTag($tagTablePtr, Alt => $alt); + } elsif ($line =~ /^F\.PRY\s*\((-?[\d.]+)\xc2\xb0,\s*(-?[\d.]+)\xc2\xb0,\s*(-?[\d.]+)\xc2\xb0/) { + $et->HandleTag($tagTablePtr, Yaw => $1); + $et->HandleTag($tagTablePtr, Pitch => $2); + $et->HandleTag($tagTablePtr, Roll => $3); + if ($line =~ /G\.PRY\s*\((-?[\d.]+)\xc2\xb0,\s*(-?[\d.]+)\xc2\xb0,\s*(-?[\d.]+)\xc2\xb0/) { + $et->HandleTag($tagTablePtr, GimYaw => $1); + $et->HandleTag($tagTablePtr, GimPitch => $2); + $et->HandleTag($tagTablePtr, GimRoll => $3); + } + } else { + $et->HandleTag($tagTablePtr, $1, $2) while $line =~ /([-\w]+):([^:]*[^:\s])(\s|$)/sg; + } + } + } elsif ($text =~ /^\w{3} (\d{4})-(\d{2})-(\d{2}) (\d{2}:\d{2}:\d{2}) ?([-+])(\d{2}):?(\d{2})$/s) { $et->HandleTag($tagTablePtr, 'DateTime', "$1:$2:$3 $4$5$6:$7"); } else { - $et->HandleTag($tagTablePtr, $1, $2) while $$dataPt =~ /(\w+):([^:]*[^:\s])(\s|$)/sg; + $et->HandleTag($tagTablePtr, $1, $2) while $text =~ /(\w+):([^:]*[^:\s])(\s|$)/sg; } return 1; } diff --git a/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm b/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm index a7bb271..a7d8ce7 100644 --- a/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +++ b/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm @@ -1349,7 +1349,7 @@ my %tagLookup = ( 'camerae-mountversion' => { 490 => 0xb }, 'cameraelevationangle' => { 124 => 0x9405, 524 => 'CameraElevationAngle' }, 'camerafilename' => { 507 => 'CameraFilename' }, - 'camerafirmware' => { 124 => 0xa439 }, + 'camerafirmware' => { 124 => 0xa439, 524 => 'CameraFirmware' }, 'cameraid' => { 333 => 0x209, 413 => 'cmid', 429 => 0x209 }, 'cameraidentifier' => { 407 => 'camera.identifier' }, 'cameraimage' => { 495 => [\'Cameras','CamerasCameraImage'] }, @@ -3728,8 +3728,8 @@ my %tagLookup = ( 'imagedustoff' => { 300 => 0xfe443a45 }, 'imageeditcount' => { 388 => 0x41 }, 'imageediting' => { 388 => 0x32 }, - 'imageeditingsoftware' => { 124 => 0xa43b }, - 'imageeditor' => { 124 => 0xa438 }, + 'imageeditingsoftware' => { 124 => 0xa43b, 524 => 'ImageEditingSoftware' }, + 'imageeditor' => { 124 => 0xa438, 524 => 'ImageEditor' }, 'imageeffects' => { 420 => 0x1010 }, 'imagefileconstraints' => { 338 => 'ImageFileConstraints' }, 'imagefileformatasdelivered' => { 338 => 'ImageFileFormatAsDelivered' }, @@ -3805,9 +3805,10 @@ my %tagLookup = ( 'imagesuppliername' => { 338 => [\'ImageSupplier','ImageSupplierImageSupplierName'] }, 'imagetemperaturemax' => { 126 => 0x1 }, 'imagetemperaturemin' => { 126 => 0x2 }, + 'imagetitle' => { 124 => 0xa436, 524 => 'ImageTitle' }, 'imagetone' => { 388 => 0x4f }, 'imagetype' => { 136 => 0x82, 338 => 'ImageType' }, - 'imageuniqueid' => { 1 => 0x15, 68 => 0x28, 124 => 0xa420, 522 => 'ImageUniqueID', 523 => 'ImageUniqueID' }, + 'imageuniqueid' => { 1 => 0x15, 68 => 0x28, 124 => 0xa420, 522 => 'ImageUniqueID', 523 => 'ImageUniqueID', 524 => 'ImageUniqueID' }, 'imagewidth' => { 124 => 0x100, 193 => 0xe, 397 => 0x10c, 502 => 'ImageWidth', 542 => 'ImageWidth' }, 'inclinationangle' => { 491 => 0x900f }, 'inclinationcorrection' => { 491 => 0x900e }, @@ -4796,7 +4797,7 @@ my %tagLookup = ( 'metadataauthorityidentifier' => { 531 => [\'metadataAuthority','metadataAuthorityIdentifier'] }, 'metadataauthorityname' => { 531 => [\'metadataAuthority','metadataAuthorityName'] }, 'metadatadate' => { 544 => 'MetadataDate' }, - 'metadataeditingsoftware' => { 124 => 0xa43c }, + 'metadataeditingsoftware' => { 124 => 0xa43c, 524 => 'MetadataEditingSoftware' }, 'metadatalastedited' => { 531 => 'metadataLastEdited' }, 'metadatalasteditor' => { 531 => 'metadataLastEditor' }, 'metadatalasteditoridentifier' => { 531 => [\'metadataLastEditor','metadataLastEditorIdentifier'] }, @@ -5599,7 +5600,7 @@ my %tagLookup = ( 'photoeffectsgreen' => { 302 => 0x6 }, 'photoeffectsred' => { 302 => 0x4 }, 'photoeffectstype' => { 302 => 0x0 }, - 'photographer' => { 124 => 0xa437 }, + 'photographer' => { 124 => 0xa437, 524 => 'Photographer' }, 'photographicsensitivity' => { 524 => 'PhotographicSensitivity' }, 'photoidentifier' => { 1 => 0x2b }, 'photoinfoplayback' => { 307 => '17.6', 316 => '33.6' }, @@ -5946,7 +5947,7 @@ my %tagLookup = ( 'rawdevcolorspace' => { 334 => 0x108, 335 => 0x109 }, 'rawdevcontrastvalue' => { 334 => 0x106, 335 => 0x105 }, 'rawdeveditstatus' => { 334 => 0x10b }, - 'rawdevelopingsoftware' => { 124 => 0xa43a }, + 'rawdevelopingsoftware' => { 124 => 0xa43a, 524 => 'RAWDevelopingSoftware' }, 'rawdevelopmentprocess' => { 388 => 0x62 }, 'rawdevengine' => { 334 => 0x109, 335 => 0x10b }, 'rawdevexposurebiasvalue' => { 334 => 0x100, 335 => 0x100 }, @@ -6940,7 +6941,7 @@ my %tagLookup = ( 'timezoneinfo' => { 105 => 0x2 }, 'timezoneoffset' => { 124 => 0x882a }, 'tint' => { 407 => 'player.movie.visual.tint', 517 => 'Tint', 519 => 'Tint' }, - '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' }, + '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' }, 'togglestyleamount' => { 517 => 'ToggleStyleAmount', 519 => 'ToggleStyleAmount' }, 'togglestyledigest' => { 517 => 'ToggleStyleDigest', 519 => 'ToggleStyleDigest' }, 'tonecomp' => { 241 => 0x81 }, @@ -9742,6 +9743,8 @@ my %tagExists = ( 'gpsframingaltitude' => 1, 'gpsframinglatitude' => 1, 'gpsframinglongitude' => 1, + 'gpshomelatitude' => 1, + 'gpshomelongitude' => 1, 'gpshorizontalaccuracy' => 1, 'gpsinfo' => 1, 'gpslatitude2' => 1, diff --git a/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod b/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod index 836df33..07203df 100644 --- a/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +++ b/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod @@ -12,7 +12,7 @@ meta information extracted from or written to a file. =head1 TAG TABLES The tables listed below give the names of all tags recognized by ExifTool. -They contain a total of 28150 tags, with 17488 unique tag names. +They contain a total of 28165 tags, with 17491 unique tag names. B, B or B is given in the first column of each table. A B is the computer-readable equivalent of a tag name, and @@ -871,7 +871,7 @@ for the official EXIF 2.32 specification. 0xa433 LensMake ExifIFD string 0xa434 LensModel ExifIFD string 0xa435 LensSerialNumber ExifIFD string - 0xa436 Title ExifIFD string/ + 0xa436 ImageTitle ExifIFD string 0xa437 Photographer ExifIFD string 0xa438 ImageEditor ExifIFD string 0xa439 CameraFirmware ExifIFD string @@ -4605,7 +4605,7 @@ These tags belong to the ExifTool XMP-exif family 1 group. GPSTrack rational GPSTrackRef string GPSVersionID string - ImageUniqueID string + ImageUniqueID string/ ISO integer+ LightSource string MakerNote string @@ -4686,6 +4686,7 @@ These tags belong to the ExifTool XMP-exifEX family 1 group. Acceleration rational SerialNumber string CameraElevationAngle rational + CameraFirmware string OwnerName string CompositeImage integer CompositeImageCount integer+ @@ -4702,6 +4703,10 @@ These tags belong to the ExifTool XMP-exifEX family 1 group. CompImageValues rational_+ Gamma rational Humidity rational + ImageEditingSoftware string + ImageEditor string + ImageTitle string + ImageUniqueID string InteropIndex string ISOSpeed integer ISOSpeedLatitudeyyy integer @@ -4710,8 +4715,11 @@ These tags belong to the ExifTool XMP-exifEX family 1 group. LensModel string LensSerialNumber string LensInfo rational+ + MetadataEditingSoftware string + Photographer string PhotographicSensitivity integer Pressure rational + RAWDevelopingSoftware string RecommendedExposureIndex integer SensitivityType integer StandardOutputSensitivity integer @@ -30187,22 +30195,29 @@ changed via the config file. =head3 QuickTime tx3g Tags -Tags extracted from the tx3g sbtl timed metadata of Yuneec drones, and -subtitle text in some other videos. +Tags extracted from the tx3g sbtl timed metadata of Yuneec and Autel drones, +and subtitle text in some other videos. - Tag ID Tag Name Writable - ------ -------- -------- - 'Alt' GPSAltitude no - 'DateTime' DateTime no - 'GimPitch' GimbalPitch no - 'GimRoll' GimbalRoll no - 'GimYaw' GimbalYaw no - 'Lat' GPSLatitude no - 'Lon' GPSLongitude no - 'Pitch' Pitch no - 'Roll' Roll no - 'Text' Text no - 'Yaw' Yaw no + Tag ID Tag Name Writable + ------ -------- -------- + 'Alt' GPSAltitude no + 'DateTime' DateTime no + 'EV' ExposureCompensation no + 'F-NUM' FNumber no + 'GPSDateTime' GPSDateTime no + 'GimPitch' GimbalPitch no + 'GimRoll' GimbalRoll no + 'GimYaw' GimbalYaw no + 'HomeLat' GPSHomeLatitude no + 'HomeLon' GPSHomeLongitude no + 'ISO' ISO no + 'Lat' GPSLatitude no + 'Lon' GPSLongitude no + 'Pitch' Pitch no + 'Roll' Roll no + 'SHUTTER' ExposureTime no + 'Text' Text no + 'Yaw' Yaw no =head3 QuickTime HTCInfo Tags diff --git a/bin/exiftool_files/lib/Image/ExifTool/XMP.pm b/bin/exiftool_files/lib/Image/ExifTool/XMP.pm index 72201f6..defc70b 100644 --- a/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +++ b/bin/exiftool_files/lib/Image/ExifTool/XMP.pm @@ -2016,6 +2016,7 @@ my %sPantryItem = ( Writable => 'integer', List => 'Seq', AutoSplit => 1, + Notes => 'deprecated', }, OECF => { Name => 'Opto-ElectricConvFactor', @@ -2267,7 +2268,7 @@ my %sPantryItem = ( 3 => 'Distant', }, }, - ImageUniqueID => { }, + ImageUniqueID => { Avoid => 1, Notes => 'moved to exifEX namespace in 2024 spec' }, GPSVersionID => { Groups => { 2 => 'Location' } }, GPSLatitude => { Groups => { 2 => 'Location' }, %latConv }, GPSLongitude => { Groups => { 2 => 'Location' }, %longConv }, @@ -2509,6 +2510,15 @@ my %sPantryItem = ( Values => { List => 'Seq', Writable => 'rational' }, }, }, + # new in Exif 3.0 + ImageUniqueID => { }, + ImageTitle => { }, + ImageEditor => { }, + Photographer => { Groups => { 2 => 'Author' } }, + CameraFirmware => { Groups => { 2 => 'Camera' } }, + RAWDevelopingSoftware => { }, + ImageEditingSoftware => { }, + MetadataEditingSoftware => { }, ); # Auxiliary namespace properties (aux) - not fully documented (ref PH) diff --git a/bin/exiftool_files/readme_windows.txt b/bin/exiftool_files/readme_windows.txt index c3326df..276ce5d 100644 --- a/bin/exiftool_files/readme_windows.txt +++ b/bin/exiftool_files/readme_windows.txt @@ -1,21 +1,16 @@ -This ExifTool package is intended to avoid problems of the PAR packed original ExifTool for Windows. +This readme is for the Windows ExifTool package by Oliver Betz. + +This package is intended to avoid problems of the PAR packed original ExifTool for Windows. It consists of: * ExifTool by Phil Harvey https://exiftool.org/ resp. https://github.com/exiftool/exiftool -* Strawberry Perl http://strawberryperl.com/ -* My tiny launcher https://oliverbetz.de/pages/Artikel/ExifTool-for-Windows - -Please note that there can be up to three exiftool scripts in the "exiftool_files" directory: -* exiftool.pl - only this one is called by the launcher -* exiftool - this is from the original ExifTool distribution -* windows_exiftool - this is from the original ExifTool distribution +* Strawberry Perl https://strawberryperl.com/ +* Tiny launcher by Oliver Betz https://oliverbetz.de/pages/Artikel/ExifTool-for-Windows -The small proportion of my own content is licensed under the https://creativecommons.org/publicdomain/zero/1.0/legalcode CC0 license -See https://exiftool.org/ and http://strawberryperl.com/ for the license of ExifTool and Strawberry Perl. +See https://exiftool.org/ and https://strawberryperl.com/ for the license of ExifTool and Strawberry Perl. +The launcher is licensed under the https://creativecommons.org/publicdomain/zero/1.0/legalcode CC0 license I make no warranties about the package, and disclaim liability for all uses of the package, to the fullest extent permitted by applicable law. -Please send useful comments to mailto:ppl@oliverbetz.de - especially if you found bugs or improved something. - -Oliver Betz \ No newline at end of file +Oliver Betz diff --git a/bin/exiftool_files/windows_exiftool.txt b/bin/exiftool_files/windows_exiftool.txt index ab86df2..a3e1e39 100644 --- a/bin/exiftool_files/windows_exiftool.txt +++ b/bin/exiftool_files/windows_exiftool.txt @@ -312,8 +312,8 @@ OPTIONS Write a new value for the specified tag (eg. "-comment=wow"), or delete the tag if no *VALUE* is given (eg. "-comment="). "+=" and "-=" are used to add or remove existing entries from a list, or to - shift date/time values (see Image::ExifTool::Shift.pl and note 6 - below for more details). "+=" may also be used to increment + shift date/time values (see Image::ExifTool::Shift.pl and notes 6 + and 7 below for more details). "+=" may also be used to increment numerical values (or decrement if *VALUE* is negative), and "-=" may be used to conditionally delete or replace a tag (see "WRITING EXAMPLES" for examples). "^=" is used to write an empty string @@ -399,6 +399,10 @@ OPTIONS copy it to another tag in the same operation, use the -globalTimeShift option. + 7) The "+=" operator may not be used to shift a List-type date/time + tag (eg. XMP-dc:Date) because "+=" is used to add elements to the + list. Instead, the -globalTimeShift option should be used. + Special feature: Integer values may be specified in hexadecimal with a leading "0x", and simple rational values may be specified as fractions. @@ -1035,7 +1039,7 @@ OPTIONS produces output like this: - -- Generated by ExifTool 12.99 -- + -- Generated by ExifTool 13.00 -- File: a.jpg - 2003:10:31 15:44:19 (f/5.6, 1/60s, ISO 100) File: b.jpg - 2006:05:23 11:57:38 @@ -1879,8 +1883,8 @@ OPTIONS specified family of groups, with -G1 being the default. The -a option is implied. Adding -v includes a count of the number of tags that are the same in each group. The following text formatting - options are valid when -diff is used: -c, -charset, -d, -E, -L, - -lang, -n, -s, -sep, -struct and -w. + options are valid when -diff is used: -c, -charset, -d, -E, -ec, + -ex, -L, -lang, -n, -s, -sep, -struct and -w. -geotag *TRKFILE* Geotag images from the specified GPS track log file. Using the diff --git a/package.json b/package.json index e0ef456..417b4db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "exiftool-vendored.exe", - "version": "12.99.0", + "version": "13.0.0-pre", "description": "Vendored win32 ExifTool for Node.js", "main": "./index.js", "homepage": "https://github.com/mceachen/exiftool-vendored.exe#readme", @@ -43,8 +43,8 @@ }, "devDependencies": { "axios": "^1.7.7", - "mocha": "^10.7.3", - "npm-check-updates": "^17.1.4", + "mocha": "^10.8.0", + "npm-check-updates": "^17.1.9", "prettier": "^3.3.3", "release-it": "^17.10.0", "unzipper": "^0.12.3",