exiftool_vendored 12.42.0 → 12.52.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +226 -6
  3. data/bin/MANIFEST +14 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +45 -44
  7. data/bin/config_files/acdsee.config +2 -1
  8. data/bin/config_files/frameCount.config +56 -0
  9. data/bin/config_files/tiff_version.config +1 -1
  10. data/bin/exiftool +116 -97
  11. data/bin/fmt_files/gpx.fmt +3 -0
  12. data/bin/fmt_files/gpx_wpt.fmt +3 -0
  13. data/bin/lib/Image/ExifTool/Apple.pm +16 -3
  14. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -12
  15. data/bin/lib/Image/ExifTool/Canon.pm +66 -37
  16. data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
  17. data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
  18. data/bin/lib/Image/ExifTool/Casio.pm +3 -3
  19. data/bin/lib/Image/ExifTool/DJI.pm +2 -1
  20. data/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
  21. data/bin/lib/Image/ExifTool/EXE.pm +9 -1
  22. data/bin/lib/Image/ExifTool/Exif.pm +17 -12
  23. data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
  24. data/bin/lib/Image/ExifTool/FLIR.pm +9 -7
  25. data/bin/lib/Image/ExifTool/FlashPix.pm +26 -3
  26. data/bin/lib/Image/ExifTool/FujiFilm.pm +51 -4
  27. data/bin/lib/Image/ExifTool/GPS.pm +31 -5
  28. data/bin/lib/Image/ExifTool/Geotag.pm +36 -8
  29. data/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -2
  30. data/bin/lib/Image/ExifTool/ICO.pm +143 -0
  31. data/bin/lib/Image/ExifTool/ID3.pm +6 -6
  32. data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
  33. data/bin/lib/Image/ExifTool/JPEG.pm +1 -0
  34. data/bin/lib/Image/ExifTool/Jpeg2000.pm +24 -3
  35. data/bin/lib/Image/ExifTool/LNK.pm +5 -2
  36. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  37. data/bin/lib/Image/ExifTool/Lang/fr.pm +6015 -759
  38. data/bin/lib/Image/ExifTool/Lang/sk.pm +1927 -0
  39. data/bin/lib/Image/ExifTool/M2TS.pm +98 -8
  40. data/bin/lib/Image/ExifTool/MIE.pm +9 -3
  41. data/bin/lib/Image/ExifTool/MISB.pm +494 -0
  42. data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -1
  43. data/bin/lib/Image/ExifTool/Matroska.pm +272 -48
  44. data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
  45. data/bin/lib/Image/ExifTool/Nikon.pm +746 -382
  46. data/bin/lib/Image/ExifTool/NikonCustom.pm +139 -106
  47. data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
  48. data/bin/lib/Image/ExifTool/Olympus.pm +6 -4
  49. data/bin/lib/Image/ExifTool/PNG.pm +8 -1
  50. data/bin/lib/Image/ExifTool/Panasonic.pm +21 -4
  51. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
  52. data/bin/lib/Image/ExifTool/Parrot.pm +96 -2
  53. data/bin/lib/Image/ExifTool/Pentax.pm +7 -2
  54. data/bin/lib/Image/ExifTool/Photoshop.pm +29 -3
  55. data/bin/lib/Image/ExifTool/QuickTime.pm +166 -13
  56. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +161 -22
  57. data/bin/lib/Image/ExifTool/README +15 -4
  58. data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
  59. data/bin/lib/Image/ExifTool/Samsung.pm +2 -2
  60. data/bin/lib/Image/ExifTool/Sigma.pm +27 -1
  61. data/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
  62. data/bin/lib/Image/ExifTool/Sony.pm +75 -47
  63. data/bin/lib/Image/ExifTool/TagInfoXML.pm +13 -6
  64. data/bin/lib/Image/ExifTool/TagLookup.pm +4791 -4519
  65. data/bin/lib/Image/ExifTool/TagNames.pod +2056 -1446
  66. data/bin/lib/Image/ExifTool/Text.pm +3 -4
  67. data/bin/lib/Image/ExifTool/Torrent.pm +2 -3
  68. data/bin/lib/Image/ExifTool/Validate.pm +3 -3
  69. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
  70. data/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
  71. data/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
  72. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
  73. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +12 -7
  74. data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
  75. data/bin/lib/Image/ExifTool/WriteXMP.pl +15 -1
  76. data/bin/lib/Image/ExifTool/Writer.pl +46 -18
  77. data/bin/lib/Image/ExifTool/XMP.pm +78 -59
  78. data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
  79. data/bin/lib/Image/ExifTool/ZIP.pm +19 -7
  80. data/bin/lib/Image/ExifTool.pm +146 -38
  81. data/bin/lib/Image/ExifTool.pod +83 -69
  82. data/bin/perl-Image-ExifTool.spec +43 -43
  83. data/lib/exiftool_vendored/version.rb +1 -1
  84. metadata +10 -4
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.42';
14
+ my $version = '12.52';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  BEGIN {
@@ -663,7 +663,7 @@ for (;;) {
663
663
  }
664
664
  $group = $2;
665
665
  shift;
666
- $group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), next;
666
+ $group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), $helped=1, next;
667
667
  $group =~ /^(all|\*)$/ and undef $group;
