exiftool_vendored 12.57.0 → 12.59.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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +39 -0
  3. data/bin/MANIFEST +3 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/config_files/example.config +1 -0
  8. data/bin/config_files/rotate_regions.config +1 -1
  9. data/bin/exiftool +76 -57
  10. data/bin/lib/Image/ExifTool/AIFF.pm +2 -2
  11. data/bin/lib/Image/ExifTool/APE.pm +2 -2
  12. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -14
  13. data/bin/lib/Image/ExifTool/Canon.pm +26 -6
  14. data/bin/lib/Image/ExifTool/DJI.pm +28 -2
  15. data/bin/lib/Image/ExifTool/Exif.pm +24 -5
  16. data/bin/lib/Image/ExifTool/FlashPix.pm +28 -10
  17. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
  18. data/bin/lib/Image/ExifTool/JPEG.pm +14 -2
  19. data/bin/lib/Image/ExifTool/LIF.pm +10 -2
  20. data/bin/lib/Image/ExifTool/LNK.pm +5 -4
  21. data/bin/lib/Image/ExifTool/MPEG.pm +2 -2
  22. data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
  23. data/bin/lib/Image/ExifTool/Minolta.pm +6 -7
  24. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +9 -1
  25. data/bin/lib/Image/ExifTool/Nikon.pm +390 -114
  26. data/bin/lib/Image/ExifTool/Olympus.pm +87 -7
  27. data/bin/lib/Image/ExifTool/PNG.pm +15 -2
  28. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +27 -1
  29. data/bin/lib/Image/ExifTool/Pentax.pm +8 -5
  30. data/bin/lib/Image/ExifTool/PhaseOne.pm +14 -1
  31. data/bin/lib/Image/ExifTool/Photoshop.pm +3 -3
  32. data/bin/lib/Image/ExifTool/QuickTime.pm +16 -11
  33. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +38 -6
  34. data/bin/lib/Image/ExifTool/README +8 -0
  35. data/bin/lib/Image/ExifTool/RIFF.pm +41 -13
  36. data/bin/lib/Image/ExifTool/Rawzor.pm +2 -2
  37. data/bin/lib/Image/ExifTool/Sigma.pm +4 -4
  38. data/bin/lib/Image/ExifTool/Sony.pm +23 -1
  39. data/bin/lib/Image/ExifTool/TagLookup.pm +4464 -4441
  40. data/bin/lib/Image/ExifTool/TagNames.pod +117 -36
  41. data/bin/lib/Image/ExifTool/Validate.pm +5 -5
  42. data/bin/lib/Image/ExifTool/WriteExif.pl +49 -0
  43. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  44. data/bin/lib/Image/ExifTool/Writer.pl +74 -14
  45. data/bin/lib/Image/ExifTool/XMP.pm +19 -4
  46. data/bin/lib/Image/ExifTool/XMP2.pl +2 -1
  47. data/bin/lib/Image/ExifTool.pm +131 -17
  48. data/bin/lib/Image/ExifTool.pod +40 -5
  49. data/bin/perl-Image-ExifTool.spec +1 -1
  50. data/lib/exiftool_vendored/version.rb +1 -1
  51. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c02a2a1efe1fc3f63f7527ed968432fc73d7e1ebeda7cfbf424413b8907bd0c
4
- data.tar.gz: 5140c2587870d324d63d4d35beb70d1cbbecb92a78fb6ea55d9885cf9f320c1b
3
+ metadata.gz: a40c897eadb8162344b81eedcedd1888cfac911d28c1e5542f8e3d323af06768
4
+ data.tar.gz: a761f6527a380e369e78c34d2c061a9652ae63a3da0b7e70be1854fb8b728ee6
5
5
  SHA512:
