exiftool_vendored 13.53.0 → 13.57.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +52 -13
  3. data/bin/MANIFEST +7 -1
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +49 -49
  7. data/bin/config_files/local_time.config +27 -3
  8. data/bin/exiftool +78 -64
  9. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
  10. data/bin/lib/Image/ExifTool/Canon.pm +14 -1
  11. data/bin/lib/Image/ExifTool/DICOM.pm +4211 -13
  12. data/bin/lib/Image/ExifTool/DJI.pm +49 -7
  13. data/bin/lib/Image/ExifTool/Exif.pm +97 -2
  14. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  15. data/bin/lib/Image/ExifTool/GE.pm +2 -0
  16. data/bin/lib/Image/ExifTool/GM.pm +2 -3
  17. data/bin/lib/Image/ExifTool/Garmin.pm +9678 -0
  18. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  19. data/bin/lib/Image/ExifTool/Geotag.pm +100 -12
  20. data/bin/lib/Image/ExifTool/Google.pm +2 -0
  21. data/bin/lib/Image/ExifTool/InfiRay.pm +2 -0
  22. data/bin/lib/Image/ExifTool/LNK.pm +4 -1
  23. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  24. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  25. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  26. data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  27. data/bin/lib/Image/ExifTool/PLIST.pm +15 -4
  28. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -0
  29. data/bin/lib/Image/ExifTool/Pentax.pm +3 -1
  30. data/bin/lib/Image/ExifTool/Protobuf.pm +2 -0
  31. data/bin/lib/Image/ExifTool/QuickTime.pm +39 -6
  32. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +37 -2
  33. data/bin/lib/Image/ExifTool/RIFF.pm +1 -0
  34. data/bin/lib/Image/ExifTool/Reconyx.pm +2 -0
  35. data/bin/lib/Image/ExifTool/TagLookup.pm +24 -3
  36. data/bin/lib/Image/ExifTool/TagNames.pod +5376 -20
  37. data/bin/lib/Image/ExifTool/Validate.pm +10 -1
  38. data/bin/lib/Image/ExifTool/Writer.pl +12 -4
  39. data/bin/lib/Image/ExifTool.pm +27 -13
  40. data/bin/lib/Image/ExifTool.pod +107 -90
  41. data/bin/perl-Image-ExifTool.spec +47 -47
  42. data/lib/exiftool_vendored/version.rb +1 -1
  43. metadata +2 -1
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.53';
14
+ my $version = '13.57';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -309,8 +309,8 @@ my @recommends = qw(
309
309
  POSIX::strptime
310
310
  Time::Local
311
311
  Unicode::LineBreak
312
- Compress::Raw::Lzma
313
312
  File::StatX
313
+ Compress::Raw::Lzma
314
314
  IO::Compress::RawDeflate
315
315
  IO::Uncompress::RawInflate
316
316
  IO::Compress::Brotli
@@ -880,6 +880,11 @@ for (;;) {
880
880
  $val = undef unless $opt =~ s/\^$// or length $val;
881
881
  $mt->Options($opt => $val);
882
882
  } else {
883
+ unless ($pass) {
884
+ push @nextPass, '-api';
885
+ push @nextPass, $opt if defined $opt;
886
+ next;
887
+ }
883
888
  print "Available API Options:\n";
884
889
  my $availableOptions = Image::ExifTool::AvailableOptions();
885
890
  $$_[3] or printf(" %-17s - %s\n", $$_[0], $$_[2]) foreach @$availableOptions;
@@ -902,7 +907,11 @@ for (;;) {
902
907
  if ($a eq 'charset') {
903
908
  my $charset = (@ARGV and $ARGV[0] !~ /^(-|\xe2\x88\x92)/) ? shift : undef;
904
909
  if (not $charset) {
905
- $pass or push(@nextPass, '-charset'), next;
910
+ unless ($pass) {
911
+ push @nextPass, '-charset' ;
912
+ push @nextPass, $charset if defined $charset;
913
+ next;
914
+ }
906
915
  my %charsets;
907
916
  $charsets{$_} = 1 foreach values %Image::ExifTool::charsetName;
908
917
  PrintTagList('Available character sets', sort keys %charsets);
@@ -1144,8 +1153,10 @@ for (;;) {
1144
1153
  $langOpt =~ tr/-A-Z/_a-z/;
1145
1154
  $mt->Options(Lang => $langOpt);
1146
1155
  next if $langOpt eq $mt->Options('Lang');
1147
- } else {
1148
- $pass or push(@nextPass, '-lang'), next;
1156
+ } elsif (not $pass) {
1157
+ push @nextPass, '-lang';
1158
+ push @nextPass, $langOpt if defined $langOpt;
1159
+ next;
1149
1160
  }
1150
1161
  my $langs = $quiet ? '' : "Available languages:\n";
1151
1162
  $langs .= " $_ - $Image::ExifTool::langName{$_}\n" foreach @Image::ExifTool::langs;
@@ -4205,8 +4216,8 @@ sub SetWindowTitle($)
4205
4216
  if ($curTitle ne $title) {
4206
4217
  $curTitle = $title;
4207
4218
  if ($^O eq 'MSWin32') {
4208
- $title =~ tr(-_a-zA-Z0-9%.+/:=?*@~)()dc; # allow only safe characters
4209
- $title =~ s/([\/?:%])/^$1/g; # escape remaing questionable chars
4219
+ # allow only safe characters
4220
+ $title =~ tr(-_a-zA-Z0-9 \(\)[]{}%.+/:;,=?*!@#$~')()dc;
4210
4221
  eval { system qq{title $title} };
4211
4222
  } else {
4212
4223
  # (this only works for XTerm terminals, and STDERR must go to the console)
@@ -5118,52 +5129,52 @@ supported by ExifTool (r = read, w = write, c = create):
5118
5129
 
5119
5130
  File Types
5120
5131
  ------------+-------------+-------------+-------------+------------
5121
- 360 r/w | DR4 r/w/c | JP2 r/w | ODS r | RW2 r/w
5122
- 3FR r | DSF r | JPEG r/w | ODT r | RWL r/w
5123
- 3G2 r/w | DSS r | JSON r | OFR r | RWZ r
5124
- 3GP r/w | DV r | JXL r/w | OGG r | RM r
5125
- 7Z r | DVB r/w | K25 r | OGV r | SEQ r
5126
- A r | DVR-MS r | KDC r | ONP r | SKETCH r
5127
- AA r | DYLIB r | KEY r | OPUS r | SO r
5128
- AAC r | EIP r | KVAR r | ORF r/w | SR2 r/w
5129
- AAE r | EPS r/w | LA r | ORI r/w | SRF r
5130
- AAX r/w | EPUB r | LFP r | OTF r | SRW r/w
5131
- ACR r | ERF r/w | LIF r | PAC r | SVG r
5132
- AFM r | EXE r | LNK r | PAGES r | SWF r
5133
- AI r/w | EXIF r/w/c | LRV r/w | PBM r/w | THM r/w
5134
- AIFF r | EXR r | M2TS r | PCAP r | TIFF r/w
5135
- APE r | EXV r/w/c | M4A/V r/w | PCAPNG r | TNEF r
5136
- ARQ r/w | F4A/V r/w | MACOS r | PCD r | TORRENT r
5137
- ARW r/w | FFF r/w | MAX r | PCX r | TTC r
5138
- ASF r | FITS r | MEF r/w | PDB r | TTF r
5139
- AVI r | FLA r | MIE r/w/c | PDF r/w | TXT r
5140
- AVIF r/w | FLAC r | MIFF r | PEF r/w | URL r
5141
- AZW r | FLIF r/w | MKA r | PFA r | VCF r
5142
- BMP r | FLV r | MKS r | PFB r | VNT r
5143
- BPG r | FPF r | MKV r | PFM r | VRD r/w/c
5144
- BTF r | FPX r | MNG r/w | PGF r | VSD r
5145
- C2PA r | GIF r/w | MOBI r | PGM r/w | VSDX r
5146
- CHM r | GLV r/w | MODD r | PLIST r | WAV r
5147
- COS r | GPR r/w | MOI r | PICT r | WDP r/w
5148
- CR2 r/w | GZ r | MOS r/w | PMP r | WEBP r/w
5149
- CR3 r/w | HDP r/w | MOV r/w | PNG r/w | WEBM r
5150
- CRM r/w | HDR r | MP3 r | PPM r/w | WMA r
5151
- CRW r/w | HEIC r/w | MP4 r/w | PPT r | WMV r
5152
- CS1 r/w | HEIF r/w | MPC r | PPTX r | WOFF r
5153
- CSV r | HTML r | MPG r | PS r/w | WOFF2 r
5154
- CUR r | ICC r/w/c | MPO r/w | PSB r/w | WPG r
5155
- CZI r | ICO r | MQV r/w | PSD r/w | WTV r
5156
- DCM r | ICS r | MRC r | PSP r | WV r
5157
- DCP r/w | IDML r | MRW r/w | QTIF r/w | X3F r/w
5158
- DCR r | IIQ r/w | MXF r | R3D r | XCF r
5159
- DFONT r | IND r/w | NEF r/w | RA r | XISF r
5160
- DIVX r | INSP r/w | NKA r | RAF r/w | XLS r
5161
- DJVU r | INSV r | NKSC r/w | RAM r | XLSX r
5162
- DLL r | INX r | NRW r/w | RAR r | XMP r/w/c
5163
- DNG r/w | ISO r | NUMBERS r | RAW r/w | ZIP r
5164
- DOC r | ITC r | NXD r | RIFF r |
5165
- DOCX r | J2C r | O r | RSRC r |
5166
- DPX r | JNG r/w | ODP r | RTF r |
5132
+ 360 r/w | DR4 r/w/c | JNG r/w | ODP r | RTF r
5133
+ 3FR r | DSF r | JP2 r/w | ODS r | RW2 r/w
5134
+ 3G2 r/w | DSS r | JPEG r/w | ODT r | RWL r/w
5135
+ 3GP r/w | DV r | JSON r | OFR r | RWZ r
5136
+ 7Z r | DVB r/w | JXL r/w | OGG r | RM r
5137
+ A r | DVR-MS r | K25 r | OGV r | SEQ r
5138
+ AA r | DYLIB r | KDC r | ONP r | SKETCH r
5139
+ AAC r | EIP r | KEY r | OPUS r | SO r
5140
+ AAE r | EPS r/w | KVAR r | ORF r/w | SR2 r/w
5141
+ AAX r/w | EPUB r | LA r | ORI r/w | SRF r
5142
+ ACR r | ERF r/w | LFP r | OTF r | SRW r/w
5143
+ AFM r | EXE r | LIF r | PAC r | SVG r
5144
+ AI r/w | EXIF r/w/c | LNK r | PAGES r | SWF r
5145
+ AIFF r | EXR r | LRV r/w | PBM r/w | THM r/w
5146
+ APE r | EXV r/w/c | M2TS r | PCAP r | TIFF r/w
5147
+ ARQ r/w | F4A/V r/w | M4A/V r/w | PCAPNG r | TNEF r
5148
+ ARW r/w | FFF r/w | MACOS r | PCD r | TORRENT r
5149
+ ASF r | FIT r | MAX r | PCX r | TTC r
5150
+ AVI r | FITS r | MEF r/w | PDB r | TTF r
5151
+ AVIF r/w | FLA r | MIE r/w/c | PDF r/w | TXT r
5152
+ AZW r | FLAC r | MIFF r | PEF r/w | URL r
5153
+ BMP r | FLIF r/w | MKA r | PFA r | VCF r
5154
+ BPG r | FLV r | MKS r | PFB r | VNT r
5155
+ BTF r | FPF r | MKV r | PFM r | VRD r/w/c
5156
+ C2PA r | FPX r | MNG r/w | PGF r | VSD r
5157
+ CHM r | GIF r/w | MOBI r | PGM r/w | VSDX r
5158
+ COS r | GLV r/w | MODD r | PLIST r | WAV r
5159
+ CR2 r/w | GPR r/w | MOI r | PICT r | WDP r/w
5160
+ CR3 r/w | GZ r | MOS r/w | PMP r | WEBP r/w
5161
+ CRM r/w | HDP r/w | MOV r/w | PNG r/w | WEBM r
5162
+ CRW r/w | HDR r | MP3 r | PPM r/w | WMA r
5163
+ CS1 r/w | HEIC r/w | MP4 r/w | PPT r | WMV r
5164
+ CSV r | HEIF r/w | MPC r | PPTX r | WOFF r
5165
+ CUR r | HTML r | MPG r | PS r/w | WOFF2 r
5166
+ CZI r | ICC r/w/c | MPO r/w | PSB r/w | WPG r
5167
+ DCM r | ICO r | MQV r/w | PSD r/w | WTV r
5168
+ DCP r/w | ICS r | MRC r | PSP r | WV r
5169
+ DCR r | IDML r | MRW r/w | QTIF r/w | X3F r/w
5170
+ DFONT r | IIQ r/w | MXF r | R3D r | XCF r
5171
+ DIVX r | IND r/w | NEF r/w | RA r | XISF r
5172
+ DJVU r | INSP r/w | NKA r | RAF r/w | XLS r
5173
+ DLL r | INSV r | NKSC r/w | RAM r | XLSX r
5174
+ DNG r/w | INX r | NRW r/w | RAR r | XMP r/w/c
5175
+ DOC r | ISO r | NUMBERS r | RAW r/w | ZIP r
5176
+ DOCX r | ITC r | NXD r | RIFF r |
5177
+ DPX r | J2C r | O r | RSRC r |
5167
5178
 
5168
5179
  Meta Information
5169
5180
  ----------------------+----------------------+---------------------
@@ -5275,7 +5286,7 @@ L<Other options|/Other options>
5275
5286
 
5276
5287
  -@ ARGFILE Read command-line arguments from file
5277
5288
  -k (-pause) Pause before terminating
5278
- -list[w|f|wf|g[NUM]|d|x] List various exiftool capabilities
5289
+ -list[w|f|r|wf|g[NUM]|d|x|geo] List various exiftool capabilities
5279
5290
  -ver Print exiftool version number
5280
5291
  -- End of options
5281
5292
 
@@ -5293,7 +5304,7 @@ L<Utilities|/Utilities>
5293
5304
 
5294
5305
  L<Advanced options|/Advanced options>
5295
5306
 
5296
- -api OPT[[^]=[VAL]] Set ExifTool API option
5307
+ -api [OPT[[^]=[VAL]]] Set ExifTool API option
5297
5308
  -common_args Define common arguments
5298
5309
  -config CFGFILE Specify configuration file name
5299
5310
  -echo[NUM] TEXT Echo text to stdout or stderr
@@ -5886,9 +5897,10 @@ Escape characters in output tag values for HTML (B<-E>), XML (B<-ex>) or C
5886
5897
  (B<-ec>). For HTML, all characters with Unicode code points above U+007F
5887
5898
  are escaped as well as the following 5 characters: & (&amp;) E<39> (&#39;)
5888
5899
  E<quot> (&quot;) E<gt> (&gt;) and E<lt> (&lt;). For XML, only these 5
5889
- characters are escaped. The B<-E> option is implied with B<-h>, and B<-ex>
5890
- is implied with B<-X>. For C, all control characters and the backslash are
5891
- escaped. The inverse conversion is applied when writing tags.
5900
+ characters are escaped. The B<-E> option is implied with B<-h>, B<-ex> is
5901
+ implied with B<-X>, B<-ec> is implied with B<-json>, and none of these
5902
+ options apply to the B<-csv> output. For C, all control characters and the
5903
+ backslash are escaped. The inverse conversion is applied when writing tags.
5892
5904
 
5893
5905
  =item B<-f> (B<-forcePrint>)
5894
5906
 
@@ -6147,7 +6159,7 @@ with this command:
6147
6159
 
6148
6160
  produces output like this:
6149
6161
 
6150
- -- Generated by ExifTool 13.53 --
6162
+ -- Generated by ExifTool 13.57 --
6151
6163
  File: a.jpg - 2003:10:31 15:44:19
6152
6164
  (f/5.6, 1/60s, ISO 100)
6153
6165
  File: b.jpg - 2006:05:23 11:57:38
@@ -6297,7 +6309,7 @@ each processed file when writing and the new file name when renaming,
6297
6309
  moving or copying. Verbose levels above B<-v0> do not flush after each
6298
6310
  line. Also see the B<-progress> option.
6299
6311
 
6300
- =item B<-w>[+|!] I<EXT> or I<FMT> (B<-textOut>)
6312
+ =item B<-w>[+][!] I<EXT> or I<FMT> (B<-textOut>)
6301
6313
 
6302
6314
  Write console output to files with names ending in I<EXT>, one for each
6303
6315
  source file. The output file name is obtained by replacing the source file
@@ -6433,7 +6445,7 @@ natural numbers starting from 1, instead of 0 (see example F above).
6433
6445
  This same I<FMT> syntax is used with the B<-o> and B<-tagsFromFile> options,
6434
6446
  although %c and %C are only valid for output file names.
6435
6447
 
6436
- =item B<-W>[+|!] I<FMT> (B<-tagOut>)
6448
+ =item B<-W>[+][!] I<FMT> (B<-tagOut>)
6437
6449
 
6438
6450
  This enhanced version of the B<-w> option allows a separate output file to
6439
6451
  be created for each extracted tag. See the B<-w> option documentation above
@@ -7351,16 +7363,18 @@ necessary when using this technique.)
7351
7363
  Set user parameter. I<PARAM> is an arbitrary user parameter name. This is
7352
7364
  an interface to the API UserParam option (see the
7353
7365
  L<Image::ExifTool Options|Image::ExifTool/Options> documentation), and
7354
- provides a method to access user-defined parameters in arguments to the
7366
+ provides a method to access user-defined parameters in arguments of the
7355
7367
  B<-if>, B<-p> and B<-fileNUM> options as if they were any other tag.
7356
7368
  Appending a hash tag (C<#>) to I<PARAM> (eg. C<-userParam MyTag#=yes>) also
7357
7369
  causes the parameter to be extracted as a normal tag in the UserParam group.
7358
- Similar to the B<-api> option, the parameter value is set to 1 if I<=VAL>
7370
+ Similar to the B<-api> option, the parameter value is set to 1 if I<=VAL>
7359
7371
  is omitted, undef if just I<VAL> is omitted with C<=>, or an empty string if
7360
- I<VAL> is omitted with C<^=>.
7372
+ I<VAL> is omitted with C<^=>. Examples:
7361
7373
 
7362
7374
  exiftool -p '$test from $filename' -userparam test=Hello FILE
7363
7375
 
7376
+ exiftool "-description<mytag" -userparam mytag#="test" FILE
7377
+
7364
7378
  =back
7365
7379
 
7366
7380
  =head3 Advanced formatting feature
@@ -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.67';
38
+ $VERSION = '3.68';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -273,11 +273,11 @@ tags remain.
273
273
 
274
274
  The table below lists all EXIF tags. Also listed are TIFF, DNG, HDP and
275
275
  other tags which are not part of the EXIF specification, but may co-exist
276
- with EXIF tags in some images. Tags which are part of the EXIF 3.0
276
+ with EXIF tags in some images. Tags which are part of the EXIF 3.1
277
277
  specification have an underlined B<Tag Name> in the HTML version of this
278
278
  documentation. See
279
- L<https://www.cipa.jp/std/documents/download_e.html?CIPA_DC-008-2024-E>
280
- for the official EXIF 3.0 specification.
279
+ L<https://www.cipa.jp/std/documents/download_e.html?CIPA_DC-008-2026-E>
280
+ for the official EXIF 3.1 specification.
281
281
  },
282
282
  GPS => q{
283
283
  These GPS tags are part of the EXIF standard, and are stored in a separate
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '5.05';
91
+ $VERSION = '5.06';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -10267,6 +10267,19 @@ sub PrintLensID(@)
10267
10267
  }
10268
10268
  @matches = @likely unless @matches;
10269
10269
  @matches = @maybe unless @matches;
10270
+ # use LensModel focal length and aperture if necessary and available
10271
+ if (@matches > 1 and $lensModel and
10272
+ $lensModel =~ /(\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)?) ?mm ?f\/?(\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)?)/i)
10273
+ {
10274
+ my ($mm, $fstop) = ($1, $2);
10275
+ my @best;
10276
+ foreach $lens (@matches) {
10277
+ next unless $lens =~ /(\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)?) ?mm ?f\/?(\d+(?:\.\d+)?(?:-\d+(?:\.\d+)?)?)/i;
10278
+ push @best, $lens if $mm eq $1 and $fstop eq $2;
10279
+ }
10280
+ @matches = @best if @best;
10281
+ }
10282
+
10270
10283
  Image::ExifTool::Exif::MatchLensModel(\@matches, $lensModel);
10271
10284
  return join(' or ', @matches) if @matches;
10272
10285
  } elsif ($lensModel and $lensModel =~ /\d/) {