668
668
  } else {
669
669
  $pass or next;
@@ -1009,8 +1009,12 @@ for (;;) {
1009
1009
  }
1010
1010
  if (/^if(\d*)$/i) {
1011
1011
  my $cond = shift;
1012
- $fastCondition = $1 if length $1;
1012
+ my $fast = length($1) ? $1 : undef;
1013
1013
  defined $cond or Error("Expecting expression for -if option\n"), $badCmd=1, next;
1014
+ # use lowest -fast setting if multiple conditions
1015
+ if (not @condition or not defined $fast or (defined $fastCondition and $fastCondition > $fast)) {
1016
+ $fastCondition = $fast;
1017
+ }
1014
1018
  # prevent processing file unnecessarily for simple case of failed '$ok' or 'not $ok'
1015
1019
  $cond =~ /^\s*(not\s*)\$ok\s*$/i and ($1 xor $rtnValPrev) and $failCondition=1;
1016
1020
  # add to list of requested tags
@@ -2307,7 +2311,7 @@ TAG: foreach $tag (@foundTags) {
2307
2311
  if (ref $val) {
2308
2312
  # happens with -X, -j or -php when combined with -b:
2309
2313
  if (defined $binaryOutput and not $binaryOutput and $$et{TAG_INFO}{$tag}{Protected}) {
2310
- # avoid extracting Protected binary tags (eg. data blocks) [insider information]
2314
+ # avoid extracting Unsafe binary tags (eg. data blocks) [insider information]
2311
2315
  my $lcTag = lc $tag;
2312
2316
  $lcTag =~ s/ .*//;
2313
2317
  next unless $$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{RequestAll} || 0) > 2;
@@ -2347,7 +2351,8 @@ TAG: foreach $tag (@foundTags) {
2347
2351
  $group = $et->GetGroup($tag, $showGroup);
2348
2352
  # look ahead to see if this tag may suppress a priority tag in
2349
2353
  # the same group, and if so suppress this tag instead
2350
- next if $noDups and $tag =~ /^(.*?) \(/ and defined $$info{$1} and
2354
+ # (note that the tag key may look like "TAG #(1)" when the "#" feature is used)
2355
+ next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
2351
2356
  $group eq $et->GetGroup($1, $showGroup);
2352
2357
  $group = 'Unknown' if not $group and ($xml or $json or $csv);
2353
2358
  if ($fp and not ($allGroup or $csv)) {
@@ -2372,7 +2377,7 @@ TAG: foreach $tag (@foundTags) {
2372
2377
  }
2373
2378
  } elsif ($noDups) {
2374
2379
  # don't allow duplicates, but avoid suppressing the priority tag
2375
- next if $tag =~ /^(.*?) \(/ and defined $$info{$1};
2380
+ next if $tag =~ /^(.*?) ?\(/ and defined $$info{$1};
2376
2381
  }
2377
2382
 
2378
2383
  ++$lineCount; # we are printing something meaningful
@@ -3254,7 +3259,7 @@ sub EncodeXML($)
3254
3259
  {
3255
3260
  my $strPt = shift;
3256
3261
  if ($$strPt =~ /[\0-\x08\x0b\x0c\x0e-\x1f]/ or
3257
- (not $altEnc and Image::ExifTool::XMP::IsUTF8($strPt) < 0))
3262
+ (not $altEnc and Image::ExifTool::IsUTF8($strPt) < 0))
3258
3263
  {
3259
3264
  # encode binary data and non-UTF8 with special characters as base64
3260
3265
  $$strPt = Image::ExifTool::XMP::EncodeBase64($$strPt);
@@ -3318,7 +3323,7 @@ sub EscapeJSON($;$)
3318
3323
  return $str if $str =~ /^-?(\d|[1-9]\d{1,14})(\.\d{1,16})?(e[-+]?\d{1,3})?$/i;
3319
3324
  }
3320
3325
  # encode JSON string in base64 if necessary
3321
- if ($json < 2 and defined $binaryOutput and Image::ExifTool::XMP::IsUTF8(\$str) < 0) {
3326
+ if ($json < 2 and defined $binaryOutput and Image::ExifTool::IsUTF8(\$str) < 0) {
3322
3327
  return '"base64:' . Image::ExifTool::XMP::EncodeBase64($str, 1) . '"';
3323
3328
  }
3324
3329
  # escape special characters
@@ -3394,7 +3399,7 @@ sub FormatCSV($)
3394
3399
  my $val = shift;
3395
3400
  # check for valid encoding if the Charset option was used
3396
3401
  if ($setCharset and ($val =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xff]/ or
3397
- ($setCharset eq 'UTF8' and Image::ExifTool::XMP::IsUTF8(\$val) < 0)))
3402
+ ($setCharset eq 'UTF8' and Image::ExifTool::IsUTF8(\$val) < 0)))
3398
3403
  {
3399
3404
  $val = 'base64:' . Image::ExifTool::XMP::EncodeBase64($val, 1);
3400
3405
  }
@@ -3481,7 +3486,7 @@ sub ConvertBinary($)
3481
3486
  $obj = $$obj;
3482
3487
  # encode in base64 if necessary (0xf7 allows for up to 21-bit UTF-8 code space)
3483
3488
  if ($json == 1 and ($obj =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xf7]/ or
3484
- Image::ExifTool::XMP::IsUTF8(\$obj) < 0))
3489
+ Image::ExifTool::IsUTF8(\$obj) < 0))
3485
3490
  {
3486
3491
  $obj = 'base64:' . Image::ExifTool::XMP::EncodeBase64($obj, 1);
3487
3492
  }
@@ -3615,8 +3620,7 @@ sub CheckUTF8($$)
3615
3620
  my ($file, $enc) = @_;
3616
3621
  my $isUTF8 = 0;
3617
3622
  if ($file =~ /[\x80-\xff]/) {
3618
- require Image::ExifTool::XMP;
3619
- $isUTF8 = Image::ExifTool::XMP::IsUTF8(\$file);
3623
+ $isUTF8 = Image::ExifTool::IsUTF8(\$file);
3620
3624
  if ($isUTF8 < 0) {
3621
3625
  if ($enc) {
3622
3626
  Warn("Invalid filename encoding for $file\n");
@@ -4529,48 +4533,48 @@ supported by ExifTool (r = read, w = write, c = create):
4529
4533
 
4530
4534
  File Types
4531
4535
  ------------+-------------+-------------+-------------+------------
4532
- 360 r/w | DR4 r/w/c | JNG r/w | O r | RAW r/w
4533
- 3FR r | DSS r | JP2 r/w | ODP r | RIFF r
4534
- 3G2 r/w | DV r | JPEG r/w | ODS r | RSRC r
4535
- 3GP r/w | DVB r/w | JSON r | ODT r | RTF r
4536
- A r | DVR-MS r | JXL r | OFR r | RW2 r/w
4537
- AA r | DYLIB r | K25 r | OGG r | RWL r/w
4538
- AAE r | EIP r | KDC r | OGV r | RWZ r
4539
- AAX r/w | EPS r/w | KEY r | ONP r | RM r
4540
- ACR r | EPUB r | LA r | OPUS r | SEQ r
4541
- AFM r | ERF r/w | LFP r | ORF r/w | SKETCH r
4542
- AI r/w | EXE r | LIF r | ORI r/w | SO r
4543
- AIFF r | EXIF r/w/c | LNK r | OTF r | SR2 r/w
4544
- APE r | EXR r | LRV r/w | PAC r | SRF r
4545
- ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SRW r/w
4546
- ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | SVG r
4547
- ASF r | FFF r/w | MACOS r | PCD r | SWF r
4548
- AVI r | FITS r | MAX r | PCX r | THM r/w
4549
- AVIF r/w | FLA r | MEF r/w | PDB r | TIFF r/w
4550
- AZW r | FLAC r | MIE r/w/ | PDF r/w | TORRENT r
4551
- BMP r | FLIF r/w | MIFF r c | PEF r/w | TTC r
4552
- BPG r | FLV r | MKA r | PFA r | TTF r
4553
- BTF r | FPF r | MKS r | PFB r | TXT r
4554
- CHM r | FPX r | MKV r | PFM r | VCF r
4555
- COS r | GIF r/w | MNG r/w | PGF r | VRD r/w/c
4556
- CR2 r/w | GPR r/w | MOBI r | PGM r/w | VSD r
4557
- CR3 r/w | GZ r | MODD r | PLIST r | WAV r
4558
- CRM r/w | HDP r/w | MOI r | PICT r | WDP r/w
4559
- CRW r/w | HDR r | MOS r/w | PMP r | WEBP r
4560
- CS1 r/w | HEIC r/w | MOV r/w | PNG r/w | WEBM r
4561
- CSV r | HEIF r/w | MP3 r | PPM r/w | WMA r
4562
- CZI r | HTML r | MP4 r/w | PPT r | WMV r
4563
- DCM r | ICC r/w/c | MPC r | PPTX r | WTV r
4564
- DCP r/w | ICS r | MPG r | PS r/w | WV r
4565
- DCR r | IDML r | MPO r/w | PSB r/w | X3F r/w
4566
- DFONT r | IIQ r/w | MQV r/w | PSD r/w | XCF r
4567
- DIVX r | IND r/w | MRC r | PSP r | XLS r
4568
- DJVU r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
4569
- DLL r | INSV r | MXF r | R3D r | XMP r/w/c
4570
- DNG r/w | INX r | NEF r/w | RA r | ZIP r
4571
- DOC r | ISO r | NKSC r/w | RAF r/w |
4572
- DOCX r | ITC r | NRW r/w | RAM r |
4573
- DPX r | J2C r | NUMBERS r | RAR r |
4536
+ 360 r/w | DPX r | ITC r | NRW r/w | RAM r
4537
+ 3FR r | DR4 r/w/c | J2C r | NUMBERS r | RAR r
4538
+ 3G2 r/w | DSS r | JNG r/w | O r | RAW r/w
4539
+ 3GP r/w | DV r | JP2 r/w | ODP r | RIFF r
4540
+ A r | DVB r/w | JPEG r/w | ODS r | RSRC r
4541
+ AA r | DVR-MS r | JSON r | ODT r | RTF r
4542
+ AAE r | DYLIB r | JXL r | OFR r | RW2 r/w
4543
+ AAX r/w | EIP r | K25 r | OGG r | RWL r/w
4544
+ ACR r | EPS r/w | KDC r | OGV r | RWZ r
4545
+ AFM r | EPUB r | KEY r | ONP r | RM r
4546
+ AI r/w | ERF r/w | LA r | OPUS r | SEQ r
4547
+ AIFF r | EXE r | LFP r | ORF r/w | SKETCH r
4548
+ APE r | EXIF r/w/c | LIF r | ORI r/w | SO r
4549
+ ARQ r/w | EXR r | LNK r | OTF r | SR2 r/w
4550
+ ARW r/w | EXV r/w/c | LRV r/w | PAC r | SRF r
4551
+ ASF r | F4A/V r/w | M2TS r | PAGES r | SRW r/w
4552
+ AVI r | FFF r/w | M4A/V r/w | PBM r/w | SVG r
4553
+ AVIF r/w | FITS r | MACOS r | PCD r | SWF r
4554
+ AZW r | FLA r | MAX r | PCX r | THM r/w
4555
+ BMP r | FLAC r | MEF r/w | PDB r | TIFF r/w
4556
+ BPG r | FLIF r/w | MIE r/w/c | PDF r/w | TORRENT r
4557
+ BTF r | FLV r | MIFF r | PEF r/w | TTC r
4558
+ CHM r | FPF r | MKA r | PFA r | TTF r
4559
+ COS r | FPX r | MKS r | PFB r | TXT r
4560
+ 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 |
4574
4578
 
4575
4579
  Meta Information
4576
4580
  ----------------------+----------------------+---------------------
@@ -4990,16 +4994,17 @@ B<-struct> option for details.
4990
4994
  8) With the redirection feature, copying a tag directly (ie.
4991
4995
  E<quot>'-I<DSTTAG>E<lt>I<SRCTAG>'E<quot>) is not the same as interpolating
4992
4996
  its value inside a string (ie. E<quot>'-I<DSTTAG>E<lt>$I<SRCTAG>'E<quot>)
4993
- for list-type tags, L<shortcut tags|Image::ExifTool::Shortcuts>, tag names
4994
- containing wildcards, or UserParam variables. When copying directly, the
4995
- values of each matching source tag are copied individually to the
4996
- destination tag (as if they were separate assignments). However, when
4997
- interpolated inside a string, list items and the values of shortcut tags are
4998
- concatenated (with a separator set by the B<-sep> option), and wildcards are
4999
- not allowed. Also, UserParam variables are available only when interpolated
5000
- in a string. Another difference is that a minor warning is generated if a
5001
- tag doesn't exist when interpolating its value in a string (with C<$>), but
5002
- isn't when copying the tag directly.
4997
+ for source tags which are list-type tags,
4998
+ L<shortcut tags|Image::ExifTool::Shortcuts>, tag names containing wildcards,
4999
+ or UserParam variables. When copying directly, the values of each matching
5000
+ source tag are copied individually to the destination tag (as if they were
5001
+ separate assignments). However, when interpolated inside a string, list
5002
+ items and the values of shortcut tags are concatenated (with a separator set
5003
+ by the B<-sep> option), and wildcards are not allowed. Also, UserParam
5004
+ variables are available only when interpolated in a string. Another
5005
+ difference is that a minor warning is generated if a tag doesn't exist when
5006
+ interpolating its value in a string (with C<$>), but isn't when copying the
5007
+ tag directly.
5003
5008
 
5004
5009
  Finally, the behaviour is different when a destination tag or group of
5005
5010
  C<All> is used. When copying directly, a destination group and/or tag name
@@ -5058,8 +5063,8 @@ are in the default output. By default, list items are separated by a
5058
5063
  newline when extracted with the B<-b> option, but this may be changed (see
5059
5064
  the B<-sep> option for details). May be combined with B<-j>, B<-php> or
5060
5065
  B<-X> to extract binary data in JSON, PHP or XML format, but note that
5061
- "Unsafe" tags are not extracted as binary unless they are specified explicitly or
5062
- the API RequestAll option is set to 3 or higher.
5066
+ "Unsafe" tags are not extracted as binary unless they are specified
5067
+ explicitly or the API RequestAll option is set to 3 or higher.
5063
5068
 
5064
5069
  With a leading double dash (B<--b> or B<--binary>), tags which contain
5065
5070
  binary data are suppressed in the output when reading.
@@ -5224,7 +5229,8 @@ option has no effect on date-only or time-only tags and ignores timezone
5224
5229
  information if present. ExifTool adds a C<%f> format code to represent
5225
5230
  fractional seconds, and supports an optional width to specify the number of
5226
5231
  digits after the decimal point (eg. C<%3f> would give something like
5227
- C<.437>). Only one B<-d> option may be used per command. Requires
5232
+ C<.437>), and a minus sign to drop the decimal point (eg. C<%-3f> would give
5233
+ C<437>). Only one B<-d> option may be used per command. Requires
5228
5234
  POSIX::strptime or Time::Piece for the inversion conversion when writing.
5229
5235
 
5230
5236
  =item B<-D> (B<-decimal>)
@@ -5317,7 +5323,9 @@ ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
5317
5323
  to include tag table information (see B<-t> for details). The JSON output
5318
5324
  is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
5319
5325
  UTF-8 validation is disabled if a character set other than UTF-8 is
5320
- specified.
5326
+ specified. Note that ExifTool quotes JSON values only if they don't look
5327
+ like numbers (regardless of the original storage format or the relevant
5328
+ metadata specification).
5321
5329
 
5322
5330
  If I<JSONFILE> is specified, the file is imported and the tag definitions
5323
5331
  from the file are used to set tag values on a per-file basis. The special
@@ -5361,7 +5369,7 @@ been implemented. May also be combined with B<-listx> to output
5361
5369
  descriptions in one language only.
5362
5370
 
5363
5371
  By default, ExifTool uses UTF-8 encoding for special characters, but the
5364
- the B<-L> or B<-charset> option may be used to invoke other encodings. Note
5372
+ B<-L> or B<-charset> option may be used to invoke other encodings. Note
5365
5373
  that ExifTool uses Unicode::LineBreak if available to help preserve the
5366
5374
  column alignment of the plain text output for languages with a
5367
5375
  variable-width character set.
@@ -5467,7 +5475,7 @@ with this command:
5467
5475
 
5468
5476
  produces output like this:
5469
5477
 
5470
- -- Generated by ExifTool 12.42 --
5478
+ -- Generated by ExifTool 12.52 --
5471
5479
  File: a.jpg - 2003:10:31 15:44:19
5472
5480
  (f/5.6, 1/60s, ISO 100)
5473
5481
  File: b.jpg - 2006:05:23 11:57:38
@@ -5475,8 +5483,8 @@ produces output like this:
5475
5483
  -- end --
5476
5484
 
5477
5485
  The values of List-type tags with multiple items and Shortcut tags
5478
- representing multiple tags are joined according the the B<-sep> option
5479
- setting when interpolated in the string.
5486
+ representing multiple tags are joined according the B<-sep> option setting
5487
+ when interpolated in the string.
5480
5488
 
5481
5489
  When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents
5482
5490
  are effectively processed as separate input files.
@@ -5489,7 +5497,12 @@ warnings and leave the missing values empty. Alternatively, B<-q -q> may be
5489
5497
  used to simply suppress the warning messages.
5490
5498
 
5491
5499
  The L</Advanced formatting feature> may be used to modify the values of
5492
- individual tags with the B<-p> option.
5500
+ individual tags within the B<-p> option string.
5501
+
5502
+ Note that the API RequestTags option is automatically set for all tags used
5503
+ in the I<FMTFILE> or I<STR>. This allows all other tags to be ignored using
5504
+ B<-API IgnoreTags=all>, resulting in reduced memory usage and increased
5505
+ speed.
5493
5506
 
5494
5507
  =item B<-php>
5495
5508
 
@@ -5881,12 +5894,14 @@ audio/video data in WAV/AVI files to search for additional metadata. These
5881
5894
  speed benefits are small when reading images directly from disk, but can be
5882
5895
  substantial if piping images through a network connection. For more
5883
5896
  substantial speed benefits, B<-fast2> also causes exiftool to avoid
5884
- extracting any EXIF MakerNote information. B<-fast3> avoids extracting
5885
- metadata from the file, and returns only pseudo System tags, but still reads
5886
- the file header to obtain an educated guess at FileType. B<-fast4> doesn't
5887
- even read the file header, and returns only System tags and a FileType based
5888
- on the file extension. B<-fast5> also disables generation of the Composite
5889
- tags (like B<-e>). Has no effect when writing.
5897
+ extracting any EXIF MakerNote information, and to stop processing at the
5898
+ IDAT chunk of PNG images and the mdat atom of QuickTime-format files (but
5899
+ note that some files may store metadata after this). B<-fast3> avoids
5900
+ extracting metadata from the file, and returns only pseudo System tags, but
5901
+ still reads the file header to obtain an educated guess at FileType.
5902
+ B<-fast4> doesn't even read the file header, and returns only System tags
5903
+ and a FileType based on the file extension. B<-fast5> also disables
5904
+ generation of the Composite tags (like B<-e>). Has no effect when writing.
5890
5905
 
5891
5906
  Note that a separate B<-fast> setting may be used for evaluation of a B<-if>
5892
5907
  condition, or when ordering files with the B<-fileOrder> option. See the
@@ -5906,14 +5921,13 @@ order may be reversed by prefixing the tag name with a C<-> (eg.
5906
5921
  C<-fileOrder -createdate>). Print conversion of the sorted values is
5907
5922
  disabled with the B<-n> option, or a C<#> appended to the tag name. Other
5908
5923
  formatting options (eg. B<-d>) have no effect on the sorted values. Note
5909
- that the B<-fileOrder> option can have a large performance impact since it
5910
- involves an additional processing pass of each file, but this impact may be
5911
- reduced by specifying a I<NUM> for the B<-fast> level used during the
5912
- metadata-extraction phase. For example, B<-fileOrder4> may be used if
5913
- I<TAG> is a pseudo System tag. If multiple B<-fileOrder> options are used,
5914
- the extraction is done at the lowest B<-fast> level. Note that files are
5915
- sorted across directory boundaries if multiple input directories are
5916
- specified.
5924
+ that the B<-fileOrder> option can incur large performance penalty since it
5925
+ involves an additional initial processing pass of all files, but this impact
5926
+ may be reduced by specifying a I<NUM> to effectively set the B<-fast> level
5927
+ for the initial pass. For example, B<-fileOrder4> may be used if I<TAG> is
5928
+ a pseudo System tag. If multiple B<-fileOrder> options are used, the
5929
+ extraction is done at the lowest B<-fast> level. Note that files are sorted
5930
+ across directory boundaries if multiple input directories are specified.
5917
5931
 
5918
5932
  =item B<-i> I<DIR> (B<-ignore>)
5919
5933
 
@@ -5978,10 +5992,11 @@ also specified on the command line. The alternative is to use the
5978
5992
  C<$GROUP:all> syntax. (eg. Use C<$exif:all> instead of C<$exif> in I<EXPR>
5979
5993
  to test for the existence of EXIF tags.)
5980
5994
 
5981
- 3) Tags in the string are interpolated the same way as with B<-p> before the
5995
+ 3) Tags in the string are interpolated in a similar way to B<-p> before the
5982
5996
  expression is evaluated. In this interpolation, C<$/> is converted to a
5983
- newline and C<$$> represents a single C<$> symbol (so Perl variables, if
5984
- used, require a double C<$>).
5997
+ newline and C<$$> represents a single C<$> symbol. So Perl variables, if
5998
+ used, require a double C<$>, and regular expressions ending in C<$/> must
5999
+ use C<$$/> instead.
5985
6000
 
5986
6001
  4) The condition may only test tags from the file being processed. To
5987
6002
  process one file based on tags from another, two steps are required. For
@@ -5999,6 +6014,9 @@ the values of duplicate tags are accessible only by specifying a group name
5999
6014
  command when B<-execute> was used, and may be used like any other tag in the
6000
6015
  condition (ie. "$OK").
6001
6016
 
6017
+ 7) The API RequestTags option is automatically set for all tags used in the
6018
+ B<-if> condition.
6019
+
6002
6020
  =item B<-m> (B<-ignoreMinorErrors>)