6
- metadata.gz: edd012dc39bc24a6b257f147e5d698648c686aa54e1ac04229cd3cd4880a91d96e21f6f017305a6d763826470ef1f990e94221320bd1d7ee0a73fb5cb2b32ab4
7
- data.tar.gz: 78856db2a60493444afe450c663d190553147b651140c2f18a2a2641e8c9bc0d5af7f31bd0db4a5f55c89f72b460119192889f4f10190cad3a21bffae976e630
6
+ metadata.gz: 7edad248448957b58317b1621b2ae5b0c67276ee988ec1fb043403f299d6b0476ab7e79f4a15c345f9c655ff79518235350797b65b4b94cc5f80759511a44759
7
+ data.tar.gz: a4cec80d9709c1145958d4c6590349bdf6b0fc18f041e62962fc736a660d0243a29abc5c68e481198c9b42e584cedc7f1536081c0c59ffd57f90caac704fb0ad
data/bin/Changes CHANGED
@@ -7,6 +7,45 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.50. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Mar. 28, 2023 - Version 12.59
11
+
12
+ - COMPATIBILITY WARNING: Changed the calculated ImageDataMD5 for JPEG images
13
+ to include all data from the SOS to the EOI (including the SOS marker but
14
+ not the EOI marker)
15
+ - Added new -fileNUM option to load tags from alternate files
16
+ - Added family 8 groups for accessing tags from alternate files
17
+ - Added new XMP-et:OriginalImageMD5 tag for storing ImageDataMD5 value
18
+ - Added verbose ImageDataMD5 message for JPEG files
19
+ - Added a new Nikon LensID (thanks Warren Hatch)
20
+ - Decode a new Olympus tag and improved decoding of another (thanks Herb)
21
+ - Decode a couple of new PanasonicRaw tags
22
+ - Decode image coordinates for a couple more VNT object types
23
+ - Enhanced ImageDataMD5 to also support MRW, CR3, PNG, MOV/MP4 and RIFF-based
24
+ files
25
+ - Improved verbose messages when deleting NikonApp trailer
26
+ - Patched to avoid structure warnings when copying tags from Nikon files
27
+ containing NKSC metadata
28
+ - Fixed %-C filename format code to work properly with the -fileOrder and
29
+ -progress options
30
+ - Fixed new ImageDataMD5 tag to work properly with PhaseOne IIQ files
31
+ - Fixed potential ValueConv warning when reading LIF files
32
+ - API Changes:
33
+ - Added SetAlternateFile method
34
+
35
+ Mar. 15, 2023 - Version 12.58
36
+
37
+ - Added Extra ImageDataMD5 tag to calculate MD5 of image data only
38
+ - Added support for reading DJI APP4 and APP7 JPEG segments
39
+ - Added a new SonyModelID value
40
+ - Decode a few new Nikon tags (thanks Warren Hatch)
41
+ - Downgraded "Windows file times" to a minor warning when Win32::API or
42
+ Win32API::File is not installed while reading metadata
43
+ - Patched possible runtime warning when API IgnoreTags option is used to
44
+ ignore FileType
45
+ - Fixed problem extracting NetName from Windows LNK files
46
+ - Fixed issue where the %C filename format code would increment the count on
47
+ an output filename collision, but it is supposed to count the input files
48
+
10
49
  Feb. 23, 2023 - Version 12.57
11
50
 
12
51
  - Added two new Nikon Z lenses (thanks LibRaw)
data/bin/MANIFEST CHANGED
@@ -530,6 +530,8 @@ t/ExifTool_3.out
530
530
  t/ExifTool_30.out
531
531
  t/ExifTool_31.out
532
532
  t/ExifTool_32.out
533
+ t/ExifTool_33.out
534
+ t/ExifTool_34.out
533
535
  t/ExifTool_4.out
534
536
  t/ExifTool_5.out
535
537
  t/ExifTool_6.out
@@ -903,6 +905,7 @@ t/Writer_56.out
903
905
  t/Writer_58.out
904
906
  t/Writer_59.out
905
907
  t/Writer_6.out
908
+ t/Writer_60.out
906
909
  t/Writer_7.out
907
910
  t/Writer_9.out
908
911
  t/XMP.t
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.57"
50
+ "version" : "12.59"
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.57
31
+ version: 12.59
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.57.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.57
110
+ gzip -dc Image-ExifTool-12.59.tar.gz | tar -xf -
111
+ cd Image-ExifTool-12.59
112
112
  ./exiftool t/images/ExifTool.jpg
113
113
 
114
114
  Note: These commands extract meta information from one of the test images.
@@ -210,6 +210,7 @@
210
210
  3 => 'PreviewImage (1)',
211
211
  # (if the MPF has 2 previews, MPImage3 could be the larger one)
212
212
  4 => 'MPImage3',
213
+ 5 => 'JpgFromRaw2', # in RW2 from newer Panasonic models
213
214
  },
214
215
  # ValueConv may also be a code reference
215
216
  # Inputs: 0) reference to list of values, 1) ExifTool object
@@ -17,7 +17,7 @@
17
17
  # RotateMPRegionCW90
18
18
  # RotateMPRegionCW180
19
19
  # RotateMPRegionCW270
20
- # These tags will rotate a MWG Region clockwise 90, 180, or 270 degrees.
20
+ # These tags will rotate an MP Region clockwise 90, 180, or 270 degrees.
21
21
  # Example:
22
22
  # exiftool -config rotate_regions.config "-RegionInfoMP<RotateMPRegionCW90" FILE
23
23
  #
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.57';
14
+ my $version = '12.59';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  BEGIN {
@@ -103,6 +103,7 @@ my @newValues; # list of new tag values to set
103
103
  my @requestTags; # tags to request (for -p or -if option arguments)
104
104
  my @srcFmt; # source file name format strings
105
105
  my @tags; # list of tags to extract
106
+ my %altFile; # alternate files to extract information (keyed by lower-case family 8 group)
106
107
  my %appended; # list of files appended to
107
108
  my %countLink; # count hard and symbolic links made
108
109
  my %created; # list of files we created
@@ -115,6 +116,7 @@ my %outComma; # flag that output text file needs a comma
115
116
  my %outTrailer; # trailer for output text file
116
117
  my %preserveTime; # preserved timestamps for files
117
118
  my %printFmt; # the contents of the print format file
119
+ my %seqFileDir; # file sequence number in each directory
118
120
  my %setTags; # hash of list references for tags to set from files
119
121
  my %setTagsList; # list of other tag lists for multiple -tagsFromFile from the same file
120
122
  my %usedFileName; # lookup for file names we already used in TestName feature
@@ -196,7 +198,7 @@ my $saveCount; # count the number of times we will/did call SaveNewValues()
196
198
  my $scanWritable; # flag to process only writable file types
197
199
  my $sectHeader; # current section header for -p option
198
200
  my $sectTrailer; # section trailer for -p option
199
- my $seqFileBase; # sequential file number at start of directory
201
+ my $seqFileDir; # sequential file number used for %-C
200
202
  my $seqFileNum; # sequential file number used for %C
201
203
  my $setCharset; # character set setting ('default' if not set and -csv -b used)
202
204
  my $showGroup; # number of group to show (may be zero or '')
@@ -255,17 +257,15 @@ my %optArgs = (
255
257
  '-csvdelim' => 1,
256
258
  '-d' => 1, '-dateformat' => 1,
257
259
  '-D' => 0, # necessary to avoid matching lower-case equivalent
258
- '-echo' => 1, '-echo1' => 1, '-echo2' => 1, '-echo3' => 1, '-echo4' => 1,
259
- '-efile' => 1, '-efile1' => 1, '-efile2' => 1, '-efile3' => 1, '-efile4' => 1,
260
- '-efile!' => 1, '-efile1!' => 1, '-efile2!' => 1, '-efile3!' => 1, '-efile4!' => 1,
260
+ '-echo' => 1, '-echo#' => 1,
261
+ '-efile' => 1, '-efile#' => 1, '-efile!' => 1, '-efile#!' => 1,
261
262
  '-ext' => 1, '--ext' => 1, '-ext+' => 1, '--ext+' => 1,
262
263
  '-extension' => 1, '--extension' => 1, '-extension+' => 1, '--extension+' => 1,
263
- '-fileorder' => 1, '-fileorder0' => 1, '-fileorder1' => 1, '-fileorder2' => 1,
264
- '-fileorder3' => 1, '-fileorder4' => 1, '-fileorder5' => 1,
264
+ '-fileorder' => 1, '-fileorder#' => 1,
265
265
  '-geotag' => 1,
266
266
  '-globaltimeshift' => 1,
267
267
  '-i' => 1, '-ignore' => 1,
268
- '-if' => 1, '-if0' => 1, '-if1' => 1, '-if2' => 1, '-if3' => 1, '-if4' => 1, '-if5' => 1,
268
+ '-if' => 1, '-if#' => 1,
269
269
  '-lang' => 0, # (optional arg; cannot begin with "-")
270
270
  '-listitem' => 1,
271
271
  '-o' => 1, '-out' => 1,
@@ -452,6 +452,7 @@ undef %outComma;
452
452
  undef %outTrailer;
453
453
  undef %printFmt;
454
454
  undef %preserveTime;
455
+ undef %seqFileDir;
455
456
  undef %setTags;
456
457
  undef %setTagsList;
457
458
  undef %usedFileName;
@@ -538,7 +539,7 @@ $quiet = 0;
538
539
  $rtnVal = 0;
539
540
  $saveCount = 0;
540
541
  $sectTrailer = '';
541
- $seqFileBase = 0;
542
+ $seqFileDir = 0;
542
543
  $seqFileNum = 0;
543
544
  $tabFormat = 0;
544
545
  $vout = \*STDOUT;
@@ -952,6 +953,10 @@ for (;;) {
952
953
  $mt->Options(FastScan => (length $1 ? $1 : 1));
953
954
  next;
954
955
  }
956
+ if (/^(file\d+)$/i) {
957
+ $altFile{lc $1} = shift or Error("Expecting file name for -file option\n"), $badCmd=1, next;
958
+ next;
959
+ }
955
960
  if (/^fileorder(\d*)$/i) {
956
961
  push @fileOrder, shift if @ARGV;
957
962
  my $num = $1 || 0;
@@ -1941,7 +1946,7 @@ Exit $rtnValApp; # all done
1941
1946
  sub GetImageInfo($$)
1942
1947
  {
1943
1948
  my ($et, $orig) = @_;
1944
- my (@foundTags, $info, $file, $ind);
1949
+ my (@foundTags, $info, $file, $ind, $g8);
1945
1950
 
1946
1951
  # set window title for this file if necessary
1947
1952
  if (defined $windowTitle and $progressCount >= $progressNext) {
@@ -1984,6 +1989,11 @@ sub GetImageInfo($$)
1984
1989
  } else {
1985
1990
  $file = $orig;
1986
1991
  }
1992
+ # set alternate file names
1993
+ foreach $g8 (sort keys %altFile) {
1994
+ my $altName = FilenameSPrintf($altFile{$g8}, $orig);
1995
+ $et->SetAlternateFile($g8, $altName);
1996
+ }
1987
1997
 
1988
1998
  my $pipe = $file;
1989
1999
  if ($doUnzip) {
@@ -2082,6 +2092,8 @@ sub GetImageInfo($$)
2082
2092
  return;
2083
2093
  }
2084
2094
  ++$seqFileNum; # increment our file counter
2095
+ my ($dir) = Image::ExifTool::SplitFileName($orig);
2096
+ $seqFileDir = $seqFileDir{$dir} = ($seqFileDir{$dir} || 0) + 1;
2085
2097
 
2086
2098
  my $lineCount = 0;
2087
2099
  my ($fp, $outfile, $append);
@@ -3743,8 +3755,6 @@ sub ScanDir($$;$)
3743
3755
  $utf8Name = 1;
3744
3756
  }
3745
3757
  return if $ignore{$dir};
3746
- my $oldBase = $seqFileBase;
3747
- $seqFileBase = $seqFileNum;
3748
3758
  # use Win32::FindFile on Windows if available
3749
3759
  # (ReadDir will croak if there is a wildcard, so check for this)
3750
3760
  if ($^O eq 'MSWin32' and $dir !~ /[*?]/) {
@@ -3776,7 +3786,6 @@ sub ScanDir($$;$)
3776
3786
  # use standard perl library routines to read directory
3777
3787
  unless (opendir(DIR_HANDLE, $dir)) {
3778
3788
  Warn("Error opening directory $dir\n");
3779
- $seqFileBase = $oldBase + ($seqFileNum - $seqFileBase);
3780
3789
  return;
3781
3790
  }
3782
3791
  @fileList = readdir(DIR_HANDLE);
@@ -3856,8 +3865,6 @@ sub ScanDir($$;$)
3856
3865
  }
3857
3866
  ++$countDir;
3858
3867
  $et->Options(CharsetFileName => $enc); # restore original setting
3859
- # update sequential file base for parent directory
3860
- $seqFileBase = $oldBase + ($seqFileNum - $seqFileBase);
3861
3868
  }
3862
3869
 
3863
3870
  #------------------------------------------------------------------------------
@@ -4153,16 +4160,15 @@ sub NextUnusedFilename($;$)
4153
4160
  return $fmt unless $fmt =~ /%[-+]?\d*\.?\d*[lun]?[cC]/;
4154
4161
  my %sep = ( '-' => '-', '+' => '_' );
4155
4162
  my ($copy, $alpha) = (0, 'a');
4156
- my $seq = $seqFileNum - 1;
4157
4163
  for (;;) {
4158
4164
  my ($filename, $pos) = ('', 0);
4159
4165
  while ($fmt =~ /(%([-+]?)(\d*)(\.?)(\d*)([lun]?)([cC]))/g) {
4160
4166
  $filename .= substr($fmt, $pos, pos($fmt) - $pos - length($1));
4161
4167
  $pos = pos($fmt);
4162
4168
  my ($sign, $wid, $dec, $wid2, $mod, $tok) = ($2, $3 || 0, $4, $5 || 0, $6, $7);
4163
- my $diff;
4169
+ my $seq;
4164
4170
  if ($tok eq 'C') {
4165
- $diff = $wid - ($sign eq '-' ? $seqFileBase : 0);
4171
+ $seq = $wid + ($sign eq '-' ? $seqFileDir : $seqFileNum) - 1;
4166
4172
  $wid = $wid2;
4167
4173
  } else {
4168
4174
  next unless $dec or $copy;
@@ -4171,13 +4177,13 @@ sub NextUnusedFilename($;$)
4171
4177
  $filename .= $sep{$sign} if $sign;
4172
4178
  }
4173
4179
  if ($mod and $mod ne 'n') {
4174
- my $a = $tok eq 'C' ? Num2Alpha($diff + $seq) : $alpha;
4180
+ my $a = $tok eq 'C' ? Num2Alpha($seq) : $alpha;
4175
4181
  my $str = ($wid and $wid > length $a) ? 'a' x ($wid - length($a)) : '';
4176
4182
  $str .= $a;
4177
4183
  $str = uc $str if $mod eq 'u';
4178
4184
  $filename .= $str;
4179
4185
  } else {
4180
- my $c = $tok eq 'C' ? ($diff + $seq) : $copy;
4186
+ my $c = $tok eq 'C' ? $seq : $copy;
4181
4187
  my $num = $c + ($mod ? 1 : 0);
4182
4188
  $filename .= $wid ? sprintf("%.${wid}d",$num) : $num;
4183
4189
  }
@@ -4192,7 +4198,6 @@ sub NextUnusedFilename($;$)
4192
4198
  }
4193
4199
  ++$copy;
4194
4200
  ++$alpha;
4195
- ++$seq;
4196
4201
  }
4197
4202
  }
4198
4203
 
@@ -4398,9 +4403,13 @@ sub ReadStayOpen($)
4398
4403
  undef $optArgs;
4399
4404
  next unless $lastOpt eq '-stay_open' or $lastOpt eq '-@';
4400
4405
  } else {
4401
- $optArgs = $optArgs{$arg};
4402
4406
  $lastOpt = lc $arg;
4403
- $optArgs = $optArgs{$lastOpt} unless defined $optArgs;
4407
+ $optArgs = $optArgs{$arg};
4408
+ unless (defined $optArgs) {
4409
+ $optArgs = $optArgs{$lastOpt};
4410
+ # handle options with trailing numbers
4411
+ $optArgs = $optArgs{"$1#$2"} if not defined $optArgs and $lastOpt =~ /^(.*?)\d+(!?)$/;
4412
+ }
4404
4413
  next unless $lastOpt =~ /^-execute\d*$/;
4405
4414
  }
