exiftool_vendored 12.55.0 → 12.57.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +38 -1
  3. data/bin/MANIFEST +5 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +19 -19
  7. data/bin/arg_files/xmp2exif.args +4 -1
  8. data/bin/exiftool +97 -53
  9. data/bin/fmt_files/kml.fmt +3 -0
  10. data/bin/fmt_files/kml_track.fmt +3 -0
  11. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -6
  12. data/bin/lib/Image/ExifTool/Canon.pm +8 -2
  13. data/bin/lib/Image/ExifTool/Exif.pm +31 -2
  14. data/bin/lib/Image/ExifTool/FlashPix.pm +73 -8
  15. data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
  16. data/bin/lib/Image/ExifTool/GPS.pm +7 -2
  17. data/bin/lib/Image/ExifTool/InfiRay.pm +227 -0
  18. data/bin/lib/Image/ExifTool/JPEG.pm +40 -6
  19. data/bin/lib/Image/ExifTool/Jpeg2000.pm +5 -5
  20. data/bin/lib/Image/ExifTool/MIE.pm +3 -3
  21. data/bin/lib/Image/ExifTool/Nikon.pm +862 -1264
  22. data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
  23. data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
  24. data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
  25. data/bin/lib/Image/ExifTool/OpenEXR.pm +32 -15
  26. data/bin/lib/Image/ExifTool/PNG.pm +80 -2
  27. data/bin/lib/Image/ExifTool/Photoshop.pm +36 -5
  28. data/bin/lib/Image/ExifTool/QuickTime.pm +18 -2
  29. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +25 -14
  30. data/bin/lib/Image/ExifTool/README +11 -2
  31. data/bin/lib/Image/ExifTool/Real.pm +2 -2
  32. data/bin/lib/Image/ExifTool/Sigma.pm +2 -1
  33. data/bin/lib/Image/ExifTool/Sony.pm +5 -1
  34. data/bin/lib/Image/ExifTool/TagLookup.pm +4667 -4624
  35. data/bin/lib/Image/ExifTool/TagNames.pod +400 -90
  36. data/bin/lib/Image/ExifTool/VCard.pm +19 -5
  37. data/bin/lib/Image/ExifTool/Writer.pl +36 -16
  38. data/bin/lib/Image/ExifTool.pm +92 -35
  39. data/bin/lib/Image/ExifTool.pod +54 -53
  40. data/bin/perl-Image-ExifTool.spec +18 -18
  41. data/lib/exiftool_vendored/version.rb +1 -1
  42. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '08dd80f8e21b9b1cdb9c94d397452030151b485db6f08e25fdb408a4eade1052'
4
- data.tar.gz: 6db554ec80bedd0d2022bd019cba25f5f7e61862bec88b00659790edbe123952
3
+ metadata.gz: 1c02a2a1efe1fc3f63f7527ed968432fc73d7e1ebeda7cfbf424413b8907bd0c
4
+ data.tar.gz: 5140c2587870d324d63d4d35beb70d1cbbecb92a78fb6ea55d9885cf9f320c1b
5
5
  SHA512:
6
- metadata.gz: 64da9fcb6865573609dfb79388711aa9d74bd24718a9d076846158d74ffd962bb956a722671dca51b406de6581b9b2220528b09971c2ebe8f3afc0b1a2b3f281
7
- data.tar.gz: 9601c888737e9e4c31f5edaa1b2fba847bbdb8cf2b4dc20013522ee0045c58736491a0d9e0b715f09a1113e23fd8a4672278292f45a6ed07f45507fa50a84bb6
6
+ metadata.gz: edd012dc39bc24a6b257f147e5d698648c686aa54e1ac04229cd3cd4880a91d96e21f6f017305a6d763826470ef1f990e94221320bd1d7ee0a73fb5cb2b32ab4
7
+ data.tar.gz: 78856db2a60493444afe450c663d190553147b651140c2f18a2a2641e8c9bc0d5af7f31bd0db4a5f55c89f72b460119192889f4f10190cad3a21bffae976e630
data/bin/Changes CHANGED
@@ -7,6 +7,43 @@ 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
+ Feb. 23, 2023 - Version 12.57
11
+
12
+ - Added two new Nikon Z lenses (thanks LibRaw)
13
+ - Added a new Sigma LensType (thanks LibRaw)
14
+ - Added a new Olympus LensType (thanks Herb)
15
+ - Decode more new Nikon tags (thanks Warren Hatch)
16
+ - Decode Photoshop LayerColors, LayerSections and LayerVisible tags
17
+ - Improved Verbose output for QuickTime-format files
18
+ - Set family 1 group name for Garmin GPS from uuid atom
19
+ - Enhanced -progress option to allow message to be displayed every NUM files
20
+ - Significant improvements to parsing of Nikon ShotInfo records for newer
21
+ models
22
+ - Removed hex dump of APP segments from -v3 output when writing
23
+ - Fixed bug writing negative MIE GPS coordinates
24
+ - Fixed bug where a duplicate XMP could be generated when writing XMP to a
25
+ JPEG XL image which already contained XMP
26
+ - Fixed problem where HEAD lines may be duplicated in an output file if the -p
27
+ option was combined with -w+ or -W+
28
+
29
+ Feb. 9, 2023 - Version 12.56
30
+
31
+ - Added support for VNT files (both Scene7 Vignette and V-Note document)
32
+ - Added read support for InfiRay IJPEG metadata (thanks Marcos Del Sol Vives)
33
+ - Added some new Sony LensType values (thanks Jos Roost and Francois Piette)
34
+ - Added a new FujiFilm VideoRecordingMode value (thanks Greybeard)
35
+ - Added two new Canon LensTypes and CanonModelIDs (thanks Norbert Wasser)
36
+ - Added ability to extract semantic images from Apple ProRaw DNG files
37
+ - Added read support for the PNG cICP chunk
38
+ - Decode more Nikon tags (thanks Warren Hatch)
39
+ - Extract PreviewImage from Insta360 trailer record 0x200
40
+ - Extract EmbeddedImageRectangle and some other new tags from VNT files
41
+ - Minor improvement to arg_files/xmp2exif.args (thanks StarGeek)
42
+ - Enhanced -ee option to extract metadata from all frames of a multipart EXR
43
+ image
44
+ - Removed EXR Layout tag and incorporated into new Flags tag
45
+ - Patched possible hang problem when reading corrupted .rm audio files
46
+
10
47
  Jan. 17, 2023 - Version 12.55
11
48
 
12
49
  - Added support for geotagging from FlightAware KML files
@@ -14,7 +51,7 @@ Jan. 17, 2023 - Version 12.55
14
51
  - Decode a few new Nikon tags (thanks Warren Hatch)
15
52
  - Decode a new Samsung HEIC tag
16
53
  - Decode FujiFilm RollAngle
17
- - Fixed bug where FlatName property wasn't working properly for some
54
+ - Fixed bug where the FlatName property wasn't working properly for some
18
55
  user-defined structure tags
19
56
 
20
57
  Jan. 6, 2023 - Version 12.54
data/bin/MANIFEST CHANGED
@@ -90,6 +90,7 @@ html/TagNames/ID3.html
90
90
  html/TagNames/IPTC.html
91
91
  html/TagNames/ISO.html
92
92
  html/TagNames/ITC.html
93
+ html/TagNames/InfiRay.html
93
94
  html/TagNames/JFIF.html
94
95
  html/TagNames/JPEG.html
95
96
  html/TagNames/JSON.html
@@ -301,6 +302,7 @@ lib/Image/ExifTool/ISO.pm
301
302
  lib/Image/ExifTool/ITC.pm
302
303
  lib/Image/ExifTool/Import.pm
303
304
  lib/Image/ExifTool/InDesign.pm
305
+ lib/Image/ExifTool/InfiRay.pm
304
306
  lib/Image/ExifTool/JPEG.pm
305
307
  lib/Image/ExifTool/JPEGDigest.pm
306
308
  lib/Image/ExifTool/JSON.pm
@@ -616,6 +618,8 @@ t/InDesign.t
616
618
  t/InDesign_2.out
617
619
  t/InDesign_3.out
618
620
  t/InDesign_4.out
621
+ t/InfiRay.t
622
+ t/InfiRay_2.out
619
623
  t/JSON.t
620
624
  t/JSON_2.out
621
625
  t/JVC.t
@@ -1034,6 +1038,7 @@ t/images/IPTC.jpg
1034
1038
  t/images/ISO.iso
1035
1039
  t/images/ITC.itc
1036
1040
  t/images/InDesign.indd
1041
+ t/images/InfiRay.jpg
1037
1042
  t/images/JSON.json
1038
1043
  t/images/JVC.jpg
1039
1044
  t/images/JVC2.jpg
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.55"
50
+ "version" : "12.57"
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.55
31
+ version: 12.57
data/bin/README CHANGED
@@ -39,23 +39,23 @@ supported by ExifTool (r = read, w = write, c = create):
39
39
  CHM r | FPF r | MKA r | PFA r | TTF r
40
40
  COS r | FPX r | MKS r | PFB r | TXT r
41
41
  CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