6003
6021
 
6004
6022
  Ignore minor errors and warnings. This enables writing to files with minor
@@ -6244,12 +6262,13 @@ are some examples:
6244
6262
 
6245
6263
  When combined with B<-listx>, the B<-s> option shortens the output by
6246
6264
  omitting the descriptions and values (as in the last example above), and
6247
- B<-f> adds a 'flags' attribute if applicable. The flags are formatted as a
6248
- comma-separated list of the following possible values: Avoid, Binary, List,
6249
- Mandatory, Permanent, Protected, Unknown and Unsafe (see the L<Tag Name
6250
- documentation|Image::ExifTool::TagNames>). For XMP List tags, the list type
6251
- (Alt, Bag or Seq) is added to the flags, and flattened structure tags are
6252
- indicated by a Flattened flag.
6265
+ B<-f> adds 'flags' and 'struct' attributes if applicable. The flags are
6266
+ formatted as a comma-separated list of the following possible values:
6267
+ Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe
6268
+ (see the L<Tag Name documentation|Image::ExifTool::TagNames>). For XMP List
6269
+ tags, the list type (Alt, Bag or Seq) is added to the flags, and flattened
6270
+ structure tags are indicated by a Flattened flag with 'struct' giving the ID
6271
+ of the parent structure.
6253
6272
 
