exiftool_vendored 12.33.0 → 12.37.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +66 -0
  3. data/bin/META.json +1 -1
  4. data/bin/META.yml +1 -1
  5. data/bin/README +2 -2
  6. data/bin/exiftool +65 -37
  7. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +11 -2
  8. data/bin/lib/Image/ExifTool/Canon.pm +156 -10
  9. data/bin/lib/Image/ExifTool/Charset.pm +2 -0
  10. data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
  11. data/bin/lib/Image/ExifTool/Exif.pm +13 -1
  12. data/bin/lib/Image/ExifTool/FLIR.pm +33 -8
  13. data/bin/lib/Image/ExifTool/GIF.pm +5 -1
  14. data/bin/lib/Image/ExifTool/GPS.pm +14 -10
  15. data/bin/lib/Image/ExifTool/ICC_Profile.pm +96 -4
  16. data/bin/lib/Image/ExifTool/Jpeg2000.pm +108 -11
  17. data/bin/lib/Image/ExifTool/Nikon.pm +992 -18
  18. data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -1
  19. data/bin/lib/Image/ExifTool/NikonSettings.pm +135 -71
  20. data/bin/lib/Image/ExifTool/PDF.pm +5 -3
  21. data/bin/lib/Image/ExifTool/PNG.pm +1 -0
  22. data/bin/lib/Image/ExifTool/QuickTime.pm +17 -3
  23. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +26 -1
  24. data/bin/lib/Image/ExifTool/README +4 -0
  25. data/bin/lib/Image/ExifTool/Sony.pm +29 -11
  26. data/bin/lib/Image/ExifTool/TagInfoXML.pm +9 -4
  27. data/bin/lib/Image/ExifTool/TagLookup.pm +6437 -5843
  28. data/bin/lib/Image/ExifTool/TagNames.pod +1292 -46
  29. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +10 -0
  30. data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -11
  31. data/bin/lib/Image/ExifTool/Writer.pl +50 -5
  32. data/bin/lib/Image/ExifTool/XMP.pm +119 -30
  33. data/bin/lib/Image/ExifTool/XMP2.pl +3 -2
  34. data/bin/lib/Image/ExifTool.pm +71 -8
  35. data/bin/lib/Image/ExifTool.pod +9 -1
  36. data/bin/perl-Image-ExifTool.spec +1 -1
  37. data/lib/exiftool_vendored/version.rb +1 -1
  38. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2579a96159a6bebe1550982f10cbb416ee1760ac092cb135c725e8704a66ed8
4
- data.tar.gz: 22a1963fc56a05e435fada1b55e74df2fcbd1782bd84a902595950ebe25ac923
3
+ metadata.gz: 76b6a0d2fdfef75ff151b28b383281cd0e5cbff7b324c7529b5972eea00fa2ab
4
+ data.tar.gz: 15f2d5ff22bb9eebdbe7e843d61c8e60ae3cc17d50d212c59e05411baa221937
5
5
  SHA512:
6
- metadata.gz: bab490d296c90b99ed805c0a4b80b48f5d08282657f17f97ca856af36e6e4b32799c9162be40e3f0e4996d892530edebe582f37961df6ebb9717a892e935f3a2
7
- data.tar.gz: 8ac18abe9d185ce0b4fcf43909554caba45c904b73b10a8ae6e93c4011e120fd299b1d05f4dd404d7d1ab9c255a48b96c57d31057286f42e5a41717429ba2864
6
+ metadata.gz: '05955adc090e482158e1c5e55f4aa6205434c9433e8b5369c45f4c030f59088e8efe5e91df54cf6cd44f973ad845e8436a958948ca2baa25bc1aea371a311d74'
7
+ data.tar.gz: 7a6c12e5f45dcd7efed082469de08ddb6e4eb21596f73f3c6abde5f6faf5318be5fe53e0f6aa6a88391f9e088d68c06682e042cd94f3f4f08656a6a2d76fa404
data/bin/Changes CHANGED
@@ -7,6 +7,69 @@ 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
+ Dec. 8, 2021 - Version 12.37
11
+
12
+ - Decode timed GPS from Vantrue S1 dashcam MP4 videos
13
+ - Decode ColorData tags for the Canon EOS R3 (thanks LibRaw)
14
+ - Decode more makernotes tags for Nikon Z cameras (thanks Warren Hatch)
15
+ - Extract TransparentColor from GIF images
16
+ - Improved parsing of input time values for GPSTimeStamp to properly handle a
17
+ "." separator
18
+ - Improved warning when incorrectly using "
19
+
20
+ Nov. 16, 2021 - Version 12.36
21
+
22
+ - IMPORTANT: Fixed bug introduced in 12.35 which corrupted JPEG 2000 images
23
+ when removing all metadata with -all=
24
+ - Added feature to bypass processing of specified XMP namespaces and
25
+ properties (to improve performance in cases where the XMP suffers from
26
+ Adobe-editing bloat)
27
+ - Added a number of new XMP tags used by Lightroom 11.0
28
+ - Decode a number of new Nikon tags (thanks Warren Hatch)
29
+ - Made the Composite GPSPosition tag writable
30
+ - Fixed erroneous "Skipped unknown bytes after JPEG SOS" warning
31
+ - Fixed group for new writable Jpeg2000 color tags in -listx output
32
+ - Fixed problem finding files in Windows when using wildcards in file name and
33
+ a drive letter with no slash
34
+
35
+ Nov. 11, 2021 - Version 12.35
36
+
37
+ - Added ability to write ICC_Profile (and other color specifications) to
38
+ Jpeg2000 images
39
+ - Added %o code to -W option format string
40
+ - Added %f code to -d option for fractional seconds
41
+ - Added a couple of new Sony LensType values (thanks Jos Roost)
42
+ - Added a new CanonModelID (thanks Norbert Wasser)
43
+ - Added a new Nikon LensID
44
+ - Decode more Nikon MakerNotes tags for some new models (thanks Warren Hatch)
45
+ - Extract ThumbnailImage from some DJI drone videos
46
+ - Enhanced -ee option to extract metadata from all frames in a SEQ file
47
+ - Patched to avoid possible "Use of uninitialized value" runtime warning
48
+ - Fixed a couple of misspelt new ICC_Profile tag names (thanks Herb)
49
+ - Fixed problem generating the correct file extension when extracting
50
+ OriginalRawImage from a DNG file using the -W option with the %s format code
51
+ - Fixed bug introduced in 11.91 where exiftool couldn't find its libraries
52
+ when run via a soft link. Also changed to look for config file in the link
53
+ target directory instead of the directory of the link itself
54
+
55
+ Oct. 27, 2021 - Version 12.34
56
+
57
+ - Added support for ICC.2:2019 (Profile version 5.0.0 - iccMAX) color profiles
58
+ - Added ability to detect/delete a Windows Zone.Identifier alternate data
59
+ stream (ADS) via the new ZoneIdentifier tag (thanks Alex Xu)
60
+ - Added support for the Sony ILCE-7M4 (thanks Jos Roost)
61
+ - Added a new Sony lens (thanks LibRaw and Jos Roost)
62
+ - Added a new SonyModelID (thanks LibRaw)
63
+ - Added a new Canon RF lens (thanks Norbert Wasser)
64
+ - Improved handling of some SVG files
65
+ - Patched -overwrite_original_in_place option to open the output file in
66
+ update mode rather than write mode (to allow some write optimizations on
67
+ certain filesystems) (thanks Joel Low)
68
+ - Fixed case of tag ID for new XMP-iptcExt:EventID (thanks Michael Steidl)
69
+ - Fixed problem extracting ICC_Profile information from some PDF files
70
+ - API Changes:
71
+ - Added QuickTimePad option
72
+
10
73
  Oct. 16, 2021 - Version 12.33