4406
4415
  $processArgs = 1;
@@ -4745,6 +4754,7 @@ L<Advanced options|/Advanced options>
4745
4754
  -echo[NUM] TEXT Echo text to stdout or stderr
4746
4755
  -efile[NUM][!] ERRFILE Save names of files with errors
4747
4756
  -execute[NUM] Execute multiple commands on one line
4757
+ -fileNUM ALTFILE Load tags from alternate file
4748
4758
  -list_dir List directories, not their contents
4749
4759
  -srcfile FMT Process a different source file
4750
4760
  -stay_open FLAG Keep reading -@ argfile even after EOF
@@ -4765,8 +4775,9 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames> for documentation on
4765
4775
  available tag names. A tag name may include leading group names separated
4766
4776
  by colons (eg. C<-EXIF:CreateDate>, or C<-Doc1:XMP:Creator>), and each group
4767
4777
  name may be prefixed by a digit to specify family number (eg.
4768
- C<-1IPTC:City>). Use the B<-listg> option to list available group names by
4769
- family.
4778
+ C<-1IPTC:City>). (Note that the API SavePath and SaveFormat options must be
4779
+ used for the family 5 and 6 groups respectively to be available.) Use the
4780
+ B<-listg> option to list available group names by family.
4770
4781
 
4771
4782
  A special tag name of C<All> may be used to indicate all meta information