6254
6273
  Note that none of the B<-list> options require an input I<FILE>.
6255
6274
 
@@ -7228,7 +7247,7 @@ Combine multiple track logs and geotag an entire directory tree of images.
7228
7247
 
7229
7248
  Read all track logs from the C<tracks> directory.
7230
7249
 
7231
- =item exiftool -p gpx.fmt -d %Y-%m-%dT%H:%M:%SZ dir > out.gpx
7250
+ =item exiftool -p gpx.fmt dir > out.gpx
7232
7251
 
7233
7252
  Generate a GPX track log from all images in directory C<dir>. This example
7234
7253
  uses the C<gpx.fmt> file included in the full ExifTool distribution package
@@ -16,6 +16,9 @@
16
16
  # 2) The -ee3 option is to extract the full track from video files.
17
17
  # 3) The -fileOrder option may be used to control the order of the
18
18
  # generated track points when processing multiple files.
19
+ # 4) Coordinates are written at full resolution. To change this,
20
+ # remove the "#" from the GPSLatitude/Longitude tag names below
21
+ # and use the -c option to set the desired precision.
19
22
  #------------------------------------------------------------------------------
20
23
  #[HEAD]<?xml version="1.0" encoding="utf-8"?>
21
24
  #[HEAD]<gpx version="1.0"