11
74
 
12
75
  - Added support for DNG version 1.6.0.0
@@ -135,6 +198,8 @@ May 20, 2021 - Version 12.26 (production release)
135
198
  - Fixed problem which could cause a "Wide character" warning and generate a
136
199
  corrupted output file when writing some illegal values
137
200
 
201
+ History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
202
+
138
203
  Apr. 22, 2021 - Version 12.25
139
204
 
140
205
  - JPEG XL support is now official
@@ -617,6 +682,7 @@ Mar. 19, 2020 - Version 11.92
617
682
 
618
683
  Mar. 5, 2020 - Version 11.91
619
684
 
685
+ - Added undocumented -xpath option for use by alternate Windows version
620
686
  - Decode a couple of new Panasonic tags
621
687
  - Documented -ec option (available since version 11.54)
622
688
  - Reverted -htmlDump fix of 11.90 because it broke more than it fixed, and
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.33"
50
+ "version" : "12.37"
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.33
31
+ version: 12.37
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.33.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.33
110
+ gzip -dc Image-ExifTool-12.37.tar.gz | tar -xf -
111
+ cd Image-ExifTool-12.37
112
112
  ./exiftool t/images/ExifTool.jpg
113
113
 
114
114
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -10,24 +10,26 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.33';
13
+ my $version = '12.37';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
- my $exeDir;
17
16
  BEGIN {
18
17
  # (undocumented -xpath option added in 11.91, must come before other options)
19
- $Image::ExifTool::exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
18
+ my $exePath = @ARGV && lc($ARGV[0]) eq '-xpath' && shift() ? $^X : $0;
20
19
  # get exe directory
21
- $exeDir = ($Image::ExifTool::exePath =~ /(.*)[\\\/]/) ? $1 : '.';
20
+ my $exeDir = ($exePath =~ /(.*)[\\\/]/) ? $1 : '.';
21
+ my $incDir = ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
22
22
  if (-l $0) {
23
23
  my $lnk = eval { readlink $0 };
24
24
  if (defined $lnk) {
25
25
  my $lnkDir = ($lnk =~ /(.*)[\\\/]/) ? $1 : '.';
26
26
  $exeDir = (($lnk =~ m(^/)) ? '' : $exeDir . '/') . $lnkDir;
27
+ $incDir = "$exeDir/lib";
27
28
  }
28
29
  }
30
+ $Image::ExifTool::exeDir = $exeDir; # use our exeDir for loading config file
29
31
  # add lib directory at start of include path
30
- unshift @INC, ($0 =~ /(.*)[\\\/]/) ? "$1/lib" : './lib';
32
+ unshift @INC, $incDir;
31
33
  # load or disable config file if specified
32
34
  if (@ARGV and lc($ARGV[0]) eq '-config') {
33
35
  shift;
@@ -757,7 +759,7 @@ for (;;) {
757
759
  }
758
760
  my $fp = ($stayOpen == 1 ? \*STAYOPEN : \*ARGFILE);
759
761
  unless ($mt->Open($fp, $argFile)) {
760
- unless ($argFile !~ /^\// and $mt->Open($fp, "$exeDir/$argFile")) {
762
+ unless ($argFile !~ /^\// and $mt->Open($fp, "$Image::ExifTool::exeDir/$argFile")) {
761
763
  Error "Error opening arg file $argFile\n";
762
764
  $badCmd = 1;
763
765
  next
@@ -1235,7 +1237,7 @@ for (;;) {
1235
1237
  $textOverwrite += 2 if $t2 =~ /\+/; # append
1236
1238
  if ($t1 ne 'W' and lc($t1) ne 'tagout') {
1237
1239
  undef $tagOut;
1238
- } elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgs]/) {
1240
+ } elsif ($textOverwrite >= 2 and $textOut !~ /%[-+]?\d*[.:]?\d*[lu]?[tgso]/) {
1239
1241
  $tagOut = 0; # append tags to one file
1240
1242
  } else {
1241
1243
  $tagOut = 1; # separate file for each tag
@@ -2365,7 +2367,8 @@ TAG: foreach $tag (@foundTags) {
2365
2367
  }
2366
2368
  my @groups = $et->GetGroup($tag);
2367
2369
  $outfile and close($fp), undef($tmpText); # (shouldn't happen)
2368
- ($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext);
2370
+ my $org = $et->GetValue('OriginalRawFileName') || $et->GetValue('OriginalFileName');
2371
+ ($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext, $org);
2369
2372
  $fp or ++$countBad, next TAG;
2370
2373
  $tmpText = $outfile unless $append;
2371
2374
  }
@@ -3061,12 +3064,14 @@ sub SetImageInfo($$$)
3061
3064
  # temporarily disable CTRL-C during this critical operation
3062
3065
  $critical = 1;
3063
3066
  undef $tmpFile; # handle deletion of temporary file ourself
3064
- if ($et->Open(\*ORIG_FILE, $file, '>')) {
3067
+ if ($et->Open(\*ORIG_FILE, $file, '+<')) {
3065
3068
  binmode(ORIG_FILE);
3066
3069
  while (read(NEW_FILE, $buff, 65536)) {
3067
3070
  print ORIG_FILE $buff or $err = 1;
3068
3071
  }
3069
3072
  close(NEW_FILE);
3073
+ # Handle files being shorter than the original
3074
+ eval { truncate(ORIG_FILE, tell(ORIG_FILE)) } or $err = 1;
3070
3075
  close(ORIG_FILE) or $err = 1;
3071
3076
  if ($err) {
3072
3077
  Warn "Couldn't overwrite in place - $file\n";
@@ -3462,18 +3467,26 @@ sub ConvertBinary($)
3462
3467
  }
3463
3468
 
3464
3469
  #------------------------------------------------------------------------------
3465
- # Compare two tag values to see if they are equal
3470
+ # Compare ValueConv and PrintConv values of a tag to see if they are equal
3466
3471
  # Inputs: 0) value1, 1) value2
3467
3472
  # Returns: true if they are equal
3468
3473
  sub IsEqual($$)
3469
3474
  {
3470
- return 1 if ref $_[0] eq 'SCALAR' or $_[0] eq $_[1];
3471
- return 0 if ref $_[0] ne 'ARRAY' or ref $_[1] ne 'ARRAY' or
3472
- @{$_[0]} ne @{$_[1]};
3473
- # test all elements of an array
3474
- my $i = 0;
3475
- for ($i=0; $i<scalar(@{$_[0]}); ++$i) {
3476
- return 0 if $_[0][$i] ne $_[1][$i];
3475
+ my ($a, $b) = @_;
3476
+ # (scalar values are not print-converted)
3477
+ return 1 if $a eq $b or ref $a eq 'SCALAR';
3478
+ if (ref $a eq 'HASH' and ref $b eq 'HASH') {
3479
+ return 0 if scalar(keys %$a) != scalar(keys %$b);
3480
+ my $key;
3481
+ foreach $key (keys %$a) {
3482
+ return 0 unless IsEqual($$a{$key}, $$b{$key});
3483
+ }
3484
+ } else {
3485
+ return 0 if ref $a ne 'ARRAY' or ref $b ne 'ARRAY' or @$a != @$b;
3486
+ my $i;
3487
+ for ($i=0; $i<scalar(@$a); ++$i) {
3488
+ return 0 unless IsEqual($$a[$i], $$b[$i]);
3489
+ }
3477
3490
  }
3478
3491
  return 1;
3479
3492
  }
@@ -3801,7 +3814,7 @@ sub FindFileWindows($$)
3801
3814
  my $enc = $et->Options('CharsetFileName');
3802
3815
  $wildfile = $et->Decode($wildfile, $enc, undef, 'UTF8') if $enc and $enc ne 'UTF8';
3803
3816
  $wildfile =~ tr/\\/\//; # use forward slashes
3804
- my ($dir, $wildname) = ($wildfile =~ m{(.*/)(.*)}) ? ($1, $2) : ('', $wildfile);
3817
+ my ($dir, $wildname) = ($wildfile =~ m{(.*[:/])(.*)}) ? ($1, $2) : ('', $wildfile);
3805
3818
  if ($dir =~ /[*?]/) {
3806
3819
  Warn "Wildcards don't work in the directory specification\n";
3807
3820
  return ();
@@ -3941,7 +3954,7 @@ sub SuggestedExtension($$$)
3941
3954
  $ext = 'xml';
3942
3955
  } elsif ($$valPt =~ /^RIFF....WAVE/s) {
3943
3956
  $ext = 'wav';
3944
- } elsif ($tag eq 'OriginalRawFileData' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
3957
+ } elsif ($tag eq 'OriginalRawImage' and defined($ext = $et->GetValue('OriginalRawFileName'))) {
3945
3958
  $ext =~ s/^.*\.//s;
3946
3959
  $ext = $ext ? lc($ext) : 'raw';
3947
3960
  } elsif ($tag eq 'EXIF') {
@@ -3993,14 +4006,15 @@ sub LoadPrintFormat($)
3993
4006
  # A sort of sprintf for filenames
3994
4007
  # Inputs: 0) format string (%d=dir, %f=file name, %e=ext),
3995
4008
  # 1) source filename or undef to test format string
3996
- # 2-4) [%t %g %s only] tag name, ref to array of group names, suggested extension
4009
+ # 2-4) [%t %g %s %o only] tag name, ref to array of group names,
4010
+ # suggested extension, original raw file name
3997
4011
  # Returns: new filename or undef on error (or if no file and fmt contains token)
3998
4012
  sub FilenameSPrintf($;$@)
3999
4013
  {
4000
4014
  my ($fmt, $file, @extra) = @_;
4001
4015
  local $_;
4002
4016
  # return format string straight away if no tokens
4003
- return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgs]/;
4017
+ return $fmt unless $fmt =~ /%[-+]?\d*[.:]?\d*[lu]?[dDfFeEtgso]/;
4004
4018
  return undef unless defined $file;
4005
4019
  CleanFilename($file); # make sure we are using forward slashes
4006
4020
  # split filename into directory, file, extension
@@ -4014,9 +4028,9 @@ sub FilenameSPrintf($;$@)
4014
4028
  }
4015
4029
  $part{F} = $part{f} . $part{E};
4016
4030
  ($part{D} = $part{d}) =~ s{/+$}{};
4017
- @part{qw(t g s)} = @extra;
4031
+ @part{qw(t g s o)} = @extra;
4018
4032
  my ($filename, $pos) = ('', 0);
4019
- while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgs]))/g) {
4033
+ while ($fmt =~ /(%([-+]?)(\d*)([.:]?)(\d*)([lu]?)([dDfFeEtgso]))/g) {
4020
4034
  $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
4021
4035
  $pos = pos($fmt);
4022
4036
  my ($sign, $wid, $dot, $skip, $mod, $code) = ($2, $3, $4, $5 || 0, $6, $7);
@@ -4179,7 +4193,7 @@ sub OpenOutputFile($;@)
4179
4193
  if ($textOut) {
4180
4194
  $outfile = $file;
4181
4195
  CleanFilename($outfile);
4182
- if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgscC]/ or defined $tagOut) {
4196
+ if ($textOut =~ /%[-+]?\d*[.:]?\d*[lun]?[dDfFeEtgsocC]/ or defined $tagOut) {
4183
4197
  # make filename from printf-like $textOut
4184
4198
  $outfile = FilenameSPrintf($textOut, $file, @args);
4185
4199
  return () unless defined $outfile;
@@ -4716,6 +4730,14 @@ group delete (unless a family 2 group is specified, see note 4 below).
4716
4730
  Instead, individual tags may be recovered using the B<-tagsFromFile> option
4717
4731
  (eg. C<-all= -tagsfromfile @ -artist>).
4718
4732
 
4733
+ To speed processing when reading XMP, exclusions in XMP groups also bypass
4734
+ processing of the corresponding XMP property and any contained properties.
4735
+ For example, C<--xmp-crs:all> may speed processing significantly in cases
4736
+ where a large number of XMP-crs tags exist. To use this feature to bypass
4737
+ processing of a specific XMP property, the property name must be used
4738
+ instead of the ExifTool tag name (eg. C<--xmp-crs:dabs>). Also, C<XMP-all>
4739
+ may be used to to indicate any XMP namespace (eg. <C--xmp-all:dabs>).
4740
+
4719
4741
  =item B<->I<TAG>[+-^]B<=>[I<VALUE>]
4720
4742
 
4721
4743
  Write a new value for the specified tag (eg. C<-comment=wow>), or delete the
@@ -4726,7 +4748,8 @@ for more details). C<+=> may also be used to increment numerical values (or
4726
4748
  decrement if I<VALUE> is negative), and C<-=> may be used to conditionally
4727
4749
  delete or replace a tag (see L</WRITING EXAMPLES> for examples). C<^=> is
4728
4750
  used to write an empty string instead of deleting the tag when no I<VALUE>
4729
- is given, but otherwise it is equivalent to C<=>.
4751
+ is given, but otherwise it is equivalent to C<=>, but note that the caret
4752
+ must be quoted on the Windows command line.
4730
4753
 
4731
4754
  I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
4732
4755
  prefixed by optional family numbers, and separated colons. If no group name
@@ -5165,9 +5188,11 @@ various components of a date/time value. The specifics of the I<FMT> syntax
5165
5188
  are system dependent -- consult the C<strftime> man page on your system for
5166
5189
  details. The default format is equivalent to "%Y:%m:%d %H:%M:%S". This
5167
5190
  option has no effect on date-only or time-only tags and ignores timezone
5168
- information if present. Only one B<-d> option may be used per command.
5169
- Requires POSIX::strptime or Time::Piece for the inversion conversion when
5170
- writing.
5191
+ information if present. ExifTool adds a C<%f> format code to represent
5192
+ fractional seconds, and supports an optional width to specify the number of
5193
+ digits after the decimal point (eg. C<%3f> would give something like
5194
+ C<.437>). Only one B<-d> option may be used per command. Requires
5195
+ POSIX::strptime or Time::Piece for the inversion conversion when writing.
5171
5196
 
5172
5197
  =item B<-D> (B<-decimal>)
5173
5198
 
@@ -5394,7 +5419,8 @@ directory if C<#[SECT]> contains C<$directory>). Lines beginning with
5394
5419
  C<#[BODY]> and lines not beginning with C<#> are output for each processed
5395
5420
  file. Lines beginning with C<#[IF]> are not output, but all BODY lines are
5396
5421
  skipped if any tag on an IF line doesn't exist. Other lines beginning with
5397
- C<#> are ignored. For example, this format file:
5422
+ C<#> are ignored. (To output a line beginning with C<#>, use C<#[BODY]#>.)
5423
+ For example, this format file:
5398
5424
 
5399
5425
  # this is a comment line
5400
5426
  #[HEAD]-- Generated by ExifTool $exifToolVersion --
@@ -5408,7 +5434,7 @@ with this command:
5408
5434
 
5409
5435
  produces output like this:
5410
5436
 
5411
- -- Generated by ExifTool 12.33 --
5437
+ -- Generated by ExifTool 12.37 --
5412
5438
  File: a.jpg - 2003:10:31 15:44:19
5413
5439
  (f/5.6, 1/60s, ISO 100)
5414
5440
  File: b.jpg - 2006:05:23 11:57:38
@@ -5663,12 +5689,14 @@ between B<-W> and B<-w>:
5663
5689
 
5664
5690
  1) With B<-W>, a new output file is created for each extracted tag.
5665
5691
 
5666
- 2) B<-W> supports three additional format codes: %t, %g and %s represent
5667
- the tag name, group name, and suggested extension for the output file (based
5668
- on the format of the data). The %g code may be followed by a single digit
5669
- to specify the group family number (eg. %g1), otherwise family 0 is assumed.
5670
- The substring width/position/case specifiers may be used with these format
5671
- codes in exactly the same way as with %f and %e.
5692
+ 2) B<-W> supports four additional format codes: %t, %g and %s represent the
5693
+ tag name, group name, and suggested extension for the output file (based on
5694
+ the format of the data), and %o represents the value of the
5695
+ OriginalRawFileName or OriginalFileName tag from the input file (including
5696
+ extension). The %g code may be followed by a single digit to specify the
5697
+ group family number (eg. %g1), otherwise family 0 is assumed. The substring
5698
+ width/position/case specifiers may be used with these format codes in
5699
+ exactly the same way as with %f and %e.
5672
5700
 
5673
5701
  3) The argument for B<-W> is interpreted as a file name if it contains no
5674
5702
  format codes. (For B<-w>, this would be a file extension.) This change
@@ -5688,7 +5716,7 @@ example, the following pairs of commands give the same result:
5688
5716
  4) Adding the B<-v> option to B<-W> sends a list of the tags and output file