42
- CR3 r/w | GPR r/w | MNG r/w | PGF r | VRD r/w/c
43
- CRM r/w | GZ r | MOBI r | PGM r/w | VSD r
44
- CRW r/w | HDP r/w | MODD r | PLIST r | WAV r
45
- CS1 r/w | HDR r | MOI r | PICT r | WDP r/w
46
- CSV r | HEIC r/w | MOS r/w | PMP r | WEBP r/w
47
- CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBM r
48
- CZI r | HTML r | MP3 r | PPM r/w | WMA r
49
- DCM r | ICC r/w/c | MP4 r/w | PPT r | WMV r
50
- DCP r/w | ICO r | MPC r | PPTX r | WTV r
51
- DCR r | ICS r | MPG r | PS r/w | WV r
52
- DFONT r | IDML r | MPO r/w | PSB r/w | X3F r/w
53
- DIVX r | IIQ r/w | MQV r/w | PSD r/w | XCF r
54
- DJVU r | IND r/w | MRC r | PSP r | XLS r
55
- DLL r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
56
- DNG r/w | INSV r | MXF r | R3D r | XMP r/w/c
57
- DOC r | INX r | NEF r/w | RA r | ZIP r
58
- DOCX r | ISO r | NKSC r/w | RAF r/w |
42
+ CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
43
+ CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
44
+ CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
45
+ CS1 r/w | HDR r | MOI r | PICT r | WAV r
46
+ CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
47
+ CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
48
+ CZI r | HTML r | MP3 r | PPM r/w | WEBM r
49
+ DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
50
+ DCP r/w | ICO r | MPC r | PPTX r | WMV r
51
+ DCR r | ICS r | MPG r | PS r/w | WTV r
52
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
53
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
54
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
55
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
56
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
57
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
58
+ DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
59
59
 
60
60
  Meta Information
61
61
  ----------------------+----------------------+---------------------
@@ -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.55.tar.gz | tar -xf -
111
- cd Image-ExifTool-12.55
110
+ gzip -dc Image-ExifTool-12.57.tar.gz | tar -xf -
111
+ cd Image-ExifTool-12.57
112
112
  ./exiftool t/images/ExifTool.jpg
113
113
 
114
114
  Note: These commands extract meta information from one of the test images.
@@ -15,6 +15,8 @@
15
15
  # 2018/05/07 - PH Added support for GPSDestXxxRef tags
16
16
  # 2021/09/30 - PH Removed erroneous "-" when copying CreatorTool
17
17
  # 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
18
+ # 2023/01/30 - PH Also write Composite:SubSecDateTimeOriginal from
19
+ # XMP-exif:DateTimeOriginal
18
20
  #
19
21
  # References: http://www.metadataworkinggroup.org/specs/
20
22
  # https://iptc.org/std/photometadata/documentation/mappingguidelines/
@@ -34,8 +36,9 @@
34
36
  -EXIF:all < XMP-tiff:all
35
37
  -EXIF:ImageDescription < XMP-dc:Description
36
38
  -EXIF:DateTimeOriginal < XMP-photoshop:DateCreated
37
- # the following 3 SubSec tags also write/delete the corresponding EXIF
39
+ # the following SubSec tags also write/delete the corresponding EXIF
38
40
  # SubSecTime and OffsetTime tags as appropriate
41
+ -Composite:SubSecDateTimeOriginal < XMP-exif:DateTimeOriginal
39
42
  -Composite:SubSecDateTimeOriginal < XMP-photoshop:DateCreated
40
43
  -Composite:SubSecCreateDate < XMP-xmp:CreateDate