@@ -17,6 +17,9 @@
17
17
  # 2) The -ee3 option is to extract the full track from video files.
18
18
  # 3) The -fileOrder option may be used to control the order of the
19
19
  # generated track points when processing multiple files.
20
+ # 4) Coordinates are written at full resolution. To change this,
21
+ # remove the "#" from the GPSLatitude/Longitude tag names below
22
+ # and use the -c option to set the desired precision.
20
23
  #------------------------------------------------------------------------------
21
24
  #[HEAD]<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
22
25
  #[HEAD]<gpx version="1.1"
@@ -15,7 +15,7 @@ use vars qw($VERSION);
15
15
  use Image::ExifTool::Exif;
16
16
  use Image::ExifTool::PLIST;
17
17
 
18
- $VERSION = '1.05';
18
+ $VERSION = '1.07';
19
19
 
20
20
  # Apple iPhone metadata (ref PH)
21
21
  %Image::ExifTool::Apple::Main = (
@@ -66,12 +66,21 @@ $VERSION = '1.05';
66
66
  Writable => 'string',
67
67
  Notes => 'unique ID for all images in a burst',
68
68
  },
69
- # 0x000c - rational64s[2]: eg) "0.1640625 0.19921875"
69
+ 0x000c => { # ref forum13710 (Neal Krawetz)
70
+ Name => 'FocusDistanceRange',
71
+ Writable => 'rational64s',
72
+ Count => 2,
73
+ PrintConv => q{
74
+ my @a = split ' ', $val;
75
+ sprintf('%.2f - %.2f m', $a[0] <= $a[1] ? @a : reverse @a);
76
+ },
77
+ PrintConvInv => '$val =~ s/ - //; $val =~ s/ ?m$//; $val',
78
+ },
70
79
  # 0x000d - int32s: 0,1,6,20,24,32,40
