exiftool-vendored.pl 12.40.0 → 12.41.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 +28 -5
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/arg_files/exif2xmp.args +5 -0
- package/bin/arg_files/xmp2exif.args +6 -0
- package/bin/exiftool +52 -21
- package/bin/lib/Image/ExifTool/Canon.pm +10 -2
- package/bin/lib/Image/ExifTool/Exif.pm +2 -2
- package/bin/lib/Image/ExifTool/MacOS.pm +9 -9
- package/bin/lib/Image/ExifTool/MakerNotes.pm +12 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +1 -0
- package/bin/lib/Image/ExifTool/Olympus.pm +2 -1
- package/bin/lib/Image/ExifTool/QuickTime.pm +1 -1
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
- package/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- package/bin/lib/Image/ExifTool/Sony.pm +6 -4
- package/bin/lib/Image/ExifTool/TagLookup.pm +1 -0
- package/bin/lib/Image/ExifTool/TagNames.pod +3 -0
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +2 -2
- package/bin/lib/Image/ExifTool.pm +1 -1
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- package/package.json +14 -3
package/bin/Changes
CHANGED
|
@@ -7,10 +7,33 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.30. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Apr. 7, 2022 - Version 12.41
|
|
11
|
+
|
|
12
|
+
- Added support for "OM SYSTEM" maker notes
|
|
13
|
+
- Added 2 new Sony LensType values (thanks Jos Roost)
|
|
14
|
+
- Added some new Canon lenses (thanks LibRaw)
|
|
15
|
+
- Added a new Nikon LensID (thanks Bert Ligtvoet)
|
|
16
|
+
- Added a new Canon ContinuousDrive value (thanks Wolfgang Gulcker)
|
|
17
|
+
- Enhanced -v0 option to also print new file name when renaming, moving or
|
|
18
|
+
copying a file
|
|
19
|
+
- Updated xmp2exif.args and exif2xmp.args helper files to reflect the IPTC
|
|
20
|
+
Photometadata Mapping Guidelines version 2202.1
|
|
21
|
+
- Made "Invalid Xxx data" a minor warning for MakerNote data
|
|
22
|
+
- Patched to allow writing of MP4 videos which have other tracks with a
|
|
23
|
+
missing sample description entry
|
|
24
|
+
- Patched MacOS version to specify directory for external utilities (setfile,
|
|
25
|
+
xattr, stat, mdls and osascript from /usr/bin, and tag from /usr/local/bin)
|
|
26
|
+
- Fixed long-standing problem where Windows version could behave differently
|
|
27
|
+
for -if conditions containing undefined tags
|
|
28
|
+
- Fixed problem where -W+! combined with -j or -X produced invalid JSON or XML
|
|
29
|
+
when processing multiple files
|
|
30
|
+
- Fixed potential "uninitialized value $time in division" runtime warning when
|
|
31
|
+
reading MP4 videos
|
|
32
|
+
|
|
10
33
|
Feb. 9, 2022 - Version 12.40
|
|
11
34
|
|
|
12
|
-
- Added a new Nikon LensID (thanks Wolfgang Exler)
|
|
13
35
|
- Added PageCount tag to return the number of pages in a multi-page TIFF
|
|
36
|
+
- Added a new Nikon LensID (thanks Wolfgang Exler)
|
|
14
37
|
- Added a few more Sony LensTypes (thanks Jos Roost)
|
|
15
38
|
- Decode some new Canon tags (thanks Mark Reid)
|
|
16
39
|
- Decode another Nikon Z9 tag (thanks Warren Hatch)
|
|
@@ -20,14 +43,14 @@ Feb. 9, 2022 - Version 12.40
|
|
|
20
43
|
- Updated photoshop_paths.config to include WorkingPath
|
|
21
44
|
- Patched to allow writing of MP4 videos which have url tracks with a missing
|
|
22
45
|
sample description entry
|
|
23
|
-
- Fixed
|
|
24
|
-
|
|
46
|
+
- Fixed deep recursion error when reading multi-page TIFF images with more
|
|
47
|
+
than 100 pages
|
|
25
48
|
- Fixed potential deep recursion runtime error when writing nested XMP
|
|
26
49
|
structures
|
|
27
50
|
- Fixed warning which could be generated when writing new
|
|
28
51
|
Composite:GPSCoordinates tag
|
|
29
|
-
- Fixed
|
|
30
|
-
|
|
52
|
+
- Fixed description of GPR (General Purpose RAW) file type
|
|
53
|
+
- Fixed typo in the name of a new Nikon tag (thanks Herb)
|
|
31
54
|
|
|
32
55
|
Jan. 13, 2022 - Version 12.39
|
|
33
56
|
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
|
|
|
107
107
|
terminal window to extract and run ExifTool:
|
|
108
108
|
|
|
109
109
|
cd ~/Desktop
|
|
110
|
-
gzip -dc Image-ExifTool-12.
|
|
111
|
-
cd Image-ExifTool-12.
|
|
110
|
+
gzip -dc Image-ExifTool-12.41.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.41
|
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
|
113
113
|
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -12,8 +12,10 @@
|
|
|
12
12
|
# 2013/06/12 - PH Additions for the Exif 2.3 for XMP spec
|
|
13
13
|
# 2015/01/12 - PH Avoid copying to non-standard namespaces
|
|
14
14
|
# 2018/05/07 - PH Added support for GPSDestXxxRef tags
|
|
15
|
+
# 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
|
|
15
16
|
#
|
|
16
17
|
# References: http://www.metadataworkinggroup.org/specs/
|
|
18
|
+
# https://iptc.org/std/photometadata/documentation/mappingguidelines/
|
|
17
19
|
#
|
|
18
20
|
# Notes: 1) The first three arguments copy most of the EXIF and GPS tags to
|
|
19
21
|
# XMP-exif/XMP-tiff, and the remaining arguments handle tags
|
|
@@ -22,6 +24,8 @@
|
|
|
22
24
|
# 2) These arguments will not delete existing XMP tags which are
|
|
23
25
|
# missing from the EXIF. The XMP tags should be deleted
|
|
24
26
|
# beforehand if required.
|
|
27
|
+
#
|
|
28
|
+
# 3) EXIF:SubjectArea is not currently mapped into XMP-iptcExt:ImageRegion
|
|
25
29
|
#------------------------------------------------------------------------------
|
|
26
30
|
-XMP-exif:all < EXIF:all
|
|
27
31
|
-XMP-exifEX:all < EXIF:all
|
|
@@ -37,6 +41,7 @@
|
|
|
37
41
|
-XMP-xmp:CreatorTool < EXIF:Software
|
|
38
42
|
-XMP-dc:Rights < EXIF:Copyright
|
|
39
43
|
-XMP-dc:Creator < EXIF:Artist
|
|
44
|
+
-XMP-iptcExt:DigitalImageGUID < EXIF:DigImageGUID
|
|
40
45
|
# XMP flash information is translated by the Composite Flash tag
|
|
41
46
|
-Composite:Flash < EXIF:Flash
|
|
42
47
|
# overwrite GPS tags which have different formats in XMP
|
|
@@ -14,8 +14,10 @@
|
|
|
14
14
|
# 2016/09/26 - PH Write Composite SubSec tags
|
|
15
15
|
# 2018/05/07 - PH Added support for GPSDestXxxRef tags
|
|
16
16
|
# 2021/09/30 - PH Removed erroneous "-" when copying CreatorTool
|
|
17
|
+
# 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
|
|
17
18
|
#
|
|
18
19
|
# References: http://www.metadataworkinggroup.org/specs/
|
|
20
|
+
# https://iptc.org/std/photometadata/documentation/mappingguidelines/
|
|
19
21
|
#
|
|
20
22
|
# Notes: 1) The first three arguments copy the bulk of the EXIF and GPS
|
|
21
23
|
# information, and the remaining arguments handle the tags
|
|
@@ -24,6 +26,8 @@
|
|
|
24
26
|
# 2) These arguments will not delete existing EXIF tags which are
|
|
25
27
|
# missing from the XMP. The EXIF tags should be deleted
|
|
26
28
|
# beforehand if required.
|
|
29
|
+
#
|
|
30
|
+
# 3) XMP-iptcExt:ImageRegion is not currently mapped into EXIF:SubjectArea
|
|
27
31
|
#------------------------------------------------------------------------------
|
|
28
32
|
-EXIF:all < XMP-exif:all
|
|
29
33
|
-EXIF:all < XMP-exifEX:all
|
|
@@ -37,7 +41,9 @@
|
|
|
37
41
|
-Composite:SubSecModifyDate < XMP-xmp:ModifyDate
|
|
38
42
|
-EXIF:Software < XMP-xmp:CreatorTool
|
|
39
43
|
-EXIF:Copyright < XMP-dc:Rights
|
|
44
|
+
-EXIF:Artist < XMP-plus:ImageCreatorName
|
|
40
45
|
-EXIF:Artist < XMP-dc:Creator
|
|
46
|
+
-EXIF:DigImageGUID < XMP-iptcExt:DigitalImageGUID
|
|
41
47
|
# XMP flash information is translated by the Composite Flash tag
|
|
42
48
|
-EXIF:Flash < Composite:Flash
|
|
43
49
|
# generate GPS tags which have been combined into other XMP tags
|
package/bin/exiftool
CHANGED
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
# (See html/history.html for revision history)
|
|
9
9
|
#------------------------------------------------------------------------------
|
|
10
10
|
use strict;
|
|
11
|
+
use warnings;
|
|
11
12
|
require 5.004;
|
|
12
13
|
|
|
13
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.41';
|
|
14
15
|
|
|
15
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
16
17
|
BEGIN {
|
|
@@ -109,6 +110,8 @@ my %database; # lookup for database information based on file name (in Exi
|
|
|
109
110
|
my %filterExt; # lookup for filtered extensions
|
|
110
111
|
my %ignore; # directory names to ignore
|
|
111
112
|
my $ignoreHidden; # flag to ignore hidden files
|
|
113
|
+
my %outComma; # flag that output text file needs a comma
|
|
114
|
+
my %outTrailer; # trailer for output text file
|
|
112
115
|
my %preserveTime; # preserved timestamps for files
|
|
113
116
|
my %printFmt; # the contents of the print format file
|
|
114
117
|
my %setTags; # hash of list references for tags to set from files
|
|
@@ -441,6 +444,8 @@ undef %database;
|
|
|
441
444
|
undef %endDir;
|
|
442
445
|
undef %filterExt;
|
|
443
446
|
undef %ignore;
|
|
447
|
+
undef %outComma;
|
|
448
|
+
undef %outTrailer;
|
|
444
449
|
undef %printFmt;
|
|
445
450
|
undef %preserveTime;
|
|
446
451
|
undef %setTags;
|
|
@@ -1821,8 +1826,21 @@ if ($filtered and not $validFile) {
|
|
|
1821
1826
|
PrintCSV() if $csv and not $isWriting;
|
|
1822
1827
|
|
|
1823
1828
|
# print folder/file trailer if necessary
|
|
1824
|
-
|
|
1825
|
-
|
|
1829
|
+
if ($textOut) {
|
|
1830
|
+
foreach (keys %outTrailer) {
|
|
1831
|
+
next unless $outTrailer{$_};
|
|
1832
|
+
if ($mt->Open(\*OUTTRAIL, $_, '>>')) {
|
|
1833
|
+
my $fp = \*OUTTRAIL;
|
|
1834
|
+
print $fp $outTrailer{$_};
|
|
1835
|
+
close $fp;
|
|
1836
|
+
} else {
|
|
1837
|
+
Error("Error appending to $_\n");
|
|
1838
|
+
}
|
|
1839
|
+
}
|
|
1840
|
+
} else {
|
|
1841
|
+
print $sectTrailer if $sectTrailer;
|
|
1842
|
+
print $fileTrailer if $fileTrailer and not $fileHeader;
|
|
1843
|
+
}
|
|
1826
1844
|
|
|
1827
1845
|
my $totWr = $countGoodWr + $countBadWr + $countSameWr + $countCopyWr +
|
|
1828
1846
|
$countGoodCr + $countBadCr;
|
|
@@ -2160,6 +2178,9 @@ sub GetImageInfo($$)
|
|
|
2160
2178
|
$tmpText = $outfile unless $append;
|
|
2161
2179
|
}
|
|
2162
2180
|
|
|
2181
|
+
# restore state of comma flag for this file if appending
|
|
2182
|
+
$comma = $outComma{$outfile} if $append and ($textOverwrite & 0x02);
|
|
2183
|
+
|
|
2163
2184
|
# print the results for this file
|
|
2164
2185
|
if (%printFmt) {
|
|
2165
2186
|
# output using print format file (-p) option
|
|
@@ -2221,7 +2242,7 @@ sub GetImageInfo($$)
|
|
|
2221
2242
|
if ($fp) {
|
|
2222
2243
|
# print file header (only once)
|
|
2223
2244
|
if ($fileHeader) {
|
|
2224
|
-
print $fp $fileHeader;
|
|
2245
|
+
print $fp $fileHeader unless defined $outfile and ($created{$outfile} or $appended{$outfile});
|
|
2225
2246
|
undef $fileHeader unless $textOut;
|
|
2226
2247
|
}
|
|
2227
2248
|
if ($html) {
|
|
@@ -2674,9 +2695,17 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2674
2695
|
}
|
|
2675
2696
|
}
|
|
2676
2697
|
if ($outfile) {
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2698
|
+
if ($textOverwrite & 0x02) {
|
|
2699
|
+
# save state of this file if we may be appending
|
|
2700
|
+
$outComma{$outfile} = $comma;
|
|
2701
|
+
$outTrailer{$outfile} = '';
|
|
2702
|
+
$outTrailer{$outfile} .= $sectTrailer and $sectTrailer = '' if $sectTrailer;
|
|
2703
|
+
$outTrailer{$outfile} .= $fileTrailer if $fileTrailer;
|
|
2704
|
+
} else {
|
|
2705
|
+
# write section and file trailers before closing the file
|
|
2706
|
+
print $fp $sectTrailer and $sectTrailer = '' if $sectTrailer;
|
|
2707
|
+
print $fp $fileTrailer if $fileTrailer;
|
|
2708
|
+
}
|
|
2680
2709
|
close($fp);
|
|
2681
2710
|
undef $tmpText;
|
|
2682
2711
|
if ($lineCount) {
|
|
@@ -2926,7 +2955,7 @@ sub SetImageInfo($$$)
|
|
|
2926
2955
|
}
|
|
2927
2956
|
}
|
|
2928
2957
|
if (defined $outfile) {
|
|
2929
|
-
$verbose and print $vout "'${infile}' --> '${outfile}'\n";
|
|
2958
|
+
defined $verbose and print $vout "'${infile}' --> '${outfile}'\n";
|
|
2930
2959
|
# create output directory if necessary
|
|
2931
2960
|
CreateDirectory($outfile);
|
|
2932
2961
|
# set temporary file (automatically erased on abnormal exit)
|
|
@@ -5136,13 +5165,14 @@ The following examples demonstrate basic use of the B<-csv> option:
|
|
|
5136
5165
|
# update metadata for all images in a directory from CSV file
|
|
5137
5166
|
exiftool -csv=a.csv dir
|
|
5138
5167
|
|
|
5139
|
-
|
|
5140
|
-
the API MissingTagValue is set to an empty string
|
|
5168
|
+
When importing, empty values are ignored unless the B<-f> option is used and
|
|
5169
|
+
the API MissingTagValue is set to an empty string (in which case the tag is
|
|
5141
5170
|
deleted). Also, FileName and Directory columns are ignored if they exist
|
|
5142
|
-
(ie. ExifTool will not attempt to write these tags with a CSV import)
|
|
5143
|
-
force a tag to be deleted, use the B<-f>
|
|
5144
|
-
the CSV file (or to the MissingTagValue
|
|
5145
|
-
Multiple databases may be imported in a
|
|
5171
|
+
(ie. ExifTool will not attempt to write these tags with a CSV import), but
|
|
5172
|
+
all other columns are imported. To force a tag to be deleted, use the B<-f>
|
|
5173
|
+
option and set the value to "-" in the CSV file (or to the MissingTagValue
|
|
5174
|
+
if this API option was used). Multiple databases may be imported in a
|
|
5175
|
+
single command.
|
|
5146
5176
|
|
|
5147
5177
|
When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
|
|
5148
5178
|
tag headings. If the B<-a> option is used to allow duplicate tag names, the
|
|
@@ -5436,7 +5466,7 @@ with this command:
|
|
|
5436
5466
|
|
|
5437
5467
|
produces output like this:
|
|
5438
5468
|
|
|
5439
|
-
-- Generated by ExifTool 12.
|
|
5469
|
+
-- Generated by ExifTool 12.41 --
|
|
5440
5470
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5441
5471
|
(f/5.6, 1/60s, ISO 100)
|
|
5442
5472
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5555,7 +5585,9 @@ level greater than 0, most other options are ignored and normal console
|
|
|
5555
5585
|
output is suppressed unless specific tags are extracted. Using B<-v0>
|
|
5556
5586
|
causes the console output buffer to be flushed after each line (which may be
|
|
5557
5587
|
useful to avoid delays when piping exiftool output), and prints the name of
|
|
5558
|
-
each processed file when writing
|
|
5588
|
+
each processed file when writing and the new file name when renaming,
|
|
5589
|
+
moving or copying. Verbose levels above B<-v0> do not flush after each
|
|
5590
|
+
line. Also see the B<-progress> option.
|
|
5559
5591
|
|
|
5560
5592
|
=item B<-w>[+|!] I<EXT> or I<FMT> (B<-textOut>)
|
|
5561
5593
|
|
|
@@ -5768,11 +5800,10 @@ an XMP extension for the output file.
|
|
|
5768
5800
|
=item B<-a>, B<--a> (B<-duplicates>, B<--duplicates>)
|
|
5769
5801
|
|
|
5770
5802
|
Allow (B<-a>) or suppress (B<--a>) duplicate tag names to be extracted. By
|
|
5771
|
-
default, duplicate tags are suppressed when reading unless the B<-ee> or
|
|
5772
|
-
|
|
5773
|
-
|
|
5774
|
-
|
|
5775
|
-
when copying.
|
|
5803
|
+
default, duplicate tags are suppressed when reading unless the B<-ee> or B<-X>
|
|
5804
|
+
options are used or the Duplicates option is enabled in the configuration file.
|
|
5805
|
+
When writing, this option allows multiple Warning messages to be shown.
|
|
5806
|
+
Duplicate tags are always extracted when copying.
|
|
5776
5807
|
|
|
5777
5808
|
=item B<-e> (B<--composite>)
|
|
5778
5809
|
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.57';
|
|
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)
|
|
@@ -208,6 +208,7 @@ $VERSION = '4.56';
|
|
|
208
208
|
53 => 'Canon EF-S 18-55mm f/3.5-5.6 III', #Jon Charnas
|
|
209
209
|
54 => 'Canon EF-S 55-250mm f/4-5.6 IS II', #47
|
|
210
210
|
60 => 'Irix 11mm f/4', #50
|
|
211
|
+
63 => 'Irix 30mm F1.4 Dragonfly', #IB
|
|
211
212
|
80 => 'Canon TS-E 50mm f/2.8L Macro', #42
|
|
212
213
|
81 => 'Canon TS-E 90mm f/2.8L Macro', #42
|
|
213
214
|
82 => 'Canon TS-E 135mm f/4L Macro', #42
|
|
@@ -599,6 +600,9 @@ $VERSION = '4.56';
|
|
|
599
600
|
'61182.25' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
600
601
|
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
601
602
|
'61182.27' => 'Canon RF 16mm F2.8 STM', #42
|
|
603
|
+
'61182.28' => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
604
|
+
'61182.29' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
605
|
+
'61182.30' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
602
606
|
#'61182.xx' => 'Canon RF 100mm F2.8L MACRO IS USM',
|
|
603
607
|
65535 => 'n/a',
|
|
604
608
|
);
|
|
@@ -1018,7 +1022,7 @@ my %canonWhiteBalance = (
|
|
|
1018
1022
|
20 => 'PC Set4', #PH
|
|
1019
1023
|
21 => 'PC Set5', #PH
|
|
1020
1024
|
# 22 - Custom 2?
|
|
1021
|
-
23 => 'Auto (ambience priority)', #PH (5DS)
|
|
1025
|
+
23 => 'Auto (ambience priority)', #PH (5DS) (perhaps this needs re-thinking?: forum13295)
|
|
1022
1026
|
# 30 - Click White Balance?
|
|
1023
1027
|
# 31 - Shot Settings?
|
|
1024
1028
|
# 137 - Tungsten?
|
|
@@ -2133,6 +2137,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2133
2137
|
4 => 'Continuous, Low', #PH
|
|
2134
2138
|
5 => 'Continuous, High', #PH
|
|
2135
2139
|
6 => 'Silent Single', #PH
|
|
2140
|
+
8 => 'Continuous, High+', #WolfgangGulcker
|
|
2136
2141
|
# ref A: https://exiftool.org/forum/index.php/topic,5701.msg27843.html#msg27843
|
|
2137
2142
|
9 => 'Single, Silent', #A
|
|
2138
2143
|
10 => 'Continuous, Silent', #A
|
|
@@ -6796,6 +6801,9 @@ my %ciMaxFocal = (
|
|
|
6796
6801
|
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
6797
6802
|
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
6798
6803
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
|
6804
|
+
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
6805
|
+
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
6806
|
+
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
6799
6807
|
#xxx => 'Canon RF 100mm F2.8L MACRO IS USM',
|
|
6800
6808
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6801
6809
|
},
|
|
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
56
56
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
57
57
|
use Image::ExifTool::MakerNotes;
|
|
58
58
|
|
|
59
|
-
$VERSION = '4.
|
|
59
|
+
$VERSION = '4.40';
|
|
60
60
|
|
|
61
61
|
sub ProcessExif($$$);
|
|
62
62
|
sub WriteExif($$$);
|
|
@@ -6605,7 +6605,7 @@ sub ProcessExif($$$)
|
|
|
6605
6605
|
#### eval Validate ($val, $dirData, $subdirStart, $size)
|
|
6606
6606
|
my $ok = 0;
|
|
6607
6607
|
if (defined $$subdir{Validate} and not eval $$subdir{Validate}) {
|
|
6608
|
-
$et->Warn("Invalid $tagStr data");
|
|
6608
|
+
$et->Warn("Invalid $tagStr data", $inMakerNotes);
|
|
6609
6609
|
$invalid = 1;
|
|
6610
6610
|
} else {
|
|
6611
6611
|
if (not $subdirInfo{DirName} and $inMakerNotes) {
|
|
@@ -12,7 +12,7 @@ use strict;
|
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
14
|
|
|
15
|
-
$VERSION = '1.
|
|
15
|
+
$VERSION = '1.12';
|
|
16
16
|
|
|
17
17
|
sub MDItemLocalTime($);
|
|
18
18
|
sub ProcessATTR($$$);
|
|
@@ -381,7 +381,7 @@ sub SetMacOSTags($$$)
|
|
|
381
381
|
$val = Image::ExifTool::ConvertUnixTime($time, 1) if $time;
|
|
382
382
|
}
|
|
383
383
|
$val =~ s{(\d{4}):(\d{2}):(\d{2})}{$2/$3/$1}; # reformat for setfile
|
|
384
|
-
$cmd = "setfile -d '${val}' '${f}'";
|
|
384
|
+
$cmd = "/usr/bin/setfile -d '${val}' '${f}'";
|
|
385
385
|
} elsif ($tag eq 'MDItemUserTags') {
|
|
386
386
|
# (tested with "tag" version 0.9.0)
|
|
387
387
|
($f = $file) =~ s/'/'\\''/g;
|
|
@@ -391,7 +391,7 @@ sub SetMacOSTags($$$)
|
|
|
391
391
|
my @dels = @{$$nvHash{DelValue}};
|
|
392
392
|
s/'/'\\''/g foreach @dels;
|
|
393
393
|
my $del = join ',', @dels;
|
|
394
|
-
$err = system "tag -r '${del}' '${f}'>/dev/null 2>&1";
|
|
394
|
+
$err = system "/usr/local/bin/tag -r '${del}' '${f}'>/dev/null 2>&1";
|
|
395
395
|
unless ($err) {
|
|
396
396
|
$et->VerboseValue("- $tag", $del);
|
|
397
397
|
$result = 1;
|
|
@@ -403,13 +403,13 @@ sub SetMacOSTags($$$)
|
|
|
403
403
|
s/'/'\\''/g foreach @vals;
|
|
404
404
|
my $opt = $overwrite > 0 ? '-s' : '-a';
|
|
405
405
|
$val = @vals ? join(',', @vals) : '';
|
|
406
|
-
$cmd = "tag $opt '${val}' '${f}'";
|
|
406
|
+
$cmd = "/usr/local/bin/tag $opt '${val}' '${f}'";
|
|
407
407
|
$et->VPrint(1," - $tag = (all)\n") if $overwrite > 0;
|
|
408
408
|
undef $val if $val eq '';
|
|
409
409
|
}
|
|
410
410
|
} elsif ($tag eq 'XAttrQuarantine') {
|
|
411
411
|
($f = $file) =~ s/'/'\\''/g;
|
|
412
|
-
$cmd = "xattr -d com.apple.quarantine '${f}'";
|
|
412
|
+
$cmd = "/usr/bin/xattr -d com.apple.quarantine '${f}'";
|
|
413
413
|
$silentErr = 256; # (will get this error if attribute doesn't exist)
|
|
414
414
|
} else {
|
|
415
415
|
($f = $file) =~ s/(["\\])/\\$1/g; # escape necessary characters for script
|
|
@@ -426,7 +426,7 @@ sub SetMacOSTags($$$)
|
|
|
426
426
|
$v = $val ? 8 - $val : 0; # convert from label to label index (0 for no label)
|
|
427
427
|
$attr = 'label index';
|
|
428
428
|
}
|
|
429
|
-
$cmd = qq(osascript -e 'set fp to POSIX file "$f" as alias' -e \\
|
|
429
|
+
$cmd = qq(/usr/bin/osascript -e 'set fp to POSIX file "$f" as alias' -e \\
|
|
430
430
|
'tell application "Finder" to set $attr of file fp to "$v"');
|
|
431
431
|
}
|
|
432
432
|
if (defined $cmd) {
|
|
@@ -455,7 +455,7 @@ sub ExtractMDItemTags($$)
|
|
|
455
455
|
|
|
456
456
|
($fn = $file) =~ s/([`"\$\\])/\\$1/g; # escape necessary characters
|
|
457
457
|
$et->VPrint(0, '(running mdls)');
|
|
458
|
-
my @mdls =
|
|
458
|
+
my @mdls = `/usr/bin/mdls "$fn" 2> /dev/null`; # get MacOS metadata
|
|
459
459
|
if ($? or not @mdls) {
|
|
460
460
|
$et->Warn('Error running "mdls" to extract MDItem tags');
|
|
461
461
|
return;
|
|
@@ -565,7 +565,7 @@ sub ExtractXAttrTags($$)
|
|
|
565
565
|
|
|
566
566
|
($fn = $file) =~ s/([`"\$\\])/\\$1/g; # escape necessary characters
|
|
567
567
|
$et->VPrint(0, '(running xattr)');
|
|
568
|
-
my @xattr =
|
|
568
|
+
my @xattr = `/usr/bin/xattr -lx "$fn" 2> /dev/null`; # get MacOS extended attributes
|
|
569
569
|
if ($? or not @xattr) {
|
|
570
570
|
$? and $et->Warn('Error running "xattr" to extract XAttr tags');
|
|
571
571
|
return;
|
|
@@ -611,7 +611,7 @@ sub GetFileCreateDate($$)
|
|
|
611
611
|
|
|
612
612
|
($fn = $file) =~ s/([`"\$\\])/\\$1/g; # escape necessary characters
|
|
613
613
|
$et->VPrint(0, '(running stat)');
|
|
614
|
-
my $time =
|
|
614
|
+
my $time = `/usr/bin/stat -f '%SB' -t '%Y:%m:%d %H:%M:%S%z' "$fn" 2> /dev/null`;
|
|
615
615
|
if ($? or not $time or $time !~ s/([-+]\d{2})(\d{2})\s*$/$1:$2/) {
|
|
616
616
|
$et->Warn('Error running "stat" to extract FileCreateDate');
|
|
617
617
|
return;
|
|
@@ -21,7 +21,7 @@ sub ProcessKodakPatch($$$);
|
|
|
21
21
|
sub WriteUnknownOrPreview($$$);
|
|
22
22
|
sub FixLeicaBase($$;$);
|
|
23
23
|
|
|
24
|
-
$VERSION = '2.
|
|
24
|
+
$VERSION = '2.11';
|
|
25
25
|
|
|
26
26
|
my $debug; # set to 1 to enable debugging code
|
|
27
27
|
|
|
@@ -570,6 +570,17 @@ my $debug; # set to 1 to enable debugging code
|
|
|
570
570
|
ByteOrder => 'Unknown',
|
|
571
571
|
},
|
|
572
572
|
},
|
|
573
|
+
{
|
|
574
|
+
Name => 'MakerNoteOlympus3',
|
|
575
|
+
# new Olympus maker notes start with "OLYMPUS\0"
|
|
576
|
+
Condition => '$$valPt =~ /^OM SYSTEM\0/',
|
|
577
|
+
SubDirectory => {
|
|
578
|
+
TagTable => 'Image::ExifTool::Olympus::Main',
|
|
579
|
+
Start => '$valuePtr + 16',
|
|
580
|
+
Base => '$start - 16',
|
|
581
|
+
ByteOrder => 'Unknown',
|
|
582
|
+
},
|
|
583
|
+
},
|
|
573
584
|
{
|
|
574
585
|
Name => 'MakerNoteLeica',
|
|
575
586
|
# (starts with "LEICA\0\0\0")
|
|
@@ -437,6 +437,7 @@ sub GetAFPointGrid($$;$);
|
|
|
437
437
|
'A5 40 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC OS HSM',
|
|
438
438
|
# LensFStops varies with FocalLength for this lens (ref 2):
|
|
439
439
|
'92 2C 2D 88 2C 40 4B 0E' => 'Sigma 18-250mm F3.5-6.3 DC Macro OS HSM', #2
|
|
440
|
+
'87 2C 2D 8E 2C 40 4B 0E' => 'Sigma 18-300mm F3.5-6.3 DC Macro HSM', #30
|
|
440
441
|
# '92 2C 2D 88 2C 40 4B 0E' (250mm)
|
|
441
442
|
# '92 2B 2D 88 2C 40 4B 0E' (210mm)
|
|
442
443
|
# '92 2C 2D 88 2C 40 4B 0E' (185mm)
|
|
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
40
40
|
use Image::ExifTool::Exif;
|
|
41
41
|
use Image::ExifTool::APP12;
|
|
42
42
|
|
|
43
|
-
$VERSION = '2.
|
|
43
|
+
$VERSION = '2.77';
|
|
44
44
|
|
|
45
45
|
sub PrintLensInfo($$$);
|
|
46
46
|
|
|
@@ -432,6 +432,7 @@ my %olympusCameraTypes = (
|
|
|
432
432
|
S0089 => 'E-M5MarkIII',
|
|
433
433
|
S0092 => 'E-M1MarkIII', #IB
|
|
434
434
|
S0093 => 'E-P7', #IB
|
|
435
|
+
S0095 => 'OM-1', #IB
|
|
435
436
|
SR45 => 'D220',
|
|
436
437
|
SR55 => 'D320L',
|
|
437
438
|
SR83 => 'D340L',
|
|
@@ -2232,7 +2232,7 @@ my %eeBox2 = (
|
|
|
2232
2232
|
# 4 ? - "1e 00"
|
|
2233
2233
|
# 6 int16u - record length in bytes
|
|
2234
2234
|
# 8 ? - "23 01 00 00 00 00 00 00"
|
|
2235
|
-
# 16 - start of records (each record ends in an int64u timestamp in ns)
|
|
2235
|
+
# 16 - start of records (each record ends in an int64u timestamp "ts" in ns)
|
|
2236
2236
|
# RDTA - float[4],ts: "-0.31289672 -0.2245330 11.303817 0 775.780"
|
|
2237
2237
|
# RDTB - float[4],ts: "-0.04841613 -0.2166595 0.0724792 0 775.780"
|
|
2238
2238
|
# RDTC - float[4],ts: "27.60925 -27.10037 -13.27285 0 775.829"
|
|
@@ -1144,13 +1144,13 @@ sub ProcessSamples($)
|
|
|
1144
1144
|
}
|
|
1145
1145
|
@$size < @$start + $samplesPerChunk and $et->WarnOnce('Sample size error'), last;
|
|
1146
1146
|
my $sampleStart = $chunkStart;
|
|
1147
|
-
|
|
1147
|
+
Sample: for ($i=0; ; ) {
|
|
1148
1148
|
push @$start, $sampleStart;
|
|
1149
1149
|
if (defined $time) {
|
|
1150
1150
|
until ($timeCount) {
|
|
1151
1151
|
if (@$stts < 2) {
|
|
1152
1152
|
undef $time;
|
|
1153
|
-
last;
|
|
1153
|
+
last Sample;
|
|
1154
1154
|
}
|
|
1155
1155
|
$timeCount = shift @$stts;
|
|
1156
1156
|
$timeDelta = shift @$stts;
|
|
@@ -19,7 +19,7 @@ package Image::ExifTool::Shortcuts;
|
|
|
19
19
|
use strict;
|
|
20
20
|
use vars qw($VERSION);
|
|
21
21
|
|
|
22
|
-
$VERSION = '1.
|
|
22
|
+
$VERSION = '1.66';
|
|
23
23
|
|
|
24
24
|
# this is a special table used to define command-line shortcuts
|
|
25
25
|
# (documentation Notes may be added for these via %shortcutNotes in BuildTagLookup.pm)
|
|
@@ -158,6 +158,7 @@ $VERSION = '1.65';
|
|
|
158
158
|
'MakerNoteNintendo',
|
|
159
159
|
'MakerNoteOlympus',
|
|
160
160
|
'MakerNoteOlympus2',
|
|
161
|
+
'MakerNoteOlympus3',
|
|
161
162
|
'MakerNoteLeica',
|
|
162
163
|
'MakerNoteLeica2',
|
|
163
164
|
'MakerNoteLeica3',
|
|
@@ -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.50';
|
|
38
38
|
|
|
39
39
|
sub ProcessSRF($$$);
|
|
40
40
|
sub ProcessSR2($$$);
|
|
@@ -244,7 +244,8 @@ sub PrintInvLensSpec($;$$);
|
|
|
244
244
|
50529 => 'Sigma 90mm F2.8 DG DN | C', #JR (021)
|
|
245
245
|
50530 => 'Sigma 24mm F2 DG DN | C', #JR (021)
|
|
246
246
|
50531 => 'Sigma 18-50mm F2.8 DC DN | C', #IB/JR (021)
|
|
247
|
-
|
|
247
|
+
50532 => 'Sigma 20mm F2 DG DN | C', #JR (022)
|
|
248
|
+
|
|
248
249
|
50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
|
|
249
250
|
50993 => 'Voigtlander HELIAR-HYPER WIDE 10mm F5.6', #IB
|
|
250
251
|
50994 => 'Voigtlander ULTRA WIDE-HELIAR 12mm F5.6 III', #IB
|
|
@@ -278,6 +279,7 @@ sub PrintInvLensSpec($;$$);
|
|
|
278
279
|
51515 => 'Samyang AF 12mm F2.0', #JR
|
|
279
280
|
51516 => 'Samyang AF 24-70mm F2.8', #JR
|
|
280
281
|
51517 => 'Samyang AF 50mm F1.4 II', #JR
|
|
282
|
+
51518 => 'Samyang AF 135mm F1.8', #JR
|
|
281
283
|
);
|
|
282
284
|
|
|
283
285
|
# ExposureProgram values (ref PH, mainly decoded from A200)
|
|
@@ -1790,7 +1792,7 @@ my %hidUnk = ( Hidden => 1, Unknown => 1 );
|
|
|
1790
1792
|
# 15 0 35 2 2 ILCA-68/77M2, ILCE-5000/5100/6000/7/7R/7S/7M2/QX1, DSC-HX60V/HX350/HX400V/QX30/RX10/RX100M3/WX220/WX350
|
|
1791
1793
|
# 16 0 85 2 2 DSC-HX80/HX90V/WX500
|
|
1792
1794
|
# 17 0 232 1 2 DSC-RX0/RX0M2/RX1RM2/RX10M2/RX10M3/RX10M4/RX100M4/RX100M5/RX100M5A/RX100M6/RX100M7/HX99, ILCE-6100/6300/6400/6500/6600/7C/7M3/7RM2/7RM3/7RM4/7SM2/9/9M2, ILCA-99M2, ZV-1
|
|
1793
|
-
# 18 0 20 0 164 ILCE-7SM3
|
|
1795
|
+
# 18 0 20 0 164 ILCE-7SM3
|
|
1794
1796
|
# other values for Panorama images and several other models
|
|
1795
1797
|
0x9404 => [{
|
|
1796
1798
|
Name => 'Tag9404a',
|
|
@@ -8386,7 +8388,7 @@ my %isoSetting2010 = (
|
|
|
8386
8388
|
DATAMEMBER => [ 0x04 ],
|
|
8387
8389
|
0x04 => {
|
|
8388
8390
|
# seen values 0,2,3,18,19,32,49,50,83,130,132,148,213,229,255
|
|
8389
|
-
# CameraTemperature is valid for all values above except ==0 and >=130
|
|
8391
|
+
# CameraTemperature is valid for all values above except ==0 and >=130
|
|
8390
8392
|
Name => 'TempTest2',
|
|
8391
8393
|
DataMember => 'TempTest2',
|
|
8392
8394
|
Hidden => 1,
|
|
@@ -4075,6 +4075,7 @@ my %tagLookup = (
|
|
|
4075
4075
|
'makernoteoffset' => { 396 => 0xff },
|
|
4076
4076
|
'makernoteolympus' => { 117 => 'MakN', 119 => 0x927c },
|
|
4077
4077
|
'makernoteolympus2' => { 117 => 'MakN', 119 => 0x927c },
|
|
4078
|
+
'makernoteolympus3' => { 117 => 'MakN', 119 => 0x927c },
|
|
4078
4079
|
'makernotepanasonic' => { 117 => 'MakN', 119 => 0x927c },
|
|
4079
4080
|
'makernotepanasonic2' => { 117 => 'MakN', 119 => 0x927c },
|
|
4080
4081
|
'makernotepanasonic3' => { 117 => 'MakN', 119 => 0x927c },
|
|
@@ -669,6 +669,7 @@ for the official EXIF 2.32 specification.
|
|
|
669
669
|
MakerNoteNintendo ExifIFD Nintendo
|
|
670
670
|
MakerNoteOlympus ExifIFD Olympus
|
|
671
671
|
MakerNoteOlympus2 ExifIFD Olympus
|
|
672
|
+
MakerNoteOlympus3 ExifIFD Olympus
|
|
672
673
|
MakerNoteLeica ExifIFD Panasonic
|
|
673
674
|
MakerNoteLeica2 ExifIFD Panasonic Leica2
|
|
674
675
|
MakerNoteLeica3 ExifIFD Panasonic Leica3
|
|
@@ -20994,6 +20995,7 @@ still proprietary) Adobe format.
|
|
|
20994
20995
|
MakerNoteNintendo Nintendo
|
|
20995
20996
|
MakerNoteOlympus Olympus
|
|
20996
20997
|
MakerNoteOlympus2 Olympus
|
|
20998
|
+
MakerNoteOlympus3 Olympus
|
|
20997
20999
|
MakerNoteLeica Panasonic
|
|
20998
21000
|
MakerNoteLeica2 Panasonic Leica2
|
|
20999
21001
|
MakerNoteLeica3 Panasonic Leica3
|
|
@@ -37534,6 +37536,7 @@ for more details.
|
|
|
37534
37536
|
MakerNoteNintendo
|
|
37535
37537
|
MakerNoteOlympus
|
|
37536
37538
|
MakerNoteOlympus2
|
|
37539
|
+
MakerNoteOlympus3
|
|
37537
37540
|
MakerNoteLeica
|
|
37538
37541
|
MakerNoteLeica2
|
|
37539
37542
|
MakerNoteLeica3
|
|
@@ -1391,8 +1391,8 @@ sub WriteQuickTime($$$)
|
|
|
1391
1391
|
$pos += $siz;
|
|
1392
1392
|
}
|
|
1393
1393
|
if ($msg) {
|
|
1394
|
-
# (allow empty sample description for 'url '
|
|
1395
|
-
if ($$et{HandlerType}
|
|
1394
|
+
# (allow empty sample description for non-audio/video handler types, eg. 'url ', 'meta')
|
|
1395
|
+
if ($$et{HandlerType}) {
|
|
1396
1396
|
my $grp = $$et{CUR_WRITE_GROUP} || $parent;
|
|
1397
1397
|
$et->Error("$msg for $grp");
|
|
1398
1398
|
return $rtnErr;
|
|
@@ -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);
|
|
31
31
|
|
|
32
|
-
$VERSION = '12.
|
|
32
|
+
$VERSION = '12.41';
|
|
33
33
|
$RELEASE = '';
|
|
34
34
|
@ISA = qw(Exporter);
|
|
35
35
|
%EXPORT_TAGS = (
|
package/bin/pp_build_exe.args
CHANGED
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
# 10) Copy zip archive to web servers.
|
|
22
22
|
# 11) Update zip file version in link and text of html/index.html.
|
|
23
23
|
#------------------------------------------------------------------------------
|
|
24
|
-
-T exiftool-12.
|
|
25
|
-
#--info=FileVersion=12.4.
|
|
26
|
-
#--info=ProductVersion=12.4.
|
|
27
|
-
##"--info=Build Date=2022:
|
|
24
|
+
-T exiftool-12.41
|
|
25
|
+
#--info=FileVersion=12.4.1.0
|
|
26
|
+
#--info=ProductVersion=12.4.1.0
|
|
27
|
+
##"--info=Build Date=2022:04:07 11:32:41-04:00"
|
|
28
28
|
##"--info=Bundled Perl Version=ActivePerl 5.24.0"
|
|
29
29
|
##"--info=LegalCopyright=Copyright (c) 2003-2022, Phil Harvey"
|
|
30
30
|
##"--info=ProductName=ExifTool"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "exiftool-vendored.pl",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.41.0",
|
|
4
4
|
"description": "Vendored perl ExifTool for Node.js",
|
|
5
5
|
"main": "./index.js",
|
|
6
6
|
"homepage": "https://github.com/mceachen/exiftool-vendored.pl#readme",
|
|
@@ -30,9 +30,20 @@
|
|
|
30
30
|
"test": "mocha",
|
|
31
31
|
"update": "bash -c ./update.sh"
|
|
32
32
|
},
|
|
33
|
+
"release-it": {
|
|
34
|
+
"hooks": {
|
|
35
|
+
"before:init": [
|
|
36
|
+
"yarn install",
|
|
37
|
+
"yarn test"
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
"github": {
|
|
41
|
+
"release": true
|
|
42
|
+
}
|
|
43
|
+
},
|
|
33
44
|
"devDependencies": {
|
|
34
|
-
"mocha": "^9.2.
|
|
35
|
-
"prettier": "^2.
|
|
45
|
+
"mocha": "^9.2.2",
|
|
46
|
+
"prettier": "^2.6.2",
|
|
36
47
|
"rimraf": "^3.0.2"
|
|
37
48
|
}
|
|
38
49
|
}
|