4772
4783
  (ie. B<-All>). This is particularly useful when a group name is specified
@@ -4774,10 +4785,11 @@ to extract all information in a group (but beware that unless the B<-a>
4774
4785
  option is also used, some tags in the group may be suppressed by same-named
4775
4786
  tags in other groups). The wildcard characters C<?> and C<*> may be used in
4776
4787
  a tag name to match any single character and zero or more characters
4777
- respectively. These may not be used in a group name, with the exception that
4778
- a group name of C<*> (or C<All>) may be used to extract all instances of a
4779
- tag (as if B<-a> was used). Note that arguments containing wildcards must
4780
- be quoted on the command line of most systems to prevent shell globbing.
4788
+ respectively. These may not be used in a group name, with the exception
4789
+ that a group name of C<*> (or C<All>) may be used to extract all instances
4790
+ of a tag (as if B<-a> was used). Note that arguments containing wildcards
4791
+ must be quoted on the command line of most systems to prevent shell
4792
+ globbing.
4781
4793
 
4782
4794
  A C<#> may be appended to the tag name to disable the print conversion on a
4783
4795
  per-tag basis (see the B<-n> option). This may also be used when writing or
@@ -4856,8 +4868,8 @@ are removed if the containing group is deleted:
4856
4868
  - Deleting EXIF only removes ExifIFD which also deletes