41
44
  -Composite:SubSecModifyDate < XMP-xmp:ModifyDate
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.55';
14
+ my $version = '12.57';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  BEGIN {
@@ -77,6 +77,7 @@ sub AcceptFile($);
77
77
  sub SlurpFile($$);
78
78
  sub FilterArgfileLine($);
79
79
  sub ReadStayOpen($);
80
+ sub Progress($$);
80
81
  sub PrintTagList($@);
81
82
  sub PrintErrors($$$);
82
83
 
@@ -182,7 +183,9 @@ my $pause; # pause before returning
182
183
  my $preserveTime; # flag to preserve times of updated files (2=preserve FileCreateDate only)
183
184
  my $progress; # flag to calculate total files to process (0=calculate but don't display)
184
185
  my $progressCount; # count of files processed
186
+ my $progressIncr; # increment for progress counter
185
187
  my $progressMax; # total number of files to process
188
+ my $progressNext; # next progress count to output
186
189
  my $progStr; # progress message string
187
190
  my $quiet; # flag to disable printing of informational messages / warnings
188
191
  my $rafStdin; # File::RandomAccess for stdin (if necessary to rewind)
@@ -211,6 +214,7 @@ my $validFile; # flag indicating we processed a valid file
211
214
  my $verbose; # verbose setting
212
215
  my $vout; # verbose output file reference (\*STDOUT or \*STDERR)
213
216
  my $windowTitle; # title for console window
217
+ my %wroteHEAD; # list of output txt files to which we wrote HEAD
214
218
  my $xml; # flag for XML-formatted output
215
219
 
216
220
  # flag to keep the input -@ argfile open:
@@ -489,7 +493,9 @@ undef $outOpt;
489
493
  undef $preserveTime;
490
494
  undef $progress;
491
495
  undef $progressCount;
496
+ undef $progressIncr;
492
497
  undef $progressMax;
498
+ undef $progressNext;
493
499
  undef $recurse;
494
500
  undef $scanWritable;
495
501
  undef $sectHeader;
@@ -725,7 +731,7 @@ for (;;) {
725
731
  }
726
732
  if ($verbose > 1) {
727
733
  print "Include directories:\n";
728
- print " $_\n" foreach @INC;
734
+ ref $_ or print " $_\n" foreach @INC;
729
735
  }
730
736
  } else {
731
737
  print "$version$str$Image::ExifTool::RELEASE\n";
@@ -1119,9 +1125,11 @@ for (;;) {
1119
1125
  }
1120
1126
  (/^P$/ or $a eq 'preserve') and $preserveTime = 1, next;
1121
1127
  /^password$/i and $mt->Options(Password => shift), next;
1122
- if (/^progress(:.*)?$/i) {
1123
- if ($1) {
1124
- $windowTitle = substr $1, 1;
1128
+ if (/^progress(\d*)(:.*)?$/i) {
1129
+ $progressIncr = $1 || 1;
1130
+ $progressNext = 0; # start showing progress at the first file
1131
+ if ($2) {
1132
+ $windowTitle = substr $2, 1;
1125
1133
  $windowTitle = 'ExifTool %p%%' unless length $windowTitle;
1126
1134
  $windowTitle =~ /%\d*[bpr]/ and $progress = 0 unless defined $progress;
1127
1135
  } else {
@@ -1239,7 +1247,8 @@ for (;;) {
1239
1247
  next;
1240
1248
  }
1241
1249
  if (/^(w|textout|tagout)([!+]*)$/i) {
1242
- $textOut = shift || Warn("Expecting output extension for -$_ option\n");
1250
+ # (note: all logic ignores $textOut of 0 or '')
1251
+ $textOut = shift || Warn("Expecting argument for -$_ option\n");
1243
1252
  my ($t1, $t2) = ($1, $2);
1244
1253
  $textOverwrite = 0;
1245
1254
  $textOverwrite += 1 if $t2 =~ /!/; # overwrite
@@ -1711,7 +1720,7 @@ if (defined $showGroup and not (@tags and $allGroup) and ($sortOpt or not define
1711
1720
  $mt->Options(Sort => "Group$showGroup");
1712
1721
  }
1713
1722
 
1714
- if (defined $textOut) {
1723
+ if ($textOut) {
1715
1724
  CleanFilename($textOut); # make all forward slashes
1716
1725
  # add '.' before output extension if necessary
1717
1726
  $textOut = ".$textOut" unless $textOut =~ /[.%]/ or defined $tagOut;
@@ -1935,7 +1944,7 @@ sub GetImageInfo($$)
1935
1944
  my (@foundTags, $info, $file, $ind);
1936
1945
 
1937
1946
  # set window title for this file if necessary
1938
- if (defined $windowTitle) {
1947
+ if (defined $windowTitle and $progressCount >= $progressNext) {
1939
1948
  my $prog = $progressMax ? "$progressCount/$progressMax" : '0/0';
1940
1949
  my $title = $windowTitle;
1941
1950
  my ($num, $denom) = split '/', $prog;
@@ -1951,6 +1960,7 @@ sub GetImageInfo($$)
1951
1960
  );
1952
1961
  $title =~ s/%([%bfpr])/$lkup{$1}/eg;
1953
1962
  SetWindowTitle($title);
1963
+ undef $progressNext;
1954
1964
  }
1955
1965
  unless (length $orig or $outOpt) {
1956
1966
  Warn qq(Error: Zero-length file name - ""\n);
@@ -2044,7 +2054,7 @@ sub GetImageInfo($$)
2044
2054
  undef @foundTags if $fastCondition; # ignore if we didn't get all tags
2045
2055
  }
2046
2056
  unless ($result) {
2047
- $verbose and print $vout "-------- $file (failed condition)$progStr\n";
2057
+ Progress($vout, "-------- $file (failed condition)") if $verbose;
2048
2058
  EFile($file, 2);
2049
2059
  ++$countFailed;
2050
2060
  return;
@@ -2054,7 +2064,7 @@ sub GetImageInfo($$)
2054
2064
  undef $info if $verbose or defined $fastCondition;
2055
2065
  }
2056
2066
  if (defined $deleteOrig) {
2057
- print $vout "======== $file$progStr\n" if defined $verbose;
2067
+ Progress($vout, "======== $file") if defined $verbose;
2058
2068
  ++$count;
2059
2069
  my $original = "${file}_original";
2060
2070
  $et->Exists($original) or return;
@@ -2084,12 +2094,12 @@ sub GetImageInfo($$)
2084
2094
  }
2085
2095
 
2086
2096
  if ($isWriting) {
2087
- print $vout "======== $file$progStr\n" if defined $verbose;
2097
+ Progress($vout, "======== $file") if defined $verbose;
2088
2098
  SetImageInfo($et, $file, $orig);
2089
2099
  $info = $et->GetInfo('Warning', 'Error');
2090
2100
  PrintErrors($et, $info, $file);
2091
2101
  # close output text file if necessary
2092
- if ($outfile) {
2102
+ if (defined $outfile) {
2093
2103
  undef $tmpText;
2094
2104
  close($fp);
2095
2105
  $et->Options(TextOut => $vout);
@@ -2108,7 +2118,7 @@ sub GetImageInfo($$)
2108
2118
  unless ($file eq '-' or $et->Exists($file)) {
2109
2119
  Warn "Error: File not found - $file\n";
2110
2120
  FileNotFound($file);
2111
- $outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
2121
+ defined $outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
2112
2122
  EFile($file);
2113
2123
  ++$countBad;
2114
2124
  return;
@@ -2125,7 +2135,7 @@ sub GetImageInfo($$)
2125
2135
  }
2126
2136
  }
2127
2137
  $o = \*STDERR if $progress and not $o;
2128
- $o and print $o "======== $file$progStr\n";
2138
+ Progress($o, "======== $file") if $o;
2129
2139
  if ($info) {
2130
2140
  # get the information we wanted
2131
2141
  if (@tags and not %printFmt) {
@@ -2147,7 +2157,7 @@ sub GetImageInfo($$)
2147
2157
  }
2148
2158
  # all done now if we already wrote output text file (eg. verbose option)
2149
2159
  if ($fp) {
2150
- if ($outfile) {
2160
+ if (defined $outfile) {
2151
2161
  $et->Options(TextOut => \*STDOUT);
2152
2162
  undef $tmpText;
2153
2163
  if ($info->{Error}) {
@@ -2176,7 +2186,7 @@ sub GetImageInfo($$)
2176
2186
  }
2177
2187
 
2178
2188
  # open output file (or stdout if no output file) if not done already
2179
- unless ($outfile or $tagOut) {
2189
+ unless (defined $outfile or $tagOut) {
2180
2190
  ($fp, $outfile, $append) = OpenOutputFile($orig);
2181
2191
  $fp or EFile($file), ++$countBad, return;
2182
2192
  $tmpText = $outfile unless $append;
@@ -2201,6 +2211,10 @@ sub GetImageInfo($$)
2201
2211
  my $skipBody;
2202
2212
  foreach $type (qw(HEAD SECT IF BODY ENDS TAIL)) {
2203
2213
  my $prf = $printFmt{$type} or next;
2214
+ if ($type eq 'HEAD' and defined $outfile) {
2215
+ next if $wroteHEAD{$outfile};
2216
+ $wroteHEAD{$outfile} = 1;
2217
+ }
2204
2218
  next if $type eq 'BODY' and $skipBody;
2205
2219
  if ($lastDoc) {
2206
2220
  if ($doc) {
@@ -2238,7 +2252,7 @@ sub GetImageInfo($$)
2238
2252
  }
2239
2253
  }
2240
2254
  }
2241
- delete $printFmt{HEAD} unless $outfile; # print header only once per output file
2255
+ delete $printFmt{HEAD} unless defined $outfile; # print header only once per output file
2242
2256
  my $errs = $et->GetInfo('Warning', 'Error');
2243
2257
  PrintErrors($et, $errs, $file) and EFile($file);
2244
2258
  } elsif (not $disableOutput) {
@@ -2394,7 +2408,7 @@ TAG: foreach $tag (@foundTags) {
2394
2408
  next TAG;
2395
2409
  }
2396
2410
  my @groups = $et->GetGroup($tag);
2397
- $outfile and close($fp), undef($tmpText); # (shouldn't happen)
2411
+ defined $outfile and close($fp), undef($tmpText); # (shouldn't happen)
2398
2412
  my $org = $et->GetValue('OriginalRawFileName') || $et->GetValue('OriginalFileName');
2399
2413
  ($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext, $org);
2400
2414
  $fp or ++$countBad, next TAG;
@@ -2700,7 +2714,7 @@ TAG: foreach $tag (@foundTags) {
2700
2714
  }
2701
2715
  }
2702
2716
  }
2703
- if ($outfile) {
2717
+ if (defined $outfile) {
2704
2718
  if ($textOverwrite & 0x02) {
2705
2719
  # save state of this file if we may be appending
2706
2720
  $outComma{$outfile} = $comma;
@@ -3661,8 +3675,19 @@ sub ProcessFiles($;$)
3661
3675
  foreach $file (@files) {
3662
3676
  $et->Options(CharsetFileName => 'UTF8') if $utf8FileName{$file};
3663
3677
  if (defined $progressMax) {
3678
+ unless (defined $progressNext) {
3679
+ $progressNext = $progressCount + $progressIncr;
3680
+ $progressNext -= $progressNext % $progressIncr;
3681
+ $progressNext = $progressMax if $progressNext > $progressMax;
3682
+ }
3664
3683
  ++$progressCount;
3665
- $progStr = " [$progressCount/$progressMax]" if $progress;
3684
+ if ($progress) {
3685
+ if ($progressCount >= $progressNext) {
3686
+ $progStr = " [$progressCount/$progressMax]";
3687
+ } else {
3688
+ undef $progStr; # don't update progress yet
3689
+ }
3690
+ }
3666
3691
  }
3667
3692
  if ($et->IsDirectory($file) and not $listDir) {
3668
3693
  $multiFile = $validFile = 1;
@@ -3670,7 +3695,7 @@ sub ProcessFiles($;$)
3670
3695
  } elsif ($filterFlag and not AcceptFile($file)) {
3671
3696
  if ($et->Exists($file)) {
3672
3697
  $filtered = 1;
3673
- $verbose and print $vout "-------- $file (wrong extension)$progStr\n";
3698
+ Progress($vout, "-------- $file (wrong extension)") if $verbose;
3674
3699
  } else {
3675
3700
  Warn "Error: File not found - $file\n";
3676
3701
  FileNotFound($file);
@@ -4426,6 +4451,18 @@ sub EFile($$)
4426
4451
  }
4427
4452
  }
4428
4453
 
4454
+ #------------------------------------------------------------------------------
4455
+ # Print progress message if it is time for it
4456
+ # Inputs: 0) file ref, 1) message
4457
+ sub Progress($$)
4458
+ {
4459
+ my ($file, $msg) = @_;
4460
+ if (defined $progStr) {
4461
+ print $file $msg, $progStr, "\n";
4462
+ undef $progressNext;
4463
+ }
4464
+ }
4465
+
4429
4466
  #------------------------------------------------------------------------------
4430
4467
  # Print list of tags
4431
4468
  # Inputs: 0) message, 1-N) list of tag names
@@ -4558,23 +4595,23 @@ supported by ExifTool (r = read, w = write, c = create):
4558
4595
  CHM r | FPF r | MKA r | PFA r | TTF r
4559
4596
  COS r | FPX r | MKS r | PFB r | TXT r
4560
4597
  CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
4561
- CR3 r/w | GPR r/w | MNG r/w | PGF r | VRD r/w/c
4562
- CRM r/w | GZ r | MOBI r | PGM r/w | VSD r
4563
- CRW r/w | HDP r/w | MODD r | PLIST r | WAV r
4564
- CS1 r/w | HDR r | MOI r | PICT r | WDP r/w
4565
- CSV r | HEIC r/w | MOS r/w | PMP r | WEBP r/w
4566
- CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBM r
4567
- CZI r | HTML r | MP3 r | PPM r/w | WMA r
4568
- DCM r | ICC r/w/c | MP4 r/w | PPT r | WMV r
4569
- DCP r/w | ICO r | MPC r | PPTX r | WTV r
4570
- DCR r | ICS r | MPG r | PS r/w | WV r
4571
- DFONT r | IDML r | MPO r/w | PSB r/w | X3F r/w
4572
- DIVX r | IIQ r/w | MQV r/w | PSD r/w | XCF r
4573
- DJVU r | IND r/w | MRC r | PSP r | XLS r
4574
- DLL r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
4575
- DNG r/w | INSV r | MXF r | R3D r | XMP r/w/c
4576
- DOC r | INX r | NEF r/w | RA r | ZIP r
4577
- DOCX r | ISO r | NKSC r/w | RAF r/w |
4598
+ CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
4599
+ CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
4600
+ CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
4601
+ CS1 r/w | HDR r | MOI r | PICT r | WAV r
4602
+ CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
4603
+ CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
4604
+ CZI r | HTML r | MP3 r | PPM r/w | WEBM r
4605
+ DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
4606
+ DCP r/w | ICO r | MPC r | PPTX r | WMV r
4607
+ DCR r | ICS r | MPG r | PS r/w | WTV r
4608
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
4609
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
4610
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
4611
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
4612
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
4613
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
4614
+ DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
4578
4615
 
4579
4616
  Meta Information
4580
4617
  ----------------------+----------------------+---------------------
@@ -4672,7 +4709,7 @@ L<Processing control|/Processing control>
4672
4709
  -overwrite_original_in_place Overwrite original by copying tmp file
4673
4710
  -P (-preserve) Preserve file modification date/time
4674
4711
  -password PASSWD Password for processing protected files
4675
- -progress[:[TITLE]] Show file progress count
4712
+ -progress[NUM][:[TITLE]] Show file progress count
4676
4713
  -q (-quiet) Quiet processing
4677
4714
  -r[.] (-recurse) Recursively process subdirectories
4678
4715
  -scanForXMP Brute force XMP scan
@@ -4819,6 +4856,9 @@ are removed if the containing group is deleted:
4819
4856
  - Deleting EXIF only removes ExifIFD which also deletes
4820
4857
  InteropIFD and MakerNotes.
4821
4858
 
4859
+ MOV/MP4 video:
4860
+ - Deleting ItemList also deletes Keys tags
4861
+
4822
4862
  Notes:
4823
4863
 
4824
4864
  1) B<Many tag values may be assigned in a single command>. If two
@@ -4915,7 +4955,9 @@ prevent shell redirection, and there is no C<=> sign as when assigning new
4915
4955
  values. Source and/or destination tags may be prefixed by a group name
4916
4956
  and/or suffixed by C<#>. Wildcards are allowed in both the source and
4917
4957
  destination tag names. A destination group and/or tag name of C<All> or
4918
- C<*> writes to the same family 1 group and/or tag name as the source. If no
4958
+ C<*> writes to the same family 1 group and/or tag name as the source (but
4959
+ the family may be specified by adding a leading number to the group name,
4960
+ eg. C<0All> writes to the same family 0 group as the source). If no
4919
4961
  destination group is specified, the information is written to the preferred
4920
4962
  group. Whitespace around the C<E<gt>> or C<E<lt>> is ignored. As a
4921
4963
  convenience, C<-tagsFromFile @> is assumed for any redirected tags which are
@@ -5206,9 +5248,9 @@ Note that this option is fundamentally different than all other output
5206
5248
  format options because it requires information from all input files to be
5207
5249
  buffered in memory before the output is written. This may result in
5208
5250
  excessive memory usage when processing a very large number of files with a
5209
- single command. Also, it makes this option incompatible with the B<-w>
5210
- option. When processing a large number of files, it is recommended to
5211
- either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
5251
+ single command. Also, it makes this option incompatible with the B<-w> and
5252
+ B<-W> options. When processing a large number of files, it is recommended
5253
+ to either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
5212
5254
  generate a fixed-column CSV file instead of using the B<-csv> option.
5213
5255
 
5214
5256
  =item B<-csvDelim> I<STR>
@@ -5477,7 +5519,7 @@ with this command:
5477
5519
 
5478
5520
  produces output like this:
5479
5521
 
5480
- -- Generated by ExifTool 12.55 --
5522
+ -- Generated by ExifTool 12.57 --
5481
5523
  File: a.jpg - 2003:10:31 15:44:19
5482
5524
  (f/5.6, 1/60s, ISO 100)
5483
5525
  File: b.jpg - 2006:05:23 11:57:38
@@ -5981,8 +6023,8 @@ of the file processing. Both functions have a return value of 1. Case is
5981
6023
  significant for function names.
5982
6024
 
5983
6025
  End() - end processing after this file
5984
- EndDir() - end processing of files in this directory (not
5985
- compatible with the B<-fileOrder> option)
6026
+ EndDir() - end processing of files in the current directory
6027
+ after this file (not compatible with -fileOrder)
5986
6028
 
5987
6029
  Notes:
5988
6030
 
@@ -6110,7 +6152,7 @@ If a password is required but not given, a warning is issued and the
6110
6152
  document is not processed. This option is ignored if a password is not
6111
6153
  required.
6112
6154
 
6113
- =item B<-progress>[:[I<TITLE>]]
6155
+ =item B<-progress>[NUM][:[I<TITLE>]]
6114
6156
 
6115
6157
  Show the progress when processing files. Without a colon, the B<-progress>
6116
6158
  option adds a progress count in brackets after the name of each processed
@@ -6118,17 +6160,19 @@ file, giving the current file number and the total number of files to be
6118
6160
  processed. Implies the B<-v0> option, causing the names of processed files
6119
6161
  to also be printed when writing. When combined with the B<-if> option, the
6120
6162
  total count includes all files before the condition is applied, but files
6121
- that fail the condition will not have their names printed.
6163
+ that fail the condition will not have their names printed. If NUM is
6164
+ specified, the progress is shown every NUM input files.
6122
6165
 
6123
6166
  If followed by a colon (ie. B<-progress:>), the console window title is set
6124
6167
  according to the specified I<TITLE> string. If no I<TITLE> is given, a
6125
6168
  default I<TITLE> string of "ExifTool %p%%" is assumed. In the string, %f
6126
6169
  represents the file name, %p is the progress as a percent, %r is the
6127
- progress as a ratio, %##b is a progress bar of width "##" (20 characters if
6128
- "##" is omitted), and %% is a % character. May be combined with the normal
6129
- B<-progress> option to also show the progress count in console messages.
6130
- (Note: For this feature to function correctly on Mac/Linux, stderr must go
6131
- to the console.)
6170
+ progress as a ratio, %##b is a progress bar of width "##" (where "##" is an
6171
+ integer specifying the bar width in characters, or 20 characters by default
6172
+ if "##" is omitted), and %% is a % character. May be combined with the
6173
+ normal B<-progress> option to also show the progress count in console
6174
+ messages. (Note: For this feature to function correctly on Mac/Linux, stderr
6175
+ must go to the console.)
6132
6176
 
6133
6177
  =item B<-q> (B<-quiet>)
6134
6178
 
@@ -24,6 +24,9 @@
24
24
  # extension is used.
25
25
  # 5) The -fileOrder option may be used to control the order of the
26
26
  # generated placemarks when processing multiple files.
27
+ # 6) The "0" in the coordinates line may be changed to "$gpsaltitude#"
28
+ # and the altitudeMode may be changed to "absolute" to store
29
+ # altitude information if it exists in the track log.
27
30
  #------------------------------------------------------------------------------
28
31
  #[HEAD]<?xml version="1.0" encoding="UTF-8"?>
29
32
  #[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
@@ -21,6 +21,9 @@
21
21
  # 2) The -fileOrder option may be used to control the order of the
22
22
  # waypoints when processing multiple still-image files, or the
23
23
  # order of the tracks when processing multiple video files.
24
+ # 3) The "0" in the BODY line below may be changed to "$gpsaltitude#"
25
+ # and the altitudeMode may be changed to "absolute" to store
26
+ # altitude information if it exists in the track log.
24
27
  #------------------------------------------------------------------------------
25
28
  #[HEAD]<?xml version="1.0" encoding="UTF-8"?>
26
29
  #[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
@@ -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.50';
38
+ $VERSION = '3.51';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -314,10 +314,12 @@ C<integer> is a string of digits (possibly beginning with a '+' or '-'),
314
314
  C<real> is a floating point number, C<rational> is entered as a floating
315
315
  point number but stored as two C<integer> strings separated by a '/'
316
316
  character, C<date> is a date/time string entered in the format "YYYY:mm:dd
317
- HH:MM:SS[.ss][+/-HH:MM]", C<boolean> is either "True" or "False" (but "true"
318
- and "false" may be written as a ValueConv value for compatibility with
319
- non-conforming applications), C<struct> indicates a structured tag, and
320
- C<lang-alt> is a tag that supports alternate languages.
317
+ HH:MM:SS[.ss][+/-HH:MM]" but some partial date/time formats are also
318
+ accepted (see L<https://exiftool.org/faq.html#Q5>), C<boolean> is either
319
+ "True" or "False" (but "true" and "false" may be written as a ValueConv
320
+ value for compatibility with non-conforming applications), C<struct>
321
+ indicates a structured tag, and C<lang-alt> is a tag that supports alternate
322
+ languages.
321
323
 
322
324
  When reading, C<struct> tags are extracted only if the L<Struct|../ExifTool.html#Struct> (-struct)
323
325
  option is used. Otherwise the corresponding I<Flattened> tags, indicated by
@@ -443,6 +445,11 @@ QuickTime-based files; it extracts other track-specific and timed metadata,
443
445
  but can not yet edit tags in these locations (with the exception of
444
446
  track-level date/time tags).
445
447
 
448
+ Beware that the Keys tags are actually stored inside the ItemList in the
449
+ file, so deleting the ItemList group as a block (ie. C<-ItemList:all=>) also
450
+ deletes Keys tags. Instead, to preserve Keys tags the ItemList tags may be
451
+ deleted individually with C<-QuickTime:ItemList:all=>.
452
+
446
453
  Alternate language tags may be accessed for
447
454
  L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
448
455
  L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags> tags by adding
@@ -1049,7 +1056,7 @@ TagID: foreach $tagID (@keys) {
1049
1056
  if ($$tagInfo{SubIFD}) {
1050
1057
  warn "Warning: Wrong SubDirectory Start for SubIFD tag - $short $name\n" unless $isSub;
1051
1058
  } else {
1052
- warn "Warning: SubIFD flag not set for $short $name\n" if $isSub;
1059
+ warn "Warning: SubIFD flag not set for $short $name\n" if $isSub and not $processBinaryData;
1053
1060
  }
1054
1061
  if ($$tagInfo{Notes}) {
1055
1062
  my $note = $$tagInfo{Notes};