exiftool-vendored.pl 13.46.0 → 13.48.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/Changes +18 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/exiftool +2 -2
- package/bin/lib/Image/ExifTool/Canon.pm +1 -0
- package/bin/lib/Image/ExifTool/Geotag.pm +37 -7
- package/bin/lib/Image/ExifTool/Google.pm +4 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +4 -2
- package/bin/lib/Image/ExifTool/Protobuf.pm +4 -3
- package/bin/lib/Image/ExifTool/QuickTime.pm +3 -3
- package/bin/lib/Image/ExifTool.pm +12 -9
- package/bin/lib/Image/ExifTool.pod +6 -5
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/package.json +1 -1
package/bin/Changes
CHANGED
|
@@ -7,6 +7,24 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 13.44. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Jan. 31, 2026 - Version 13.48
|
|
11
|
+
|
|
12
|
+
- Added a new Nikon LensID (github #385)
|
|
13
|
+
- Added support for quoted entries in input -geotag CSV files
|
|
14
|
+
- Fixed decoding of Nikon Z6III menu settings for firmware 2.0 update
|
|
15
|
+
- Fixed -fast2 to avoid processing maker notes in some QuickTime-based files
|
|
16
|
+
- Fixed bug introduced in version 13.46 where some tags may be associated with
|
|
17
|
+
the next fix when geotagging from GPX files
|
|
18
|
+
|
|
19
|
+
Jan. 27, 2026 - Version 13.47
|
|
20
|
+
|
|
21
|
+
- Enhanced -fast option to avoid scanning QuickTime MediaData for metadata
|
|
22
|
+
(improves performance when reading CR3 files from slow media, github #384)
|
|
23
|
+
and -fast2 to avoid reading HDRP maker notes
|
|
24
|
+
- Fixed hang problem when reading HDRPMakerNotes from some Pixel models
|
|
25
|
+
- API Changes:
|
|
26
|
+
- Added CSV support to GeoUserTag option
|
|
27
|
+
|
|
10
28
|
Jan. 25, 2026 - Version 13.46
|
|
11
29
|
|
|
12
30
|
- Added a new Pentax LensType
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -111,8 +111,8 @@ your home directory, then you would type the following commands in a
|
|
|
111
111
|
terminal window to extract and run ExifTool:
|
|
112
112
|
|
|
113
113
|
cd ~/Desktop
|
|
114
|
-
gzip -dc Image-ExifTool-13.
|
|
115
|
-
cd Image-ExifTool-13.
|
|
114
|
+
gzip -dc Image-ExifTool-13.48.tar.gz | tar -xf -
|
|
115
|
+
cd Image-ExifTool-13.48
|
|
116
116
|
./exiftool t/images/ExifTool.jpg
|
|
117
117
|
|
|
118
118
|
Note: These commands extract meta information from one of the test images.
|
package/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.48';
|
|
15
15
|
|
|
16
16
|
$^W = 1; # enable global warnings
|
|
17
17
|
|
|
@@ -6136,7 +6136,7 @@ with this command:
|
|
|
6136
6136
|
|
|
6137
6137
|
produces output like this:
|
|
6138
6138
|
|
|
6139
|
-
-- Generated by ExifTool 13.
|
|
6139
|
+
-- Generated by ExifTool 13.48 --
|
|
6140
6140
|
File: a.jpg - 2003:10:31 15:44:19
|
|
6141
6141
|
(f/5.6, 1/60s, ISO 100)
|
|
6142
6142
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -36,7 +36,7 @@ use vars qw($VERSION);
|
|
|
36
36
|
use Image::ExifTool qw(:Public);
|
|
37
37
|
use Image::ExifTool::GPS;
|
|
38
38
|
|
|
39
|
-
$VERSION = '1.
|
|
39
|
+
$VERSION = '1.87';
|
|
40
40
|
|
|
41
41
|
sub JITTER() { return 2 } # maximum time jitter
|
|
42
42
|
|
|
@@ -137,6 +137,31 @@ my %otherConv = (
|
|
|
137
137
|
|
|
138
138
|
my $secPerDay = 24 * 3600; # a useful constant
|
|
139
139
|
|
|
140
|
+
#------------------------------------------------------------------------------
|
|
141
|
+
# Split a line of CSV
|
|
142
|
+
# Inputs: 0) line to split, 1) delimiter
|
|
143
|
+
# Returns: list of items
|
|
144
|
+
sub SplitCSV($$)
|
|
145
|
+
{
|
|
146
|
+
my ($line, $delim) = @_;
|
|
147
|
+
my @toks = split /\Q$delim/, $line;
|
|
148
|
+
my (@vals, $v);
|
|
149
|
+
while (@toks) {
|
|
150
|
+
($v = shift @toks) =~ s/^ +//; # remove leading spaces
|
|
151
|
+
if ($v =~ s/^"//) {
|
|
152
|
+
# quoted value must end in an odd number of quotes
|
|
153
|
+
while ($v !~ /("+)\s*$/ or not length($1) & 1) {
|
|
154
|
+
last unless @toks;
|
|
155
|
+
$v .= $delim . shift @toks;
|
|
156
|
+
}
|
|
157
|
+
$v =~ s/"\s*$//; # remove trailing quote and whitespace
|
|
158
|
+
$v =~ s/""/"/g; # un-escape quotes
|
|
159
|
+
}
|
|
160
|
+
push @vals, $v;
|
|
161
|
+
}
|
|
162
|
+
return @vals;
|
|
163
|
+
}
|
|
164
|
+
|
|
140
165
|
#------------------------------------------------------------------------------
|
|
141
166
|
# Load GPS track log file
|
|
142
167
|
# Inputs: 0) ExifTool ref, 1) track log data or file name
|
|
@@ -281,7 +306,7 @@ sub LoadTrackLog($$;$)
|
|
|
281
306
|
$format = 'Bramor';
|
|
282
307
|
} elsif (((/\b(GPS)?Date/i and /\b(GPS)?(Date)?Time/i) or /\bTime\(seconds\)/i) and /\Q$csvDelim/) {
|
|
283
308
|
chomp;
|
|
284
|
-
@csvHeadings =
|
|
309
|
+
@csvHeadings = SplitCSV($_, $csvDelim);
|
|
285
310
|
my $isColumbus = ($csvHeadings[0] and $csvHeadings[0] eq 'INDEX'); # (Columbus GPS logger)
|
|
286
311
|
$format = 'CSV';
|
|
287
312
|
# convert recognized headings to our parameter names
|
|
@@ -336,6 +361,8 @@ sub LoadTrackLog($$;$)
|
|
|
336
361
|
$param = 'roll';
|
|
337
362
|
} elsif (/^Img ?Dir/i) {
|
|
338
363
|
$param = 'dir';
|
|
364
|
+
} elsif ($userTag{lc $_}) {
|
|
365
|
+
$param = $userTag{lc $_};
|
|
339
366
|
}
|
|
340
367
|
if ($param) {
|
|
341
368
|
$et->VPrint(2, "CSV column '${head}' is $param$xtra\n");
|
|
@@ -380,7 +407,8 @@ sub LoadTrackLog($$;$)
|
|
|
380
407
|
# parse attributes (eg. GPX 'lat' and 'lon')
|
|
381
408
|
# (note: ignore namespace prefixes if they exist)
|
|
382
409
|
if ($arg =~ /^(\w+:)?(\w+)=(['"])(.*?)\3/g) {
|
|
383
|
-
my $tag = $xmlTag{lc $2}
|
|
410
|
+
my $tag = $xmlTag{lc $2};
|
|
411
|
+
$tag = $userTag{lc $2} unless defined $tag;
|
|
384
412
|
if ($tag) {
|
|
385
413
|
$$fix{$tag} = $4;
|
|
386
414
|
if ($keyCategory{$tag}) {
|
|
@@ -397,7 +425,8 @@ sub LoadTrackLog($$;$)
|
|
|
397
425
|
# loop through XML elements
|
|
398
426
|
while ($arg =~ m{([^<>]*)<(/)?(\w+:)?(\w+)(>|$)}g) {
|
|
399
427
|
$tok = lc $4;
|
|
400
|
-
my $tag = $xmlTag{$tok}
|
|
428
|
+
my $tag = $xmlTag{$tok};
|
|
429
|
+
$tag = $userTag{$tok} unless defined $tag;
|
|
401
430
|
# parse as a simple property if this element has a value
|
|
402
431
|
if (defined $tag and not $tag) {
|
|
403
432
|
# a containing property was opened or closed
|
|
@@ -528,7 +557,7 @@ DoneFix: $isDate = 1;
|
|
|
528
557
|
goto DoneFix; # save this fix
|
|
529
558
|
} elsif ($format eq 'CSV') {
|
|
530
559
|
chomp;
|
|
531
|
-
my @vals =
|
|
560
|
+
my @vals = SplitCSV($_, $csvDelim);
|
|
532
561
|
#
|
|
533
562
|
# CSV format output of GPS/IMU POS system
|
|
534
563
|
# Date* - date in DD/MM/YYYY format
|
|
@@ -581,6 +610,8 @@ DoneFix: $isDate = 1;
|
|
|
581
610
|
} elsif ($param eq 'runtime') {
|
|
582
611
|
$date = $trackTime;
|
|
583
612
|
$secs = $val;
|
|
613
|
+
} elsif ($param =~ /^_/) {
|
|
614
|
+
$$fix{$param} = $val;
|
|
584
615
|
} else {
|
|
585
616
|
$val /= $scaleSpeed if $scaleSpeed and $param eq 'speed';
|
|
586
617
|
$$fix{$param} = $val;
|
|
@@ -1553,8 +1584,7 @@ sub ConvertGeosync($$)
|
|
|
1553
1584
|
# Returns: UTC time string with fractional seconds
|
|
1554
1585
|
sub PrintFixTime($)
|
|
1555
1586
|
{
|
|
1556
|
-
my $time =
|
|
1557
|
-
my $fsec = int(($time - int($time)) * 1000);
|
|
1587
|
+
my $time = shift;
|
|
1558
1588
|
return Image::ExifTool::ConvertUnixTime($time, undef, 3) . ' UTC';
|
|
1559
1589
|
}
|
|
1560
1590
|
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
use Image::ExifTool::XMP;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.01';
|
|
19
19
|
|
|
20
20
|
sub ProcessHDRP($$$);
|
|
21
21
|
|
|
@@ -672,8 +672,11 @@ sub ProcessHDRP($$$)
|
|
|
672
672
|
my $tagInfo = $$dirInfo{TagInfo};
|
|
673
673
|
my $tagName = $tagInfo ? $$tagInfo{Name} : '';
|
|
674
674
|
my $verbose = $et->Options('Verbose');
|
|
675
|
+
my $fast = $et->Options('FastScan') || 0;
|
|
675
676
|
my ($ver, $valPt);
|
|
676
677
|
|
|
678
|
+
return undef if $fast > 1;
|
|
679
|
+
|
|
677
680
|
if ($$dirInfo{DirStart}) {
|
|
678
681
|
my $dat = substr($$dataPt, $$dirInfo{DirStart}, $$dirInfo{DirLen});
|
|
679
682
|
$dataPt = \$dat;
|
|
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
|
|
|
65
65
|
use Image::ExifTool::GPS;
|
|
66
66
|
use Image::ExifTool::XMP;
|
|
67
67
|
|
|
68
|
-
$VERSION = '4.
|
|
68
|
+
$VERSION = '4.53';
|
|
69
69
|
|
|
70
70
|
sub LensIDConv($$$);
|
|
71
71
|
sub ProcessNikonAVI($$$);
|
|
@@ -576,6 +576,7 @@ sub GetAFPointGrid($$;$);
|
|
|
576
576
|
'00 40 2D 88 2C 40 00 06' => 'Tamron AF 18-250mm f/3.5-6.3 Di II LD Aspherical (IF) Macro (A18NII)', #JD
|
|
577
577
|
'F5 40 2C 8A 2C 40 40 0E' => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical (IF) Macro (B003)',
|
|
578
578
|
'F0 3F 2D 8A 2C 40 DF 0E' => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD (B008)',
|
|
579
|
+
'E0 40 2D 98 2C 41 DF 0E' => 'Tamron 18-400mm f/3.5-6.3 Di II VC HLD (B028)', #github385 (D90)
|
|
579
580
|
'E0 40 2D 98 2C 41 DF 4E' => 'Tamron 18-400mm f/3.5-6.3 Di II VC HLD (B028)', # (removed AF designation, ref 37)
|
|
580
581
|
'07 40 2F 44 2C 34 03 02' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)',
|
|
581
582
|
'07 40 30 45 2D 35 03 02.1' => 'Tamron AF 19-35mm f/3.5-4.5 (A10)',
|
|
@@ -9389,7 +9390,7 @@ my %nikonFocalConversions = (
|
|
|
9389
9390
|
%binaryDataAttrs,
|
|
9390
9391
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9391
9392
|
NOTES => 'These tags are used by the Z6III.',
|
|
9392
|
-
DATAMEMBER => [ 360, 444, 492, 496, 724, 748, 832, 838, 852, 880, 904, 1050 ],
|
|
9393
|
+
DATAMEMBER => [ 360, 364, 444, 492, 496, 724, 748, 832, 838, 852, 880, 904, 1050 ],
|
|
9393
9394
|
IS_SUBDIR => [ 1255 ],
|
|
9394
9395
|
360 => {
|
|
9395
9396
|
Name => 'SingleFrame', #0=> Single Frame 1=> one of the continuous modes
|
|
@@ -9399,6 +9400,7 @@ my %nikonFocalConversions = (
|
|
|
9399
9400
|
364 => {
|
|
9400
9401
|
Name => 'HighFrameRate', #CH and C30/C60/C120 but not CL
|
|
9401
9402
|
PrintConv => \%highFrameRateZ9,
|
|
9403
|
+
Hook => '$varSize += 4 if $$self{FirmwareVersion} and $$self{FirmwareVersion} ge "02.00"',
|
|
9402
9404
|
},
|
|
9403
9405
|
444 => {
|
|
9404
9406
|
Name => 'MultipleExposureMode',
|
|
@@ -21,7 +21,7 @@ use strict;
|
|
|
21
21
|
use vars qw($VERSION);
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.07';
|
|
25
25
|
|
|
26
26
|
sub ProcessProtobuf($$$;$);
|
|
27
27
|
|
|
@@ -59,12 +59,14 @@ sub VarInt($)
|
|
|
59
59
|
my $val = ord($buff) & 0x7f;
|
|
60
60
|
$$dirInfo{Bit0} = $val & 0x01;
|
|
61
61
|
my $mult = 128;
|
|
62
|
+
my $i = 0;
|
|
62
63
|
for (;;) {
|
|
63
64
|
last unless ord($buff) & 0x80;
|
|
64
65
|
$buff = GetBytes($dirInfo, 1);
|
|
65
66
|
return undef unless defined $buff;
|
|
66
67
|
$val += (ord($buff) & 0x7f) * $mult;
|
|
67
68
|
last unless ord($buff) & 0x80;
|
|
69
|
+
return undef if ++$i > 32; # set a reasonable limit
|
|
68
70
|
$mult *= 128; # (Note: don't use integer bit shift to avoid integer overflow)
|
|
69
71
|
}
|
|
70
72
|
return $val;
|
|
@@ -73,7 +75,7 @@ sub VarInt($)
|
|
|
73
75
|
#------------------------------------------------------------------------------
|
|
74
76
|
# Read protobuf record
|
|
75
77
|
# Inputs: 0) dirInfo ref
|
|
76
|
-
# Returns: 0) record payload (plus tag id and format type in list context)
|
|
78
|
+
# Returns: 0) record payload (plus tag id and format type in list context) or undef on error
|
|
77
79
|
# Notes: Updates $$dirInfo{Pos} to start of next record, and sets $$dirInfo{Bit0}
|
|
78
80
|
# according to the least significant bit of type 0 (varInt) records
|
|
79
81
|
sub ReadRecord($)
|
|
@@ -138,7 +140,6 @@ sub ProcessProtobuf($$$;$)
|
|
|
138
140
|
|
|
139
141
|
$$dirInfo{Pos} = $$dirInfo{DirStart} || 0; # initialize buffer Pos
|
|
140
142
|
$et->VerboseDir('Protobuf', undef, $dirLen);
|
|
141
|
-
|
|
142
143
|
unless ($prefix) {
|
|
143
144
|
$prefix = '';
|
|
144
145
|
$$et{ProtoPrefix}{$dirName} = '' unless defined $$et{ProtoPrefix}{$dirName};
|
|
@@ -49,7 +49,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
49
49
|
use Image::ExifTool::Exif;
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
|
|
52
|
-
$VERSION = '3.
|
|
52
|
+
$VERSION = '3.27';
|
|
53
53
|
|
|
54
54
|
sub ProcessMOV($$;$);
|
|
55
55
|
sub ProcessKeys($$$);
|
|
@@ -10325,7 +10325,7 @@ ItemID: foreach $id (reverse sort { $a <=> $b } keys %$items) {
|
|
|
10325
10325
|
if ($tag eq 'ipco' and not $$et{IsItemProperty}) {
|
|
10326
10326
|
$$et{ItemPropertyContainer} = [ \%dirInfo, $subTable, $proc ];
|
|
10327
10327
|
$et->VPrint(0,"$$et{INDENT}\[Process ipco box later]");
|
|
10328
|
-
}
|
|
10328
|
+
} elsif ($fast < 2 or not $$tagInfo{MakerNotes}) {
|
|
10329
10329
|
$et->ProcessDirectory(\%dirInfo, $subTable, $proc);
|
|
10330
10330
|
}
|
|
10331
10331
|
}
|
|
@@ -10638,7 +10638,7 @@ QTLang: foreach $tag (@{$$et{QTLang}}) {
|
|
|
10638
10638
|
}
|
|
10639
10639
|
# brute force scan for metadata embedded in media data
|
|
10640
10640
|
# (and process Insta360 trailer if it exists)
|
|
10641
|
-
ScanMediaData($et) if $ee and $topLevel;
|
|
10641
|
+
ScanMediaData($et) if $ee and $topLevel and not $$et{OPTIONS}{FastScan};
|
|
10642
10642
|
|
|
10643
10643
|
# restore any changed options
|
|
10644
10644
|
$et->Options($_ => $saveOptions{$_}) foreach keys %saveOptions;
|
|
@@ -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 $configFile @configFiles $noConfig);
|
|
31
31
|
|
|
32
|
-
$VERSION = '13.
|
|
32
|
+
$VERSION = '13.48';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
|
@@ -1045,8 +1045,8 @@ $testLen = 1024; # number of bytes to read when testing for magic number
|
|
|
1045
1045
|
# file types with weak magic number recognition
|
|
1046
1046
|
my %weakMagic = ( MP3 => 1 );
|
|
1047
1047
|
|
|
1048
|
-
# file types that are determined by the process proc when FastScan
|
|
1049
|
-
# (when done, the process proc must exit after SetFileType if FastScan is
|
|
1048
|
+
# file types that are determined by the process proc when FastScan > 2
|
|
1049
|
+
# (when done, the process proc must exit after SetFileType if FastScan is > 2)
|
|
1050
1050
|
my %processType = map { $_ => 1 } qw(JPEG TIFF XMP AIFF EXE Font PS Real VCard TXT);
|
|
1051
1051
|
|
|
1052
1052
|
# Compact/XMPShorthand option settings
|
|
@@ -1147,7 +1147,7 @@ my @availableOptions = (
|
|
|
1147
1147
|
[ 'GeoMinSats', undef, 'geotag minimum satellites' ],
|
|
1148
1148
|
[ 'GeoHPosErr', undef, 'geotag GPSHPositioningError based on $GPSDOP' ],
|
|
1149
1149
|
[ 'GeoSpeedRef', undef, 'geotag GPSSpeedRef' ],
|
|
1150
|
-
[ 'GeoUserTag', undef, 'user-defined
|
|
1150
|
+
[ 'GeoUserTag', undef, 'user-defined tags for geotagging' ],
|
|
1151
1151
|
[ 'GlobalTimeShift', undef, 'apply time shift to all extracted date/time values' ],
|
|
1152
1152
|
[ 'GPSQuadrant', undef, 'quadrant for GPS if not otherwise known' ],
|
|
1153
1153
|
[ 'Group#', undef, 'return tags for specified groups in family #' ],
|
|
@@ -3015,8 +3015,8 @@ sub ExtractInfo($;@)
|
|
|
3015
3015
|
# save file type in member variable
|
|
3016
3016
|
$$self{FILE_TYPE} = $type;
|
|
3017
3017
|
$dirInfo{Parent} = ($type eq 'TIFF') ? $tiffType : $type;
|
|
3018
|
-
# don't process the file when FastScan
|
|
3019
|
-
if ($fast
|
|
3018
|
+
# don't process the file when FastScan > 2
|
|
3019
|
+
if ($fast > 2 and not $processType{$type}) {
|
|
3020
3020
|
unless ($weakMagic{$type} and (not $ext or $ext ne $type)) {
|
|
3021
3021
|
$self->SetFileType($dirInfo{Parent});
|
|
3022
3022
|
}
|
|
@@ -7256,7 +7256,7 @@ sub ProcessJPEG($$;$)
|
|
|
7256
7256
|
}
|
|
7257
7257
|
if (not $$self{VALUE}{FileType} or ($$self{DOC_NUM} and $$options{ExtractEmbedded})) {
|
|
7258
7258
|
$self->SetFileType(); # set FileType tag
|
|
7259
|
-
return 1 if $fast
|
|
7259
|
+
return 1 if $fast > 2; # don't process file when FastScan > 2
|
|
7260
7260
|
$$self{LOW_PRIORITY_DIR}{IFD1} = 1; # lower priority of IFD1 tags
|
|
7261
7261
|
}
|
|
7262
7262
|
$$raf{NoBuffer} = 1 if $self->Options('FastScan'); # disable buffering in FastScan mode
|
|
@@ -8636,8 +8636,8 @@ sub DoProcessTIFF($$;$)
|
|
|
8636
8636
|
my $t = ($baseType eq 'TIFF' or $fileType =~ /RAW/) ? $fileType : undef;
|
|
8637
8637
|
$self->SetFileType($t);
|
|
8638
8638
|
}
|
|
8639
|
-
# don't process file if FastScan
|
|
8640
|
-
return 1 if not $outfile and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan}
|
|
8639
|
+
# don't process file if FastScan > 2
|
|
8640
|
+
return 1 if not $outfile and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan} > 2;
|
|
8641
8641
|
}
|
|
8642
8642
|
# (accommodate CR3 images which have a TIFF directory with ExifIFD at the top level)
|
|
8643
8643
|
my $ifdName = ($$dirInfo{DirName} and $$dirInfo{DirName} =~ /^(ExifIFD|GPS)$/) ? $1 : 'IFD0';
|
|
@@ -9288,6 +9288,9 @@ sub HandleTag($$$$;%)
|
|
|
9288
9288
|
}
|
|
9289
9289
|
if ($tagInfo) {
|
|
9290
9290
|
if ($subdir) {
|
|
9291
|
+
if ($$tagInfo{MakerNotes} and $$self{OPTIONS}{FastScan} and $$self{OPTIONS}{FastScan} > 1) {
|
|
9292
|
+
return undef; # don't process maker note directories when FastScan > 1
|
|
9293
|
+
}
|
|
9291
9294
|
my $subdirStart = $parms{Start};
|
|
9292
9295
|
my $subdirLen = $parms{Size};
|
|
9293
9296
|
if ($$tagInfo{RawConv} and not $$tagInfo{Writable}) {
|
|
@@ -817,12 +817,13 @@ Reference units for writing GPSSpeed when geotagging:
|
|
|
817
817
|
|
|
818
818
|
=item GeoUserTag
|
|
819
819
|
|
|
820
|
-
Additional user-defined tags to write when geotagging from GPX files.
|
|
820
|
+
Additional user-defined tags to write when geotagging from GPX or CSV files.
|
|
821
821
|
Format is 'I<TAG>=I<TOKEN>,...' where I<TAG> is an ExifTool tag name (with
|
|
822
|
-
optional group name), and I<TOKEN> is is the property name in the GPX file
|
|
823
|
-
eg) C<Location=desc> will write the
|
|
824
|
-
|
|
825
|
-
|
|
822
|
+
optional group name), and I<TOKEN> is is the property name in the GPX file
|
|
823
|
+
or the column name in the CSV file. eg) C<Location=desc> will write the
|
|
824
|
+
Location tag based on the value of 'desc' in the GPS log file. The tag
|
|
825
|
+
value is taken from the nearest fix in time. Multiple tags may be specified
|
|
826
|
+
using comma separators. Default is undef.
|
|
826
827
|
|
|
827
828
|
=item GlobalTimeShift
|
|
828
829
|
|
package/package.json
CHANGED