4857
4869
  InteropIFD and MakerNotes.
4858
4870
 
4859
- MOV/MP4 video:
4860
- - Deleting ItemList also deletes Keys tags
4871
+ MOV/MP4 Video:
4872
+ - Deleting ItemList also deletes Keys tags.
4861
4873
 
4862
4874
  Notes:
4863
4875
 
@@ -5015,16 +5027,14 @@ for list-type tags and conditional replacements because each copy operation
5015
5027
  on a tag overrides any previous operations. While this avoids duplicate
5016
5028
  list items when copying groups of tags from a file containing redundant
5017
5029
  information, it also prevents values of different tags from being copied
5018
- into the same list when this is the intent. So a B<-addTagsFromFile> option
5019
- is provided which allows copying of multiple tags into the same list. eg)
5020
-
5021
- exiftool -addtagsfromfile @ '-subject<make' '-subject<model' ...
5030
+ into the same list when this is the intent. To accumulate values
5031
+ from different operations into the same list, add a C<+> after the initial
5032
+ C<-> of the argument. For example:
5022
5033
 
5023
- Similarly, B<-addTagsFromFile> must be used when conditionally replacing a
5024
- tag to prevent overriding earlier conditions.
5034
+ exiftool -tagsfromfile @ '-subject<make' '-+subject<model' ...
5025
5035
 
5026
- Other than these differences, the B<-tagsFromFile> and B<-addTagsFromFile>
5027
- options are equivalent.
5036
+ Similarly, C<-+DSTTAG> must be used when conditionally replacing a tag to
5037
+ prevent overriding earlier conditions.
5028
5038
 
5029
5039
  6) The B<-a> option (allow duplicate tags) is always in effect when copying
5030
5040
  tags from I<SRCFILE>, but the highest priority tag is always copied last so
@@ -5304,15 +5314,15 @@ B<-csv>=I<CSVFILE> feature.
5304
5314
  Organize output by tag group. I<NUM> specifies a group family number, and
5305
5315
  may be 0 (general location), 1 (specific location), 2 (category), 3
5306
5316
  (document number), 4 (instance number), 5 (metadata path), 6 (EXIF/TIFF
5307
- format) or 7 (tag ID). B<-g0> is assumed if a family number is not
5308
- specified. May be combined with other options to add group names to the
5309
- output. Multiple families may be specified by separating them with colons.
5310
- By default the resulting group name is simplified by removing any leading
5311
- C<Main:> and collapsing adjacent identical group names, but this can be
5312
- avoided by placing a colon before the first family number (eg. B<-g:3:1>).
5313
- Use the B<-listg> option to list group names for a specified family. The
5314
- API SavePath and SaveFormat options are automatically enabled if the
5315
- respective family 5 or 6 group names are requested. See the
5317
+ format), 7 (tag ID) or 8 (file number). B<-g0> is assumed if a family
5318
+ number is not specified. May be combined with other options to add group
5319
+ names to the output. Multiple families may be specified by separating them
5320
+ with colons. By default the resulting group name is simplified by removing
5321
+ any leading C<Main:> and collapsing adjacent identical group names, but this
5322
+ can be avoided by placing a colon before the first family number (eg.
5323
+ B<-g:3:1>). Use the B<-listg> option to list group names for a specified
5324
+ family. The API SavePath and SaveFormat options are automatically enabled
5325
+ if the respective family 5 or 6 group names are requested. See the
5316
5326
  L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
5317
5327
 
5318
5328
  =item B<-G>[I<NUM>][:I<NUM>...] (B<-groupNames>)
@@ -5491,8 +5501,9 @@ which case the string is loaded from the contents of the file. Tag names in
5491
5501
  the format file or string begin with a C<$> symbol and may contain leading
5492
5502
  group names and/or a trailing C<#> (to disable print conversion). Case is
