exiftool-vendored.exe 12.62.0 → 12.67.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 (52) hide show
  1. package/LICENSE +254 -254
  2. package/bin/exiftool_files/Changes +96 -1
  3. package/bin/exiftool_files/Makefile.PL +7 -1
  4. package/bin/exiftool_files/README +50 -46
  5. package/bin/exiftool_files/config_files/guano.config +161 -0
  6. package/bin/exiftool_files/exiftool.pl +113 -78
  7. package/bin/exiftool_files/lib/Image/ExifTool/7Z.pm +793 -0
  8. package/bin/exiftool_files/lib/Image/ExifTool/Apple.pm +19 -8
  9. package/bin/exiftool_files/lib/Image/ExifTool/BigTIFF.pm +8 -1
  10. package/bin/exiftool_files/lib/Image/ExifTool/Canon.pm +33 -12
  11. package/bin/exiftool_files/lib/Image/ExifTool/CanonRaw.pm +4 -4
  12. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +4 -1
  13. package/bin/exiftool_files/lib/Image/ExifTool/Exif.pm +31 -14
  14. package/bin/exiftool_files/lib/Image/ExifTool/FlashPix.pm +8 -2
  15. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +6 -3
  16. package/bin/exiftool_files/lib/Image/ExifTool/GPS.pm +5 -2
  17. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +5 -2
  18. package/bin/exiftool_files/lib/Image/ExifTool/Jpeg2000.pm +226 -28
  19. package/bin/exiftool_files/lib/Image/ExifTool/Lang/fr.pm +1467 -202
  20. package/bin/exiftool_files/lib/Image/ExifTool/MPF.pm +2 -1
  21. package/bin/exiftool_files/lib/Image/ExifTool/Matroska.pm +16 -1
  22. package/bin/exiftool_files/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
  23. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +948 -31
  24. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +874 -63
  25. package/bin/exiftool_files/lib/Image/ExifTool/PDF.pm +23 -5
  26. package/bin/exiftool_files/lib/Image/ExifTool/PLIST.pm +8 -1
  27. package/bin/exiftool_files/lib/Image/ExifTool/PLUS.pm +19 -4
  28. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +6 -6
  29. package/bin/exiftool_files/lib/Image/ExifTool/Pentax.pm +3 -1
  30. package/bin/exiftool_files/lib/Image/ExifTool/PhaseOne.pm +5 -5
  31. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +91 -30
  32. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +20 -19
  33. package/bin/exiftool_files/lib/Image/ExifTool/README +2 -2
  34. package/bin/exiftool_files/lib/Image/ExifTool/RIFF.pm +11 -9
  35. package/bin/exiftool_files/lib/Image/ExifTool/Samsung.pm +227 -227
  36. package/bin/exiftool_files/lib/Image/ExifTool/Shortcuts.pm +2 -1
  37. package/bin/exiftool_files/lib/Image/ExifTool/SigmaRaw.pm +4 -4
  38. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +229 -30
  39. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4758 -4633
  40. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +715 -23
  41. package/bin/exiftool_files/lib/Image/ExifTool/Validate.pm +17 -1
  42. package/bin/exiftool_files/lib/Image/ExifTool/WriteExif.pl +9 -7
  43. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +21 -9
  44. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +2 -2
  45. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +36 -12
  46. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +14 -2
  47. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +33 -1
  48. package/bin/exiftool_files/lib/Image/ExifTool/XMPStruct.pl +96 -28
  49. package/bin/exiftool_files/lib/Image/ExifTool/ZIP.pm +5 -5
  50. package/bin/exiftool_files/lib/Image/ExifTool.pm +184 -132
  51. package/bin/exiftool_files/lib/Image/ExifTool.pod +124 -58
  52. 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.62';
14
+ my $version = '12.67';
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
@@ -736,6 +739,13 @@ for (;;) {
736
739
  print "ExifTool version $version$str$Image::ExifTool::RELEASE\n";
737
740
  printf "Perl version %s%s\n", $], (defined ${^UNICODE} ? " (-C${^UNICODE})" : '');
738
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
+ }
739
749
  print "Optional libraries:\n";