71
80
  # 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
72
81
  # 0x000f - int32s: 2,3
73
82
  # 0x0010 - int32s: 1
74
- 0x0011 => {
83
+ 0x0011 => { # (if defined, there is a live photo associated with the video, #forum13565)
75
84
  Name => 'MediaGroupUUID', #NealKrawetz private communication
76
85
  # (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
77
86
  Writable => 'string',
@@ -82,6 +91,10 @@ $VERSION = '1.05';
82
91
  Writable => 'string',
83
92
  },
84
93
  # 0x0016 - string[29]: "AXZ6pMTOh2L+acSh4Kg630XCScoO\0"
94
+ 0x0017 => { #forum13565 (only valid if MediaGroupUUID exists)
95
+ Name => 'LivePhotoVideoIndex',
96
+ Notes => 'divide by RunTimeScale to get time in seconds',
97
+ },
85
98
  # 0x0017 - int32s: 0,8192
86
99
  # 0x0019 - int32s: 0,2,128
87
100
  # 0x001a - string[6]: "q825s\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.47';
38
+ $VERSION = '3.50';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -501,11 +501,13 @@ been decoded. Use the L<Unknown|../ExifTool.html#Unknown> (-u) option to extrac
501
501
  },
502
502
  GeoTiff => q{
503
503
  ExifTool extracts the following tags from GeoTIFF images. See
504
- L<http://www.remotesensing.org/geotiff/spec/geotiffhome.html> for the
505
- complete GeoTIFF specification. Also included in the table below are
506
- ChartTIFF tags (see L<http://www.charttiff.com/whitepapers.shtml>). GeoTIFF
507
- tags are not writable individually, but they may be copied en mass via the
508
- block tags GeoTiffDirectory, GeoTiffDoubleParams and GeoTiffAsciiParams.
504
+ L<https://web.archive.org/web/20070820121549/http://www.remotesensing.org/geotiff/spec/geotiffhome.html>
505
+ for the complete GeoTIFF specification. Also included in the table below
506
+ are ChartTIFF tags (see
507
+ L<https://web.archive.org/web/20020828193928/http://www.charttiff.com/whitepapers.shtml>).
508
+ GeoTIFF tags are not writable individually, but they may be copied en mass
509
+ via the block tags GeoTiffDirectory, GeoTiffDoubleParams and
510
+ GeoTiffAsciiParams.
509
511
  },
510
512
  JFIF => q{
511
513
  The following information is extracted from the JPEG JFIF header. See
@@ -1289,16 +1291,19 @@ TagID: foreach $tagID (@keys) {
1289
1291
  $printConv = shift @printConvList;
1290
1292
  $index = shift @indexList;
1291
1293
  }
1292
- } elsif ($printConv and $printConv =~ /DecodeBits\(\$val,\s*(\{.*\})\s*\)/s) {
1294
+ # look inside scalar PrintConv for a bit/byte conversion
1295
+ # (see Photoshop:PrintFlags for use of "$byte" decoding)
1296
+ } elsif ($printConv and $printConv =~ /DecodeBits\(\$(val|byte),\s*(\\\%[\w:]+|\{.*\})\s*\)/s) {
1297
+ my $type = $1 eq 'byte' ? 'Byte' : 'Bit';
1293
1298
  $$self{Model} = ''; # needed for Nikon ShootingMode
1294
- my $bits = eval $1;
1299
+ my $bits = eval $2;
1295
1300
  delete $$self{Model};
1296
1301
  if ($@) {
1297
1302
  warn $@;
1298
1303
  } else {
1299
1304
  my @pk = sort { NumbersFirst($a,$b) } keys %$bits;
1300
1305
  foreach (@pk) {
1301
- push @values, "Bit $_ = " . $$bits{$_};
1306
+ push @values, "$type $_ = " . $$bits{$_};
1302
1307
  }
1303
1308
  }
1304
1309
  }
@@ -1324,9 +1329,12 @@ TagID: foreach $tagID (@keys) {
1324
1329
  if ($writable) {
1325
1330
  foreach ('PrintConv','ValueConv') {
1326
1331
  next unless $$tagInfo{$_};
1327
- next if $$tagInfo{$_ . 'Inv'};
1328
- next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/;
1329
- next if $$tagInfo{WriteAlso};
1332
+ next if defined $$tagInfo{$_ . 'Inv'};
1333
+ # (undefined inverse conversion overrides hash lookup)
1334
+ unless (exists $$tagInfo{$_ . 'Inv'}) {
1335
+ next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/;
1336
+ next if $$tagInfo{WriteAlso};
1337
+ }
1330
1338
  if ($_ eq 'ValueConv') {
1331
1339
  undef $writable;
1332
1340
  } else {
@@ -2570,6 +2578,9 @@ sub WriteTagNames($$)
2570
2578
  $tip = '';
2571
2579
  # use copyright symbol in QuickTime UserData tags
2572
2580
  $tagIDstr =~ s/^"\\xa9/"&copy;/;
2581
+ # escape necessary characters in html
2582
+ $tagIDstr =~ s/>/&gt;/g;
2583
+ $tagIDstr =~ s/</&lt;/g;
2573
2584
  }
2574
2585
  # add tooltip for special writable attributes
2575
2586
  my $wtip = '';