exiftool-vendored.pl 12.40.0 → 12.43.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 +71 -6
- 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 +54 -22
- package/bin/lib/Image/ExifTool/Apple.pm +11 -2
- package/bin/lib/Image/ExifTool/Canon.pm +45 -22
- package/bin/lib/Image/ExifTool/DJI.pm +60 -1
- package/bin/lib/Image/ExifTool/DNG.pm +8 -2
- package/bin/lib/Image/ExifTool/DarwinCore.pm +12 -1
- package/bin/lib/Image/ExifTool/Exif.pm +11 -2
- package/bin/lib/Image/ExifTool/FlashPix.pm +14 -1
- package/bin/lib/Image/ExifTool/FujiFilm.pm +21 -2
- package/bin/lib/Image/ExifTool/Geotag.pm +24 -4
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +10 -8
- package/bin/lib/Image/ExifTool/ID3.pm +5 -5
- package/bin/lib/Image/ExifTool/LNK.pm +5 -2
- package/bin/lib/Image/ExifTool/MacOS.pm +9 -9
- package/bin/lib/Image/ExifTool/MakerNotes.pm +17 -1
- package/bin/lib/Image/ExifTool/Nikon.pm +21 -6
- package/bin/lib/Image/ExifTool/NikonCustom.pm +4 -1
- package/bin/lib/Image/ExifTool/Olympus.pm +22 -2
- package/bin/lib/Image/ExifTool/PDF.pm +2 -1
- package/bin/lib/Image/ExifTool/Panasonic.pm +10 -1
- package/bin/lib/Image/ExifTool/Parrot.pm +1 -0
- package/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- package/bin/lib/Image/ExifTool/Photoshop.pm +6 -5
- package/bin/lib/Image/ExifTool/QuickTime.pm +1 -1
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +40 -8
- package/bin/lib/Image/ExifTool/README +5 -1
- package/bin/lib/Image/ExifTool/Samsung.pm +233 -2
- package/bin/lib/Image/ExifTool/Shortcuts.pm +3 -1
- package/bin/lib/Image/ExifTool/Sony.pm +35 -31
- package/bin/lib/Image/ExifTool/TagLookup.pm +2510 -2479
- package/bin/lib/Image/ExifTool/TagNames.pod +137 -85
- package/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +2 -2
- package/bin/lib/Image/ExifTool/Writer.pl +2 -1
- package/bin/lib/Image/ExifTool.pm +40 -16
- package/bin/lib/Image/ExifTool.pod +13 -4
- 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
|
@@ -4,13 +4,78 @@ ExifTool Version History
|
|
|
4
4
|
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
|
6
6
|
|
|
7
|
-
Note: The most recent production release is Version 12.
|
|
7
|
+
Note: The most recent production release is Version 12.42. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
July 6, 2022 - Version 12.43
|
|
11
|
+
|
|
12
|
+
- Added the ability to geotag from Google Takeout JSON files
|
|
13
|
+
- Added a few new Canon RF LensType values and a couple of new CanonModelID's
|
|
14
|
+
(thanks Norbert Wasser)
|
|
15
|
+
- Added new values to a couple of FujiFilm tags (thanks Greybeard)
|
|
16
|
+
- Added a new Nikon LensID (thanks BertJan Bakker)
|
|
17
|
+
- Recognize Autodesk Revit files (but don't yet support reading metadata)
|
|
18
|
+
- Decode DriveSerialNumber from LNK files (github #145)
|
|
19
|
+
- Decode Apple FocusDistanceRange (thanks Neal Krawetz)
|
|
20
|
+
- Made a number of Sony SR2SubIFD tags writable
|
|
21
|
+
- Tolerate dashes instead of colons as date separators in -geotag CSV files
|
|
22
|
+
- Patched to read new format accelerometer data from Insta360 files
|
|
23
|
+
- Patched to avoid outputting some Unknown tags when the -validate option is
|
|
24
|
+
used after a previously -execute'd command used the -u option
|
|
25
|
+
- Fixed names of Canon G9 WB levels tags (changed from GRGB to GRBG) (thanks
|
|
26
|
+
Christoph)
|
|
27
|
+
- Fixed typo in new Olympus AISubjectTrackingMode value
|
|
28
|
+
- Fixed "use of undefined value" warning when reading DJI metadata
|
|
29
|
+
- API Changes:
|
|
30
|
+
- Added IgnoreTags option
|
|
31
|
+
|
|
32
|
+
June 1, 2022 - Version 12.42 (production release)
|
|
33
|
+
|
|
34
|
+
- Added support for reading maker notes from Panasonic DC-GH6 videos
|
|
35
|
+
- Added conversion for Samsung MCCData
|
|
36
|
+
- Added a new Nikon LensID (thanks Chris)
|
|
37
|
+
- Added a few new Canon LensType values
|
|
38
|
+
- Added a couple of new Olympus StackedImage values (thanks Eberhard)
|
|
39
|
+
- Added a few new values for some Nikon Settings tags (thanks Warren Hatch)
|
|
40
|
+
- Added a "lang:" element to the -json output for alternate language tags when
|
|
41
|
+
-D, -H or -t is used
|
|
42
|
+
- Update DNG writer to not issue an error when writing DNG 1.6 files
|
|
43
|
+
- Decode information from DJI "ae_dbg_info" maker notes
|
|
44
|
+
- Decode Olympus AISubjectTrackingMode
|
|
45
|
+
- Changed ExifTool FileSize print conversion to use kB/MB/GB units instead of
|
|
46
|
+
KiB/MiB/GiB
|
|
47
|
+
- Changed "is not shiftable" warning to appear in -v (instead of just -v3)
|
|
48
|
+
output
|
|
49
|
+
- Patched to allow PDF Encrypt object to be "null"
|
|
50
|
+
- Fixed bug reading ICC_Profile 'meta' tags
|
|
51
|
+
|
|
52
|
+
Apr. 7, 2022 - Version 12.41
|
|
53
|
+
|
|
54
|
+
- Added support for "OM SYSTEM" maker notes
|
|
55
|
+
- Added 2 new Sony LensType values (thanks Jos Roost)
|
|
56
|
+
- Added some new Canon lenses (thanks LibRaw)
|
|
57
|
+
- Added a new Nikon LensID (thanks Bert Ligtvoet)
|
|
58
|
+
- Added a new Canon ContinuousDrive value (thanks Wolfgang Gulcker)
|
|
59
|
+
- Enhanced -v0 option to also print new file name when renaming, moving or
|
|
60
|
+
copying a file
|
|
61
|
+
- Updated xmp2exif.args and exif2xmp.args helper files to reflect the IPTC
|
|
62
|
+
Photometadata Mapping Guidelines version 2202.1
|
|
63
|
+
- Made "Invalid Xxx data" a minor warning for MakerNote data
|
|
64
|
+
- Patched to allow writing of MP4 videos which have other tracks with a
|
|
65
|
+
missing sample description entry
|
|
66
|
+
- Patched MacOS version to specify directory for external utilities (setfile,
|
|
67
|
+
xattr, stat, mdls and osascript from /usr/bin, and tag from /usr/local/bin)
|
|
68
|
+
- Fixed long-standing problem where Windows version could behave differently
|
|
69
|
+
for -if conditions containing undefined tags
|
|
70
|
+
- Fixed problem where -W+! combined with -j or -X produced invalid JSON or XML
|
|
71
|
+
when processing multiple files
|
|
72
|
+
- Fixed potential "uninitialized value $time in division" runtime warning when
|
|
73
|
+
reading MP4 videos
|
|
74
|
+
|
|
10
75
|
Feb. 9, 2022 - Version 12.40
|
|
11
76
|
|
|
12
|
-
- Added a new Nikon LensID (thanks Wolfgang Exler)
|
|
13
77
|
- Added PageCount tag to return the number of pages in a multi-page TIFF
|
|
78
|
+
- Added a new Nikon LensID (thanks Wolfgang Exler)
|
|
14
79
|
- Added a few more Sony LensTypes (thanks Jos Roost)
|
|
15
80
|
- Decode some new Canon tags (thanks Mark Reid)
|
|
16
81
|
- Decode another Nikon Z9 tag (thanks Warren Hatch)
|
|
@@ -20,14 +85,14 @@ Feb. 9, 2022 - Version 12.40
|
|
|
20
85
|
- Updated photoshop_paths.config to include WorkingPath
|
|
21
86
|
- Patched to allow writing of MP4 videos which have url tracks with a missing
|
|
22
87
|
sample description entry
|
|
23
|
-
- Fixed
|
|
24
|
-
|
|
88
|
+
- Fixed deep recursion error when reading multi-page TIFF images with more
|
|
89
|
+
than 100 pages
|
|
25
90
|
- Fixed potential deep recursion runtime error when writing nested XMP
|
|
26
91
|
structures
|
|
27
92
|
- Fixed warning which could be generated when writing new
|
|
28
93
|
Composite:GPSCoordinates tag
|
|
29
|
-
- Fixed
|
|
30
|
-
|
|
94
|
+
- Fixed description of GPR (General Purpose RAW) file type
|
|
95
|
+
- Fixed typo in the name of a new Nikon tag (thanks Herb)
|
|
31
96
|
|
|
32
97
|
Jan. 13, 2022 - Version 12.39
|
|
33
98
|
|
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.43.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.43
|
|
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.43';
|
|
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) {
|
|
@@ -2533,8 +2554,9 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2533
2554
|
if ($showTagID or $outFormat < 0) {
|
|
2534
2555
|
$val = { val => $val };
|
|
2535
2556
|
if ($showTagID) {
|
|
2536
|
-
my $id = $et->GetTagID($tag);
|
|
2557
|
+
my ($id, $lang) = $et->GetTagID($tag);
|
|
2537
2558
|
$id = sprintf('0x%.4x', $id) if $showTagID eq 'H' and $id =~ /^\d+$/;
|
|
2559
|
+
$$val{lang} = $lang if $lang;
|
|
2538
2560
|
$$val{id} = $id;
|
|
2539
2561
|
}
|
|
2540
2562
|
if ($tabFormat) {
|
|
@@ -2674,9 +2696,17 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2674
2696
|
}
|
|
2675
2697
|
}
|
|
2676
2698
|
if ($outfile) {
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2699
|
+
if ($textOverwrite & 0x02) {
|
|
2700
|
+
# save state of this file if we may be appending
|
|
2701
|
+
$outComma{$outfile} = $comma;
|
|
2702
|
+
$outTrailer{$outfile} = '';
|
|
2703
|
+
$outTrailer{$outfile} .= $sectTrailer and $sectTrailer = '' if $sectTrailer;
|
|
2704
|
+
$outTrailer{$outfile} .= $fileTrailer if $fileTrailer;
|
|
2705
|
+
} else {
|
|
2706
|
+
# write section and file trailers before closing the file
|
|
2707
|
+
print $fp $sectTrailer and $sectTrailer = '' if $sectTrailer;
|
|
2708
|
+
print $fp $fileTrailer if $fileTrailer;
|
|
2709
|
+
}
|
|
2680
2710
|
close($fp);
|
|
2681
2711
|
undef $tmpText;
|
|
2682
2712
|
if ($lineCount) {
|
|
@@ -2926,7 +2956,7 @@ sub SetImageInfo($$$)
|
|
|
2926
2956
|
}
|
|
2927
2957
|
}
|
|
2928
2958
|
if (defined $outfile) {
|
|
2929
|
-
$verbose and print $vout "'${infile}' --> '${outfile}'\n";
|
|
2959
|
+
defined $verbose and print $vout "'${infile}' --> '${outfile}'\n";
|
|
2930
2960
|
# create output directory if necessary
|
|
2931
2961
|
CreateDirectory($outfile);
|
|
2932
2962
|
# set temporary file (automatically erased on abnormal exit)
|
|
@@ -5136,13 +5166,14 @@ The following examples demonstrate basic use of the B<-csv> option:
|
|
|
5136
5166
|
# update metadata for all images in a directory from CSV file
|
|
5137
5167
|
exiftool -csv=a.csv dir
|
|
5138
5168
|
|
|
5139
|
-
|
|
5140
|
-
the API MissingTagValue is set to an empty string
|
|
5169
|
+
When importing, empty values are ignored unless the B<-f> option is used and
|
|
5170
|
+
the API MissingTagValue is set to an empty string (in which case the tag is
|
|
5141
5171
|
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
|
|
5172
|
+
(ie. ExifTool will not attempt to write these tags with a CSV import), but
|
|
5173
|
+
all other columns are imported. To force a tag to be deleted, use the B<-f>
|
|
5174
|
+
option and set the value to "-" in the CSV file (or to the MissingTagValue
|
|
5175
|
+
if this API option was used). Multiple databases may be imported in a
|
|
5176
|
+
single command.
|
|
5146
5177
|
|
|
5147
5178
|
When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
|
|
5148
5179
|
tag headings. If the B<-a> option is used to allow duplicate tag names, the
|
|
@@ -5436,7 +5467,7 @@ with this command:
|
|
|
5436
5467
|
|
|
5437
5468
|
produces output like this:
|
|
5438
5469
|
|
|
5439
|
-
-- Generated by ExifTool 12.
|
|
5470
|
+
-- Generated by ExifTool 12.43 --
|
|
5440
5471
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5441
5472
|
(f/5.6, 1/60s, ISO 100)
|
|
5442
5473
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5555,7 +5586,9 @@ level greater than 0, most other options are ignored and normal console
|
|
|
5555
5586
|
output is suppressed unless specific tags are extracted. Using B<-v0>
|
|
5556
5587
|
causes the console output buffer to be flushed after each line (which may be
|
|
5557
5588
|
useful to avoid delays when piping exiftool output), and prints the name of
|
|
5558
|
-
each processed file when writing
|
|
5589
|
+
each processed file when writing and the new file name when renaming,
|
|
5590
|
+
moving or copying. Verbose levels above B<-v0> do not flush after each
|
|
5591
|
+
line. Also see the B<-progress> option.
|
|
5559
5592
|
|
|
5560
5593
|
=item B<-w>[+|!] I<EXT> or I<FMT> (B<-textOut>)
|
|
5561
5594
|
|
|
@@ -5768,11 +5801,10 @@ an XMP extension for the output file.
|
|
|
5768
5801
|
=item B<-a>, B<--a> (B<-duplicates>, B<--duplicates>)
|
|
5769
5802
|
|
|
5770
5803
|
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.
|
|
5804
|
+
default, duplicate tags are suppressed when reading unless the B<-ee> or B<-X>
|
|
5805
|
+
options are used or the Duplicates option is enabled in the configuration file.
|
|
5806
|
+
When writing, this option allows multiple Warning messages to be shown.
|
|
5807
|
+
Duplicate tags are always extracted when copying.
|
|
5776
5808
|
|
|
5777
5809
|
=item B<-e> (B<--composite>)
|
|
5778
5810
|
|
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool::Exif;
|
|
16
16
|
use Image::ExifTool::PLIST;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.06';
|
|
19
19
|
|
|
20
20
|
# Apple iPhone metadata (ref PH)
|
|
21
21
|
%Image::ExifTool::Apple::Main = (
|
|
@@ -66,7 +66,16 @@ $VERSION = '1.05';
|
|
|
66
66
|
Writable => 'string',
|
|
67
67
|
Notes => 'unique ID for all images in a burst',
|
|
68
68
|
},
|
|
69
|
-
#
|
|
69
|
+
0x000c => { # ref forum13710 (Neal Krawetz)
|
|
70
|
+
Name => 'FocusDistanceRange',
|
|
71
|
+
Writable => 'rational64s',
|
|
72
|
+
Count => 2,
|
|
73
|
+
PrintConv => q{
|
|
74
|
+
my @a = split ' ', $val;
|
|
75
|
+
sprintf('%.2f - %.2f m', $a[0] <= $a[1] ? @a : reverse @a);
|
|
76
|
+
},
|
|
77
|
+
PrintConvInv => '$val =~ s/ - //; $val =~ s/ ?m$//; $val',
|
|
78
|
+
},
|
|
70
79
|
# 0x000d - int32s: 0,1,6,20,24,32,40
|
|
71
80
|
# 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
|
|
72
81
|
# 0x000f - int32s: 2,3
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.59';
|
|
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)
|
|
@@ -197,6 +197,7 @@ $VERSION = '4.56';
|
|
|
197
197
|
44 => 'Canon EF 90-300mm f/4.5-5.6', #32
|
|
198
198
|
45 => 'Canon EF-S 18-55mm f/3.5-5.6 [II]', #PH (same ID for version II, ref 20)
|
|
199
199
|
46 => 'Canon EF 28-90mm f/4-5.6', #32
|
|
200
|
+
# 46 => 'Tamron 28-300mm f/3.5-6.3 Di VC PZD (A010)', # (also possibly?)
|
|
200
201
|
47 => 'Zeiss Milvus 35mm f/2 or 50mm f/2', #IB
|
|
201
202
|
47.1 => 'Zeiss Milvus 50mm f/2 Makro', #IB
|
|
202
203
|
47.2 => 'Zeiss Milvus 135mm f/2 ZE', #IB
|
|
@@ -208,6 +209,7 @@ $VERSION = '4.56';
|
|
|
208
209
|
53 => 'Canon EF-S 18-55mm f/3.5-5.6 III', #Jon Charnas
|
|
209
210
|
54 => 'Canon EF-S 55-250mm f/4-5.6 IS II', #47
|
|
210
211
|
60 => 'Irix 11mm f/4', #50
|
|
212
|
+
63 => 'Irix 30mm F1.4 Dragonfly', #IB
|
|
211
213
|
80 => 'Canon TS-E 50mm f/2.8L Macro', #42
|
|
212
214
|
81 => 'Canon TS-E 90mm f/2.8L Macro', #42
|
|
213
215
|
82 => 'Canon TS-E 135mm f/4L Macro', #42
|
|
@@ -570,7 +572,9 @@ $VERSION = '4.56';
|
|
|
570
572
|
61494 => 'Canon CN-E 85mm T1.3 L F', #PH
|
|
571
573
|
61495 => 'Canon CN-E 135mm T2.2 L F', #PH
|
|
572
574
|
61496 => 'Canon CN-E 35mm T1.5 L F', #PH
|
|
573
|
-
|
|
575
|
+
#
|
|
576
|
+
# see RFLensType tag for master list of 61182 RF lenses
|
|
577
|
+
#
|
|
574
578
|
61182 => 'Canon RF 50mm F1.2L USM or other Canon RF Lens',
|
|
575
579
|
61182.1 => 'Canon RF 24-105mm F4L IS USM',
|
|
576
580
|
61182.2 => 'Canon RF 28-70mm F2L USM',
|
|
@@ -593,13 +597,23 @@ $VERSION = '4.56';
|
|
|
593
597
|
'61182.19' => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
|
594
598
|
'61182.20' => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
|
595
599
|
'61182.21' => 'Canon RF 70-200mm F4L IS USM', #42
|
|
596
|
-
'61182.22' => 'Canon RF
|
|
597
|
-
'61182.23' => 'Canon RF
|
|
598
|
-
'61182.24' => 'Canon RF
|
|
599
|
-
'61182.25' => 'Canon RF
|
|
600
|
-
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM
|
|
601
|
-
'61182.27' => 'Canon RF
|
|
602
|
-
|
|
600
|
+
'61182.22' => 'Canon RF 100mm F2.8L MACRO IS USM', #42
|
|
601
|
+
'61182.23' => 'Canon RF 50mm F1.8 STM', #42
|
|
602
|
+
'61182.24' => 'Canon RF 14-35mm F4L IS USM', #IB
|
|
603
|
+
'61182.25' => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
604
|
+
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
605
|
+
'61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
606
|
+
'61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
607
|
+
'61182.29' => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
608
|
+
'61182.30' => 'Canon RF 16mm F2.8 STM', #42
|
|
609
|
+
'61182.31' => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
610
|
+
'61182.32' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
611
|
+
'61182.33' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
612
|
+
'61182.34' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
613
|
+
# we need the RFLensType values for the following...
|
|
614
|
+
'61182.35' => 'Canon RF 800mm F5.6L IS USM', #PH (NC)
|
|
615
|
+
'61182.36' => 'Canon RF 1200mm F8L IS USM', #PH (NC)
|
|
616
|
+
'61182.37' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
|
603
617
|
65535 => 'n/a',
|
|
604
618
|
);
|
|
605
619
|
|
|
@@ -956,6 +970,8 @@ $VERSION = '4.56';
|
|
|
956
970
|
0x80000437 => 'EOS 90D', #IB
|
|
957
971
|
0x80000450 => 'EOS R3', #42
|
|
958
972
|
0x80000453 => 'EOS R6', #PH
|
|
973
|
+
0x80000464 => 'EOS R7', #42
|
|
974
|
+
0x80000465 => 'EOS R10', #42
|
|
959
975
|
0x80000467 => 'PowerShot ZOOM',
|
|
960
976
|
0x80000468 => 'EOS M50 Mark II / Kiss M2', #IB
|
|
961
977
|
0x80000520 => 'EOS D2000C', #IB
|
|
@@ -1018,7 +1034,7 @@ my %canonWhiteBalance = (
|
|
|
1018
1034
|
20 => 'PC Set4', #PH
|
|
1019
1035
|
21 => 'PC Set5', #PH
|
|
1020
1036
|
# 22 - Custom 2?
|
|
1021
|
-
23 => 'Auto (ambience priority)', #PH (5DS)
|
|
1037
|
+
23 => 'Auto (ambience priority)', #PH (5DS) (perhaps this needs re-thinking?: forum13295)
|
|
1022
1038
|
# 30 - Click White Balance?
|
|
1023
1039
|
# 31 - Shot Settings?
|
|
1024
1040
|
# 137 - Tungsten?
|
|
@@ -2133,6 +2149,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2133
2149
|
4 => 'Continuous, Low', #PH
|
|
2134
2150
|
5 => 'Continuous, High', #PH
|
|
2135
2151
|
6 => 'Silent Single', #PH
|
|
2152
|
+
8 => 'Continuous, High+', #WolfgangGulcker
|
|
2136
2153
|
# ref A: https://exiftool.org/forum/index.php/topic,5701.msg27843.html#msg27843
|
|
2137
2154
|
9 => 'Single, Silent', #A
|
|
2138
2155
|
10 => 'Continuous, Silent', #A
|
|
@@ -6517,23 +6534,23 @@ my %ciMaxFocal = (
|
|
|
6517
6534
|
0x02 => 'FacesDetected',
|
|
6518
6535
|
);
|
|
6519
6536
|
|
|
6520
|
-
# G9 white balance information (MakerNotes tag 0x29) (ref IB)
|
|
6537
|
+
# G9 white balance information (MakerNotes tag 0x29) (ref IB, changed ref forum13640)
|
|
6521
6538
|
%Image::ExifTool::Canon::WBInfo = (
|
|
6522
6539
|
%binaryDataAttrs,
|
|
6523
6540
|
NOTES => 'WB tags for the Canon G9.',
|
|
6524
6541
|
FORMAT => 'int32u',
|
|
6525
6542
|
FIRST_ENTRY => 1,
|
|
6526
6543
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
|
6527
|
-
0x02 => { Name => '
|
|
6528
|
-
0x0a => { Name => '
|
|
6529
|
-
0x12 => { Name => '
|
|
6530
|
-
0x1a => { Name => '
|
|
6531
|
-
0x22 => { Name => '
|
|
6532
|
-
0x2a => { Name => '
|
|
6533
|
-
0x32 => { Name => '
|
|
6534
|
-
0x3a => { Name => '
|
|
6535
|
-
0x42 => { Name => '
|
|
6536
|
-
0x4a => { Name => '
|
|
6544
|
+
0x02 => { Name => 'WB_GRBGLevelsAuto', Format => 'int32s[4]' },
|
|
6545
|
+
0x0a => { Name => 'WB_GRBGLevelsDaylight', Format => 'int32s[4]' },
|
|
6546
|
+
0x12 => { Name => 'WB_GRBGLevelsCloudy', Format => 'int32s[4]' },
|
|
6547
|
+
0x1a => { Name => 'WB_GRBGLevelsTungsten', Format => 'int32s[4]' },
|
|
6548
|
+
0x22 => { Name => 'WB_GRBGLevelsFluorescent', Format => 'int32s[4]' },
|
|
6549
|
+
0x2a => { Name => 'WB_GRBGLevelsFluorHigh', Format => 'int32s[4]' },
|
|
6550
|
+
0x32 => { Name => 'WB_GRBGLevelsFlash', Format => 'int32s[4]' },
|
|
6551
|
+
0x3a => { Name => 'WB_GRBGLevelsUnderwater', Format => 'int32s[4]' },
|
|
6552
|
+
0x42 => { Name => 'WB_GRBGLevelsCustom1', Format => 'int32s[4]' },
|
|
6553
|
+
0x4a => { Name => 'WB_GRBGLevelsCustom2', Format => 'int32s[4]' },
|
|
6537
6554
|
);
|
|
6538
6555
|
|
|
6539
6556
|
# yet more face detect information (MakerNotes tag 0x2f) - PH (G12)
|
|
@@ -6790,13 +6807,19 @@ my %ciMaxFocal = (
|
|
|
6790
6807
|
276 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF1.4x',
|
|
6791
6808
|
277 => 'Canon RF 100-500mm F4.5-7.1L IS USM + RF2x',
|
|
6792
6809
|
278 => 'Canon RF 70-200mm F4L IS USM', #42
|
|
6810
|
+
279 => 'Canon RF 100mm F2.8L MACRO IS USM', #42
|
|
6793
6811
|
280 => 'Canon RF 50mm F1.8 STM', #42
|
|
6794
6812
|
281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
|
|
6813
|
+
282 => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
6795
6814
|
283 => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
6796
6815
|
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
6797
6816
|
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
6817
|
+
286 => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
6798
6818
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
|
6799
|
-
|
|
6819
|
+
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
6820
|
+
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
6821
|
+
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
6822
|
+
292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
6800
6823
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6801
6824
|
},
|
|
6802
6825
|
},
|
|
@@ -11,11 +11,14 @@ package Image::ExifTool::DJI;
|
|
|
11
11
|
|
|
12
12
|
use strict;
|
|
13
13
|
use vars qw($VERSION);
|
|
14
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
|
14
15
|
use Image::ExifTool::Exif;
|
|
15
16
|
use Image::ExifTool::XMP;
|
|
16
17
|
use Image::ExifTool::GPS;
|
|
17
18
|
|
|
18
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.06';
|
|
20
|
+
|
|
21
|
+
sub ProcessDJIInfo($$$);
|
|
19
22
|
|
|
20
23
|
my %convFloat2 = (
|
|
21
24
|
PrintConv => 'sprintf("%+.2f", $val)',
|
|
@@ -44,6 +47,29 @@ my %convFloat2 = (
|
|
|
44
47
|
0x0b => { Name => 'CameraRoll', Writable => 'float', %convFloat2 },
|
|
45
48
|
);
|
|
46
49
|
|
|
50
|
+
# DJI debug maker notes
|
|
51
|
+
%Image::ExifTool::DJI::Info = (
|
|
52
|
+
PROCESS_PROC => \&ProcessDJIInfo,
|
|
53
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
54
|
+
NOTES => 'Tags written by some DJI drones.',
|
|
55
|
+
VARS => { LONG_TAGS => 2 },
|
|
56
|
+
ae_dbg_info => { Name => 'AEDebugInfo' },
|
|
57
|
+
ae_histogram_info => { Name => 'AEHistogramInfo' },
|
|
58
|
+
ae_local_histogram => { Name => 'AELocalHistogram' },
|
|
59
|
+
ae_liveview_histogram_info => { Name => 'AELiveViewHistogramInfo' },
|
|
60
|
+
ae_liveview_local_histogram => { Name => 'AELiveViewLocalHistogram' },
|
|
61
|
+
awb_dbg_info => { Name => 'AWBDebugInfo' },
|
|
62
|
+
af_dbg_info => { Name => 'AFDebugInfo' },
|
|
63
|
+
hiso => { Name => 'Histogram' },
|
|
64
|
+
xidiri => { Name => 'Xidiri' },
|
|
65
|
+
'GimbalDegree(Y,P,R)'=> { Name => 'GimbalDegree' },
|
|
66
|
+
'FlightDegree(Y,P,R)'=> { Name => 'FlightDegree' },
|
|
67
|
+
adj_dbg_info => { Name => 'ADJDebugInfo' },
|
|
68
|
+
sensor_id => { Name => 'SensorID' },
|
|
69
|
+
'FlightSpeed(X,Y,Z)' => { Name => 'FlightSpeed' },
|
|
70
|
+
hyperlapse_dbg_info => { Name => 'HyperlapsDebugInfo' },
|
|
71
|
+
);
|
|
72
|
+
|
|
47
73
|
# thermal parameters in APP4 of DJI ZH20T images (ref forum11401)
|
|
48
74
|
%Image::ExifTool::DJI::ThermalParams = (
|
|
49
75
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -134,6 +160,39 @@ my %convFloat2 = (
|
|
|
134
160
|
},
|
|
135
161
|
);
|
|
136
162
|
|
|
163
|
+
#------------------------------------------------------------------------------
|
|
164
|
+
# Process DJI infor (ref PH)
|
|
165
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
166
|
+
# Returns: 1 on success
|
|
167
|
+
sub ProcessDJIInfo($$$)
|
|
168
|
+
{
|
|
169
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
170
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
171
|
+
my $dirStart = $$dirInfo{DirStart} || 0;
|
|
172
|
+
my $dirLen = $$dirInfo{DirLen} || (length($$dataPt) - $dirStart);
|
|
173
|
+
if ($dirStart) {
|
|
174
|
+
my $buff = substr($$dataPt, $dirStart, $dirLen);
|
|
175
|
+
$dataPt = \$buff;
|
|
176
|
+
}
|
|
177
|
+
while ($$dataPt =~ /\G\[(.*?)\](?=(\[|$))/sg) {
|
|
178
|
+
my ($tag, $val) = split /:/, $1, 2;
|
|
179
|
+
next unless defined $tag and defined $val;
|
|
180
|
+
if ($val =~ /^([\x20-\x7f]+)\0*$/) {
|
|
181
|
+
$val = $1;
|
|
182
|
+
} else {
|
|
183
|
+
my $buff = $val;
|
|
184
|
+
$val = \$buff;
|
|
185
|
+
}
|
|
186
|
+
if (not $$tagTbl{$tag} and $tag=~ /^[-_a-zA-Z0-9]+$/) {
|
|
187
|
+
my $name = $tag;
|
|
188
|
+
$name =~ s/_([a-z])/_\U$1/g;
|
|
189
|
+
AddTagToTable($tagTbl, $tag, { Name => Image::ExifTool::MakeTagName($name) });
|
|
190
|
+
}
|
|
191
|
+
$et->HandleTag($tagTbl, $tag, $val);
|
|
192
|
+
}
|
|
193
|
+
return 1;
|
|
194
|
+
}
|
|
195
|
+
|
|
137
196
|
__END__
|
|
138
197
|
|
|
139
198
|
=head1 NAME
|
|
@@ -680,8 +680,14 @@ sub ProcessAdobeMakN($$$)
|
|
|
680
680
|
my $dataPos = $$dirInfo{DataPos};
|
|
681
681
|
my $hdrLen = 6;
|
|
682
682
|
|
|
683
|
-
# hack for extra 12 bytes in MakN header of JPEG converted to DNG
|
|
684
|
-
# (4 bytes "00 00 00 01" followed by 8 unknown bytes)
|
|
683
|
+
# 2018-09-27: hack for extra 12 bytes in MakN header of JPEG converted to DNG
|
|
684
|
+
# by Adobe Camera Raw (4 bytes "00 00 00 01" followed by 8 unknown bytes)
|
|
685
|
+
# - this is because CameraRaw copies the maker notes from the wrong location
|
|
686
|
+
# in a JPG image (off by 12 bytes presumably due to the JPEG headers)
|
|
687
|
+
# - this hack won't work in most cases because the extra bytes are not consistent
|
|
688
|
+
# since they are just the data that existed in the JPG before the maker notes
|
|
689
|
+
# - also, the last 12 bytes of the maker notes will be missing
|
|
690
|
+
# - 2022-04-26: this bug still exists in Camera Raw 14.3
|
|
685
691
|
$hdrLen += 12 if $len >= 18 and substr($$dataPt, $start+6, 4) eq "\0\0\0\x01";
|
|
686
692
|
|
|
687
693
|
my $dirStart = $start + $hdrLen; # pointer to maker note directory
|