5493
5503
  not significant. Braces C<{}> may be used around the tag name to separate
5494
- it from subsequent text. Use C<$$> to represent a C<$> symbol, and C<$/>
5495
- for a newline.
5504
+ it from subsequent text (and must be used if subsequent text begins with an
5505
+ alphanumeric character, hyphen, underline, colon or number sign). Use C<$$>
5506
+ to represent a C<$> symbol, and C<$/> for a newline.
5496
5507
 
5497
5508
  Multiple B<-p> options may be used, each contributing a line (or more) of
5498
5509
  text to the output. Lines beginning with C<#[HEAD]> and C<#[TAIL]> are
@@ -5519,7 +5530,7 @@ with this command:
5519
5530
 
5520
5531
  produces output like this:
5521
5532
 
5522
- -- Generated by ExifTool 12.57 --
5533
+ -- Generated by ExifTool 12.59 --
5523
5534
  File: a.jpg - 2003:10:31 15:44:19
5524
5535
  (f/5.6, 1/60s, ISO 100)
5525
5536
  File: b.jpg - 2006:05:23 11:57:38
@@ -6410,12 +6421,12 @@ I<SHIFT> string. For example:
6410
6421
 
6411
6422
  Add features from specified plug-in I<MODULE>. Currently, the MWG module is
6412
6423
  the only plug-in module distributed with exiftool. This module adds
6413
- read/write support for tags as recommended by the Metadata Working Group.
6414
- As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
6415
- for any tag on the command line. See the L<MWG Tags
6416
- documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
6417
- that this option is not reversible, and remains in effect until the
6418
- application terminates, even across the B<-execute> option.
6424
+ read/write support for tags as recommended by the Metadata Working Group. As
6425
+ a convenience, C<-use MWG> is assumed if the group name prefix starts with
6426
+ C<MWG:> exactly for any requested tag. See the
6427
+ L<MWG Tags documentation|Image::ExifTool::TagNames/MWG Tags> for more
6428
+ details. Note that this option is not reversible, and remains in effect
6429
+ until the application terminates, even across the B<-execute> option.
6419
6430
 
6420
6431
  =back
6421
6432
 
@@ -6519,6 +6530,14 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
6519
6530
  when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
6520
6531
  option no longer suppresses the output "{readyNUM}" message.
6521
6532
 
6533
+ =item B<-file>I<NUM> I<ALTFILE>
6534
+
6535
+ Read tags from an alternate source file. These tags are accessed via the
6536
+ family 8 group name (eg. C<File1:TAG>, C<File2:TAG>, etc). I<ALTFILE> may
6537
+ contain filename formatting codes %d, %f and %e. Among other things, this
6538
+ allows tags from different files to be compared and combined using the
6539
+ B<-if> and B<-p> options.
6540
+
6522
6541
  =item B<-list_dir>
6523
6542
 
6524
6543
  List directories themselves instead of their contents. This option
@@ -18,7 +18,7 @@ use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
  use Image::ExifTool::ID3;
20
20
 
21
- $VERSION = '1.11';
21
+ $VERSION = '1.12';
22
22
 
23
23
  # information for time/date-based tags (time zero is Jan 1, 1904)
