exiftool-vendored.exe 12.76.0 → 12.78.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.
- package/bin/exiftool_files/Changes +46 -4
- package/bin/exiftool_files/README +3 -3
- package/bin/exiftool_files/config_files/example.config +10 -2
- package/bin/exiftool_files/exiftool.pl +50 -14
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +12 -9
- package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +7 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +52 -4
- package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +237 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/HtmlDump.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +9 -9
- package/bin/exiftool_files/lib/Image/ExifTool/MWG.pm +1 -0
- package/bin/exiftool_files/lib/Image/ExifTool/MacOS.pm +19 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Ogg.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +3 -1
- package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +5 -5
- package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +183 -11
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +253 -237
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +77 -3
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +113 -4
- package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +14 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +9 -8
- package/bin/exiftool_files/lib/Image/ExifTool.pm +163 -38
- package/bin/exiftool_files/lib/Image/ExifTool.pod +44 -25
- package/package.json +3 -3
|
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
48
48
|
use Image::ExifTool::Exif;
|
|
49
49
|
use Image::ExifTool::GPS;
|
|
50
50
|
|
|
51
|
-
$VERSION = '2.
|
|
51
|
+
$VERSION = '2.94';
|
|
52
52
|
|
|
53
53
|
sub ProcessMOV($$;$);
|
|
54
54
|
sub ProcessKeys($$$);
|
|
@@ -58,11 +58,14 @@ sub ProcessEncodingParams($$$);
|
|
|
58
58
|
sub ProcessSampleDesc($$$);
|
|
59
59
|
sub ProcessHybrid($$$);
|
|
60
60
|
sub ProcessRights($$$);
|
|
61
|
+
sub ProcessNextbase($$$);
|
|
61
62
|
# ++vvvvvvvvvvvv++ (in QuickTimeStream.pl)
|
|
62
63
|
sub Process_mebx($$$);
|
|
63
64
|
sub Process_3gf($$$);
|
|
64
65
|
sub Process_gps0($$$);
|
|
65
66
|
sub Process_gsen($$$);
|
|
67
|
+
sub Process_gdat($$$);
|
|
68
|
+
sub Process_nbmt($$$);
|
|
66
69
|
sub ProcessKenwood($$$);
|
|
67
70
|
sub ProcessLIGO_JSON($$$);
|
|
68
71
|
sub ProcessRIFFTrailer($$$);
|
|
@@ -88,6 +91,7 @@ sub UnpackLang($;$);
|
|
|
88
91
|
sub WriteKeys($$$);
|
|
89
92
|
sub WriteQuickTime($$$);
|
|
90
93
|
sub WriteMOV($$);
|
|
94
|
+
sub WriteNextbase($$$);
|
|
91
95
|
sub GetLangInfo($$);
|
|
92
96
|
sub CheckQTValue($$$);
|
|
93
97
|
|
|
@@ -656,6 +660,14 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
656
660
|
Name => 'SensorData', # sensor data for the 360Fly
|
|
657
661
|
Condition => '$$valPt=~/^\xef\xe1\x58\x9a\xbb\x77\x49\xef\x80\x95\x27\x75\x9e\xb1\xdc\x6f/ and $$self{OPTIONS}{ExtractEmbedded}',
|
|
658
662
|
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Tags360Fly' },
|
|
663
|
+
},{
|
|
664
|
+
Name => 'SensorData',
|
|
665
|
+
Condition => '$$valPt=~/^\xef\xe1\x58\x9a\xbb\x77\x49\xef\x80\x95\x27\x75\x9e\xb1\xdc\x6f/',
|
|
666
|
+
Notes => 'raw 360Fly sensor data without ExtractEmbedded option',
|
|
667
|
+
RawConv => q{
|
|
668
|
+
$self->WarnOnce('Use the ExtractEmbedded option to decode timed SensorData',3);
|
|
669
|
+
return \$val;
|
|
670
|
+
},
|
|
659
671
|
},
|
|
660
672
|
{ #https://c2pa.org/specifications/
|
|
661
673
|
Name => 'JUMBF',
|
|
@@ -685,18 +697,9 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
685
697
|
Start => 27,
|
|
686
698
|
},
|
|
687
699
|
},
|
|
688
|
-
{
|
|
689
|
-
Name => 'SensorData',
|
|
690
|
-
Condition => '$$valPt=~/^\xef\xe1\x58\x9a\xbb\x77\x49\xef\x80\x95\x27\x75\x9e\xb1\xdc\x6f/',
|
|
691
|
-
Notes => 'raw 360Fly sensor data without ExtractEmbedded option',
|
|
692
|
-
RawConv => q{
|
|
693
|
-
$self->WarnOnce('Use the ExtractEmbedded option to decode timed SensorData',3);
|
|
694
|
-
return \$val;
|
|
695
|
-
},
|
|
696
|
-
},
|
|
697
700
|
{ #PH (Canon CR3)
|
|
698
701
|
Name => 'PreviewImage',
|
|
699
|
-
Condition => '$$valPt=~/^\xea\xf4\x2b\x5e\x1c\x98\x4b\x88\xb9\xfb\xb7\xdc\x40\x6e\x4d\x16/',
|
|
702
|
+
Condition => '$$valPt=~/^\xea\xf4\x2b\x5e\x1c\x98\x4b\x88\xb9\xfb\xb7\xdc\x40\x6e\x4d\x16.{32}/s',
|
|
700
703
|
Groups => { 2 => 'Preview' },
|
|
701
704
|
PreservePadding => 1,
|
|
702
705
|
# 0x00 - undef[16]: UUID
|
|
@@ -711,6 +714,25 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
711
714
|
# 0x3c - int32u: preview length
|
|
712
715
|
RawConv => '$val = substr($val, 0x30); $self->ValidateImage(\$val, $tag)',
|
|
713
716
|
},
|
|
717
|
+
{ #PH (Garmin MP4)
|
|
718
|
+
Name => 'ThumbnailImage',
|
|
719
|
+
Condition => '$$valPt=~/^\x11\x6e\x40\xdc\xb1\x86\x46\xe4\x84\x7c\xd9\xc0\xc3\x49\x10\x81.{8}\xff\xd8\xff/s',
|
|
720
|
+
Groups => { 2 => 'Preview' },
|
|
721
|
+
Binary => 1,
|
|
722
|
+
# 0x00 - undef[16]: UUID
|
|
723
|
+
# 0x10 - int32u[2]: ThumbnailLength
|
|
724
|
+
# 0x14 - int16u[2]: width/height of image (160/120)
|
|
725
|
+
RawConv => q{
|
|
726
|
+
my $len = Get32u(\$val, 0x10);
|
|
727
|
+
return undef unless length($val) >= $len + 0x18;
|
|
728
|
+
return substr($val, 0x18, $len);
|
|
729
|
+
},
|
|
730
|
+
},
|
|
731
|
+
# also seen 120-byte record in Garmin MP4's, starting like this (model name at byte 9):
|
|
732
|
+
# 0000: 47 52 4d 4e 00 00 00 01 00 44 43 35 37 00 00 00 [GRMN.....DC57...]
|
|
733
|
+
# 0000: 47 52 4d 4e 00 00 00 01 00 44 43 36 36 57 00 00 [GRMN.....DC66W..]
|
|
734
|
+
# and this in Garmin, followed by 8 bytes of 0's:
|
|
735
|
+
# 0000: db 11 98 3d 8f 65 43 8c bb b8 e1 ac 56 fe 6b 04
|
|
714
736
|
{ #8
|
|
715
737
|
Name => 'UUID-Unknown',
|
|
716
738
|
%unknownInfo,
|
|
@@ -835,6 +857,20 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
835
857
|
},
|
|
836
858
|
# gpsa - seen hex "01 20 00 00" (DuDuBell M1, VSYS M6L)
|
|
837
859
|
# gsea - 20 bytes hex "05 00's..." (DuDuBell M1) "05 08 02 01 ..." (VSYS M6L)
|
|
860
|
+
gdat => { # Base64-encoded JSON-format timed GPS (Nextbase software)
|
|
861
|
+
Name => 'GPSData',
|
|
862
|
+
SubDirectory => {
|
|
863
|
+
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
|
864
|
+
ProcessProc => \&Process_gdat,
|
|
865
|
+
},
|
|
866
|
+
},
|
|
867
|
+
nbmt => { # (Nextbase)
|
|
868
|
+
Name => 'NextbaseMeta',
|
|
869
|
+
SubDirectory => {
|
|
870
|
+
TagTable => 'Image::ExifTool::QuickTime::Stream',
|
|
871
|
+
ProcessProc => \&Process_nbmt,
|
|
872
|
+
},
|
|
873
|
+
},
|
|
838
874
|
'GPS ' => { # GPS data written by 70mai dashcam (parsed in QuickTimeStream.pl)
|
|
839
875
|
Name => 'GPSDataList2',
|
|
840
876
|
Unknown => 1,
|
|
@@ -2090,8 +2126,21 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
2090
2126
|
Condition => '$$valPt =~ /^VIRBactioncamera/',
|
|
2091
2127
|
RawConv => 'substr($val, 16)',
|
|
2092
2128
|
RawConvInv => '"VIRBactioncamera$val"',
|
|
2129
|
+
},{
|
|
2130
|
+
Name => 'GarminModel', # (NC)
|
|
2131
|
+
Condition => '$$valPt =~ /^\xf7\x6c\xd7\x6a\x07\x5b\x4a\x1e\xb3\x1c\x0e\x7f\xab\x7e\x09\xd4/',
|
|
2132
|
+
Writable => 0,
|
|
2133
|
+
RawConv => q{
|
|
2134
|
+
return undef unless length($val) > 25;
|
|
2135
|
+
my $len = unpack('x24C', $val);
|
|
2136
|
+
return undef unless length($val) >= 25 + $len;
|
|
2137
|
+
return substr($val, 25, $len);
|
|
2138
|
+
},
|
|
2093
2139
|
},{
|
|
2094
2140
|
# have seen "28 f3 11 e2 b7 91 4f 6f 94 e2 4f 5d ea cb 3c 01" for RicohThetaZ1 accelerometer RADT data (not yet decoded)
|
|
2141
|
+
# also seen in Garmin MP4:
|
|
2142
|
+
# 51 0b 63 46 6c fd 4a 17 87 42 ea c9 ea ae b3 bd - seems to contain a duplicate of the trak atom
|
|
2143
|
+
# b3 e8 21 f4 fe 33 4e 10 8f 92 f5 e1 d4 36 c9 8a - 8 bytes of zeros
|
|
2095
2144
|
Name => 'UUID-Unknown',
|
|
2096
2145
|
Writable => 0,
|
|
2097
2146
|
%unknownInfo,
|
|
@@ -2399,6 +2448,30 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
2399
2448
|
Groups => { 2 => 'Preview' },
|
|
2400
2449
|
Binary => 1,
|
|
2401
2450
|
},
|
|
2451
|
+
# ---- Nextbase ----
|
|
2452
|
+
info => 'FirmwareVersion',
|
|
2453
|
+
'time' => {
|
|
2454
|
+
Name => 'TimeStamp',
|
|
2455
|
+
Format => 'int32u', # (followed by 4 unknown bytes 00 0d 00 00)
|
|
2456
|
+
Writable => 0,
|
|
2457
|
+
Groups => { 2 => 'Time' },
|
|
2458
|
+
ValueConv => '$val =~ s/ .*//; ConvertUnixTime($val)',
|
|
2459
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
|
2460
|
+
},
|
|
2461
|
+
infi => {
|
|
2462
|
+
Name => 'CameraInfo',
|
|
2463
|
+
SubDirectory => { TagTable => 'Image::ExifTool::QuickTime::Nextbase' },
|
|
2464
|
+
},
|
|
2465
|
+
finm => {
|
|
2466
|
+
Name => 'OriginalFileName',
|
|
2467
|
+
Writable => 0,
|
|
2468
|
+
},
|
|
2469
|
+
# AMBA ? - (133 bytes)
|
|
2470
|
+
# nbpl ? - "FP-433-KC"
|
|
2471
|
+
nbpl => { Name => 'Unknown_nbpl', Unknown => 1, Hidden => 1 },
|
|
2472
|
+
# maca ? - b8 2d 28 15 f1 48
|
|
2473
|
+
# sern ? - 0d 69 42 74
|
|
2474
|
+
# nbid ? - 0d 69 42 74 65 df 72 65 03 de c0 fb 01 01 00 00
|
|
2402
2475
|
# ---- Unknown ----
|
|
2403
2476
|
# CDET - 128 bytes (unknown origin)
|
|
2404
2477
|
# mtyp - 4 bytes all zero (some drone video)
|
|
@@ -8087,6 +8160,88 @@ my %isImageData = ( av01 => 1, avc1 => 1, hvc1 => 1, lhv1 => 1, hvt1 => 1 );
|
|
|
8087
8160
|
},
|
|
8088
8161
|
);
|
|
8089
8162
|
|
|
8163
|
+
# Nextbase tags (ref PH)
|
|
8164
|
+
%Image::ExifTool::QuickTime::Nextbase = (
|
|
8165
|
+
GROUPS => { 1 => 'Nextbase', 2 => 'Camera' },
|
|
8166
|
+
PROCESS_PROC => \&ProcessNextbase,
|
|
8167
|
+
WRITE_PROC => \&WriteNextbase,
|
|
8168
|
+
VARS => { LONG_TAGS => 3 },
|
|
8169
|
+
NOTES => q{
|
|
8170
|
+
Tags found in 'infi' atom from some Nextbase videos. As well as these tags,
|
|
8171
|
+
other existing tags are also extracted. These tags are not currently
|
|
8172
|
+
writable but they may all be removed by deleting the Nextbase group.
|
|
8173
|
+
},
|
|
8174
|
+
'Wi-Fi SSID' => { },
|
|
8175
|
+
'Wi-Fi Password' => { },
|
|
8176
|
+
'Wi-Fi MAC Address' => { },
|
|
8177
|
+
'Model' => { },
|
|
8178
|
+
'Firmware' => { },
|
|
8179
|
+
'Serial No' => { Name => 'SerialNumber' },
|
|
8180
|
+
'FCC-ID' => { },
|
|
8181
|
+
'Battery Status' => { },
|
|
8182
|
+
'SD Card Manf ID' => { },
|
|
8183
|
+
'SD Card OEM ID' => { },
|
|
8184
|
+
'SD Card Model No' => { },
|
|
8185
|
+
'SD Card Serial No' => { },
|
|
8186
|
+
'SD Card Manf Date' => { },
|
|
8187
|
+
'SD Card Type' => { },
|
|
8188
|
+
'SD Card Used Space' => { },
|
|
8189
|
+
'SD Card Class' => { },
|
|
8190
|
+
'SD Card Size' => { },
|
|
8191
|
+
'SD Card Format' => { },
|
|
8192
|
+
'Wi-Fi SSID' => { },
|
|
8193
|
+
'Wi-Fi Password' => { },
|
|
8194
|
+
'Wi-Fi MAC Address' => { },
|
|
8195
|
+
'Bluetooth Name' => { },
|
|
8196
|
+
'Bluetooth MAC Address' => { },
|
|
8197
|
+
'Resolution' => { },
|
|
8198
|
+
'Exposure' => { },
|
|
8199
|
+
'Video Length' => { },
|
|
8200
|
+
'Audio' => { },
|
|
8201
|
+
'Time Stamp' => { Name => 'VideoTimeStamp' },
|
|
8202
|
+
'Speed Stamp' => { },
|
|
8203
|
+
'GPS Stamp' => { },
|
|
8204
|
+
'Model Stamp' => { },
|
|
8205
|
+
'Dual Files' => { },
|
|
8206
|
+
'Time Lapse' => { },
|
|
8207
|
+
'Number / License Plate' => { },
|
|
8208
|
+
'G Sensor' => { },
|
|
8209
|
+
'Image Stabilisation' => { },
|
|
8210
|
+
'Extreme Weather Mode' => { },
|
|
8211
|
+
'Screen Saver' => { },
|
|
8212
|
+
'Alerts' => { },
|
|
8213
|
+
'Recording History' => { },
|
|
8214
|
+
'Parking Mode' => { },
|
|
8215
|
+
'Language' => { },
|
|
8216
|
+
'Country' => { },
|
|
8217
|
+
'Time Zone / DST' => { Groups => { 2 => 'Time' } },
|
|
8218
|
+
'Time & Date' => { Name => 'TimeAndDate', Groups => { 2 => 'Time' } },
|
|
8219
|
+
'Speed Units' => { },
|
|
8220
|
+
'Device Sounds' => { },
|
|
8221
|
+
'Screen Dimming' => { },
|
|
8222
|
+
'Auto Power Off' => { },
|
|
8223
|
+
'Keep User Settings' => { },
|
|
8224
|
+
'System Info' => { },
|
|
8225
|
+
'Format SD Card' => { },
|
|
8226
|
+
'Default Settings' => { },
|
|
8227
|
+
'Emergency SOS' => { },
|
|
8228
|
+
'Reversing Camera' => { },
|
|
8229
|
+
'what3words' => { Name => 'What3Words' },
|
|
8230
|
+
'MyNextbase - Pairing' => { },
|
|
8231
|
+
'MyNextbase - Paired Device Name' => { },
|
|
8232
|
+
'Alexa' => { },
|
|
8233
|
+
'Alexa - Pairing' => { },
|
|
8234
|
+
'Alexa - Paired Device Name' => { },
|
|
8235
|
+
'Alexa - Privacy Mode' => { },
|
|
8236
|
+
'Alexa - Wake Word Language' => { },
|
|
8237
|
+
'Firmware Version' => { },
|
|
8238
|
+
'RTOS' => { },
|
|
8239
|
+
'Linux' => { },
|
|
8240
|
+
'NBCD' => { },
|
|
8241
|
+
'Alexa' => { },
|
|
8242
|
+
'2nd Cam' => { Name => 'SecondCam' },
|
|
8243
|
+
);
|
|
8244
|
+
|
|
8090
8245
|
# QuickTime composite tags
|
|
8091
8246
|
%Image::ExifTool::QuickTime::Composite = (
|
|
8092
8247
|
GROUPS => { 2 => 'Video' },
|
|
@@ -9149,6 +9304,23 @@ sub ProcessRights($$$)
|
|
|
9149
9304
|
return 1;
|
|
9150
9305
|
}
|
|
9151
9306
|
|
|
9307
|
+
#------------------------------------------------------------------------------
|
|
9308
|
+
# Process Nextbase 'infi' atom (ref PH)
|
|
9309
|
+
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
9310
|
+
# Returns: 1 on success
|
|
9311
|
+
sub ProcessNextbase($$$)
|
|
9312
|
+
{
|
|
9313
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
9314
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
9315
|
+
$et->VerboseDir('Nextbase', undef, length($$dataPt));
|
|
9316
|
+
while ($$dataPt =~ /(.*?): +(.*)\x0d/g) {
|
|
9317
|
+
my ($id, $val) = ($1, $2);
|
|
9318
|
+
$$tagTbl{$id} or AddTagToTable($tagTbl, $id, { Name => Image::ExifTool::MakeTagName($id) });
|
|
9319
|
+
$et->HandleTag($tagTbl, $id, $val, Size => length($val));
|
|
9320
|
+
}
|
|
9321
|
+
return 1;
|
|
9322
|
+
}
|
|
9323
|
+
|
|
9152
9324
|
#------------------------------------------------------------------------------
|
|
9153
9325
|
# Process iTunes Encoding Params (ref PH)
|
|
9154
9326
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|