exiftool-vendored.exe 12.97.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.
- package/bin/exiftool_files/exiftool.pl +221 -41
- package/bin/exiftool_files/lib/File/RandomAccess.pm +5 -2
- package/bin/exiftool_files/lib/Image/ExifTool/APP12.pm +3 -2
- package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +1 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -3
- package/bin/exiftool_files/lib/Image/ExifTool/Import.pm +7 -3
- package/bin/exiftool_files/lib/Image/ExifTool/InDesign.pm +4 -3
- package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +3 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/Lytro.pm +2 -2
- package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +10 -2
- package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +2 -1
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +17 -6
- package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +88 -9
- package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +6 -1
- package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +14 -9
- package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +40 -23
- package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +47 -21
- package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +16 -4
- package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +16 -6
- package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +19 -4
- package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +15 -7
- package/bin/exiftool_files/lib/Image/ExifTool.pm +37 -12
- package/bin/exiftool_files/lib/Image/ExifTool.pod +31 -8
- package/bin/exiftool_files/readme_windows.txt +8 -13
- package/bin/exiftool_files/windows_exiftool.txt +32 -10
- package/package.json +7 -7
|
@@ -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.
|
|
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 => '
|
|
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',
|
|
@@ -328,6 +328,14 @@ sub ParsePID($$$$$)
|
|
|
328
328
|
$more = 1; # read past unknown 0x15 packets if ExtractEmbedded > 2
|
|
329
329
|
}
|
|
330
330
|
}
|
|
331
|
+
# still have a lot of questions about how to decode this...
|
|
332
|
+
# (see https://exiftool.org/forum/index.php?topic=16486 and ../testpics/gps_video/forum16486.ts)
|
|
333
|
+
# } elsif ($type == 6) {
|
|
334
|
+
# my @a = unpack('x17x2NNx2nx2nx2nx2Cx2a4x2a5x2Nx2Nx2nx2Nx2Nx2Nx2nx2nx2Nx2nx2n', $$dataPt . " ");
|
|
335
|
+
# my $hi = shift @a;
|
|
336
|
+
# $a[0] = Image::ExifTool::ConvertUnixTime(($a[0] + $hi * 4294967296) * 1e-6, undef, 6);
|
|
337
|
+
# print "@a\n";
|
|
338
|
+
# $more = 1;
|
|
331
339
|
} elsif ($type < 0) {
|
|
332
340
|
if ($$dataPt =~ /^(.{164})?(.{24})A[NS][EW]/s) {
|
|
333
341
|
# (Blueskysea B4K, Novatek NT96670)
|
|
@@ -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.
|
|
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)
|
|
@@ -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 = '3.
|
|
51
|
+
$VERSION = '3.04';
|
|
52
52
|
|
|
53
53
|
sub ProcessMOV($$;$);
|
|
54
54
|
sub ProcessKeys($$$);
|
|
@@ -901,6 +901,7 @@ my %userDefined = (
|
|
|
901
901
|
Writable => 1,
|
|
902
902
|
},
|
|
903
903
|
# '35AX'? - seen "AT" (Yada RoadCam Pro 4K dashcam)
|
|
904
|
+
cust => 'CustomInfo', # 70mai A810
|
|
904
905
|
);
|
|
905
906
|
|
|
906
907
|
# stuff seen in 'skip' atom (70mai Pro Plus+ MP4 videos)
|
|
@@ -935,6 +936,7 @@ my %userDefined = (
|
|
|
935
936
|
2 => {
|
|
936
937
|
Name => 'CompatibleBrands',
|
|
937
938
|
Format => 'undef[$size-8]',
|
|
939
|
+
List => 1, # (for documentation only)
|
|
938
940
|
# ignore any entry with a null, and return others as a list
|
|
939
941
|
ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a',
|
|
940
942
|
},
|
|
@@ -2551,7 +2553,7 @@ my %userDefined = (
|
|
|
2551
2553
|
TTID => { Name => 'TomTomID', ValueConv => 'unpack("x4H*",$val)' },
|
|
2552
2554
|
TTVI => { Name => 'TomTomVI', Format => 'int32u', Unknown => 1 }, # seen: "0 1 61 508 508"
|
|
2553
2555
|
# TTVD seen: "normal 720p 60fps 60fps 16/9 wide 1x"
|
|
2554
|
-
TTVD => { Name => 'TomTomVD', ValueConv => 'my @a = ($val =~ /[\x20-\x7f]+/g); "@a"' },
|
|
2556
|
+
TTVD => { Name => 'TomTomVD', ValueConv => 'my @a = ($val =~ /[\x20-\x7f]+/g); "@a"', List => 1 },
|
|
2555
2557
|
);
|
|
2556
2558
|
|
|
2557
2559
|
# User-specific media data atoms (ref 11)
|
|
@@ -3350,6 +3352,7 @@ my %userDefined = (
|
|
|
3350
3352
|
PrintConv => '"Track $val"',
|
|
3351
3353
|
},
|
|
3352
3354
|
# cdep (Structural Dependency QT tag?)
|
|
3355
|
+
# fall - ? int32u, seen: 2
|
|
3353
3356
|
);
|
|
3354
3357
|
|
|
3355
3358
|
# track aperture mode dimensions atoms
|
|
@@ -6743,6 +6746,13 @@ my %userDefined = (
|
|
|
6743
6746
|
Avoid => 1,
|
|
6744
6747
|
%iso8601Date,
|
|
6745
6748
|
},
|
|
6749
|
+
# (mdta)com.apple.quicktime.scene-illuminance
|
|
6750
|
+
'scene-illuminance' => {
|
|
6751
|
+
Name => 'SceneIlluminance',
|
|
6752
|
+
Notes => 'milli-lux',
|
|
6753
|
+
ValueConv => 'unpack("N", $val)',
|
|
6754
|
+
Writable => 0, # (don't make this writable because it is found in timed metadata)
|
|
6755
|
+
},
|
|
6746
6756
|
#
|
|
6747
6757
|
# seen in Apple ProRes RAW file
|
|
6748
6758
|
#
|
|
@@ -7392,6 +7402,7 @@ my %userDefined = (
|
|
|
7392
7402
|
# alac - 28 bytes
|
|
7393
7403
|
# adrm - AAX DRM atom? 148 bytes
|
|
7394
7404
|
# aabd - AAX unknown 17kB (contains 'aavd' strings)
|
|
7405
|
+
# dapa - ? 203 bytes
|
|
7395
7406
|
);
|
|
7396
7407
|
|
|
7397
7408
|
# AMR decode config box (ref 3)
|
|
@@ -9151,7 +9162,7 @@ sub HandleItemInfo($)
|
|
|
9151
9162
|
$et->ProcessDirectory(\%dirInfo, $subTable, $proc);
|
|
9152
9163
|
delete $$et{DOC_NUM};
|
|
9153
9164
|
}
|
|
9154
|
-
$raf->Seek($curPos, 0); # seek back to original position
|
|
9165
|
+
$raf->Seek($curPos, 0) or $et->Warn('Seek error'), last; # seek back to original position
|
|
9155
9166
|
pop @{$$et{PATH}};
|
|
9156
9167
|
}
|
|
9157
9168
|
# process the item properties now that we should know their associations and document numbers
|
|
@@ -9577,7 +9588,7 @@ sub ProcessMOV($$;$)
|
|
|
9577
9588
|
if ($tag eq 'ftyp' and $size >= 12) {
|
|
9578
9589
|
# read ftyp atom to see what type of file this is
|
|
9579
9590
|
if ($raf->Read($buff, $size-8) == $size-8) {
|
|
9580
|
-
$raf->Seek(-($size-8), 1);
|
|
9591
|
+
$raf->Seek(-($size-8), 1) or $et->Warn('Seek error'), return 0;
|
|
9581
9592
|
my $type = substr($buff, 0, 4);
|
|
9582
9593
|
$$et{save_ftyp} = $type;
|
|
9583
9594
|
# see if we know the extension for this file type
|
|
@@ -9629,7 +9640,7 @@ sub ProcessMOV($$;$)
|
|
|
9629
9640
|
# a zero size isn't legal for contained atoms, but Canon uses it to
|
|
9630
9641
|
# terminate the CNTH atom (eg. CanonEOS100D.mov), so tolerate it here
|
|
9631
9642
|
my $pos = $raf->Tell() - 4;
|
|
9632
|
-
$raf->Seek(0,2);
|
|
9643
|
+
$raf->Seek(0,2) or $et->Warn('Seek error'), return 0;
|
|
9633
9644
|
my $str = $$dirInfo{DirName} . ' with ' . ($raf->Tell() - $pos) . ' bytes';
|
|
9634
9645
|
$et->VPrint(0,"$$et{INDENT}\[Terminator found in $str remaining]");
|
|
9635
9646
|
} else {
|
|
@@ -9638,7 +9649,7 @@ sub ProcessMOV($$;$)
|
|
|
9638
9649
|
if ($$tagTablePtr{"$tag-size"}) {
|
|
9639
9650
|
my $pos = $raf->Tell();
|
|
9640
9651
|
unless ($fast) {
|
|
9641
|
-
$raf->Seek(0, 2);
|
|
9652
|
+
$raf->Seek(0, 2) or $et->Warn('Seek error'), return 0;
|
|
9642
9653
|
$et->HandleTag($tagTablePtr, "$tag-size", $raf->Tell() - $pos);
|
|
9643
9654
|
}
|
|
9644
9655
|
$et->HandleTag($tagTablePtr, "$tag-offset", $pos) if $$tagTablePtr{"$tag-offset"};
|
|
@@ -109,7 +109,7 @@ my %insvLimit = (
|
|
|
109
109
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
110
110
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
111
111
|
most of these tags are combined into the single table below, ExifTool
|
|
112
|
-
currently reads
|
|
112
|
+
currently reads 78 different formats of timed GPS metadata from video files.
|
|
113
113
|
},
|
|
114
114
|
VARS => { NO_ID => 1 },
|
|
115
115
|
GPSLatitude => { PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")', RawConv => '$$self{FoundGPSLatitude} = 1; $val' },
|
|
@@ -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,
|
|
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 = (
|
|
@@ -2163,9 +2189,26 @@ ATCRec: for ($recPos = 0x30; $recPos + 52 < $dirLen; $recPos += 52) {
|
|
|
2163
2189
|
push(@xtra, $1 => $2), next;
|
|
2164
2190
|
}
|
|
2165
2191
|
|
|
2192
|
+
} elsif ($$dataPt =~ m/^.{30}A.{20}VV/) {
|
|
2193
|
+
|
|
2194
|
+
$debug and $et->FoundTag(GPSType => 17);
|
|
2195
|
+
# 70mai A810 dashcam (note: no timestamps in the samples I have)
|
|
2196
|
+
# 0000: 00 00 40 00 66 72 65 65 47 50 53 20 ed 01 00 00 [..@.freeGPS ....]
|
|
2197
|
+
# 0010: 03 00 ed 01 00 00 00 0f 00 00 70 08 00 00 41 66 [..........p...Af]
|
|
2198
|
+
# 0020: 13 7d 1e 3c 11 dc 03 5d 01 00 00 01 00 00 00 23 [.}.<...].......#]
|
|
2199
|
+
# 0030: 00 00 00 56 56 00 00 00 00 00 00 00 00 00 00 00 [...VV...........]
|
|
2200
|
+
# 0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [................]
|
|
2201
|
+
SetByteOrder('II');
|
|
2202
|
+
SetGPSDateTime($et, $tagTbl, $$dirInfo{SampleTime});
|
|
2203
|
+
$lat = Get32s($dataPt, 31) / 1e5;
|
|
2204
|
+
$lon = Get32s($dataPt, 35) / 1e5;
|
|
2205
|
+
$spd = Get32s($dataPt, 43); # (seems to be km/h but not confirmed)
|
|
2206
|
+
# offset 475 - int16u=N string[N] - some sort of settings?:
|
|
2207
|
+
# eg. "\x15\x00{pA:V,rA:V,sF:0,tF:2}"
|
|
2208
|
+
|
|
2166
2209
|
} else {
|
|
2167
2210
|
|
|
2168
|
-
$debug and $et->FoundTag(GPSType =>
|
|
2211
|
+
$debug and $et->FoundTag(GPSType => 18);
|
|
2169
2212
|
# (look for binary GPS as stored by Nextbase 512G, ref PH)
|
|
2170
2213
|
# 0000: 00 00 80 00 66 72 65 65 47 50 53 20 78 01 00 00 [....freeGPS x...]
|
|
2171
2214
|
# 0010: 78 2e 78 78 00 00 00 00 00 00 00 00 00 00 00 00 [x.xx............]
|
|
@@ -2344,7 +2387,7 @@ sub ParseTag($$$)
|
|
|
2344
2387
|
}
|
|
2345
2388
|
|
|
2346
2389
|
#------------------------------------------------------------------------------
|
|
2347
|
-
# Process Yuneec 'tx3g' sbtl metadata (ref PH)
|
|
2390
|
+
# Process Yuneec 'tx3g' and Autel sbtl metadata (ref PH)
|
|
2348
2391
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
|
2349
2392
|
# Returns: 1 on success
|
|
2350
2393
|
sub Process_tx3g($$$)
|
|
@@ -2352,13 +2395,49 @@ sub Process_tx3g($$$)
|
|
|
2352
2395
|
my ($et, $dirInfo, $tagTablePtr) = @_;
|
|
2353
2396
|
my $dataPt = $$dirInfo{DataPt};
|
|
2354
2397
|
return 0 if length $$dataPt < 2;
|
|
2355
|
-
pos($$dataPt) = 2; # skip 2-byte length word
|
|
2356
2398
|
$et->VerboseDir('tx3g', undef, length($$dataPt)-2);
|
|
2357
|
-
$
|
|
2358
|
-
|
|
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) {
|
|
2359
2438
|
$et->HandleTag($tagTablePtr, 'DateTime', "$1:$2:$3 $4$5$6:$7");
|
|
2360
2439
|
} else {
|
|
2361
|
-
$et->HandleTag($tagTablePtr, $1, $2) while
|
|
2440
|
+
$et->HandleTag($tagTablePtr, $1, $2) while $text =~ /(\w+):([^:]*[^:\s])(\s|$)/sg;
|
|
2362
2441
|
}
|
|
2363
2442
|
return 1;
|
|
2364
2443
|
}
|
|
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
34
34
|
use Image::ExifTool::Exif;
|
|
35
35
|
use Image::ExifTool::Minolta;
|
|
36
36
|
|
|
37
|
-
$VERSION = '3.
|
|
37
|
+
$VERSION = '3.70';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -170,6 +170,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
170
170
|
32885 => 'Sony FE 16-35mm F2.8 GM II', #JR
|
|
171
171
|
32886 => 'Sony FE 300mm F2.8 GM OSS', #JR
|
|
172
172
|
32887 => 'Sony E PZ 16-50mm F3.5-5.6 OSS II', #JR
|
|
173
|
+
32888 => 'Sony FE 85mm F1.4 GM II', #JR
|
|
173
174
|
|
|
174
175
|
# (comment this out so LensID will report the LensModel, which is more useful)
|
|
175
176
|
# 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
|
|
@@ -241,6 +242,8 @@ sub PrintInvLensSpec($;$$);
|
|
|
241
242
|
49474.9 => 'Viltrox 75mm F1.2 E', #JR
|
|
242
243
|
'49474.10' => 'Viltrox 20mm F2.8 FE', #JR
|
|
243
244
|
49475 => 'Tamron 50-300mm F4.5-6.3 Di III VC VXD', #JR (Model A069)
|
|
245
|
+
49476 => 'Tamron 28-300mm F4-7.1 Di III VC VXD', #JR (Model A074)
|
|
246
|
+
49477 => 'Tamron 90mm F2.8 Di III Macro VXD', #JR (Model F072)
|
|
244
247
|
|
|
245
248
|
49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
|
|
246
249
|
49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
|
|
@@ -299,6 +302,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
299
302
|
50547 => 'Sigma 10-18mm F2.8 DC DN | C', #JR (023)
|
|
300
303
|
50548 => 'Sigma 15mm F1.4 DG DN DIAGONAL FISHEYE | A', #JR (024)
|
|
301
304
|
50549 => 'Sigma 50mm F1.2 DG DN | A', #JR (024)
|
|
305
|
+
50550 => 'Sigma 28-105mm F2.8 DG DN | A', #JR (024)
|
|
302
306
|
50551 => 'Sigma 28-45mm F1.8 DG DN | A', #JR (024)
|
|
303
307
|
|
|
304
308
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
|
@@ -315,6 +319,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
315
319
|
51003 => 'Voigtlander NOKTON 35mm F1.2 Aspherical SE', #JR
|
|
316
320
|
51006 => 'Voigtlander APO-LANTHAR 35mm F2 Aspherical', #JR
|
|
317
321
|
51007 => 'Voigtlander NOKTON 50mm F1 Aspherical', #JR
|
|
322
|
+
51008 => 'Voigtlander NOKTON 75mm F1.5 Aspherical', #JR
|
|
318
323
|
|
|
319
324
|
# lenses listed in the Sigma MC-11 list, but not yet seen:
|
|
320
325
|
# 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
|
|
@@ -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' => {
|
|
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 },
|
|
@@ -8686,7 +8687,6 @@ my %tagExists = (
|
|
|
8686
8687
|
'cont' => 1,
|
|
8687
8688
|
'contactnames' => 1,
|
|
8688
8689
|
'containerversion' => 1,
|
|
8689
|
-
'contake' => 1,
|
|
8690
8690
|
'contentbranding' => 1,
|
|
8691
8691
|
'contentdescribes' => 1,
|
|
8692
8692
|
'contentdescription' => 1,
|
|
@@ -8709,6 +8709,7 @@ my %tagExists = (
|
|
|
8709
8709
|
'contrastadjustment' => 1,
|
|
8710
8710
|
'contrastinfo' => 1,
|
|
8711
8711
|
'controller' => 1,
|
|
8712
|
+
'conttake' => 1,
|
|
8712
8713
|
'convergenceangle' => 1,
|
|
8713
8714
|
'convergencebaseimage' => 1,
|
|
8714
8715
|
'convergencedistance' => 1,
|
|
@@ -8820,6 +8821,7 @@ my %tagExists = (
|
|
|
8820
8821
|
'customfunctionsd30' => 1,
|
|
8821
8822
|
'customfunctionsd60' => 1,
|
|
8822
8823
|
'customfunctionsunknown' => 1,
|
|
8824
|
+
'custominfo' => 1,
|
|
8823
8825
|
'customsettingsd3' => 1,
|
|
8824
8826
|
'customsettingsd300' => 1,
|
|
8825
8827
|
'customsettingsd300s' => 1,
|
|
@@ -9741,6 +9743,8 @@ my %tagExists = (
|
|
|
9741
9743
|
'gpsframingaltitude' => 1,
|
|
9742
9744
|
'gpsframinglatitude' => 1,
|
|
9743
9745
|
'gpsframinglongitude' => 1,
|
|
9746
|
+
'gpshomelatitude' => 1,
|
|
9747
|
+
'gpshomelongitude' => 1,
|
|
9744
9748
|
'gpshorizontalaccuracy' => 1,
|
|
9745
9749
|
'gpsinfo' => 1,
|
|
9746
9750
|
'gpslatitude2' => 1,
|
|
@@ -12014,6 +12018,7 @@ my %tagExists = (
|
|
|
12014
12018
|
'scenebalancealgorithmrevision' => 1,
|
|
12015
12019
|
'sceneclassification' => 1,
|
|
12016
12020
|
'scenecolorimetryestimates' => 1,
|
|
12021
|
+
'sceneilluminance' => 1,
|
|
12017
12022
|
'scheduleitemid' => 1,
|
|
12018
12023
|
'schemeinfo' => 1,
|
|
12019
12024
|
'schemetype' => 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
|
|
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
|
|
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
|
|
@@ -26108,7 +26116,7 @@ the image undisplayable.
|
|
|
26108
26116
|
------ -------- --------
|
|
26109
26117
|
0 MajorBrand no
|
|
26110
26118
|
1 MinorVersion no
|
|
26111
|
-
2 CompatibleBrands no
|
|
26119
|
+
2 CompatibleBrands no+
|
|
26112
26120
|
|
|
26113
26121
|
=head3 Jpeg2000 ImageHeader Tags
|
|
26114
26122
|
|
|
@@ -26163,7 +26171,7 @@ from any tags found in this segment.
|
|
|
26163
26171
|
------ -------- --------
|
|
26164
26172
|
'Aperture' Aperture no
|
|
26165
26173
|
'ColorMode' ColorMode no
|
|
26166
|
-
'
|
|
26174
|
+
'ContTake' ContTake no
|
|
26167
26175
|
'ExpBias' ExposureCompensation no
|
|
26168
26176
|
'FNumber' FNumber no
|
|
26169
26177
|
'FWare' FirmwareVersion no
|
|
@@ -29846,6 +29854,7 @@ for the official QuickTime specification.
|
|
|
29846
29854
|
'PICT' PreviewPICT no
|
|
29847
29855
|
'_htc' HTCInfo QuickTime HTCInfo
|
|
29848
29856
|
'ardt' ARDroneFile no
|
|
29857
|
+
'cust' CustomInfo no
|
|
29849
29858
|
'frea' Kodak_frea Kodak frea
|
|
29850
29859
|
'free' KodakFree Kodak Free
|
|
29851
29860
|
Pittasoft QuickTime Pittasoft
|
|
@@ -29897,7 +29906,7 @@ for the official QuickTime specification.
|
|
|
29897
29906
|
The tags below are extracted from timed metadata in QuickTime and other
|
|
29898
29907
|
formats of video files when the ExtractEmbedded option is used. Although
|
|
29899
29908
|
most of these tags are combined into the single table below, ExifTool
|
|
29900
|
-
currently reads
|
|
29909
|
+
currently reads 78 different formats of timed GPS metadata from video files.
|
|
29901
29910
|
|
|
29902
29911
|
Tag Name Writable
|
|
29903
29912
|
-------- --------
|
|
@@ -30163,6 +30172,7 @@ changed via the config file.
|
|
|
30163
30172
|
'producer' Producer yes
|
|
30164
30173
|
'publisher' Publisher yes
|
|
30165
30174
|
'rating.user' UserRating yes
|
|
30175
|
+
'scene-illuminance' SceneIlluminance no
|
|
30166
30176
|
'software' Software yes
|
|
30167
30177
|
'still-image-time' StillImageTime no
|
|
30168
30178
|
'title' Title yes
|
|
@@ -30185,22 +30195,29 @@ changed via the config file.
|
|
|
30185
30195
|
|
|
30186
30196
|
=head3 QuickTime tx3g Tags
|
|
30187
30197
|
|
|
30188
|
-
Tags extracted from the tx3g sbtl timed metadata of Yuneec drones,
|
|
30189
|
-
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.
|
|
30190
30200
|
|
|
30191
|
-
Tag ID
|
|
30192
|
-
------
|
|
30193
|
-
'Alt'
|
|
30194
|
-
'DateTime'
|
|
30195
|
-
'
|
|
30196
|
-
'
|
|
30197
|
-
'
|
|
30198
|
-
'
|
|
30199
|
-
'
|
|
30200
|
-
'
|
|
30201
|
-
'
|
|
30202
|
-
'
|
|
30203
|
-
'
|
|
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
|
|
30204
30221
|
|
|
30205
30222
|
=head3 QuickTime HTCInfo Tags
|
|
30206
30223
|
|
|
@@ -30230,7 +30247,7 @@ Tags found in Pittasoft Blackvue dashcam "free" data.
|
|
|
30230
30247
|
------ -------- --------
|
|
30231
30248
|
0 MajorBrand no
|
|
30232
30249
|
1 MinorVersion no
|
|
30233
|
-
2 CompatibleBrands no
|
|
30250
|
+
2 CompatibleBrands no+
|
|
30234
30251
|
|
|
30235
30252
|
=head3 QuickTime OtherMeta Tags
|
|
30236
30253
|
|
|
@@ -31280,7 +31297,7 @@ Tags found in TomTom Bandit Action Cam MP4 videos.
|
|
|
31280
31297
|
'TTAD' TomTomAD QuickTime Stream
|
|
31281
31298
|
'TTHL' TomTomHL? no
|
|
31282
31299
|
'TTID' TomTomID no
|
|
31283
|
-
'TTVD' TomTomVD no
|
|
31300
|
+
'TTVD' TomTomVD no+
|
|
31284
31301
|
'TTVI' TomTomVI? no
|
|
31285
31302
|
|
|
31286
31303
|
=head3 QuickTime HintTrackInfo Tags
|