5689
5717
  names to the console instead of giving a verbose dump of the entire file.
5690
5718
  (Unless appending all output to one file for each source file by using
5691
- B<-W+> with an output file I<FMT> that does not contain %t, $g or %s.)
5719
+ B<-W+> with an output file I<FMT> that does not contain %t, $g, %s or %o.)
5692
5720
 
5693
5721
  5) Individual list items are stored in separate files when B<-W> is combined
5694
5722
  with B<-b>, but note that for separate files to be created %c or %C must be
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.45';
38
+ $VERSION = '3.47';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -469,6 +469,11 @@ the PrintConv option is enabled and no time zone is specified. This is
469
469
  because Apple software may display crazy values if the time zone is missing
470
470
  for some tags.
471
471
 
472
+ By default ExifTool will remove null padding from some QuickTime containers
473
+ in Canon CR3 files when writing, but the
474
+ L<QuickTimePad|../ExifTool.html#QuickTimePad> option may be used to preserve
475
+ the original size by padding with nulls if necessary.
476
+
472
477
  See
473
478
  L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
474
479
  for the official specification.
@@ -752,7 +757,7 @@ sub new
752
757
  my (%tagNameInfo, %id, %longID, %longName, %shortName, %tableNum,
753
758
  %tagLookup, %tagExists, %noLookup, %tableWritable, %sepTable, %case,
754
759
  %structs, %compositeModules, %isPlugin, %flattened, %structLookup,
755
- @writePseudo);
760
+ @writePseudo, %dupXmpTag);
756
761
  $self->{TAG_NAME_INFO} = \%tagNameInfo;
757
762
  $self->{ID_LOOKUP} = \%id;
758
763
  $self->{LONG_ID} = \%longID;
@@ -900,6 +905,10 @@ TagID: foreach $tagID (@keys) {
900
905
  foreach (@grps) {
901
906
  warn "Group name starts with 'ID-' for $short $name\n" if /^ID-/i;
902
907
  }
908
+ if ($isXMP and not $$tagInfo{Avoid} and not $$tagInfo{Struct}) {
909
+ $dupXmpTag{$name} and warn "Duplicate XMP tag $name\n";
910
+ $dupXmpTag{$name} = 1;
911
+ }
903
912
  # validate Name (must not start with a digit or else XML output will not be valid;
904
913
  # must not start with a dash or exiftool command line may get confused)
905
914
  if ($name !~ /^[_A-Za-z][-\w]+$/ and