740
750
  foreach (@recommends) {
741
751
  next if /^Win32/ and $^O ne 'MSWin32';
@@ -817,11 +827,17 @@ for (;;) {
817
827
  /^(-?)(a|duplicates)$/i and $mt->Options(Duplicates => ($1 ? 0 : 1)), next;
818
828
  if ($a eq 'api') {
819
829
  my $opt = shift;
820
- defined $opt or Error("Expected OPT[=VAL] argument for -api option\n"), $badCmd=1, next;
821
- my $val = ($opt =~ s/=(.*)//s) ? $1 : 1;
822
- # empty string means an undefined value unless ^= is used
823
- $val = undef unless $opt =~ s/\^$// or length $val;
824
- $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
+ }
825
841
  next;
826
842
  }
827
843
  /^arg(s|format)$/i and $argFormat = 1, next;
@@ -1463,6 +1479,10 @@ if ($csv and $csv eq 'CSV' and not $isWriting) {
1463
1479
  $binaryOutput = 0;
1464
1480
  $setCharset = 'default' unless defined $setCharset;
1465
1481
  }
1482
+ if (%printFmt) {
1483
+ Warn "The -csv option has no effect when -p is used\n";
1484
+ undef $csv;
1485
+ }
1466
1486
  require Image::ExifTool::XMP if $setCharset;
1467
1487
  }
1468
1488
 
@@ -2361,7 +2381,7 @@ TAG: foreach $tag (@foundTags) {
2361
2381
  next unless defined $val;
2362
2382
  if ($structOpt and ref $val) {
2363
2383
  # serialize structure if necessary
2364
- $val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
2384
+ $val = Image::ExifTool::XMP::SerializeStruct($et, $val) unless $xml or $json;
2365
2385
  } elsif (ref $val eq 'ARRAY') {
2366
2386
  if (defined $listItem) {
2367
2387
  # take only the specified item
@@ -2510,7 +2530,7 @@ TAG: foreach $tag (@foundTags) {
2510
2530
  my $tok = "$group:$tagName";
2511
2531
  if ($outFormat > 0) {
2512
2532
  if ($structOpt and ref $val) {
2513
- $val = Image::ExifTool::XMP::SerializeStruct($val);
2533
+ $val = Image::ExifTool::XMP::SerializeStruct($et, $val);
2514
2534
  }
2515
2535
  if ($escapeHTML) {
2516
2536
  $val =~ tr/\0-\x08\x0b\x0c\x0e-\x1f/./;
@@ -2857,7 +2877,7 @@ sub SetImageInfo($$$)
2857
2877
  }
2858
2878
  unless ($isStdout) {
2859
2879
  $outfile = NextUnusedFilename($outfile);
2860
- if ($et->Exists($outfile) and not $doSetFileName) {
2880
+ if ($et->Exists($outfile, 1) and not $doSetFileName) {
2861
2881
  Warn "Error: '${outfile}' already exists - $infile\n";
2862
2882
  EFile($infile);
2863
2883
  ++$countBadWr;
@@ -2988,7 +3008,7 @@ sub SetImageInfo($$$)
2988
3008
  $outfile = Image::ExifTool::GetNewFileName(defined $outfile ? $outfile : $file, $newDir);
2989
3009
  }
2990
3010
  $outfile = NextUnusedFilename($outfile, $infile);
2991
- if ($et->Exists($outfile)) {
3011
+ if ($et->Exists($outfile, 1)) {
2992
3012
  if ($infile eq $outfile) {
2993
3013
  undef $outfile; # not changing the file name after all
2994
3014
  # (allow for case-insensitive filesystems)
@@ -4068,6 +4088,8 @@ sub SuggestedExtension($$$)
4068
4088
  $ext = 'dr4';
4069
4089
  } elsif ($$valPt =~ /^(.{10}|.{522})(\x11\x01|\x00\x11)/s) {
4070
4090
  $ext = 'pict';
4091
+ } elsif ($$valPt =~ /^\xff\x0a|\0\0\0\x0cJXL \x0d\x0a......ftypjxl/s) {
4092
+ $ext = 'jxl';
4071
4093
  } else {
4072
4094
  $ext = 'dat';
4073
4095
  }
@@ -4214,7 +4236,7 @@ sub NextUnusedFilename($;$)
4214
4236
  }
4215
4237
  $filename .= substr($fmt, $pos); # add rest of file name
4216
4238
  # return now with filename unless file exists
4217
- 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};
4218
4240
  if (defined $okfile) {
4219
4241
  return $filename if $filename eq $okfile;
4220
4242
  my ($fn, $ok) = (AbsPath($filename), AbsPath($okfile));
@@ -4294,7 +4316,7 @@ sub OpenOutputFile($;@)
4294
4316
  $outfile .= $textOut;
4295
4317
  }
4296
4318
  my $mode = '>';
4297
- if ($mt->Exists($outfile)) {
4319
+ if ($mt->Exists($outfile, 1)) {
4298
4320
  unless ($textOverwrite) {
4299
4321
  Warn "Output file $outfile already exists for $file\n";
4300
4322
  return ();
@@ -4614,49 +4636,49 @@ DESCRIPTION
4614
4636
 
4615
4637
  File Types
4616
4638
  ------------+-------------+-------------+-------------+------------
4617
- 360 r/w | DR4 r/w/c | JNG r/w | ODP r | RSRC r
4618
- 3FR r | DSS r | JP2 r/w | ODS r | RTF r
4619
- 3G2 r/w | DV r | JPEG r/w | ODT r | RW2 r/w
4620
- 3GP r/w | DVB r/w | JSON r | OFR r | RWL r/w
4621
- A r | DVR-MS r | JXL r | OGG r | RWZ r
4622
- AA r | DYLIB r | K25 r | OGV r | RM r
4623
- AAE r | EIP r | KDC r | ONP r | SEQ r
4624
- AAX r/w | EPS r/w | KEY r | OPUS r | SKETCH r
4625
- ACR r | EPUB r | LA r | ORF r/w | SO r
4626
- AFM r | ERF r/w | LFP r | ORI r/w | SR2 r/w
4627
- AI r/w | EXE r | LIF r | OTF r | SRF r
4628
- AIFF r | EXIF r/w/c | LNK r | PAC r | SRW r/w
4629
- APE r | EXR r | LRV r/w | PAGES r | SVG r
4630
- ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SWF r
4631
- ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | THM r/w
4632
- ASF r | FFF r/w | MACOS r | PCX r | TIFF r/w
4633
- AVI r | FITS r | MAX r | PDB r | TORRENT r
4634
- AVIF r/w | FLA r | MEF r/w | PDF r/w | TTC r
4635
- AZW r | FLAC r | MIE r/w/c | PEF r/w | TTF r
4636
- BMP r | FLIF r/w | MIFF r | PFA r | TXT r
4637
- BPG r | FLV r | MKA r | PFB r | VCF r
4638
- BTF r | FPF r | MKS r | PFM r | VNT r
4639
- CHM r | FPX r | MKV r | PGF r | VRD r/w/c
4640
- COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
4641
- CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
4642
- CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
4643
- CRM r/w | HDP r/w | MOI r | PMP r | WEBP r/w
4644
- CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
4645
- CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
4646
- CSV r | HEIF r/w | MP3 r | PPT r | WMV r
4647
- CUR r | HTML r | MP4 r/w | PPTX r | WPG r
4648
- CZI r | ICC r/w/c | MPC r | PS r/w | WTV r
4649
- DCM r | ICO r | MPG r | PSB r/w | WV r
4650
- DCP r/w | ICS r | MPO r/w | PSD r/w | X3F r/w
4651
- DCR r | IDML r | MQV r/w | PSP r | XCF r
4652
- DFONT r | IIQ r/w | MRC r | QTIF r/w | XLS r
4653
- DIVX r | IND r/w | MRW r/w | R3D r | XLSX r
4654
- DJVU r | INSP r/w | MXF r | RA r | XMP r/w/c
4655
- DLL r | INSV r | NEF r/w | RAF r/w | ZIP r
4656
- DNG r/w | INX r | NKSC r/w | RAM r |
4657
- DOC r | ISO r | NRW r/w | RAR r |
4658
- DOCX r | ITC r | NUMBERS r | RAW r/w |
4659
- DPX r | J2C r | O r | RIFF 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 |
4660
4682
 
4661
4683
  Meta Information
4662
4684
  ----------------------+----------------------+---------------------
@@ -4867,8 +4889,8 @@ OPTIONS
4867
4889
  may be used to conditionally delete or replace a tag (see "WRITING
4868
4890
  EXAMPLES" for examples). "^=" is used to write an empty string
4869
4891
  instead of deleting the tag when no *VALUE* is given, but otherwise
4870
- it is equivalent to "=", but note that the caret must be quoted on
4871
- the Windows command line.
4892
+ it is equivalent to "=". (Note that the caret must be quoted on the
4893
+ Windows command line.)
4872
4894
 
4873
4895
  *TAG* may contain one or more leading family 0, 1, 2 or 7 group
4874
4896
  names, prefixed by optional family numbers, and separated colons.
@@ -4939,7 +4961,8 @@ OPTIONS
4939
4961
  delete JPEG application segments which are not associated with
4940
4962
  another deletable group. For example, specifying "-APP14:All=" will
4941
4963
  NOT delete the APP14 "Adobe" segment because this is accomplished
4942
- 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.
4943
4966
 
4944
4967
  6) When shifting a value, the shift is applied to the original
4945
4968
  value of the tag, overriding any other values previously assigned
@@ -5581,7 +5604,7 @@ OPTIONS
5581
5604
 
5582
5605
  produces output like this:
5583
5606
 
5584
- -- Generated by ExifTool 12.62 --
5607
+ -- Generated by ExifTool 12.67 --
5585
5608
  File: a.jpg - 2003:10:31 15:44:19
5586
5609
  (f/5.6, 1/60s, ISO 100)
5587
5610
  File: b.jpg - 2006:05:23 11:57:38
@@ -6110,13 +6133,10 @@ OPTIONS
6110
6133
  Perl variables, if used, require a double "$", and regular
6111
6134
  expressions ending in $/ must use $$/ instead.
6112
6135
 
6113
- 4) The condition may only test tags from the file being processed.
6114
- To process one file based on tags from another, two steps are
6115
- required. For example, to process XMP sidecar files in directory
6116
- "DIR" based on tags from the associated NEF:
6117
-
6118
- exiftool -if EXPR -p '$directory/$filename' -ext nef DIR > nef.txt
6119
- 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.
6120
6140
 
6121
6141
  5) The -a option has no effect on the evaluation of the expression,
6122
6142
  and the values of duplicate tags are accessible only by specifying
@@ -6303,11 +6323,12 @@ OPTIONS
6303
6323
  When reading, causes information to be extracted from .gz and .bz2
6304
6324
  compressed images (only one image per archive; requires gzip and
6305
6325
  bzip2 to be available). When writing, causes compressed information
6306
- to be written if supported by the metadata format (eg. compressed
6307
- textual metadata in PNG), disables the recommended padding in
6308
- embedded XMP (saving 2424 bytes when writing XMP in a file), and
6309
- writes XMP in shorthand format -- the equivalent of setting the API
6310
- 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".
6311
6332
 
6312
6333
  Other options
6313
6334
  -@ *ARGFILE*
@@ -6507,12 +6528,14 @@ OPTIONS
6507
6528
  improve performance in multi-pass processing by reducing the overhead
6508
6529
  required to load exiftool for each invocation.
6509
6530
 
6510
- -api *OPT[[^]=[VAL]]*
6531
+ -api [*OPT[[^]=[VAL]]*]
6511
6532
  Set ExifTool API option. *OPT* is an API option name. The option
6512
6533
  value is set to 1 if *=VAL* is omitted. If *VAL* is omitted, the
6513
6534
  option value is set to undef if "=" is used, or an empty string
6514
- with "^=". See Image::ExifTool Options for a list of available API
6515
- 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. The option name is not case senstive, but the option
6537
+ values are. See Image::ExifTool Options for option details. This
6538
+ overrides API options set via the config file.
6516
6539
 
6517
6540
  -common_args
6518
6541
  Specifies that all arguments following this option are common to
@@ -6763,6 +6786,15 @@ OPTIONS
6763
6786
 
6764
6787
  Note that function names are case sensitive.
6765
6788
 
6789
+ ExifTool 12.64 adds an API NoDups option which makes the NoDups helper
6790
+ function largely redundant, with all the functionality except the
6791
+ ability to avoid rewriting the file if there are no duplicates, but with
6792
+ the advantage the duplicates may be removed when accumulating list items
6793
+ from multiple sources. An equivalent to the above commands using this
6794
+ feature would be:
6795
+
6796
+ exiftool -tagsfromfile @ -keywords -api nodups a.jpg
6797
+
6766
6798
  WINDOWS UNICODE FILE NAMES
6767
6799
  In Windows, command-line arguments are specified using the current code
6768
6800
  page and are recoded automatically to the system code page. This
@@ -7210,10 +7242,13 @@ RENAMING EXAMPLES
7210
7242
  "20060507_118-1861.jpg".
7211
7243
 
7212
7244
  GEOTAGGING EXAMPLES
7213
- ExifTool implements geotagging via 3 special tags: Geotag (which for
7214
- convenience is also implemented as an exiftool option), Geosync and
7215
- Geotime. The examples below highlight some geotagging features. See
7216
- <https://exiftool.org/geotag.html> for additional documentation.
7245
+ ExifTool implements geotagging from GPS log files via 3 special tags:
7246
+ Geotag (which for convenience is also implemented as an exiftool
7247
+ option), Geosync and Geotime. The examples below highlight some
7248
+ geotagging features. See <https://exiftool.org/geotag.html> for
7249
+ additional documentation. (Note that geotagging from known GPS
7250
+ coordinates is done by writing the GPS tags directly rather than using
7251
+ the -geotag option.)
7217
7252
 
7218
7253
  exiftool -geotag track.log a.jpg
7219
7254
  Geotag an image ("a.jpg") from position information in a GPS track