24
24
  my %timeInfo = (
@@ -203,7 +203,7 @@ sub ProcessAIFF($$)
203
203
  return 1 if $fast3;
204
204
  $tagTablePtr = GetTagTable('Image::ExifTool::DjVu::Main');
205
205
  # modify FileType to indicate a multi-page document
206
- $$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM';
206
+ $$et{VALUE}{FileType} .= " (multi-page)" if $buf2 eq 'DJVM' and $$et{VALUE}{FileType};
207
207
  $type = 'DjVu';
208
208
  } else {
209
209
  return 0 unless $buff =~ /^FORM....(AIF(F|C))/s;
@@ -15,7 +15,7 @@ use strict;
15
15
  use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
 
18
- $VERSION = '1.06';
18
+ $VERSION = '1.07';
19
19
 
20
20
  # APE metadata blocks
21
21
  %Image::ExifTool::APE::Main = (
@@ -133,7 +133,7 @@ sub ProcessAPE($$)
133
133
 
134
134
  # check APE signature and process audio information
135
135
  # unless this is some other type of file
136
- unless ($$et{VALUE}{FileType}) {
136
+ unless ($$et{FileType}) {
137
137
  $raf->Read($buff, 32) == 32 or return 0;
138
138
  $buff =~ /^(MAC |APETAGEX)/ or return 0;
139
139
  $et->SetFileType();
@@ -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.51';
38
+ $VERSION = '3.52';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -184,7 +184,8 @@ gives the order of values for a serial data stream.
184
184
  A B<Tag Name> is the handle by which the information is accessed in
185
185
  ExifTool. In some instances, more than one name may correspond to a single
186
186
  tag ID. In these cases, the actual name used depends on the context in
187
- which the information is found. Case is not significant for tag names. A
187
+ which the information is found. Valid characters in a tag name are A-Z,
188
+ a-z, 0-9, hyphen (-) and underline (_). Case is not significant. A
188
189
  question mark (C<?>) after a tag name indicates that the information is
189
190
  either not understood, not verified, or not very useful -- these tags are
190
191
  not extracted by ExifTool unless the L<Unknown|../ExifTool.html#Unknown> (-u) option is enabled. Be
@@ -1206,6 +1207,7 @@ TagID: foreach $tagID (@keys) {
1206
1207
  $sepTable{$s} = $printConv;
1207
1208
  # add PrintHex flag to PrintConv so we can check it later
1208
1209
  $$printConv{PrintHex} = 1 if $$tagInfo{PrintHex};
1210
+ $$printConv{PrintInt} = 1 if $$tagInfo{PrintInt};
1209
1211
  $$printConv{PrintString} = 1 if $$tagInfo{PrintString};
1210
1212
  } else {
1211
1213
  $caseInsensitive = 0;
@@ -1221,22 +1223,18 @@ TagID: foreach $tagID (@keys) {
1221
1223
  next if $_ eq '' and $$printConv{$_} eq '';
1222
1224
  $_ eq 'BITMASK' and $bits = $$printConv{$_}, next;
1223
1225
  $_ eq 'OTHER' and next;
1224
- my $index;
1225
- if (($$tagInfo{PrintHex} or $$printConv{BITMASK}) and /^-?\d+$/) {
1226
+ my $index = $_;
1227
+ $index =~ s/\.\d+$// if $$tagInfo{PrintInt};
1228
+ if (($$tagInfo{PrintHex} or $$printConv{BITMASK}) and $index =~ /^-?\d+$/) {
1226
1229
  my $dig = $$tagInfo{PrintHex} || 1;
1227
- if ($_ >= 0) {
1228
- $index = sprintf('0x%.*x', $dig, $_);
1230
+ if ($index >= 0) {
1231
+ $index = sprintf('0x%.*x', $dig, $index);
1229
1232
  } elsif ($format and $format =~ /int(16|32)/) {
1230
1233
  # mask off unused bits of signed integer hex value
1231
1234
  my $mask = { 16 => 0xffff, 32 => 0xffffffff }->{$1};
1232
- $index = sprintf('0x%.*x', $dig, $_ & $mask);
1233
- } else {
1234
- $index = $_;
1235
+ $index = sprintf('0x%.*x', $dig, $index & $mask);
1235
1236
  }
1236
- } elsif (/^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/ and not $$tagInfo{PrintString}) {
1237
- $index = $_;
1238
- } else {
1239
- $index = $_;
1237
+ } elsif ($$tagInfo{PrintString} or not /^[+-]?(?=\d|\.\d)\d*(\.\d*)?$/) {
1240
1238
  # translate unprintable values
1241
1239
  if ($index =~ s/([\x00-\x1f\x80-\xff])/sprintf("\\x%.2x",ord $1)/eg) {
1242
1240
  $index = qq{"$index"};
@@ -2210,7 +2208,7 @@ sub WriteTagNames($$)
2210
2208
  my $wid = 0;
2211
2209
  my @keys;
2212
2210
  foreach (sort { NumbersFirst($a,$b) } keys %$printConv) {
2213
- next if /^(Notes|PrintHex|PrintString|OTHER)$/;
2211
+ next if /^(Notes|PrintHex|PrintInt|PrintString|OTHER)$/;
2214
2212
  $align = '' if $align and /[^\d]/;
2215
2213
  my $w = length($_) + length($$printConv{$_});
2216
2214
  $wid = $w if $wid < $w;
@@ -2238,6 +2236,7 @@ sub WriteTagNames($$)
2238
2236
  if (defined $key) {
2239
2237
  $index = $key;
2240
2238
  $prt = '= ' . EscapeHTML($$printConv{$key});
2239
+ $index =~ s/\.\d+$// if $$printConv{PrintInt};
2241
2240
  if ($$printConv{PrintHex}) {
2242
2241
  $index =~ s/(\.\d+)$//; # remove decimal
2243
2242
  $index = sprintf('0x%x',$index);