exiftool_vendored 13.03.0 → 13.04.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +17 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +25 -21
- data/bin/lib/Image/ExifTool/Canon.pm +7 -1
- data/bin/lib/Image/ExifTool/Exif.pm +8 -4
- data/bin/lib/Image/ExifTool/GPS.pm +33 -29
- data/bin/lib/Image/ExifTool/Geotag.pm +43 -9
- data/bin/lib/Image/ExifTool/GoPro.pm +118 -6
- data/bin/lib/Image/ExifTool/OOXML.pm +7 -7
- data/bin/lib/Image/ExifTool/Photoshop.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +1 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4 -0
- data/bin/lib/Image/ExifTool/TagNames.pod +27 -8
- data/bin/lib/Image/ExifTool/XMP2.pl +12 -8
- data/bin/lib/Image/ExifTool.pm +8 -6
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 374e7e5a3d68eeca0ec6cb6a40919d056e0731958606daa8bed45a7c4c70daba
|
4
|
+
data.tar.gz: 1263e0b2b35852265b4d5352eae7f35d12cffe0277f916799a8498c75482a9be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b5d47b1383f939d76af17239fb4f1e1a486ae619b0d728a010bde7e8ed044de0bfc93d755f8c0a22dfa098ddf997d84f1d7a3f562f07153d1486eee68744929
|
7
|
+
data.tar.gz: b8ba0c1b6c02546df4e54c6d5c4fe072cbb98bc4b6c5b1d0f1ac323ded4ca43e06ff5bcaaaf879005d37533df86f53262cba0dd87d1a09684f360a50a6d4834c
|
data/bin/Changes
CHANGED
@@ -7,6 +7,23 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 13.00. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Nov. 26, 2024 - Version 13.04
|
11
|
+
|
12
|
+
- Added the ability to write GPSDOP and GPSMeasureMode from the -geotag option
|
13
|
+
if hdop or pdop information exists in the input track file
|
14
|
+
- Added a few new Canon RFLensTypes (thanks Norbert Wasser)
|
15
|
+
- Decode timed GPS from GoPro Hero 13 videos
|
16
|
+
- Improved writing of GPSDestLatitudeRef and GPSDestLongitudeRef tags to allow
|
17
|
+
signed numbers to be written in the same way as GPSLatitudeRef and
|
18
|
+
GPSLongitudeRef
|
19
|
+
- Warn if using an Image::ExifTool library that doesn't match the application
|
20
|
+
version
|
21
|
+
- Renamed an Unknown Photoshop tag
|
22
|
+
- Convert GoPro GPSSpeed and GPSSpeed3D from m/s to km/h
|
23
|
+
- Patched to tolerate XML header in DOCX xml files
|
24
|
+
- Fixed -htmldump output to show the same names for unknown EXIF tags as with
|
25
|
+
the -u option
|
26
|
+
|
10
27
|
Nov. 12, 2024 - Version 13.03
|
11
28
|
|
12
29
|
- Added ability to include or exclude tags from CSV and JSON imports
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
109
109
|
terminal window to extract and run ExifTool:
|
110
110
|
|
111
111
|
cd ~/Desktop
|
112
|
-
gzip -dc Image-ExifTool-13.
|
113
|
-
cd Image-ExifTool-13.
|
112
|
+
gzip -dc Image-ExifTool-13.04.tar.gz | tar -xf -
|
113
|
+
cd Image-ExifTool-13.04
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
115
115
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '13.
|
14
|
+
my $version = '13.04';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -597,6 +597,10 @@ if (@Image::ExifTool::UserDefined::Arguments) {
|
|
597
597
|
unshift @ARGV, @Image::ExifTool::UserDefined::Arguments;
|
598
598
|
}
|
599
599
|
|
600
|
+
if ($version ne $Image::ExifTool::VERSION) {
|
601
|
+
Warn "Application version $version does not match Image::ExifTool library version $Image::ExifTool::VERSION\n";
|
602
|
+
}
|
603
|
+
|
600
604
|
# parse command-line options in 2 passes...
|
601
605
|
# pass 1: set all of our ExifTool options
|
602
606
|
# pass 2: print all of our help and informational output (-list, -ver, etc)
|
@@ -5903,7 +5907,7 @@ with this command:
|
|
5903
5907
|
|
5904
5908
|
produces output like this:
|
5905
5909
|
|
5906
|
-
-- Generated by ExifTool 13.
|
5910
|
+
-- Generated by ExifTool 13.04 --
|
5907
5911
|
File: a.jpg - 2003:10:31 15:44:19
|
5908
5912
|
(f/5.6, 1/60s, ISO 100)
|
5909
5913
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5919,8 +5923,9 @@ name, a value of 1 is returned if any tag exists in the specified group, or
|
|
5919
5923
|
0 otherwise (unless the C<All> group is also specified, in which case the
|
5920
5924
|
values of all matching tags are joined).
|
5921
5925
|
|
5922
|
-
|
5923
|
-
|
5926
|
+
The B<-p> output iterates through the family 3 group names, with each
|
5927
|
+
sub-document producing additional output. This feature is most useful when
|
5928
|
+
used in combination with the B<-ee> option to extract embedded documents.
|
5924
5929
|
|
5925
5930
|
If a specified tag does not exist, a minor warning is issued and the line
|
5926
5931
|
with the missing tag is not printed. However, the B<-f> option may be used
|
@@ -6770,23 +6775,22 @@ the following two commands are equivalent:
|
|
6770
6775
|
exiftool -geotag trk.log image.jpg
|
6771
6776
|
exiftool -geotag trk.log "-Geotime<DateTimeOriginal#" image.jpg
|
6772
6777
|
|
6773
|
-
|
6774
|
-
|
6775
|
-
|
6776
|
-
|
6777
|
-
|
6778
|
-
|
6779
|
-
|
6780
|
-
|
6781
|
-
|
6782
|
-
|
6783
|
-
|
6784
|
-
|
6785
|
-
|
6786
|
-
|
6787
|
-
|
6788
|
-
|
6789
|
-
order to be written.
|
6778
|
+
If the C<Geotime> value does not contain a time zone then the local system
|
6779
|
+
timezone is assumed. Writing C<Geotime> causes the following tags to be
|
6780
|
+
written (provided they can be calculated from the track log, and they are
|
6781
|
+
supported by the destination metadata format): GPSLatitude, GPSLatitudeRef,
|
6782
|
+
GPSLongitude, GPSLongitudeRef, GPSAltitude, GPSAltitudeRef, GPSDateStamp,
|
6783
|
+
GPSTimeStamp, GPSDateTime, GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef,
|
6784
|
+
GPSImgDirection, GPSImgDirectionRef, GPSPitch, GPSRoll, GPSCoordinates,
|
6785
|
+
AmbientTemperature and CameraElevationAngle. By default, in image files
|
6786
|
+
tags are created in EXIF, and updated in XMP only if they already exist. In
|
6787
|
+
QuickTime-format files GPSCoordinates is created in the preferred location
|
6788
|
+
(ItemList by default) as well as in XMP. However, C<EXIF:Geotime>,
|
6789
|
+
C<XMP:Geotime> or C<QuickTime:Geotime> may be specified to write to write
|
6790
|
+
only to one group. Also, C<ItemList:Geotime>, C<Keys:Geotime> or
|
6791
|
+
C<UserData:Geotime> may be used to write to a specific location in
|
6792
|
+
QuickTime-format files. Note that GPSPitch and GPSRoll are non-standard,
|
6793
|
+
and require user-defined tags in order to be written.
|
6790
6794
|
|
6791
6795
|
The C<Geosync> tag may be used to specify a time correction which is applied
|
6792
6796
|
to each C<Geotime> value for synchronization with GPS time. For example,
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.85';
|
92
92
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
@@ -631,6 +631,9 @@ $VERSION = '4.84';
|
|
631
631
|
'61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
632
632
|
'61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
633
633
|
'61182.56' => 'Canon RF 35mm F1.4 L VCM', #42
|
634
|
+
'61182.57' => 'Canon RF 70-200mm F2.8 L IS USM Z', #42
|
635
|
+
'61182.58' => 'Canon RF 50mm F1.4 L VCM', #42
|
636
|
+
'61182.59' => 'Canon RF 24mm F1.4 L VCM', #42
|
634
637
|
65535 => 'n/a',
|
635
638
|
);
|
636
639
|
|
@@ -7001,6 +7004,9 @@ my %ciMaxFocal = (
|
|
7001
7004
|
316 => 'Canon RF 35mm F1.4 L VCM', #42
|
7002
7005
|
317 => 'Canon RF-S 3.9mm F3.5 STM DUAL FISHEYE', #42
|
7003
7006
|
318 => 'Canon RF 28-70mm F2.8 IS STM', #42
|
7007
|
+
319 => 'Canon RF 70-200mm F2.8 L IS USM Z', #42
|
7008
|
+
325 => 'Canon RF 50mm F1.4 L VCM', #42
|
7009
|
+
326 => 'Canon RF 24mm F1.4 L VCM', #42
|
7004
7010
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
7005
7011
|
},
|
7006
7012
|
},
|
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
57
57
|
use Image::ExifTool qw(:DataAccess :Utils);
|
58
58
|
use Image::ExifTool::MakerNotes;
|
59
59
|
|
60
|
-
$VERSION = '4.
|
60
|
+
$VERSION = '4.55';
|
61
61
|
|
62
62
|
sub ProcessExif($$$);
|
63
63
|
sub WriteExif($$$);
|
@@ -6697,8 +6697,9 @@ sub ProcessExif($$$)
|
|
6697
6697
|
"Format: $fstr\nSize: $size bytes\n";
|
6698
6698
|
if ($size > 4) {
|
6699
6699
|
my $offPt = Get32u($dataPt,$entry+8);
|
6700
|
-
# (test this with ../pics/{CanonEOS-1D_XMarkIII.hif,PanasonicDC-G9.rw2})
|
6701
|
-
my $actPt = $valuePtr + $valueDataPos + $base - ($$et{EXIF_POS} || 0) +
|
6700
|
+
# (test this with ../pics/{CanonEOS-1D_XMarkIII.hif,PanasonicDC-G9.rw2,*.raf})
|
6701
|
+
my $actPt = $valuePtr + $valueDataPos + $base - ($$et{EXIF_POS} || 0) +
|
6702
|
+
($$et{BASE_FUDGE} || $$et{BASE} || 0);
|
6702
6703
|
$tip .= sprintf("Value offset: 0x%.4x\n", $offPt);
|
6703
6704
|
# highlight tag name (red for bad size)
|
6704
6705
|
my $style = ($bad or not defined $tval) ? 'V' : 'H';
|
@@ -6729,12 +6730,15 @@ sub ProcessExif($$$)
|
|
6729
6730
|
} elsif ($tagInfo and Image::ExifTool::IsInt($tval)) {
|
6730
6731
|
if ($$tagInfo{IsOffset} or $$tagInfo{SubIFD}) {
|
6731
6732
|
$tval = sprintf('0x%.4x', $tval);
|
6732
|
-
my $actPt = $val + $base - ($$et{EXIF_POS} || 0) + ($$et{BASE_FUDGE} || 0);
|
6733
|
+
my $actPt = $val + $base - ($$et{EXIF_POS} || 0) + ($$et{BASE_FUDGE} || $$et{BASE} || 0);
|
6733
6734
|
if ($actPt != $val) {
|
6734
6735
|
$tval .= sprintf("\nActual offset: 0x%.4x", $actPt);
|
6735
6736
|
my $sign = $actPt < $val ? '-' : '';
|
6736
6737
|
$tval .= sprintf("\nOffset base: ${sign}0x%.4x", abs($actPt - $val));
|
6737
6738
|
}
|
6739
|
+
if ($$et{EXIF_POS} and not $$et{BASE_FUDGE}) {
|
6740
|
+
$tip .= sprintf("File offset: 0x%.4x\n", $actPt + $$et{EXIF_POS})
|
6741
|
+
}
|
6738
6742
|
} elsif ($$tagInfo{PrintHex}) {
|
6739
6743
|
$tval = sprintf('0x%x', $tval);
|
6740
6744
|
}
|
@@ -12,7 +12,7 @@ use strict;
|
|
12
12
|
use vars qw($VERSION);
|
13
13
|
use Image::ExifTool::Exif;
|
14
14
|
|
15
|
-
$VERSION = '1.
|
15
|
+
$VERSION = '1.57';
|
16
16
|
|
17
17
|
my %coordConv = (
|
18
18
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
@@ -20,6 +20,34 @@ my %coordConv = (
|
|
20
20
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1)',
|
21
21
|
);
|
22
22
|
|
23
|
+
my %printConvLatRef = (
|
24
|
+
# extract N/S if written from Composite:GPSLatitude
|
25
|
+
# (also allow writing from a signed number)
|
26
|
+
OTHER => sub {
|
27
|
+
my ($val, $inv) = @_;
|
28
|
+
return undef unless $inv;
|
29
|
+
return uc $2 if $val =~ /(^|[^A-Z])([NS])(orth|outh)?\b/i;
|
30
|
+
return $1 eq '-' ? 'S' : 'N' if $val =~ /([-+]?)\d+/;
|
31
|
+
return undef;
|
32
|
+
},
|
33
|
+
N => 'North',
|
34
|
+
S => 'South',
|
35
|
+
);
|
36
|
+
|
37
|
+
my %printConvLonRef = (
|
38
|
+
# extract E/W if written from Composite:GPSLongitude
|
39
|
+
# (also allow writing from a signed number)
|
40
|
+
OTHER => sub {
|
41
|
+
my ($val, $inv) = @_;
|
42
|
+
return undef unless $inv;
|
43
|
+
return uc $2 if $val =~ /(^|[^A-Z])([EW])(ast|est)?\b/i;
|
44
|
+
return $1 eq '-' ? 'W' : 'E' if $val =~ /([-+]?)\d+/;
|
45
|
+
return undef;
|
46
|
+
},
|
47
|
+
E => 'East',
|
48
|
+
W => 'West',
|
49
|
+
);
|
50
|
+
|
23
51
|
%Image::ExifTool::GPS::Main = (
|
24
52
|
GROUPS => { 0 => 'EXIF', 1 => 'GPS', 2 => 'Location' },
|
25
53
|
WRITE_PROC => \&Image::ExifTool::Exif::WriteExif,
|
@@ -43,19 +71,7 @@ my %coordConv = (
|
|
43
71
|
latitudes or negative for south, or a string containing N, North, S or South
|
44
72
|
},
|
45
73
|
Count => 2,
|
46
|
-
PrintConv =>
|
47
|
-
# extract N/S if written from Composite:GPSLatitude
|
48
|
-
# (also allow writing from a signed number)
|
49
|
-
OTHER => sub {
|
50
|
-
my ($val, $inv) = @_;
|
51
|
-
return undef unless $inv;
|
52
|
-
return uc $2 if $val =~ /(^|[^A-Z])([NS])(orth|outh)?\b/i;
|
53
|
-
return $1 eq '-' ? 'S' : 'N' if $val =~ /([-+]?)\d+/;
|
54
|
-
return undef;
|
55
|
-
},
|
56
|
-
N => 'North',
|
57
|
-
S => 'South',
|
58
|
-
},
|
74
|
+
PrintConv => \%printConvLatRef,
|
59
75
|
},
|
60
76
|
0x0002 => {
|
61
77
|
Name => 'GPSLatitude',
|
@@ -72,19 +88,7 @@ my %coordConv = (
|
|
72
88
|
ExifTool will also accept a number when writing this tag, positive for east
|
73
89
|
longitudes or negative for west, or a string containing E, East, W or West
|
74
90
|
},
|
75
|
-
PrintConv =>
|
76
|
-
# extract E/W if written from Composite:GPSLongitude
|
77
|
-
# (also allow writing from a signed number)
|
78
|
-
OTHER => sub {
|
79
|
-
my ($val, $inv) = @_;
|
80
|
-
return undef unless $inv;
|
81
|
-
return uc $2 if $val =~ /(^|[^A-Z])([EW])(ast|est)?\b/i;
|
82
|
-
return $1 eq '-' ? 'W' : 'E' if $val =~ /([-+]?)\d+/;
|
83
|
-
return undef;
|
84
|
-
},
|
85
|
-
E => 'East',
|
86
|
-
W => 'West',
|
87
|
-
},
|
91
|
+
PrintConv => \%printConvLonRef,
|
88
92
|
},
|
89
93
|
0x0004 => {
|
90
94
|
Name => 'GPSLongitude',
|
@@ -238,7 +242,7 @@ my %coordConv = (
|
|
238
242
|
Writable => 'string',
|
239
243
|
Notes => 'tags 0x0013-0x001a used for subject location according to MWG 2.0',
|
240
244
|
Count => 2,
|
241
|
-
PrintConv =>
|
245
|
+
PrintConv => \%printConvLatRef,
|
242
246
|
},
|
243
247
|
0x0014 => {
|
244
248
|
Name => 'GPSDestLatitude',
|
@@ -251,7 +255,7 @@ my %coordConv = (
|
|
251
255
|
Name => 'GPSDestLongitudeRef',
|
252
256
|
Writable => 'string',
|
253
257
|
Count => 2,
|
254
|
-
PrintConv =>
|
258
|
+
PrintConv => \%printConvLonRef,
|
255
259
|
},
|
256
260
|
0x0016 => {
|
257
261
|
Name => 'GPSDestLongitude',
|
@@ -17,6 +17,7 @@
|
|
17
17
|
# 2022/06/21 - PH Added ability to read Google Takeout JSON files
|
18
18
|
# 2024/04/23 - PH Added ability to read more OpenTracks GPS tags
|
19
19
|
# 2024/08/28 - PH Added support for new Google Takeout JSON format
|
20
|
+
# 2024/11/26 - PH Also write GPSMeasureMode and GPSDOP
|
20
21
|
#
|
21
22
|
# References: 1) http://www.topografix.com/GPX/1/1/
|
22
23
|
# 2) http://www.gpsinformation.org/dale/nmea.htm#GSA
|
@@ -31,7 +32,7 @@ use vars qw($VERSION);
|
|
31
32
|
use Image::ExifTool qw(:Public);
|
32
33
|
use Image::ExifTool::GPS;
|
33
34
|
|
34
|
-
$VERSION = '1.
|
35
|
+
$VERSION = '1.81';
|
35
36
|
|
36
37
|
sub JITTER() { return 2 } # maximum time jitter
|
37
38
|
|
@@ -90,12 +91,25 @@ my %fixInfoKeys = (
|
|
90
91
|
orient => [ 'dir', 'pitch', 'roll' ],
|
91
92
|
atemp => [ 'atemp' ],
|
92
93
|
err => [ 'err' ],
|
94
|
+
dop => [ 'hdop', 'vdop', 'pdop' ],
|
93
95
|
);
|
94
96
|
|
95
|
-
|
97
|
+
# category for select keys
|
98
|
+
my %keyCategory = (
|
99
|
+
dir => 'orient',
|
100
|
+
pitch => 'orient',
|
101
|
+
roll => 'orient',
|
102
|
+
hdop => 'dop',
|
103
|
+
pdop => 'dop',
|
104
|
+
vdop => 'dop',
|
105
|
+
);
|
96
106
|
|
97
107
|
# tags which may exist separately in some formats (eg. CSV)
|
98
|
-
my %sepTags = (
|
108
|
+
my %sepTags = (
|
109
|
+
dir => 1, pitch => 1, roll => 1, track => 1, speed => 1,
|
110
|
+
# (plus other tags we don't want to scan outwards for)
|
111
|
+
hdop => 1, pdop => 1, vdop => 1,
|
112
|
+
);
|
99
113
|
|
100
114
|
# conversion factors for GPSSpeed (standard EXIF units only)
|
101
115
|
my %speedConv = (
|
@@ -348,8 +362,8 @@ sub LoadTrackLog($$;$)
|
|
348
362
|
my $tag = $xmlTag{lc $2};
|
349
363
|
if ($tag) {
|
350
364
|
$$fix{$tag} = $4;
|
351
|
-
if ($
|
352
|
-
$$has{
|
365
|
+
if ($keyCategory{$tag}) {
|
366
|
+
$$has{$keyCategory{$tag}} = 1;
|
353
367
|
} elsif ($tag eq 'alt') {
|
354
368
|
# validate altitude
|
355
369
|
undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/;
|
@@ -394,8 +408,8 @@ sub LoadTrackLog($$;$)
|
|
394
408
|
} else {
|
395
409
|
$$fix{$tag} = $1;
|
396
410
|
}
|
397
|
-
if ($
|
398
|
-
$$has{
|
411
|
+
if ($keyCategory{$tag}) {
|
412
|
+
$$has{$keyCategory{$tag}} = 1;
|
399
413
|
} elsif ($tag eq 'alt') {
|
400
414
|
# validate altitude
|
401
415
|
undef $$fix{alt} if defined $$fix{alt} and $$fix{alt} !~ /^[+-]?\d+\.?\d*/;
|
@@ -1145,7 +1159,7 @@ sub SetGeoValues($$;$)
|
|
1145
1159
|
# loop through available fix information categories
|
1146
1160
|
# (pos, track, alt, orient)
|
1147
1161
|
my ($category, $key);
|
1148
|
-
Category: foreach $category (qw{pos track alt orient atemp err}) {
|
1162
|
+
Category: foreach $category (qw{pos track alt orient atemp err dop}) {
|
1149
1163
|
next unless $$has{$category};
|
1150
1164
|
my ($f, $p0b, $p1b, $f0b);
|
1151
1165
|
# loop through specific fix information keys
|
@@ -1303,6 +1317,25 @@ Category: foreach $category (qw{pos track alt orient atemp err}) {
|
|
1303
1317
|
if ($$has{err}) {
|
1304
1318
|
@r = $et->SetNewValue(GPSHPositioningError => $$fix{err}, %opts);
|
1305
1319
|
}
|
1320
|
+
if ($$has{dop}) {
|
1321
|
+
my ($dop, $mm);
|
1322
|
+
if (defined $$fix{pdop}) {
|
1323
|
+
$dop = $$fix{pdop};
|
1324
|
+
$mm = 3;
|
1325
|
+
} elsif (defined $$fix{hdop}) {
|
1326
|
+
if (defined $$fix{vdop}) {
|
1327
|
+
$dop = sqrt($$fix{hdop} * $$fix{hdop} + $$fix{vdop} * $$fix{vdop});
|
1328
|
+
$mm = 3;
|
1329
|
+
} else {
|
1330
|
+
$dop = $$fix{hdop};
|
1331
|
+
$mm = 2;
|
1332
|
+
}
|
1333
|
+
}
|
1334
|
+
if (defined $dop) {
|
1335
|
+
$et->SetNewValue(GPSMeasureMode => $mm, %opts);
|
1336
|
+
$et->SetNewValue(GPSDOP => $dop, %opts);
|
1337
|
+
}
|
1338
|
+
}
|
1306
1339
|
unless ($xmp) {
|
1307
1340
|
my ($latRef, $lonRef);
|
1308
1341
|
$latRef = ($$fix{lat} > 0 ? 'N' : 'S') if defined $$fix{lat};
|
@@ -1328,7 +1361,8 @@ Category: foreach $category (qw{pos track alt orient atemp err}) {
|
|
1328
1361
|
GPSAltitude GPSAltitudeRef GPSDateStamp GPSTimeStamp GPSDateTime
|
1329
1362
|
GPSTrack GPSTrackRef GPSSpeed GPSSpeedRef GPSImgDirection
|
1330
1363
|
GPSImgDirectionRef GPSPitch GPSRoll CameraElevationAngle
|
1331
|
-
AmbientTemperature GPSHPositioningError GPSCoordinates
|
1364
|
+
AmbientTemperature GPSHPositioningError GPSCoordinates
|
1365
|
+
GPSMeasureMode GPSDOP))
|
1332
1366
|
{
|
1333
1367
|
my @r = $et->SetNewValue($_, undef, %opts);
|
1334
1368
|
}
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
17
17
|
use Image::ExifTool::QuickTime;
|
18
18
|
|
19
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.10';
|
20
20
|
|
21
21
|
sub ProcessGoPro($$$);
|
22
22
|
sub ProcessString($$$);
|
@@ -72,6 +72,7 @@ my %addUnits = (
|
|
72
72
|
let me know if you discover the meaning of any of these unknown tags. See
|
73
73
|
L<https://github.com/gopro/gpmf-parser> for details about this format.
|
74
74
|
},
|
75
|
+
# ABSC (GPMF) - seen: 0 (fmt f)
|
75
76
|
ACCL => { #2 (gpmd)
|
76
77
|
Name => 'Accelerometer',
|
77
78
|
Notes => 'accelerator readings in m/s2',
|
@@ -81,7 +82,9 @@ my %addUnits = (
|
|
81
82
|
# ANGY (GPMF-GEOC) - seen 179.9 (fmt d, Max)
|
82
83
|
# ANGZ (GPMF-GEOC) - seen 0.152 (fmt d, Max)
|
83
84
|
ALLD => 'AutoLowLightDuration', #1 (gpmd) (untested)
|
84
|
-
# APTO (GPMF) - seen: 'RAW', 'DYNM' (fmt c)
|
85
|
+
# APTO (GPMF) - seen: 'OFF', 'RAW', 'DYNM' (fmt c)
|
86
|
+
# ARUW (GPMF) - seen: 1.14285719394684 (fmt f)
|
87
|
+
# ARWA (GPMF) - seen: 1.14285719394684 (fmt f)
|
85
88
|
ATTD => { #PH (Karma)
|
86
89
|
Name => 'Attitude',
|
87
90
|
# UNIT=s,rad,rad,rad,rad/s,rad/s,rad/s,
|
@@ -96,8 +99,10 @@ my %addUnits = (
|
|
96
99
|
# SCAL=1000 1 1 1 1
|
97
100
|
Binary => 1,
|
98
101
|
},
|
102
|
+
# AUBT (GPMF) - seen: ''N' (type c)
|
99
103
|
AUDO => 'AudioSetting', #PH (GPMF - seen: 'WIND', fmt c)
|
100
104
|
# AUPT (GPMF) - seen: 'N','Y' (fmt c)
|
105
|
+
# BITR (GPMF) - seen: 'STANDARD' (fmt c)
|
101
106
|
BPOS => { #PH (Karma)
|
102
107
|
Name => 'Controller',
|
103
108
|
Unknown => 1,
|
@@ -111,9 +116,16 @@ my %addUnits = (
|
|
111
116
|
# CALH (GPMF-GEOC) - seen 3040 (fmt L, Max)
|
112
117
|
# CALW (GPMF-GEOC) - seen 4056 (fmt L, Max)
|
113
118
|
CASN => 'CameraSerialNumber', #PH (GPMF - seen: 'C3221324545448', fmt c)
|
119
|
+
# CDAT (GPMF) - seen: 1732152823 (fmt J)
|
120
|
+
# CDTM (GPMF) - seen: 0 (fmt L)
|
114
121
|
# CINF (GPMF) - seen: 0x67376be7709bc8876a8baf3940908618, 0xe230988539b30cf5f016627ae8fc5395,
|
115
122
|
# 0x8bcbe424acc5b37d7d77001635198b3b (fmt B) (Camera INFormation?)
|
123
|
+
# CLDP (GPMF) - seen: 'Y' (fmt c)
|
124
|
+
# CLKC (GPMF) - seen: 0 (fmt L)
|
125
|
+
# CLKS (GPMF) - seen: 2 (fmt B)
|
116
126
|
# CMOD (GPMF) - seen: 12,13,17 [12 360 video, 13 time-laps video, 17 JPEG] (fmt B)
|
127
|
+
# CPID (GPMF) - seen: '1194885996 3387225026 733916448 2433577768' (fmt L)
|
128
|
+
# CPIN (GPMF) - seen: 1
|
117
129
|
# CRTX (GPMF-BACK/FRNT) - double[1]
|
118
130
|
# CRTY (GPMF-BACK/FRNT) - double[1]
|
119
131
|
CSEN => { #PH (Karma)
|
@@ -123,6 +135,7 @@ my %addUnits = (
|
|
123
135
|
# SCAL=1000 1 1 1 1 1 1 1 1 1 1
|
124
136
|
Binary => 1,
|
125
137
|
},
|
138
|
+
# CTRL (GPMF) - seen: 'Pro' (fmt c)
|
126
139
|
CYTS => { #PH (Karma)
|
127
140
|
Name => 'CoyoteStatus',
|
128
141
|
# UNIT=s,,,,,rad,rad,rad,,
|
@@ -141,6 +154,8 @@ my %addUnits = (
|
|
141
154
|
# (Max) DVID='FRNT',DVNM='Front Lens',KLNS,CTRX,CTRY,MFOV,SFTR
|
142
155
|
# (Max) DVID='HLMT',DVNM='Highlights'
|
143
156
|
},
|
157
|
+
# DNSC (GPMF) - seen: 'HIGH' (fmt c)
|
158
|
+
# DUST (GPMF) - seen: 'NO_LIMIT' (fmt c)
|
144
159
|
# DVID (GPMF) - DeviceID; seen: 1 (fmt L), HLMT (fmt F), GEOC (fmt F), 'BACK' (fmt F, Max)
|
145
160
|
DVID => { Name => 'DeviceID', Unknown => 1 }, #2 (gpmd)
|
146
161
|
# DVNM (GPMF) seen: 'Video Global Settings' (fmt c), 'Highlights' (fmt c), 'Geometry Calibrations' (Max)
|
@@ -150,6 +165,7 @@ my %addUnits = (
|
|
150
165
|
Name => 'DigitalZoom',
|
151
166
|
PrintConv => { N => 'No', Y => 'Yes' },
|
152
167
|
},
|
168
|
+
# DZMX (GPMF) - seen: 1.39999997615814 (fmt f)
|
153
169
|
# DZST (GPMF) - seen: 0 (fmt L) (something to do with digital zoom maybe?)
|
154
170
|
EISA => { #PH (GPMF) - seen: 'Y','N','HS EIS','N/A' (fmt c) [N was for a time-lapse video]
|
155
171
|
Name => 'ElectronicImageStabilization',
|
@@ -188,10 +204,20 @@ my %addUnits = (
|
|
188
204
|
},
|
189
205
|
GPS5 => { #2 (gpmd)
|
190
206
|
Name => 'GPSInfo',
|
207
|
+
# UNIT=deg,deg,m,m/s,m/s
|
208
|
+
# TYPE=l
|
191
209
|
# SCAL=10000000,10000000,1000,1000,100
|
192
210
|
RawConv => '$val', # necessary to use scaled value instead of raw data as subdir data
|
193
211
|
SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPS5' },
|
194
212
|
},
|
213
|
+
GPS9 => { #PH (gpmd, Hero 13)
|
214
|
+
Name => 'GPSInfo9',
|
215
|
+
# UNIT=deg,deg,m,m/s,m/s,,s,,
|
216
|
+
# TYPE=lllllllSS
|
217
|
+
# SCAL=10000000 10000000 1000 1000 100 1 1000 100 1
|
218
|
+
RawConv => '$val', # necessary to use scaled value instead of raw data as subdir data
|
219
|
+
SubDirectory => { TagTable => 'Image::ExifTool::GoPro::GPS9' },
|
220
|
+
},
|
195
221
|
GPSF => { #2 (gpmd)
|
196
222
|
Name => 'GPSMeasureMode',
|
197
223
|
PrintConv => {
|
@@ -216,7 +242,10 @@ my %addUnits = (
|
|
216
242
|
Notes => 'gyroscope readings in rad/s',
|
217
243
|
Binary => 1,
|
218
244
|
},
|
245
|
+
# HCTL (GPMF) - seen: "Off" (fmt c)
|
246
|
+
# HDRV (GPMF) - seen: "N" (fmt c)
|
219
247
|
# HFLG (APP6) - seen: 0
|
248
|
+
# HSGT (GPMF) - seen: 'OFF' (fmt c)
|
220
249
|
ISOE => 'ISOSpeeds', #PH (gpmd)
|
221
250
|
ISOG => { #2 (gpmd)
|
222
251
|
Name => 'ImageSensorGain',
|
@@ -232,6 +261,7 @@ my %addUnits = (
|
|
232
261
|
},
|
233
262
|
# KLNS (GPMF-BACK/FRNT) - double[5] (fmt d, Max)
|
234
263
|
# LINF (GPMF) - seen: LAJ7061916601668,C3341326002180,C33632245450981 (fmt c) (Lens INFormation?)
|
264
|
+
# LMOD (GPMF) - seen: 'NONE' (fmt F)
|
235
265
|
LNED => { #PH (Karma)
|
236
266
|
Name => 'LocalPositionNED',
|
237
267
|
# UNIT=s,m,m,m,m/s,m/s,m/s
|
@@ -240,14 +270,20 @@ my %addUnits = (
|
|
240
270
|
Binary => 1,
|
241
271
|
},
|
242
272
|
MAGN => 'Magnetometer', #1 (gpmd) (units of uT)
|
273
|
+
# MAPX (GPMF) - seen: 1 (fmt f)
|
274
|
+
# MAPY (GPMF) - seen: 1 (fmt f)
|
243
275
|
# MFOV (GPMF-BACK/FRNT) - seen: 100 (fmt d, Max)
|
244
276
|
MINF => { #PH (GPMF - seen: HERO6 Black, fmt c)
|
245
277
|
Name => 'Model',
|
246
278
|
Groups => { 2 => 'Camera' },
|
247
279
|
Description => 'Camera Model Name',
|
248
280
|
},
|
281
|
+
# MMOD (GPMF) - seen: 'STEREO' (fmt c)
|
249
282
|
# MTYP (GPMF) - seen: 0,1,5,11 [1 for time-lapse video, 5 for 360 video, 11 for JPEG] (fmt B)
|
250
283
|
# MUID (GPMF) - seen: 3882563431 2278071152 967805802 411471936 0 0 0 0 (fmt L)
|
284
|
+
# MXCF (GPMF) - seen: 'x1' (fmt c)
|
285
|
+
# MYCF (GPMF) - seen: 'y1' (fmt c)
|
286
|
+
# ORDP (GPMF) - seen: 'Y' (fmt c)
|
251
287
|
OREN => { #PH (GPMF - seen: 'U', fmt c)
|
252
288
|
Name => 'AutoRotation',
|
253
289
|
PrintConv => {
|
@@ -258,11 +294,16 @@ my %addUnits = (
|
|
258
294
|
},
|
259
295
|
# (most of the "P" tags are ProTune settings - PH)
|
260
296
|
PHDR => 'HDRSetting', #PH (APP6 - seen: 0)
|
297
|
+
# PIMD (GPMF) - seen: 'AUTO' (fmt c)
|
261
298
|
PIMN => 'AutoISOMin', #PH (GPMF - seen: 100, fmt L)
|
262
299
|
PIMX => 'AutoISOMax', #PH (GPMF - seen: 1600, fmt L)
|
300
|
+
# POLY (GPMF) - seen: '0 2.11120247840881 0.14325800538063 -1.030...' (fmt f)
|
263
301
|
# PRAW (APP6) - seen: 0, 'N', 'Y' (fmt c)
|
302
|
+
# PRCN (GPMF) - seen: 65 zeros (fmt B)
|
264
303
|
PRES => 'PhotoResolution', #PH (APP6 - seen: '12MP_W')
|
265
304
|
# PRJT (APP6) - seen: 'GPRO','EACO' (fmt F, Hero8, Max)
|
305
|
+
# PRNA (GPMF) - seen 10 (fmt B)
|
306
|
+
# PRNU (GPMF) - seen 0 (fmt B)
|
266
307
|
PRTN => { #PH (GPMF - seen: 'N', fmt c)
|
267
308
|
Name => 'ProTune',
|
268
309
|
PrintConv => {
|
@@ -275,6 +316,9 @@ my %addUnits = (
|
|
275
316
|
PTSH => 'Sharpness', #PH (GPMF - seen: 'HIGH', fmt c)
|
276
317
|
PTWB => 'WhiteBalance', #PH (GPMF - seen: 'AUTO', fmt c)
|
277
318
|
# PVUL (APP6) - seen: 'F' (fmt c, Hero8, Max)
|
319
|
+
# PWPR (GPMF) - seen: 'PERFORMANCE' (fmt c)
|
320
|
+
# PYCF (GPMF) - seen: '[r0,r1,r2,r3,r4,r5,r6]' (fmt c)
|
321
|
+
# RAMP (GPMF) - seen: empty string (fmt c)
|
278
322
|
RATE => 'Rate', #PH (GPMF - seen: '0_5SEC', fmt c; APP6 - seen: '4_1SEC')
|
279
323
|
RMRK => { #2 (gpmd)
|
280
324
|
Name => 'Comments',
|
@@ -284,6 +328,7 @@ my %addUnits = (
|
|
284
328
|
Name => 'ScaleFactor',
|
285
329
|
Unknown => 1,
|
286
330
|
},
|
331
|
+
# SCAP (GPMF) - seen: 'N' (fmt c)
|
287
332
|
SCPR => { #PH (Karma) [stream was empty]
|
288
333
|
Name => 'ScaledPressure',
|
289
334
|
# UNIT=s,Pa,Pa,degC
|
@@ -291,6 +336,7 @@ my %addUnits = (
|
|
291
336
|
# SCAL=1000 0.00999999977648258 0.00999999977648258 100
|
292
337
|
%addUnits,
|
293
338
|
},
|
339
|
+
# SCTM (GPMF) - seen 0 (fmt L)
|
294
340
|
# SFTR (GPMF-BACK/FRNT) - seen 0.999,1.00004 (fmt d, Max)
|
295
341
|
# SHFX (GPMF-GEOC) - seen 22.92 (fmt d, Max)
|
296
342
|
# SHFY (GPMF-GEOC) - seen 0.123 (fmt d, Max)
|
@@ -355,6 +401,10 @@ my %addUnits = (
|
|
355
401
|
# TOCK => { Name => 'OutTime', Unknown => 1, ValueConv => '$val/1000' }, #1 (gpmd)
|
356
402
|
TSMP => { Name => 'TotalSamples', Unknown => 1 }, #2 (gpmd)
|
357
403
|
TYPE => { Name => 'StructureType', Unknown => 1 }, #2 (gpmd,GPMF - eg 'LLLllfFff', fmt c)
|
404
|
+
TZON => { # (GPMF) - seen: 60 (fmt s)
|
405
|
+
Name => 'TimeZone',
|
406
|
+
PrintConv => 'Image::ExifTool::TimeZoneString($val)',
|
407
|
+
},
|
358
408
|
UNIT => { #2 (gpmd) alternative units
|
359
409
|
Name => 'Units',
|
360
410
|
Unknown => 1,
|
@@ -373,6 +423,7 @@ my %addUnits = (
|
|
373
423
|
},
|
374
424
|
},
|
375
425
|
# VLTA (GPMF) - seen: 78 ('N') (fmt B -- wrong format?)
|
426
|
+
# VFPS (GPMF) - seen: '24000 1001' (fmt L)
|
376
427
|
VFRH => { #PH (Karma)
|
377
428
|
Name => 'VisualFlightRulesHUD',
|
378
429
|
BinaryData => 1,
|
@@ -380,13 +431,17 @@ my %addUnits = (
|
|
380
431
|
# TYPE=ffffsS
|
381
432
|
},
|
382
433
|
# VLTE (GPMF) - seen: 'Y','N' (fmt c)
|
434
|
+
# VRES (GPMF) - seen: '3840 3660' (fmt L)
|
383
435
|
WBAL => 'ColorTemperatures', #PH (gpmd)
|
384
436
|
WRGB => { #PH (gpmd)
|
385
437
|
Name => 'WhiteBalanceRGB',
|
386
438
|
Binary => 1,
|
387
439
|
},
|
388
440
|
# ZFOV (APP6,GPMF) - seen: 148.34, 0 (fmt f, Hero8, Max)
|
389
|
-
#
|
441
|
+
# ZMPL (GPMF) - seen: 0.652929663658142 (fmt f)
|
442
|
+
#
|
443
|
+
# the following ref forum12825
|
444
|
+
#
|
390
445
|
MUID => {
|
391
446
|
Name => 'MediaUniqueID',
|
392
447
|
PrintConv => q{
|
@@ -418,7 +473,7 @@ my %addUnits = (
|
|
418
473
|
YAVG => 'LumaAverage',
|
419
474
|
);
|
420
475
|
|
421
|
-
# GoPro GPS5 tags (ref 2) (Hero5,Hero6)
|
476
|
+
# GoPro GPS5 tags (ref 2) (Hero5,Hero6,Hero9)
|
422
477
|
%Image::ExifTool::GoPro::GPS5 = (
|
423
478
|
PROCESS_PROC => \&ProcessString,
|
424
479
|
GROUPS => { 1 => 'GoPro', 2 => 'Location' },
|
@@ -435,8 +490,65 @@ my %addUnits = (
|
|
435
490
|
Name => 'GPSAltitude',
|
436
491
|
PrintConv => '"$val m"',
|
437
492
|
},
|
438
|
-
3 =>
|
439
|
-
|
493
|
+
3 => {
|
494
|
+
Name => 'GPSSpeed',
|
495
|
+
Notes => 'stored as m/s but converted to km/h when extracted',
|
496
|
+
ValueConv => '$val * 3.6',
|
497
|
+
},
|
498
|
+
4 => {
|
499
|
+
Name => 'GPSSpeed3D',
|
500
|
+
Notes => 'stored as m/s but converted to km/h when extracted',
|
501
|
+
ValueConv => '$val * 3.6',
|
502
|
+
},
|
503
|
+
);
|
504
|
+
|
505
|
+
# GoPro GPS9 tags (Hero13)
|
506
|
+
%Image::ExifTool::GoPro::GPS9 = (
|
507
|
+
PROCESS_PROC => \&ProcessString,
|
508
|
+
GROUPS => { 1 => 'GoPro', 2 => 'Location' },
|
509
|
+
VARS => { HEX_ID => 0, ID_LABEL => 'Index' },
|
510
|
+
0 => { # (unit='deg')
|
511
|
+
Name => 'GPSLatitude',
|
512
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
513
|
+
},
|
514
|
+
1 => { # (unit='deg')
|
515
|
+
Name => 'GPSLongitude',
|
516
|
+
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
517
|
+
},
|
518
|
+
2 => { # (unit='m')
|
519
|
+
Name => 'GPSAltitude',
|
520
|
+
PrintConv => '"$val m"',
|
521
|
+
},
|
522
|
+
3 => {
|
523
|
+
Name => 'GPSSpeed',
|
524
|
+
Notes => 'stored as m/s but converted to km/h when extracted',
|
525
|
+
ValueConv => '$val * 3.6',
|
526
|
+
},
|
527
|
+
4 => {
|
528
|
+
Name => 'GPSSpeed3D',
|
529
|
+
Notes => 'stored as m/s but converted to km/h when extracted',
|
530
|
+
ValueConv => '$val * 3.6',
|
531
|
+
},
|
532
|
+
5 => { # days since 2000
|
533
|
+
Name => 'GPSDays',
|
534
|
+
RawConv => '$$self{GPSDays} = $val; undef',
|
535
|
+
Hidden => 1,
|
536
|
+
},
|
537
|
+
6 => { # seconds of date/time
|
538
|
+
Name => 'GPSDateTime',
|
539
|
+
Groups => { 2 => 'Time' },
|
540
|
+
# (10957 days from Jan 1 1970 to Jan 1 2000)
|
541
|
+
RawConv => 'ConvertUnixTime(($$self{GPSDays} + 10957) * 24 * 3600 + $val, undef, 3)',
|
542
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
543
|
+
},
|
544
|
+
7 => 'GPSDOP',
|
545
|
+
8 => {
|
546
|
+
Name => 'GPSMeasureMode', #PH (NC)
|
547
|
+
PrintConv => {
|
548
|
+
2 => '2-Dimensional Measurement',
|
549
|
+
3 => '3-Dimensional Measurement',
|
550
|
+
},
|
551
|
+
},
|
440
552
|
);
|
441
553
|
|
442
554
|
# GoPro GPRI tags (ref PH) (Karma)
|
@@ -14,7 +14,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
14
|
use Image::ExifTool::XMP;
|
15
15
|
use Image::ExifTool::ZIP;
|
16
16
|
|
17
|
-
$VERSION = '1.
|
17
|
+
$VERSION = '1.09';
|
18
18
|
|
19
19
|
# test for recognized OOXML document extensions
|
20
20
|
my %isOOXML = (
|
@@ -360,12 +360,12 @@ sub ProcessDOCX($$)
|
|
360
360
|
}
|
361
361
|
# process XML files (docProps/app.xml, docProps/core.xml, docProps/custom.xml)
|
362
362
|
my %dirInfo = (
|
363
|
-
DataPt
|
364
|
-
DirLen
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
},
|
363
|
+
DataPt => \$buff,
|
364
|
+
DirLen => length $buff,
|
365
|
+
# (skip over XML header if it exists)
|
366
|
+
DirStart => ($buff =~ /<\?xml\s+.*?\?>/g ? pos($buff) : 0),
|
367
|
+
DataLen => length $buff,
|
368
|
+
XMPParseOpts => { FoundProc => \&FoundTag },
|
369
369
|
);
|
370
370
|
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
371
371
|
undef $buff; # (free memory now)
|
@@ -28,7 +28,7 @@ use strict;
|
|
28
28
|
use vars qw($VERSION $AUTOLOAD $iptcDigestInfo %printFlags);
|
29
29
|
use Image::ExifTool qw(:DataAccess :Utils);
|
30
30
|
|
31
|
-
$VERSION = '1.
|
31
|
+
$VERSION = '1.71';
|
32
32
|
|
33
33
|
sub ProcessPhotoshop($$$);
|
34
34
|
sub WritePhotoshop($$$);
|
@@ -322,7 +322,7 @@ my %unicodeString = (
|
|
322
322
|
0x0432 => { Unknown => 1, Name => 'MeasurementScale' }, #7
|
323
323
|
0x0433 => { Unknown => 1, Name => 'TimelineInfo' }, #7
|
324
324
|
0x0434 => { Unknown => 1, Name => 'SheetDisclosure' }, #7
|
325
|
-
0x0435 => { Unknown => 1, Name => '
|
325
|
+
0x0435 => { Unknown => 1, Name => 'ChannelOptions' }, #7/forum16762
|
326
326
|
0x0436 => { Unknown => 1, Name => 'OnionSkins' }, #7
|
327
327
|
0x0438 => { Unknown => 1, Name => 'CountInfo' }, #7
|
328
328
|
0x043a => { Unknown => 1, Name => 'PrintInfo2' }, #7
|
@@ -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 82 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' },
|
@@ -8434,6 +8434,7 @@ my %tagExists = (
|
|
8434
8434
|
'channelcoarsegainadjust' => 1,
|
8435
8435
|
'channelmode' => 1,
|
8436
8436
|
'channelnumber' => 1,
|
8437
|
+
'channeloptions' => 1,
|
8437
8438
|
'channelusage' => 1,
|
8438
8439
|
'chapter' => 1,
|
8439
8440
|
'chaptercount' => 1,
|
@@ -9752,6 +9753,7 @@ my %tagExists = (
|
|
9752
9753
|
'gpshomelongitude' => 1,
|
9753
9754
|
'gpshorizontalaccuracy' => 1,
|
9754
9755
|
'gpsinfo' => 1,
|
9756
|
+
'gpsinfo9' => 1,
|
9755
9757
|
'gpslatitude2' => 1,
|
9756
9758
|
'gpslatituderaw' => 1,
|
9757
9759
|
'gpslog' => 1,
|
@@ -12212,6 +12214,7 @@ my %tagExists = (
|
|
12212
12214
|
'signature' => 1,
|
12213
12215
|
'signature_name' => 1,
|
12214
12216
|
'signatureformat' => 1,
|
12217
|
+
'signaturelength' => 1,
|
12215
12218
|
'signatureusagerights' => 1,
|
12216
12219
|
'signercontactinfo' => 1,
|
12217
12220
|
'significantbits' => 1,
|
@@ -12784,6 +12787,7 @@ my %tagExists = (
|
|
12784
12787
|
'uninitializeddatasize' => 1,
|
12785
12788
|
'uniquefileidentifier' => 1,
|
12786
12789
|
'uniqueid' => 1,
|
12790
|
+
'uniqueidentifier' => 1,
|
12787
12791
|
'unknown' => 1,
|
12788
12792
|
'unknown00' => 1,
|
12789
12793
|
'unknown01' => 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 28187 tags, with 17502 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
|
@@ -6168,11 +6168,12 @@ These tags belong to the ExifTool XMP-seal family 1 group.
|
|
6168
6168
|
|
6169
6169
|
=head3 XMP SEAL Tags
|
6170
6170
|
|
6171
|
-
These tags are used in SEAL
|
6172
|
-
format, not XMP. ExifTool has
|
6173
|
-
JPG, TIFF, XMP, PNG, WEBP, HEIC,
|
6174
|
-
support in PDF, MKV and WAV. Use
|
6175
|
-
delete SEAL information in supported
|
6171
|
+
These tags are used in SEAL (Secure Evidence Attribution Label) content
|
6172
|
+
authentification, which is actually XML format, not XMP. ExifTool has
|
6173
|
+
read/delete support for SEAL information in JPG, TIFF, XMP, PNG, WEBP, HEIC,
|
6174
|
+
PPM, MOV and MP4 files, and read-only support in PDF, MKV and WAV. Use
|
6175
|
+
C<-seal:all=> on the command line to delete SEAL information in supported
|
6176
|
+
formats. See L<https://github.com/hackerfactor/SEAL> for the specification.
|
6176
6177
|
|
6177
6178
|
Tag ID Tag Name Writable
|
6178
6179
|
------ -------- --------
|
@@ -6180,12 +6181,15 @@ delete SEAL information in supported formats.
|
|
6180
6181
|
'copyright' Copyright no
|
6181
6182
|
'd' Domain no
|
6182
6183
|
'da' DigestAlgorithm no
|
6184
|
+
'id' Identifier no
|
6183
6185
|
'info' SEALComment no
|
6184
6186
|
'ka' KeyAlgorithm no
|
6185
6187
|
'kv' KeyVersion no
|
6186
6188
|
's' Signature no
|
6187
6189
|
'seal' SEALVersion no
|
6188
6190
|
'sf' SignatureFormat no
|
6191
|
+
'sl' SignatureLength no
|
6192
|
+
'uid' UniqueIdentifier no
|
6189
6193
|
|
6190
6194
|
=head3 XMP swf Tags
|
6191
6195
|
|
@@ -8873,7 +8877,7 @@ access to this information.
|
|
8873
8877
|
0x0432 MeasurementScale? no
|
8874
8878
|
0x0433 TimelineInfo? no
|
8875
8879
|
0x0434 SheetDisclosure? no
|
8876
|
-
0x0435
|
8880
|
+
0x0435 ChannelOptions? no
|
8877
8881
|
0x0436 OnionSkins? no
|
8878
8882
|
0x0438 CountInfo? no
|
8879
8883
|
0x043a PrintInfo2? no
|
@@ -24715,6 +24719,7 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
24715
24719
|
'GLPI' GPSPos GoPro GLPI
|
24716
24720
|
'GPRI' GPSRaw? GoPro GPRI
|
24717
24721
|
'GPS5' GPSInfo GoPro GPS5
|
24722
|
+
'GPS9' GPSInfo9 GoPro GPS9
|
24718
24723
|
'GPSA' GPSAltitudeSystem no
|
24719
24724
|
'GPSF' GPSMeasureMode no
|
24720
24725
|
'GPSP' GPSHPositioningError no
|
@@ -24760,6 +24765,7 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
24760
24765
|
'TMPC' CameraTemperature no
|
24761
24766
|
'TSMP' TotalSamples? no
|
24762
24767
|
'TYPE' StructureType? no
|
24768
|
+
'TZON' TimeZone no
|
24763
24769
|
'UNIF' InputUniformity no
|
24764
24770
|
'UNIT' Units? no
|
24765
24771
|
'VERS' MetadataVersion no
|
@@ -24804,6 +24810,19 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
|
|
24804
24810
|
3 GPSSpeed no
|
24805
24811
|
4 GPSSpeed3D no
|
24806
24812
|
|
24813
|
+
=head3 GoPro GPS9 Tags
|
24814
|
+
|
24815
|
+
Index Tag Name Writable
|
24816
|
+
----- -------- --------
|
24817
|
+
0 GPSLatitude no
|
24818
|
+
1 GPSLongitude no
|
24819
|
+
2 GPSAltitude no
|
24820
|
+
3 GPSSpeed no
|
24821
|
+
4 GPSSpeed3D no
|
24822
|
+
6 GPSDateTime no
|
24823
|
+
7 GPSDOP no
|
24824
|
+
8 GPSMeasureMode no
|
24825
|
+
|
24807
24826
|
=head3 GoPro KBAT Tags
|
24808
24827
|
|
24809
24828
|
Battery status information found in GoPro Karma videos.
|
@@ -29943,7 +29962,7 @@ for the official QuickTime specification.
|
|
29943
29962
|
The tags below are extracted from timed metadata in QuickTime and other
|
29944
29963
|
formats of video files when the ExtractEmbedded option is used. Although
|
29945
29964
|
most of these tags are combined into the single table below, ExifTool
|
29946
|
-
currently reads
|
29965
|
+
currently reads 82 different formats of timed GPS metadata from video files.
|
29947
29966
|
|
29948
29967
|
Tag Name Writable
|
29949
29968
|
-------- --------
|
@@ -2307,19 +2307,23 @@ my %sACDSeeRegionStruct = (
|
|
2307
2307
|
GROUPS => { 0 => 'XML', 1 => 'SEAL', 2 => 'Document' },
|
2308
2308
|
PROCESS_PROC => \&ProcessSEAL,
|
2309
2309
|
NOTES => q{
|
2310
|
-
These tags are used in SEAL
|
2311
|
-
format, not XMP. ExifTool has
|
2312
|
-
JPG, TIFF, XMP, PNG, WEBP, HEIC,
|
2313
|
-
support in PDF, MKV and WAV. Use
|
2314
|
-
delete SEAL information in supported
|
2310
|
+
These tags are used in SEAL (Secure Evidence Attribution Label) content
|
2311
|
+
authentification, which is actually XML format, not XMP. ExifTool has
|
2312
|
+
read/delete support for SEAL information in JPG, TIFF, XMP, PNG, WEBP, HEIC,
|
2313
|
+
PPM, MOV and MP4 files, and read-only support in PDF, MKV and WAV. Use
|
2314
|
+
C<-seal:all=> on the command line to delete SEAL information in supported
|
2315
|
+
formats. See L<https://github.com/hackerfactor/SEAL> for the specification.
|
2315
2316
|
},
|
2316
2317
|
seal=> 'SEALVersion',
|
2317
|
-
kv => 'KeyVersion',
|
2318
2318
|
ka => 'KeyAlgorithm',
|
2319
|
+
kv => 'KeyVersion',
|
2319
2320
|
da => 'DigestAlgorithm',
|
2320
|
-
sf => 'SignatureFormat',
|
2321
|
-
d => 'Domain',
|
2322
2321
|
b => 'ByteRange',
|
2322
|
+
d => 'Domain',
|
2323
|
+
uid => 'UniqueIdentifier',
|
2324
|
+
id => 'Identifier',
|
2325
|
+
sf => 'SignatureFormat',
|
2326
|
+
sl => 'SignatureLength',
|
2323
2327
|
's' => 'Signature',
|
2324
2328
|
info=> 'SEALComment',
|
2325
2329
|
copyright => { Name => 'Copyright', Groups => { 2 => 'Author' } },
|
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -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 = '13.
|
32
|
+
$VERSION = '13.04';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -2583,7 +2583,7 @@ sub Options($$;@)
|
|
2583
2583
|
warn("Can't set $param to undef\n");
|
2584
2584
|
}
|
2585
2585
|
} elsif (lc $param eq 'geodir') {
|
2586
|
-
$Image::ExifTool::Geolocation::geoDir = $newVal;
|
2586
|
+
$Image::ExifTool::Geolocation::geoDir = $newVal;
|
2587
2587
|
} else {
|
2588
2588
|
if ($param eq 'Escape') {
|
2589
2589
|
# set ESCAPE_PROC
|
@@ -4404,6 +4404,7 @@ sub DoneExtract($)
|
|
4404
4404
|
local $SIG{'__WARN__'} = \&SetWarning;
|
4405
4405
|
undef $evalWarning;
|
4406
4406
|
$$opts{GeolocMulti} = $$opts{Duplicates};
|
4407
|
+
$self->VPrint(0, "Geolocation arguments: '${arg}'\n");
|
4407
4408
|
my ($cities, $dist) = Image::ExifTool::Geolocation::Geolocate($arg, $opts);
|
4408
4409
|
delete $$opts{GeolocMulti};
|
4409
4410
|
if ($cities and (@$cities < 2 or $dist or not $self->Warn('Multiple Geolocation cities are possible',2))) {
|
@@ -8915,6 +8916,7 @@ sub GetTagInfo($$$;$$$)
|
|
8915
8916
|
my ($valPt, $format, $count);
|
8916
8917
|
|
8917
8918
|
my @infoArray = GetTagInfoList($tagTablePtr, $tagID);
|
8919
|
+
my $options = $$self{OPTIONS};
|
8918
8920
|
# evaluate condition
|
8919
8921
|
my $tagInfo;
|
8920
8922
|
foreach $tagInfo (@infoArray) {
|
@@ -8933,9 +8935,9 @@ sub GetTagInfo($$$;$$$)
|
|
8933
8935
|
}
|
8934
8936
|
}
|
8935
8937
|
# don't return Unknown tags unless that option is set (also see forum13716)
|
8936
|
-
if ($$tagInfo{Unknown} and not $$
|
8937
|
-
($$
|
8938
|
-
($$
|
8938
|
+
if ($$tagInfo{Unknown} and not $$options{Unknown} and not
|
8939
|
+
($$options{Verbose} or $$self{HTML_DUMP} or
|
8940
|
+
($$options{Validate} and not $$tagInfo{AddedUnknown})))
|
8939
8941
|
{
|
8940
8942
|
return undef;
|
8941
8943
|
}
|
@@ -8943,7 +8945,7 @@ sub GetTagInfo($$$;$$$)
|
|
8943
8945
|
return $tagInfo;
|
8944
8946
|
}
|
8945
8947
|
# generate information for unknown tags (numerical only) if required
|
8946
|
-
if (not $tagInfo and ($$
|
8948
|
+
if (not $tagInfo and ($$options{Unknown} or $$options{Verbose} or $$self{HTML_DUMP}) and
|
8947
8949
|
$tagID =~ /^\d+$/ and not $$self{NO_UNKNOWN})
|
8948
8950
|
{
|
8949
8951
|
my $printConv;
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exiftool_vendored
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 13.
|
4
|
+
version: 13.04.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-11-
|
12
|
+
date: 2024-11-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|