exiftool_vendored 12.57.0 → 12.59.0

Sign up to get free protection for your applications and to get access to all the features.
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);