exiftool_vendored 12.39.0 → 12.41.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +45 -0
  3. data/bin/MANIFEST +1 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/arg_files/exif2xmp.args +5 -0
  8. data/bin/arg_files/xmp2exif.args +6 -0
  9. data/bin/config_files/acdsee.config +6 -6
  10. data/bin/config_files/photoshop_paths.config +30 -7
  11. data/bin/config_files/picasa_faces.config +1 -1
  12. data/bin/config_files/pix4d.config +2 -2
  13. data/bin/config_files/tiff_version.config +2 -2
  14. data/bin/exiftool +52 -21
  15. data/bin/lib/Image/ExifTool/Canon.pm +78 -4
  16. data/bin/lib/Image/ExifTool/Exif.pm +44 -20
  17. data/bin/lib/Image/ExifTool/Geotag.pm +3 -2
  18. data/bin/lib/Image/ExifTool/MacOS.pm +9 -9
  19. data/bin/lib/Image/ExifTool/MakerNotes.pm +12 -1
  20. data/bin/lib/Image/ExifTool/Nikon.pm +39 -12
  21. data/bin/lib/Image/ExifTool/Olympus.pm +7 -6
  22. data/bin/lib/Image/ExifTool/QuickTime.pm +9 -5
  23. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
  24. data/bin/lib/Image/ExifTool/Samsung.pm +5 -1
  25. data/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
  26. data/bin/lib/Image/ExifTool/Sony.pm +10 -4
  27. data/bin/lib/Image/ExifTool/TagLookup.pm +6360 -6354
  28. data/bin/lib/Image/ExifTool/TagNames.pod +22 -2
  29. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -3
  30. data/bin/lib/Image/ExifTool/WriteXMP.pl +2 -0
  31. data/bin/lib/Image/ExifTool/XMP.pm +9 -1
  32. data/bin/lib/Image/ExifTool/XMPStruct.pl +21 -7
  33. data/bin/lib/Image/ExifTool.pm +11 -3
  34. data/bin/lib/Image/ExifTool.pod +7 -6
  35. data/bin/perl-Image-ExifTool.spec +1 -1
  36. data/lib/exiftool_vendored/version.rb +1 -1
  37. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2d53b9cc65e2639e29d980c2b92790a0d85681aadf1f27d66f40e70a51d0541
4
- data.tar.gz: cd65063aad0bf3648e5ec77b588d7fb310c7b41d48e78b6a227313c105e4367b
3
+ metadata.gz: 71c2e8314b54966900545a4af41762c9c6d8974544187d914e82eb7c71b4ab3c
4
+ data.tar.gz: f277eb099be9d35e2979e80ce97629f824acb338059360ca7f41ef15e1d43fbe
5
5
  SHA512:
6
- metadata.gz: 721c7fbca5113a76cd888d2f4d97a97ab5d8cd9a62a08728ebb7c2af1dda30bc9ad282360fa1d2b926f076bb22f967cf1a1d163ed08da366ad02428f91a12a66
7
- data.tar.gz: f3e1628449b2f58cce8b38c3544419cad0bce36ff6b87bca5c066becabb0ac34d689d5cb2f95a4e29d91d6477abdd74156aff7283afe349ebb736c5af4b74223
6
+ metadata.gz: 7fac789e834098bd6506929bac1aef023b5573d08d67cdda9b521884d1d946bc875e9ff7d19ad3a68d46c098030bb43e14bb7510d7233a5f0f842d5f3c712047
7
+ data.tar.gz: 3d18856320e32e9c86258212c1ff7c909b388747604f8b7fbe8cf2e001cb12d672affc8986acc82a8c03f1a61ecd447a556b44b63670b659180d5ab2de3664b4
data/bin/Changes CHANGED
@@ -7,6 +7,51 @@ 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
+
33
+ Feb. 9, 2022 - Version 12.40
34
+
35
+ - Added PageCount tag to return the number of pages in a multi-page TIFF
36
+ - Added a new Nikon LensID (thanks Wolfgang Exler)
37
+ - Added a few more Sony LensTypes (thanks Jos Roost)
38
+ - Decode some new Canon tags (thanks Mark Reid)
39
+ - Decode another Nikon Z9 tag (thanks Warren Hatch)
40
+ - Decode Nikon NKSC GPSImgDirection (thanks Olaf)
41
+ - Improved handling of empty XMP structures in lists
42
+ - Tolerate leading UTF-8 BOM in -geotag log files
43
+ - Updated photoshop_paths.config to include WorkingPath
44
+ - Patched to allow writing of MP4 videos which have url tracks with a missing
45
+ sample description entry
46
+ - Fixed deep recursion error when reading multi-page TIFF images with more
47
+ than 100 pages
48
+ - Fixed potential deep recursion runtime error when writing nested XMP
49
+ structures
50
+ - Fixed warning which could be generated when writing new
51
+ Composite:GPSCoordinates tag
52
+ - Fixed description of GPR (General Purpose RAW) file type
53
+ - Fixed typo in the name of a new Nikon tag (thanks Herb)
54
+
10
55
  Jan. 13, 2022 - Version 12.39
