exiftool-vendored.exe 12.60.0 → 12.65.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 (55) hide show
  1. package/LICENSE +254 -254
  2. package/bin/exiftool_files/Changes +110 -0
  3. package/bin/exiftool_files/LICENSE +674 -0
  4. package/bin/exiftool_files/Makefile.PL +7 -1
  5. package/bin/exiftool_files/README +50 -45
  6. package/bin/exiftool_files/config_files/guano.config +161 -0
  7. package/bin/exiftool_files/exiftool.pl +162 -104
  8. package/bin/exiftool_files/lib/Image/ExifTool/7Z.pm +793 -0
  9. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +14 -7
  10. package/bin/exiftool_files/lib/Image/ExifTool/BMP.pm +0 -1
  11. package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +8 -1
  12. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +4 -4
  13. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +4 -1
  14. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +4 -4
  15. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +4 -1
  16. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +31 -14
  17. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +9 -2
  18. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +3 -3
  19. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -2
  20. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +4 -1
  21. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +243 -20
  22. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1467 -202
  23. package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +2 -1
  24. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +16 -1
  25. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
  26. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +941 -33
  27. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +874 -63
  28. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +39 -12
  29. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +8 -1
  30. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +6 -6
  31. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +5 -5
  32. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +96 -32
  33. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +68 -37
  34. package/bin/exiftool_files/lib/Image/ExifTool/README +2 -2
  35. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +11 -9
  36. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +227 -227
  37. package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +2 -1
  38. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +4 -4
  39. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +237 -32
  40. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4762 -4629
  41. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +737 -20
  42. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +17 -1
  43. package/bin/exiftool_files/lib/Image/ExifTool/WPG.pm +296 -0
  44. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -7
  45. package/bin/exiftool_files/lib/Image/ExifTool/WritePDF.pl +7 -8
  46. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
  47. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +2 -2
  48. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +47 -16
  49. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +30 -6
  50. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +32 -0
  51. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +96 -28
  52. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +159 -41
  53. package/bin/exiftool_files/lib/Image/ExifTool.pm +280 -164
  54. package/bin/exiftool_files/lib/Image/ExifTool.pod +117 -52
  55. package/package.json +3 -2
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.60';
14
+ my $version = '12.65';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -290,8 +290,11 @@ my @recommends = qw(
290
290
  POSIX::strptime
291
291
  Time::Local
292
292
  Unicode::LineBreak
293
+ Compress::Raw::Lzma
293
294
  IO::Compress::RawDeflate
294
295
  IO::Uncompress::RawInflate
296
+ IO::Compress::Brotli
297
+ IO::Uncompress::Brotli
295
298
  Win32::API
296
299
  Win32::FindFile
297
300
  Win32API::File
@@ -379,13 +382,14 @@ if ($exePath =~ /\(([^\\\/]+)\)(.exe|.pl)?$/i) {
379
382
 
380
383
  # isolate arguments common to all commands
381
384
  if (grep /^-common_args$/i, @ARGV) {
382
- my (@newArgs, $common);
385
+ my (@newArgs, $common, $end);
383
386
  foreach (@ARGV) {
384
- if (/^-common_args$/i) {
387
+ if (/^-common_args$/i and not $end) {
385
388
  $common = 1;
386
389
  } elsif ($common) {
387
390
  push @commonArgs, $_;
388
391
  } else {
392
+ $end = 1 if $_ eq '--';
389
393
  push @newArgs, $_;
390
394
  }
391
395
  }
@@ -735,6 +739,13 @@ for (;;) {
735
739
  print "ExifTool version $version$str$Image::ExifTool::RELEASE\n";
736
740
  printf "Perl version %s%s\n", $], (defined ${^UNICODE} ? " (-C${^UNICODE})" : '');
737
741
  print "Platform: $^O\n";
742
+ if ($verbose > 8) {
743
+ print "Current Dir: " . Cwd::getcwd() . "\n" if (eval { require Cwd });
744
+ print "Script Name: $0\n";
745
+ print "Exe Name: $^X\n";
746
+ print "Exe Dir: $Image::ExifTool::exeDir\n";
747
+ print "Exe Path: $exePath\n";
748
+ }
738
749
  print "Optional libraries:\n";
739
750
  foreach (@recommends) {
740
751
  next if /^Win32/ and $^O ne 'MSWin32';
@@ -816,11 +827,17 @@ for (;;) {
816
827
  /^(-?)(a|duplicates)$/i and $mt->Options(Duplicates => ($1 ? 0 : 1)), next;
817
828
  if ($a eq 'api') {
818
829
  my $opt = shift;
819
- defined $opt or Error("Expected OPT[=VAL] argument for -api option\n"), $badCmd=1, next;
820
- my $val = ($opt =~ s/=(.*)//s) ? $1 : 1;
821
- # empty string means an undefined value unless ^= is used
822
- $val = undef unless $opt =~ s/\^$// or length $val;
823
- $mt->Options($opt => $val);
830
+ if (defined $opt and length $opt) {
831
+ my $val = ($opt =~ s/=(.*)//s) ? $1 : 1;
832
+ # empty string means an undefined value unless ^= is used
833
+ $val = undef unless $opt =~ s/\^$// or length $val;
834
+ $mt->Options($opt => $val);
835
+ } else {
836
+ print "Available API Options:\n";
837
+ my $availableOptions = Image::ExifTool::AvailableOptions();
838
+ printf(" %-17s - %s\n", $$_[0], $$_[2]) foreach @$availableOptions;
839
+ $helped = 1;
840
+ }
824
841
  next;
825
842
  }
826
843
  /^arg(s|format)$/i and $argFormat = 1, next;
@@ -850,7 +867,7 @@ for (;;) {
850
867
  $mt->Options(Charset => $charset);
851
868
  }
852
869
  if ($evalWarning) {
853
- warn $evalWarning;
870
+ Warn $evalWarning;
854
871
  } else {
855
872
  $setCharset = $mt->Options('Charset');
856
873
  }
@@ -1462,6 +1479,10 @@ if ($csv and $csv eq 'CSV' and not $isWriting) {
1462
1479
  $binaryOutput = 0;
1463
1480
  $setCharset = 'default' unless defined $setCharset;
1464
1481
  }
1482
+ if (%printFmt) {
1483
+ Warn "The -csv option has no effect when -p is used\n";
1484
+ undef $csv;
1485
+ }
1465
1486
  require Image::ExifTool::XMP if $setCharset;
1466
1487
  }
1467
1488
 
@@ -1735,7 +1756,8 @@ if ($textOut) {
1735
1756
  if ($outOpt) {
1736
1757
  my $type = GetFileType($outOpt);
1737
1758
  if ($type) {
1738
- unless (CanWrite($type)) {
1759
+ # (must test original file name because we can write .webp but not other RIFF types)
1760
+ unless (CanWrite($outOpt)) {
1739
1761
  Warn "Can't write $type files\n";
1740
1762
  $rtnVal = 1;
1741
1763
  next;
@@ -1949,23 +1971,31 @@ sub GetImageInfo($$)
1949
1971
  my (@foundTags, $info, $file, $ind, $g8);
1950
1972
 
1951
1973
  # set window title for this file if necessary
1952
- if (defined $windowTitle and $progressCount >= $progressNext) {
1953
- my $prog = $progressMax ? "$progressCount/$progressMax" : '0/0';
1954
- my $title = $windowTitle;
1955
- my ($num, $denom) = split '/', $prog;
1956
- my $frac = $num / ($denom || 1);
1957
- my $n = $title =~ s/%(\d+)b/%b/ ? $1 : 20; # length of bar
1958
- my $bar = int($frac * $n + 0.5);
1959
- my %lkup = (
1960
- b => ('I' x $bar) . ('.' x ($n - $bar)), # (undocumented)
1961
- f => $orig,
1962
- p => int(100 * $frac + 0.5),
1963
- r => $prog,
1964
- '%'=> '%',
1965
- );
1966
- $title =~ s/%([%bfpr])/$lkup{$1}/eg;
1967
- SetWindowTitle($title);
1968
- undef $progressNext;
1974
+ if (defined $windowTitle) {
1975
+ if ($progressCount >= $progressNext) {
1976
+ my $prog = $progressMax ? "$progressCount/$progressMax" : '0/0';
1977
+ my $title = $windowTitle;
1978
+ my ($num, $denom) = split '/', $prog;
1979
+ my $frac = $num / ($denom || 1);
1980
+ my $n = $title =~ s/%(\d+)b/%b/ ? $1 : 20; # length of bar
1981
+ my $bar = int($frac * $n + 0.5);
1982
+ my %lkup = (
1983
+ b => ('I' x $bar) . ('.' x ($n - $bar)),
1984
+ f => $orig,
1985
+ p => int(100 * $frac + 0.5),
1986
+ r => $prog,
1987
+ '%'=> '%',
1988
+ );
1989
+ $title =~ s/%([%bfpr])/$lkup{$1}/eg;
1990
+ SetWindowTitle($title);
1991
+ if (defined $progressMax) {
1992
+ undef $progressNext;
1993
+ } else {
1994
+ $progressNext += $progressIncr;
1995
+ }
1996
+ }
1997
+ # ($progressMax is not defined for "-progress:%f")
1998
+ ++$progressCount unless defined $progressMax;
1969
1999
  }
1970
2000
  unless (length $orig or $outOpt) {
1971
2001
  Warn qq(Error: Zero-length file name - ""\n);
@@ -1991,7 +2021,11 @@ sub GetImageInfo($$)
1991
2021
  }
1992
2022
  # set alternate file names
1993
2023
  foreach $g8 (sort keys %altFile) {
1994
- my $altName = FilenameSPrintf($altFile{$g8}, $orig);
2024
+ my $altName = $orig;
2025
+ # must double any '$' symbols in the original file name because
2026
+ # they are used for tag names in a -fileNUM argument
2027
+ $altName =~ s/\$/\$\$/g;
2028
+ $altName = FilenameSPrintf($altFile{$g8}, $altName);
1995
2029
  $et->SetAlternateFile($g8, $altName);
1996
2030
  }
1997
2031
 
@@ -2347,7 +2381,7 @@ TAG: foreach $tag (@foundTags) {
2347
2381
  next unless defined $val;
2348
2382
  if ($structOpt and ref $val) {
2349
2383
  # serialize structure if necessary
2350
- $val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
2384
+ $val = Image::ExifTool::XMP::SerializeStruct($et, $val) unless $xml or $json;
2351
2385
  } elsif (ref $val eq 'ARRAY') {
2352
2386
  if (defined $listItem) {
2353
2387
  # take only the specified item
@@ -2496,7 +2530,7 @@ TAG: foreach $tag (@foundTags) {
2496
2530
  my $tok = "$group:$tagName";
2497
2531
  if ($outFormat > 0) {
2498
2532
  if ($structOpt and ref $val) {
2499
- $val = Image::ExifTool::XMP::SerializeStruct($val);
2533
+ $val = Image::ExifTool::XMP::SerializeStruct($et, $val);
2500
2534
  }
2501
2535
  if ($escapeHTML) {
2502
2536
  $val =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./;
@@ -2534,6 +2568,7 @@ TAG: foreach $tag (@foundTags) {
2534
2568
  $xtra .= " et:table='${table}'";
2535
2569
  $xtra .= " et:index='${index}'" if defined $index;
2536
2570
  }
2571
+ # Note: New $xtra attributes must be added to %ignoreEtProp in XMP.pm!
2537
2572
  my $lastVal = $val;
2538
2573
  for ($valNum=0; $valNum<2; ++$valNum) {
2539
2574
  $val = FormatXML($val, $ind, $group);
@@ -2842,7 +2877,7 @@ sub SetImageInfo($$$)
2842
2877
  }
2843
2878
  unless ($isStdout) {
2844
2879
  $outfile = NextUnusedFilename($outfile);
2845
- if ($et->Exists($outfile) and not $doSetFileName) {
2880
+ if ($et->Exists($outfile, 1) and not $doSetFileName) {
2846
2881
  Warn "Error: '${outfile}' already exists - $infile\n";
2847
2882
  EFile($infile);
2848
2883
  ++$countBadWr;
@@ -2973,7 +3008,7 @@ sub SetImageInfo($$$)
2973
3008
  $outfile = Image::ExifTool::GetNewFileName(defined $outfile ? $outfile : $file, $newDir);
2974
3009
  }
2975
3010
  $outfile = NextUnusedFilename($outfile, $infile);
2976
- if ($et->Exists($outfile)) {
3011
+ if ($et->Exists($outfile, 1)) {
2977
3012
  if ($infile eq $outfile) {
2978
3013
  undef $outfile; # not changing the file name after all
2979
3014
  # (allow for case-insensitive filesystems)
@@ -3698,7 +3733,7 @@ sub ProcessFiles($;$)
3698
3733
  if (defined $progressMax) {
3699
3734
  unless (defined $progressNext) {
3700
3735
  $progressNext = $progressCount + $progressIncr;
3701
- $progressNext -= $progressNext % $progressIncr;
3736
+ $progressNext -= $progressNext % $progressIncr; # (show even multiples)
3702
3737
  $progressNext = $progressMax if $progressNext > $progressMax;
3703
3738
  }
3704
3739
  ++$progressCount;
@@ -4053,6 +4088,8 @@ sub SuggestedExtension($$$)
4053
4088
  $ext = 'dr4';
4054
4089
  } elsif ($$valPt =~ /^(.{10}|.{522})(\x11\x01|\x00\x11)/s) {
4055
4090
  $ext = 'pict';
4091
+ } elsif ($$valPt =~ /^\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl/s) {
4092
+ $ext = 'jxl';
4056
4093
  } else {
4057
4094
  $ext = 'dat';
4058
4095
  }
@@ -4199,7 +4236,7 @@ sub NextUnusedFilename($;$)
4199
4236
  }
4200
4237
  $filename .= substr($fmt, $pos); # add rest of file name
4201
4238
  # return now with filename unless file exists
4202
- return $filename unless ($mt->Exists($filename) and not defined $usedFileName{$filename}) or $usedFileName{$filename};
4239
+ return $filename unless ($mt->Exists($filename, 1) and not defined $usedFileName{$filename}) or $usedFileName{$filename};
4203
4240
  if (defined $okfile) {
4204
4241
  return $filename if $filename eq $okfile;
4205
4242
  my ($fn, $ok) = (AbsPath($filename), AbsPath($okfile));
@@ -4279,7 +4316,7 @@ sub OpenOutputFile($;@)
4279
4316
  $outfile .= $textOut;
4280
4317
  }
4281
4318
  my $mode = '>';
4282
- if ($mt->Exists($outfile)) {
4319
+ if ($mt->Exists($outfile, 1)) {
4283
4320
  unless ($textOverwrite) {
4284
4321
  Warn "Output file $outfile already exists for $file\n";
4285
4322
  return ();
@@ -4477,7 +4514,7 @@ sub Progress($$)
4477
4514
  my ($file, $msg) = @_;
4478
4515
  if (defined $progStr) {
4479
4516
  print $file $msg, $progStr, "\n";
4480
- undef $progressNext;
4517
+ undef $progressNext if defined $progressMax;
4481
4518
  }
4482
4519
  }
4483
4520
 
@@ -4599,48 +4636,49 @@ DESCRIPTION
4599
4636
 
4600
4637
  File Types
4601
4638
  ------------+-------------+-------------+-------------+------------
4602
- 360 r/w | DPX r | ITC r | NRW r/w | RAM r
4603
- 3FR r | DR4 r/w/c | J2C r | NUMBERS r | RAR r
4604
- 3G2 r/w | DSS r | JNG r/w | O r | RAW r/w
4605
- 3GP r/w | DV r | JP2 r/w | ODP r | RIFF r
4606
- A r | DVB r/w | JPEG r/w | ODS r | RSRC r
4607
- AA r | DVR-MS r | JSON r | ODT r | RTF r
4608
- AAE r | DYLIB r | JXL r | OFR r | RW2 r/w
4609
- AAX r/w | EIP r | K25 r | OGG r | RWL r/w
4610
- ACR r | EPS r/w | KDC r | OGV r | RWZ r
4611
- AFM r | EPUB r | KEY r | ONP r | RM r
4612
- AI r/w | ERF r/w | LA r | OPUS r | SEQ r
4613
- AIFF r | EXE r | LFP r | ORF r/w | SKETCH r
4614
- APE r | EXIF r/w/c | LIF r | ORI r/w | SO r
4615
- ARQ r/w | EXR r | LNK r | OTF r | SR2 r/w
4616
- ARW r/w | EXV r/w/c | LRV r/w | PAC r | SRF r
4617
- ASF r | F4A/V r/w | M2TS r | PAGES r | SRW r/w
4618
- AVI r | FFF r/w | M4A/V r/w | PBM r/w | SVG r
4619
- AVIF r/w | FITS r | MACOS r | PCD r | SWF r
4620
- AZW r | FLA r | MAX r | PCX r | THM r/w
4621
- BMP r | FLAC r | MEF r/w | PDB r | TIFF r/w
4622
- BPG r | FLIF r/w | MIE r/w/c | PDF r/w | TORRENT r
4623
- BTF r | FLV r | MIFF r | PEF r/w | TTC r
4624
- CHM r | FPF r | MKA r | PFA r | TTF r
4625
- COS r | FPX r | MKS r | PFB r | TXT r
4626
- CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
4627
- CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
4628
- CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
4629
- CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
4630
- CS1 r/w | HDR r | MOI r | PICT r | WAV r
4631
- CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
4632
- CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
4633
- CZI r | HTML r | MP3 r | PPM r/w | WEBM r
4634
- DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
4635
- DCP r/w | ICO r | MPC r | PPTX r | WMV r
4636
- DCR r | ICS r | MPG r | PS r/w | WTV r
4637
- DFONT r | IDML r | MPO r/w | PSB r/w | WV r
4638
- DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
4639
- DJVU r | IND r/w | MRC r | PSP r | XCF r
4640
- DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
4641
- DNG r/w | INSV r | MXF r | R3D r | XLSX r
4642
- DOC r | INX r | NEF r/w | RA r | XMP r/w/c
4643
- DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
4639
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAW r/w
4640
+ 3FR r | DR4 r/w/c | J2C r | O r | RIFF r
4641
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RSRC r
4642
+ 3GP r/w | DV r | JP2 r/w | ODS r | RTF r
4643
+ 7Z r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
4644
+ A r | DVR-MS r | JSON r | OFR r | RWL r/w
4645
+ AA r | DYLIB r | JXL r | OGG r | RWZ r
4646
+ AAE r | EIP r | K25 r | OGV r | RM r
4647
+ AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
4648
+ ACR r | EPUB r | KEY r | OPUS r | SKETCH r
4649
+ AFM r | ERF r/w | LA r | ORF r/w | SO r
4650
+ AI r/w | EXE r | LFP r | ORI r/w | SR2 r/w
4651
+ AIFF r | EXIF r/w/c | LIF r | OTF r | SRF r
4652
+ APE r | EXR r | LNK r | PAC r | SRW r/w
4653
+ ARQ r/w | EXV r/w/c | LRV r/w | PAGES r | SVG r
4654
+ ARW r/w | F4A/V r/w | M2TS r | PBM r/w | SWF r
4655
+ ASF r | FFF r/w | M4A/V r/w | PCD r | THM r/w
4656
+ AVI r | FITS r | MACOS r | PCX r | TIFF r/w
4657
+ AVIF r/w | FLA r | MAX r | PDB r | TORRENT r
4658
+ AZW r | FLAC r | MEF r/w | PDF r/w | TTC r
4659
+ BMP r | FLIF r/w | MIE r/w/c | PEF r/w | TTF r
4660
+ BPG r | FLV r | MIFF r | PFA r | TXT r
4661
+ BTF r | FPF r | MKA r | PFB r | VCF r
4662
+ CHM r | FPX r | MKS r | PFM r | VNT r
4663
+ COS r | GIF r/w | MKV r | PGF r | VRD r/w/c
4664
+ CR2 r/w | GLV r/w | MNG r/w | PGM r/w | VSD r
4665
+ CR3 r/w | GPR r/w | MOBI r | PLIST r | WAV r
4666
+ CRM r/w | GZ r | MODD r | PICT r | WDP r/w
4667
+ CRW r/w | HDP r/w | MOI r | PMP r | WEBP r/w
4668
+ CS1 r/w | HDR r | MOS r/w | PNG r/w | WEBM r
4669
+ CSV r | HEIC r/w | MOV r/w | PPM r/w | WMA r
4670
+ CUR r | HEIF r/w | MP3 r | PPT r | WMV r
4671
+ CZI r | HTML r | MP4 r/w | PPTX r | WPG r
4672
+ DCM r | ICC r/w/c | MPC r | PS r/w | WTV r
4673
+ DCP r/w | ICO r | MPG r | PSB r/w | WV r
4674
+ DCR r | ICS r | MPO r/w | PSD r/w | X3F r/w
4675
+ DFONT r | IDML r | MQV r/w | PSP r | XCF r
4676
+ DIVX r | IIQ r/w | MRC r | QTIF r/w | XLS r
4677
+ DJVU r | IND r/w | MRW r/w | R3D r | XLSX r
4678
+ DLL r | INSP r/w | MXF r | RA r | XMP r/w/c
4679
+ DNG r/w | INSV r | NEF r/w | RAF r/w | ZIP r
4680
+ DOC r | INX r | NKSC r/w | RAM r |
4681
+ DOCX r | ISO r | NRW r/w | RAR r |
4644
4682
 
4645
4683
  Meta Information
4646
4684
  ----------------------+----------------------+---------------------
@@ -4677,7 +4715,7 @@ OPTIONS
4677
4715
  -TAG or --TAG Extract or exclude specified tag
4678
4716
  -TAG[+-^]=[VALUE] Write new value for tag
4679
4717
  -TAG[+-]<=DATFILE Write tag value from contents of file
4680
- -TAG[+-]<SRCTAG Copy tag value (see -tagsFromFile)
4718
+ -[+]TAG[+-]<SRCTAG Copy tag value (see -tagsFromFile)
4681
4719
 
4682
4720
  -tagsFromFile SRCFILE Copy tag values from file
4683
4721
  -x TAG (-exclude) Exclude specified tag
@@ -4851,8 +4889,8 @@ OPTIONS
4851
4889
  may be used to conditionally delete or replace a tag (see "WRITING
4852
4890
  EXAMPLES" for examples). "^=" is used to write an empty string
4853
4891
  instead of deleting the tag when no *VALUE* is given, but otherwise
4854
- it is equivalent to "=", but note that the caret must be quoted on
4855
- the Windows command line.
4892
+ it is equivalent to "=". (Note that the caret must be quoted on the
4893
+ Windows command line.)
4856
4894
 
4857
4895
  *TAG* may contain one or more leading family 0, 1, 2 or 7 group
4858
4896
  names, prefixed by optional family numbers, and separated colons.
@@ -4923,7 +4961,8 @@ OPTIONS
4923
4961
  delete JPEG application segments which are not associated with
4924
4962
  another deletable group. For example, specifying "-APP14:All=" will
4925
4963
  NOT delete the APP14 "Adobe" segment because this is accomplished
4926
- with "-Adobe:All".
4964
+ with "-Adobe:All". But note that these unnamed APP segments may not
4965
+ be excluded with "--APPxx:all" when deleting all information.
4927
4966
 
4928
4967
  6) When shifting a value, the shift is applied to the original
4929
4968
  value of the tag, overriding any other values previously assigned
@@ -5565,7 +5604,7 @@ OPTIONS
5565
5604
 
5566
5605
  produces output like this:
5567
5606
 
5568
- -- Generated by ExifTool 12.60 --
5607
+ -- Generated by ExifTool 12.65 --
5569
5608
  File: a.jpg - 2003:10:31 15:44:19
5570
5609
  (f/5.6, 1/60s, ISO 100)
5571
5610
  File: b.jpg - 2006:05:23 11:57:38
@@ -6094,13 +6133,10 @@ OPTIONS
6094
6133
  Perl variables, if used, require a double "$", and regular
6095
6134
  expressions ending in $/ must use $$/ instead.
6096
6135
 
6097
- 4) The condition may only test tags from the file being processed.
6098
- To process one file based on tags from another, two steps are
6099
- required. For example, to process XMP sidecar files in directory
6100
- "DIR" based on tags from the associated NEF:
6101
-
6102
- exiftool -if EXPR -p '$directory/$filename' -ext nef DIR > nef.txt
6103
- exiftool -@ nef.txt -srcfile %d%f.xmp ...
6136
+ 4) The condition accesses only tags from the file being processed
6137
+ unless the -fileNUM option is used to read an alternate file and
6138
+ the corresponding family 8 group name is specified for the tag. See
6139
+ the -fileNUM option details for more information.
6104
6140
 
6105
6141
  5) The -a option has no effect on the evaluation of the expression,
6106
6142
  and the values of duplicate tags are accessible only by specifying
@@ -6287,11 +6323,12 @@ OPTIONS
6287
6323
  When reading, causes information to be extracted from .gz and .bz2
6288
6324
  compressed images (only one image per archive; requires gzip and
6289
6325
  bzip2 to be available). When writing, causes compressed information
6290
- to be written if supported by the metadata format (eg. compressed
6291
- textual metadata in PNG), disables the recommended padding in
6292
- embedded XMP (saving 2424 bytes when writing XMP in a file), and
6293
- writes XMP in shorthand format -- the equivalent of setting the API
6294
- Compress=1 and Compact="NoPadding,Shorthand".
6326
+ to be written if supported by the metadata format (eg. PNG supports
6327
+ compressed textual metadata, JXL supports compressed EXIF and XML,
6328
+ and MIE supports any compressed metadata), disables the recommended
6329
+ padding in embedded XMP (saving 2424 bytes when writing XMP in a
6330
+ file), and writes XMP in shorthand format -- the equivalent of
6331
+ setting the API Compress=1 and Compact="NoPadding,Shorthand".
6295
6332
 
6296
6333
  Other options
6297
6334
  -@ *ARGFILE*
@@ -6491,12 +6528,13 @@ OPTIONS
6491
6528
  improve performance in multi-pass processing by reducing the overhead
6492
6529
  required to load exiftool for each invocation.
6493
6530
 
6494
- -api *OPT[[^]=[VAL]]*
6531
+ -api [*OPT[[^]=[VAL]]*]
6495
6532
  Set ExifTool API option. *OPT* is an API option name. The option
6496
6533
  value is set to 1 if *=VAL* is omitted. If *VAL* is omitted, the
6497
6534
  option value is set to undef if "=" is used, or an empty string
6498
- with "^=". See Image::ExifTool Options for a list of available API
6499
- options. This overrides API options set via the config file.
6535
+ with "^=". If *OPT* is not specified a list of available options is
6536
+ returned. See Image::ExifTool Options for option details. This
6537
+ overrides API options set via the config file.
6500
6538
 
6501
6539
  -common_args
6502
6540
  Specifies that all arguments following this option are common to
@@ -6548,12 +6586,23 @@ OPTIONS
6548
6586
  suppresses the output "{readyNUM}" message.
6549
6587
 
6550
6588
  -file*NUM* *ALTFILE*
6551
- Read tags from an alternate source file. These tags are accessed
6552
- via the family 8 group name (eg. "File1:TAG" for the -file1 option,
6553
- "File2:TAG" for -file2, etc). *ALTFILE* may contain filename
6554
- formatting codes %d, %f and %e. Among other things, this allows
6555
- tags from different files to be compared and combined using the -if
6556
- and -p options.
6589
+ Read tags from an alternate source file. Among other things, this
6590
+ allows tags from different files to be compared and combined using
6591
+ the -if and -p options. Tags from alternate files are accessed via
6592
+ the corresponding family 8 group name (eg. "File1:TAG" for the
6593
+ -file1 option, "File2:TAG" for -file2, etc). *ALTFILE* may contain
6594
+ filename formatting codes like the -w option (%d, %f, etc), and/or
6595
+ tag names with a leading "$" symbol to access tags from the source
6596
+ file in the same way as the -p option (so any other dollar symbol
6597
+ in the file name must be doubled, eg. "money$$.jpg"). For example,
6598
+ assuming that the OriginalFileName tag has been set in the edited
6599
+ file, a command to copy Rights from the original file could look
6600
+ like this:
6601
+
6602
+ exiftool -file1 "$originalfilename" "-rights<file1:rights" edited.jpg
6603
+
6604
+ Composite tags may access tags from alternate files using the
6605
+ appropriate (case-sensitive) family 8 group name.
6557
6606
 
6558
6607
  -list_dir
6559
6608
  List directories themselves instead of their contents. This option
@@ -6736,6 +6785,15 @@ OPTIONS
6736
6785
 
6737
6786
  Note that function names are case sensitive.
6738
6787
 
6788
+ ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
6789
+ function largely redundant, with all the functionality except the
6790
+ ability to avoid rewriting the file if there are no duplicates, but with
6791
+ the advantage the duplicates may be removed when accumulating list items
6792
+ from multiple sources. An equivalent to the above commands using this
6793
+ feature would be:
6794
+
6795
+ exiftool -tagsfromfile @ -keywords -api nodups a.jpg
6796
+
6739
6797
  WINDOWS UNICODE FILE NAMES
6740
6798
  In Windows, command-line arguments are specified using the current code
6741
6799
  page and are recoded automatically to the system code page. This