11
56
 
12
57
  - Added a new Pentax LensType (thanks Christian Shulz)
data/bin/MANIFEST CHANGED
@@ -194,6 +194,7 @@ html/idiosyncracies.html
194
194
  html/index.html
195
195
  html/install.html
196
196
  html/metafiles.html
197
+ html/mistakes.html
197
198
  html/overview.png
198
199
  html/standards.html
199
200
  html/struct.html
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.39"
50
+ "version" : "12.41"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.39
31
+ version: 12.41
data/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.39.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.39
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
@@ -97,8 +97,8 @@ my %sACDSeeRegionStruct = (
97
97
  # new XMP namespaces for ACDSee regions
98
98
  'Image::ExifTool::XMP::Main' => {
99
99
  'acdsee-rs' => { # <-- must be the same as the NAMESPACE prefix
100
- SubDirectory => {
101
- TagTable => 'Image::ExifTool::UserDefined::ACDSeeRegions'
100
+ SubDirectory => {
101
+ TagTable => 'Image::ExifTool::UserDefined::ACDSeeRegions'
102
102
  },
103
103
  },
104
104
  },
@@ -147,7 +147,7 @@ my %sACDSeeRegionStruct = (
147
147
  },
148
148
  ValueConv => q{
149
149
  my ($rgn, @newRgns);
150
- my $rgns = ref $val[0] eq 'ARRAY' ? $val[0] : [ $val[0] ];
150
+ my $rgns = ref $val[0] eq 'ARRAY' ? $val[0] : [ $val[0] ];
151
151
  foreach $rgn (@$rgns) {
152
152
  my %newRgn = ( Type => 'Face' );
153
153
  if ($$rgn{RegionBoundary} and $$rgn{RegionBoundary}{RbShape} eq 'rectangle') {
@@ -220,13 +220,13 @@ my %sACDSeeRegionStruct = (
220
220
  # the "Struct" entry defines the structure fields
221
221
  Struct => {
222
222
  # optional structure name (used for warning messages only)
223
- STRUCT_NAME => 'ACDSee RegionInfo',
223
+ STRUCT_NAME => 'ACDSee RegionInfo',
224
224
  RegionList => {
225
225
  FlatName => 'Region',
226
226
  Struct => \%sACDSeeRegionStruct,
227
227
  List => 'Bag',
228
228
  },
229
- AppliedToDimensions => {
229
+ AppliedToDimensions => {
230
230
  FlatName => 'RegionAppliedToDimensions',Struct => \%sACDSeeDimensions },
231
231
  },
232
232
  },
@@ -239,7 +239,7 @@ my %sACDSeeRegionStruct = (
239
239
  RegionInfoACDSeeAppliedToDimensionsW => 'ACDSeeRegionAppliedToDimensionsW',
240
240
  RegionInfoACDSeeRegionListDLYAreaH => 'ACDSeeRegionDLYAreaH',
241
241
  RegionInfoACDSeeRegionListDLYAreaW => 'ACDSeeRegionDLYAreaW',
242
- RegionInfoACDSeeRegionListDLYAreaX => 'ACDSeeRegionDLYAreaX',
242
+ RegionInfoACDSeeRegionListDLYAreaX => 'ACDSeeRegionDLYAreaX',
243
243
  RegionInfoACDSeeRegionListDLYAreaY => 'ACDSeeRegionDLYAreaY',
244
244
  RegionInfoACDSeeRegionListALGAreaH => 'ACDSeeRegionALGAreaH',
245
245
  RegionInfoACDSeeRegionListALGAreaW => 'ACDSeeRegionALGAreaW',
@@ -34,15 +34,15 @@
34
34
  # Usage:
35
35
  #
36
36
  # 1) Extract Photoshop path names:
37
- #
37
+ #
38
38
  # exiftool -config photoshop_paths.config -allpaths FILE
39
39
  #
40
40
  # 2) Extract Photoshop path names and anchor points:
41
- #
41
+ #
42
42
  # exiftool -config photoshop_paths.config -userparam anchor -allpaths FILE
43
43
  #
44
44
  # 3) Extract Photoshop path anchor points only:
45
- #
45
+ #
46
46
  # exiftool -config photoshop_paths.config -userparam anchoronly -allpaths FILE
47
47
  #
48
48
  # 4) Copy all Photoshop paths from one file (SRC) to another (DST):
@@ -68,6 +68,7 @@
68
68
  # subpath respectively
69
69
  # 2017/06/03 - PH Added TotalPathPoints
70
70
  # 2017/07/17 - PH Added UniquePathPoints
71
+ # 2022/02/03 - PH Added WorkingPath and WorkingPathPix
71
72
  #
72
73
  # References: https://exiftool.org/forum/index.php/topic,1621.0.html
73
74
  # https://exiftool.org/forum/index.php/topic,3910.0.html
@@ -77,10 +78,11 @@
77
78
  # Print Photoshop path name and/or anchor points
78
79
  # Inputs: 0) reference to Photoshop path data, 1) ExifTool object reference
79
80
  # 2-3) optional image width/height to convert anchor points to pixels
81
+ # 4) optional path name
80
82
  # Returns: String with name and/or Bezier knot anchor points
81
- sub PrintPath($$;$$)
83
+ sub PrintPath($$;$$$)
82
84
  {
83
- my ($val, $et, $w, $h) = @_;
85
+ my ($val, $et, $w, $h, $nm) = @_;
84
86
  my ($pos, $name, @rtn);
85
87
  my $len = length($$val) - 26;
86
88
 
@@ -88,8 +90,9 @@ sub PrintPath($$;$$)
88
90
  if ($$val =~ m{.*/#(.{0,255})#/$}s) {
89
91
  $name = $1;
90
92
  $len -= length($1) + 4;
93
+ $name = $nm if defined $nm and not length $name;
91
94
  } else {
92
- $name = '<none>';
95
+ $name = defined $nm ? $nm : '<none>';
93
96
  }
94
97
  my $anchorOnly = $et->Options(UserParam => 'AnchorOnly');
95
98
  push @rtn, $name unless $anchorOnly;
@@ -118,7 +121,7 @@ sub PrintPath($$;$$)
118
121
  }
119
122
 
120
123
  %Image::ExifTool::Shortcuts::UserDefined = (
121
- # create "AllPaths" shortcut for all Photoshop path tags
124
+ # create "AllPaths" shortcut for all Photoshop path tags (except WorkingPath)
122
125
  AllPaths => [
123
126
  map { sprintf "Path%x", $_ } (0x7d0 .. 0xbb5),
124
127
  ],
@@ -133,6 +136,14 @@ sub PrintPath($$;$$)
133
136
  Name => 'OriginPathInfo',
134
137
  Flags => [ qw(Writable Protected Binary SetResourceName) ],
135
138
  },
139
+ 0x401 => {
140
+ Name => 'WorkingPath',
141
+ Flags => [ qw(Writable Protected Binary ConvertBinary SetResourceName) ],
142
+ PrintConv => sub {
143
+ my ($val, $et) = @_;
144
+ PrintPath($val, $et, undef, undef, 'Work Path');
145
+ },
146
+ },
136
147
  # generate tags for each of the 998 possible Photoshop paths
137
148
  map { $_ => {
138
149
  Name => sprintf('Path%x', $_),
@@ -143,6 +154,7 @@ sub PrintPath($$;$$)
143
154
  },
144
155
  'Image::ExifTool::Composite' => {
145
156
  PathCount => {
157
+ # (PathCount statistics do not include WorkingPath)
146
158
  Desire => {
147
159
  map { $_-0x7d0 => sprintf('Path%x', $_) } (0x7d0 .. 0xbb5),
148
160
  },
@@ -180,6 +192,17 @@ sub PrintPath($$;$$)
180
192
  Require => 'PathCount',
181
193
  ValueConv => '$$self{TotalPathPoints}',
182
194
  },
195
+ WorkingPathPix => {
196
+ Require => {
197
+ 0 => 'ImageWidth',
198
+ 1 => 'ImageHeight',
199
+ 2 => 'WorkingPath',
200
+ },
201
+ ValueConv => sub {
202
+ my ($val, $et) = @_;
203
+ PrintPath($$val[2], $et, $$val[0], $$val[1], 'Work Path');
204
+ },
205
+ },
183
206
  map { sprintf('PathPix%x', $_) => {
184
207
  Require => {
185
208
  0 => 'ImageWidth',
@@ -63,7 +63,7 @@
63
63
  # 2015/05/12 - PH Minor code tweaks
64
64
  # 2015/10/26 - BKW Round off area sizes to 7 decimal places
65
65
  # 2016/01/18 - BKW Improved rounding algorithm
66
- # 2016/05/14 - BKW Increased rounding to 9 decimal places (Max Picasa accepts),
66
+ # 2016/05/14 - BKW Increased rounding to 9 decimal places (Max Picasa accepts),
67
67
  # moved rounding operation to subroutine
68
68
  #
69
69
  # References: https://exiftool.org/forum/index.php/topic,6354.0.html
@@ -16,13 +16,13 @@
16
16
 
17
17
  %Image::ExifTool::UserDefined = (
18
18
  'Image::ExifTool::XMP::Main' => {
19
- Camera => {
19
+ Camera => {
20
20
  SubDirectory => {
21
21
  TagTable => 'Image::ExifTool::UserDefined::Camera',
22
22
  },
23
23
  },
24
24
  },
25
- );
25
+ );
26
26
 
27
27
  %Image::ExifTool::UserDefined::Camera = (
28
28
  GROUPS => { 0 => 'XMP', 1 => 'XMP-Camera', 2 => 'Camera' },
@@ -68,9 +68,9 @@ sub has_defined {
68
68
  35 => 'EXIF:TransferRange', # TransferRange (342/0x0156)
69
69
  36 => 'EXIF:YCbCrCoefficients', # YCbCrCoefficients (529/0x0211)
70
70
  37 => 'EXIF:YCbCrPositioning', # YCbCrPositioning (531/0x0213)
71
- 38 => 'EXIF:YCbCrSubSampling', # YCbCrSubSampling (530/0x0212)
71
+ 38 => 'EXIF:YCbCrSubSampling', # YCbCrSubSampling (530/0x0212)
72
72
  # Other tags to check
73
- 39 => 'EXIF:PhotometricInterpretation', # PhotometricInterpretation (262/0x0106)
73
+ 39 => 'EXIF:PhotometricInterpretation', # PhotometricInterpretation (262/0x0106)
74
74
  40 => 'EXIF:Compression', # Compression (259/0x0103)
75
75
  },
76
76
  ValueConv => q{
data/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.39';
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
- print $sectTrailer if $sectTrailer and not $textOut;
1825
- print $fileTrailer if $fileTrailer and not $textOut and not $fileHeader;
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
- # write section and file trailers before closing the file
2678
- print $fp $sectTrailer and $sectTrailer = '' if $sectTrailer;
2679
- print $fp $fileTrailer if $fileTrailer;
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
- Empty values are ignored when importing (unless the B<-f> option is used and
5140
- the API MissingTagValue is set to an empty string, in which case the tag is
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). To
5143
- force a tag to be deleted, use the B<-f> option and set the value to "-" in
5144
- the CSV file (or to the MissingTagValue if this API option was used).
5145
- Multiple databases may be imported in a single command.
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.39 --
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. Also see the B<-progress> option.
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
- B<-X> options are used or the Duplicates option is enabled in the
5773
- configuration file. This option has an affect when writing only to allow
5774
- duplicate Warning messages to be shown. Duplicate tags are always extracted
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.55';
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.55';
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.55';
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
  );
@@ -970,8 +974,8 @@ my %canonQuality = (
970
974
  4 => 'RAW',
971
975
  5 => 'Superfine',
972
976
  7 => 'CRAW', #42
973
- 130 => 'Normal Movie', #22
974
- 131 => 'Movie (2)', #PH (7DmkII 1920x1080)
977
+ 130 => 'Light (RAW)', #github#119
978
+ 131 => 'Standard (RAW)', #github#119
975
979
  );
976
980
  my %canonImageSize = (
977
981
  -1 => 'n/a',
@@ -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?
@@ -2053,6 +2057,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2053
2057
  TagTable => 'Image::ExifTool::Canon::HDRInfo',
2054
2058
  }
2055
2059
  },
2060
+ 0x4026 => { #github#119
2061
+ Name => 'LogInfo',
2062
+ SubDirectory => {
2063
+ Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
2064
+ TagTable => 'Image::ExifTool::Canon::LogInfo',
2065
+ }
2066
+ },
2056
2067
  0x4028 => { #PH
2057
2068
  Name => 'AFConfig', # (AFTabInfo)
2058
2069
  SubDirectory => {
@@ -2126,6 +2137,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2126
2137
  4 => 'Continuous, Low', #PH
2127
2138
  5 => 'Continuous, High', #PH
2128
2139
  6 => 'Silent Single', #PH
2140
+ 8 => 'Continuous, High+', #WolfgangGulcker
2129
2141
  # ref A: https://exiftool.org/forum/index.php/topic,5701.msg27843.html#msg27843
2130
2142
  9 => 'Single, Silent', #A
2131
2143
  10 => 'Continuous, Silent', #A
@@ -6789,6 +6801,9 @@ my %ciMaxFocal = (
6789
6801
  284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
6790
6802
  285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
6791
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
6792
6807
  #xxx => 'Canon RF 100mm F2.8L MACRO IS USM',
6793
6808
  # Note: add new RF lenses to %canonLensTypes with ID 61182
6794
6809
  },
@@ -8701,6 +8716,65 @@ my %filterConv = (
8701
8716
  # 3 - maybe related to AutoImageAlign?
8702
8717
  );
8703
8718
 
8719
+ # More color information (MakerNotes tag 0x4026) (ref github issue #119)
8720
+ %Image::ExifTool::Canon::LogInfo = (
8721
+ %binaryDataAttrs,
8722
+ FORMAT => 'int32s',
8723
+ FIRST_ENTRY => 1,
8724
+ PRIORITY => 0,
8725
+ 4 => {
8726
+ Name => 'CompressionFormat',
8727
+ PrintConv => {
8728
+ 0 => 'Editing (ALL-I)',
8729
+ 1 => 'Standard (IPB)',
8730
+ 2 => 'Light (IPB)',
8731
+ 3 => 'Motion JPEG',
8732
+ 4 => 'RAW', # either Standard or Light, depending on Quality
8733
+ },
8734
+ },
8735
+ 6 => { # 0 to 7
8736
+ Name => 'Sharpness',
8737
+ RawConv => '$val == 0x7fffffff ? undef : $val',
8738
+ },
8739
+ 7 => { # -4 to 4
8740
+ Name => 'Saturation',
8741
+ RawConv => '$val == 0x7fffffff ? undef : $val',
8742
+ %Image::ExifTool::Exif::printParameter,
8743
+ },
8744
+ 8 => { # -4 to 4
8745
+ Name => 'ColorTone',
8746
+ RawConv => '$val == 0x7fffffff ? undef : $val',
8747
+ %Image::ExifTool::Exif::printParameter,
8748
+ },
8749
+ 9 => {
8750
+ Name => 'ColorSpace2',
8751
+ RawConv => '$val == 0x7fffffff ? undef : $val',
8752
+ PrintConv => {
8753
+ 0 => 'BT.709',
8754
+ 1 => 'BT.2020',
8755
+ 2 => 'CinemaGamut',
8756
+ },
8757
+ },
8758
+ 10 => {
8759
+ Name => 'ColorMatrix',
8760
+ RawConv => '$val == 0x7fffffff ? undef : $val',
8761
+ PrintConv => {
8762
+ 0 => 'EOS Original',
8763
+ 1 => 'Neutral',
8764
+ },
8765
+ },
8766
+ 11 => {
8767
+ Name => 'CanonLogVersion', # (increases dynamic range of sensor data)
8768
+ RawConv => '$val == 0x7fffffff ? undef : $val',
8769
+ PrintConv => {
8770
+ 0 => 'OFF',
8771
+ 1 => 'CLogV1',
8772
+ 2 => 'CLogV2', # (NC)
8773
+ 3 => 'CLogV3',
8774
+ },
8775
+ },
8776
+ );
8777
+
8704
8778
  # AF configuration info (MakerNotes tag 0x4028) (ref PH)
8705
8779
  %Image::ExifTool::Canon::AFConfig = (
8706
8780
  %binaryDataAttrs,