exiftool_vendored 13.41.0 → 13.44.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 (61) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +45 -1
  3. data/bin/MANIFEST +2 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +48 -48
  7. data/bin/exiftool +172 -170
  8. data/bin/lib/Image/ExifTool/Apple.pm +0 -1
  9. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
  10. data/bin/lib/Image/ExifTool/Canon.pm +27 -2
  11. data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
  12. data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
  13. data/bin/lib/Image/ExifTool/EXE.pm +1 -1
  14. data/bin/lib/Image/ExifTool/Exif.pm +1 -0
  15. data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  16. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  17. data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -2
  18. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  19. data/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
  20. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  21. data/bin/lib/Image/ExifTool/Google.pm +2 -2
  22. data/bin/lib/Image/ExifTool/ICC_Profile.pm +0 -1
  23. data/bin/lib/Image/ExifTool/Import.pm +1 -1
  24. data/bin/lib/Image/ExifTool/JSON.pm +7 -6
  25. data/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
  26. data/bin/lib/Image/ExifTool/Kandao.pm +399 -0
  27. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  28. data/bin/lib/Image/ExifTool/MRC.pm +4 -4
  29. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  30. data/bin/lib/Image/ExifTool/MacOS.pm +1 -2
  31. data/bin/lib/Image/ExifTool/Matroska.pm +56 -15
  32. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  33. data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
  34. data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -6
  35. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  36. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  37. data/bin/lib/Image/ExifTool/Panasonic.pm +30 -6
  38. data/bin/lib/Image/ExifTool/PhaseOne.pm +17 -1
  39. data/bin/lib/Image/ExifTool/Plot.pm +2 -2
  40. data/bin/lib/Image/ExifTool/Protobuf.pm +2 -2
  41. data/bin/lib/Image/ExifTool/QuickTime.pm +50 -8
  42. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
  43. data/bin/lib/Image/ExifTool/README +5 -5
  44. data/bin/lib/Image/ExifTool/RIFF.pm +5 -4
  45. data/bin/lib/Image/ExifTool/Reconyx.pm +2 -2
  46. data/bin/lib/Image/ExifTool/Samsung.pm +137 -4
  47. data/bin/lib/Image/ExifTool/Sony.pm +16 -4
  48. data/bin/lib/Image/ExifTool/TNEF.pm +2 -2
  49. data/bin/lib/Image/ExifTool/TagLookup.pm +7195 -7108
  50. data/bin/lib/Image/ExifTool/TagNames.pod +370 -111
  51. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  52. data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
  53. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +18 -3
  54. data/bin/lib/Image/ExifTool/Writer.pl +3 -2
  55. data/bin/lib/Image/ExifTool/XMP.pm +4 -2
  56. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  57. data/bin/lib/Image/ExifTool.pm +7 -4
  58. data/bin/lib/Image/ExifTool.pod +79 -79
  59. data/bin/perl-Image-ExifTool.spec +47 -47
  60. data/lib/exiftool_vendored/version.rb +1 -1
  61. 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.41';
14
+ my $version = '13.44';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -152,9 +152,9 @@ my $countNewDir; # count of directories created
152
152
  my $countSameWr; # count files written OK but not changed
153
153
  my $critical; # flag for critical operations (disable CTRL-C)
154
154
  my $csv; # flag for CSV option (set to "CSV", or maybe "JSON" when writing)
155
- my $csvAdd; # flag to add CSV information to existing lists
156
155
  my $csvDelim; # delimiter for CSV files
157
- my $csvSaveCount; # save counter for last CSV file loaded
156
+ my $dbAdd; # flag to add CSV/JSON information to existing lists
157
+ my $dbSaveCount; # save counter for last CSV/JSON file loaded
158
158
  my $deleteOrig; # 0=restore original files, 1=delete originals, 2=delete w/o asking
159
159
  my $diff; # file name for comparing differences
160
160
  my $disableOutput; # flag to disable normal output
@@ -485,7 +485,7 @@ undef $binSep;
485
485
  undef $binTerm;
486
486
  undef $comma;
487
487
  undef $csv;
488
- undef $csvAdd;
488
+ undef $dbAdd;
489
489
  undef $deleteOrig;
490
490
  undef $diff;
491
491
  undef $disableOutput;
@@ -550,7 +550,7 @@ $countGoodWr = 0;
550
550
  $countNewDir = 0;
551
551
  $countSameWr = 0;
552
552
  $csvDelim = ',';
553
- $csvSaveCount = 0;
553
+ $dbSaveCount = 0;
554
554
  $fileTrailer = '';
555
555
  $filterFlag = 0;
556
556
  $html = 0;
@@ -580,7 +580,7 @@ my $escapeXML; # flag to escape printed values for xml
580
580
  my $setTagsFile; # filename for last TagsFromFile option
581
581
  my $sortOpt; # sort option is used
582
582
  my $srcStdin; # one of the source files is STDIN
583
- my $tagsFrom = ''; # tags on command line come from 'csv' or 'file'
583
+ my $tagsFrom = ''; # tags on command line come from 'CSV' or 'File'
584
584
  my $useMWG; # flag set if we are using any MWG tag
585
585
 
586
586
  my ($argsLeft, @nextPass, $badCmd);
@@ -815,7 +815,7 @@ for (;;) {
815
815
  }
816
816
  # create necessary lists, etc for this new -tagsFromFile file
817
817
  AddSetTagsFile($setTagsFile, { Replace => ($1 and lc($1) eq 'add') ? 0 : 1 } );
818
- $tagsFrom = 'file';
818
+ $tagsFrom = 'File';
819
819
  next;
820
820
  }
821
821
  if ($a eq '@') {
@@ -923,36 +923,50 @@ for (;;) {
923
923
  next;
924
924
  }
925
925
  /^config$/i and Warn("Ignored -config option (not first on command line)\n"), shift, next;
926
- if (/^csv(\+?=.*)?$/i) {
927
- my $csvFile = $1;
926
+ if (/^(csv|j(son)?)(\+?=.*)?$/i) {
927
+ my $dbFile = $3;
928
+ my $dbType = lc($1) eq 'csv' ? 'CSV' : 'JSON';
929
+ unless ($dbFile) {
930
+ if ($dbType eq 'CSV') {
931
+ $csv = $dbType;
932
+ } else {
933
+ $json = 1;
934
+ $html = $xml = 0;
935
+ $mt->Options(Duplicates => 1);
936
+ require Image::ExifTool::XMP; # for FixUTF8()
937
+ }
938
+ next;
939
+ }
928
940
  # must process on 2nd pass so -f and -charset options are available
929
941
  unless ($pass) {
942
+ @tags and Warn("Tag arguments should come after the -$1= option\n");
930
943
  push @nextPass, "-$_";
931
- if ($csvFile) {
932
- push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
933
- $csvSaveCount = $saveCount;
934
- $tagsFrom = 'csv';
935
- }
944
+ push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
945
+ $dbSaveCount = $saveCount;
946
+ $tagsFrom = 'CSV';
936
947
  next;
937
948
  }
938
- if ($csvFile) {
939
- $csvFile =~ s/^(\+?=)//;
940
- $csvAdd = 2 if $1 eq '+=';
941
- $vout = \*STDERR if $srcStdin;
942
- $verbose and print $vout "Reading CSV file $csvFile\n";
943
- my $msg;
944
- if ($mt->Open(\*CSVFILE, $csvFile)) {
945
- binmode CSVFILE;
946
- require Image::ExifTool::Import;
949
+ $dbFile =~ s/^(\+?=)//;
950
+ $dbAdd = 2 if $1 eq '+=';
951
+ $vout = \*STDERR if $srcStdin;
952
+ $verbose and print $vout "Reading $dbType file $dbFile\n";
953
+ my $msg;
954
+ if ($mt->Open(\*CSVFILE, $dbFile)) {
955
+ binmode CSVFILE;
956
+ require Image::ExifTool::Import;
957
+ if ($dbType eq 'CSV') {
947
958
  $msg = Image::ExifTool::Import::ReadCSV(\*CSVFILE, \%database, $forcePrint, $csvDelim);
948
- close(CSVFILE);
949
959
  } else {
950
- $msg = "Error opening CSV file '${csvFile}'";
960
+ my $chset = $mt->Options('Charset');
961
+ $msg = Image::ExifTool::Import::ReadJSON(\*CSVFILE, \%database, $forcePrint, $chset);
951
962
  }
952
- $msg and Warn("$msg\n");
953
- $isWriting = 1;
963
+ close(CSVFILE);
964
+ } else {
965
+ $msg = "Error opening $dbType file '${dbFile}'";
954
966
  }
955
- $csv = 'CSV';
967
+ $msg and Warn("$msg\n");
968
+ $isWriting = 1;
969
+ $csv = $dbType;
956
970
  next;
957
971
  }
958
972
  if (/^csvdelim$/i) {
@@ -1115,42 +1129,6 @@ for (;;) {
1115
1129
  push @condition, $cond;
1116
1130
  next;
1117
1131
  }
1118
- if (/^j(son)?(\+?=.*)?$/i) {
1119
- if ($2) {
1120
- # must process on 2nd pass because we need -f and -charset options
1121
- unless ($pass) {
1122
- push @nextPass, "-$_";
1123
- push @newValues, { SaveCount => ++$saveCount }; # marker to save new values now
1124
- $csvSaveCount = $saveCount;
1125
- $tagsFrom = 'csv';
1126
- next;
1127
- }
1128
- my $jsonFile = $2;
1129
- $jsonFile =~ s/^(\+?=)//;
1130
- $csvAdd = 2 if $1 eq '+=';
1131
- $vout = \*STDERR if $srcStdin;
1132
- $verbose and print $vout "Reading JSON file $jsonFile\n";
1133
- my $chset = $mt->Options('Charset');
1134
- my $msg;
1135
- if ($mt->Open(\*JSONFILE, $jsonFile)) {
1136
- binmode JSONFILE;
1137
- require Image::ExifTool::Import;
1138
- $msg = Image::ExifTool::Import::ReadJSON(\*JSONFILE, \%database, $forcePrint, $chset);
1139
- close(JSONFILE);
1140
- } else {
1141
- $msg = "Error opening JSON file '${jsonFile}'";
1142
- }
1143
- $msg and Warn("$msg\n");
1144
- $isWriting = 1;
1145
- $csv = 'JSON';
1146
- } else {
1147
- $json = 1;
1148
- $html = $xml = 0;
1149
- $mt->Options(Duplicates => 1);
1150
- require Image::ExifTool::XMP; # for FixUTF8()
1151
- }
1152
- next;
1153
- }
1154
1132
  /^(k|pause)$/i and $pause = 1, next;
1155
1133
  (/^l$/ or $a eq 'long') and --$outFormat, next;
1156
1134
  (/^L$/ or $a eq 'latin') and $mt->Options(Charset => 'Latin'), next;
@@ -1373,7 +1351,7 @@ for (;;) {
1373
1351
  $tag =~ s/\ball\b/\*/ig; # replace 'all' with '*' in tag names
1374
1352
  if (not $tagsFrom) {
1375
1353
  push @exclude, $tag;
1376
- } elsif ($tagsFrom eq 'csv') {
1354
+ } elsif ($tagsFrom eq 'CSV') {
1377
1355
  push @csvExclude, $tag;
1378
1356
  } else {
1379
1357
  push @{$setTags{$setTagsFile}}, "-$tag";
@@ -1420,11 +1398,11 @@ for (;;) {
1420
1398
  } else {
1421
1399
  # assume '-tagsFromFile @' if tags are being redirected
1422
1400
  # and not from CSV and -tagsFromFile hasn't already been specified
1423
- if (not $setTagsFile and $tagsFrom ne 'csv' and /(<|>)/) {
1401
+ if (not $setTagsFile and $tagsFrom ne 'CSV' and /(<|>)/) {
1424
1402
  AddSetTagsFile($setTagsFile = '@');
1425
- $tagsFrom = 'file';
1403
+ $tagsFrom = 'File';
1426
1404
  }
1427
- if ($tagsFrom eq 'csv') {
1405
+ if ($tagsFrom eq 'CSV') {
1428
1406
  my $lst = s/^-// ? \@csvExclude : \@tags;
1429
1407
  push @$lst, $_;
1430
1408
  } elsif ($setTagsFile) {
@@ -1732,7 +1710,7 @@ if (@newValues) {
1732
1710
  $saveCount = $mt->SaveNewValues();
1733
1711
  $needSave = 0;
1734
1712
  # insert marker to load values from CSV file now if this was the CSV file
1735
- push @dynamicFiles, \$csv if $$_{SaveCount} == $csvSaveCount;
1713
+ push @dynamicFiles, \$csv if $$_{SaveCount} == $dbSaveCount;
1736
1714
  }
1737
1715
  next;
1738
1716
  }
@@ -3262,7 +3240,7 @@ sub SetImageInfo($$$)
3262
3240
  next;
3263
3241
  } elsif (ref $dyFile eq 'SCALAR') {
3264
3242
  # set new values from CSV or JSON database
3265
- my ($f, $found, $csvTag, $tg, $csvExifTool);
3243
+ my ($f, $found, $csvTag, $tg, $csvEtPrt, $csvEtVal);
3266
3244
  undef $evalWarning;
3267
3245
  local $SIG{'__WARN__'} = sub { $evalWarning = $_[0] };
3268
3246
  # force UTF-8 if the database was JSON
@@ -3294,16 +3272,22 @@ sub SetImageInfo($$$)
3294
3272
  }
3295
3273
  if (@tags) {
3296
3274
  # prepare a dummy ExifTool object to hold appropriate tags from the database
3297
- $csvExifTool = Image::ExifTool->new unless $csvExifTool;
3275
+ $csvEtPrt = Image::ExifTool->new unless $csvEtPrt;
3298
3276
  foreach $csvTag (OrderedKeys($csvInfo)) {
3299
3277
  next if $csvTag =~ /^([-_0-9A-Z]+:)*(SourceFile|Directory|FileName)$/i;
3300
3278
  my @grps = split /:/, $csvTag;
3301
3279
  my $name = pop @grps;
3302
- unshift @grps, 'Unknown' while @grps < 2;
3303
- $csvExifTool->FoundTag($name, $$csvInfo{$csvTag}, @grps);
3280
+ unshift @grps, 'All' while @grps < 2;
3281
+ if ($name =~ s/#$//) {
3282
+ # handle ValueConv tags separately
3283
+ $csvEtVal = Image::ExifTool->new unless $csvEtVal;
3284
+ $csvEtVal->FoundTag($name, $$csvInfo{$csvTag}, @grps);
3285
+ } else {
3286
+ $csvEtPrt->FoundTag($name, $$csvInfo{$csvTag}, @grps);
3287
+ }
3304
3288
  }
3305
3289
  next;
3306
- }
3290
+ }
3307
3291
  my @exclTags = @csvExclude;
3308
3292
  foreach (@exclTags) {
3309
3293
  tr/-0-9a-zA-Z_:#?*//dc; # remove illegal characters
@@ -3337,15 +3321,20 @@ ExclMatch: foreach $exclTag (@exclTags) {
3337
3321
  next if $excluded;
3338
3322
  }
3339
3323
  my ($rtn, $wrn) = $et->SetNewValue($csvTag, $$csvInfo{$csvTag},
3340
- Protected => 1, AddValue => $csvAdd,
3341
- ProtectSaved => $csvSaveCount);
3324
+ Protected => 1, AddValue => $dbAdd,
3325
+ ProtectSaved => $dbSaveCount);
3342
3326
  $wrn and Warn "$wrn\n" if $verbose;
3343
3327
  }
3344
3328
  }
3345
3329
  # set specified tags now
3346
- if ($csvExifTool) {
3330
+ if ($csvEtPrt) {
3347
3331
  my @excl = map "-$_", @csvExclude; # add back leading dashes
3348
- $et->SetNewValuesFromFile($csvExifTool, @tags, @excl);
3332
+ my $opts = { AddValue => $dbAdd, Replace => 0 };
3333
+ $et->SetNewValuesFromFile($csvEtPrt, $opts, @tags, @excl);
3334
+ if ($csvEtVal) {
3335
+ $$opts{Type} = 'ValueConv';
3336
+ $et->SetNewValuesFromFile($csvEtVal, $opts, @tags, @excl);
3337
+ }
3349
3338
  }
3350
3339
  $et->Options(Charset => $old) if $csv eq 'JSON';
3351
3340
  unless ($found) {
@@ -5099,7 +5088,7 @@ input. Metadata is read from source files and printed in readable form to
5099
5088
  the console (or written to output text files with B<-w>).
5100
5089
 
5101
5090
  To write or delete metadata, tag values are assigned using
5102
- -I<TAG>=[I<VALUE>], and/or the B<-geotag>, B<-csv=> or B<-json=> options.
5091
+ -I<TAG>=[I<VALUE>], and/or the B<-geotag>, B<-csv=> or B<-json=> options.
5103
5092
  To copy or move metadata, the B<-tagsFromFile> feature is used. By default
5104
5093
  the original files are preserved with C<_original> appended to their names
5105
5094
  -- be sure to verify that the new files are OK before erasing the originals.
@@ -5118,52 +5107,52 @@ supported by ExifTool (r = read, w = write, c = create):
5118
5107
 
5119
5108
  File Types
5120
5109
  ------------+-------------+-------------+-------------+------------
5121
- 360 r/w | DR4 r/w/c | JP2 r/w | ODT r | RWL r/w
5122
- 3FR r | DSF r | JPEG r/w | OFR r | RWZ r
5123
- 3G2 r/w | DSS r | JSON r | OGG r | RM r
5124
- 3GP r/w | DV r | JXL r/w | OGV r | SEQ r
5125
- 7Z r | DVB r/w | K25 r | ONP r | SKETCH r
5126
- A r | DVR-MS r | KDC r | OPUS r | SO r
5127
- AA r | DYLIB r | KEY r | ORF r/w | SR2 r/w
5128
- AAC r | EIP r | LA r | ORI r/w | SRF r
5129
- AAE r | EPS r/w | LFP r | OTF r | SRW r/w
5130
- AAX r/w | EPUB r | LIF r | PAC r | SVG r
5131
- ACR r | ERF r/w | LNK r | PAGES r | SWF r
5132
- AFM r | EXE r | LRV r/w | PBM r/w | THM r/w
5133
- AI r/w | EXIF r/w/c | M2TS r | PCAP r | TIFF r/w
5134
- AIFF r | EXR r | M4A/V r/w | PCAPNG r | TNEF r
5135
- APE r | EXV r/w/c | MACOS r | PCD r | TORRENT r
5136
- ARQ r/w | F4A/V r/w | MAX r | PCX r | TTC r
5137
- ARW r/w | FFF r/w | MEF r/w | PDB r | TTF r
5138
- ASF r | FITS r | MIE r/w/c | PDF r/w | TXT r
5139
- AVI r | FLA r | MIFF r | PEF r/w | URL r
5140
- AVIF r/w | FLAC r | MKA r | PFA r | VCF r
5141
- AZW r | FLIF r/w | MKS r | PFB r | VNT r
5142
- BMP r | FLV r | MKV r | PFM r | VRD r/w/c
5143
- BPG r | FPF r | MNG r/w | PGF r | VSD r
5144
- BTF r | FPX r | MOBI r | PGM r/w | VSDX r
5145
- C2PA r | GIF r/w | MODD r | PLIST r | WAV r
5146
- CHM r | GLV r/w | MOI r | PICT r | WDP r/w
5147
- COS r | GPR r/w | MOS r/w | PMP r | WEBP r/w
5148
- CR2 r/w | GZ r | MOV r/w | PNG r/w | WEBM r
5149
- CR3 r/w | HDP r/w | MP3 r | PPM r/w | WMA r
5150
- CRM r/w | HDR r | MP4 r/w | PPT r | WMV r
5151
- CRW r/w | HEIC r/w | MPC r | PPTX r | WOFF r
5152
- CS1 r/w | HEIF r/w | MPG r | PS r/w | WOFF2 r
5153
- CSV r | HTML r | MPO r/w | PSB r/w | WPG r
5154
- CUR r | ICC r/w/c | MQV r/w | PSD r/w | WTV r
5155
- CZI r | ICO r | MRC r | PSP r | WV r
5156
- DCM r | ICS r | MRW r/w | QTIF r/w | X3F r/w
5157
- DCP r/w | IDML r | MXF r | R3D r | XCF r
5158
- DCR r | IIQ r/w | NEF r/w | RA r | XISF r
5159
- DFONT r | IND r/w | NKA r | RAF r/w | XLS r
5160
- DIVX r | INSP r/w | NKSC r/w | RAM r | XLSX r
5161
- DJVU r | INSV r | NRW r/w | RAR r | XMP r/w/c
5162
- DLL r | INX r | NUMBERS r | RAW r/w | ZIP r
5163
- DNG r/w | ISO r | NXD r | RIFF r |
5164
- DOC r | ITC r | O r | RSRC r |
5165
- DOCX r | J2C r | ODP r | RTF r |
5166
- DPX r | JNG r/w | ODS r | RW2 r/w |
5110
+ 360 r/w | DR4 r/w/c | JP2 r/w | ODS r | RW2 r/w
5111
+ 3FR r | DSF r | JPEG r/w | ODT r | RWL r/w
5112
+ 3G2 r/w | DSS r | JSON r | OFR r | RWZ r
5113
+ 3GP r/w | DV r | JXL r/w | OGG r | RM r
5114
+ 7Z r | DVB r/w | K25 r | OGV r | SEQ r
5115
+ A r | DVR-MS r | KDC r | ONP r | SKETCH r
5116
+ AA r | DYLIB r | KEY r | OPUS r | SO r
5117
+ AAC r | EIP r | KVAR r | ORF r/w | SR2 r/w
5118
+ AAE r | EPS r/w | LA r | ORI r/w | SRF r
5119
+ AAX r/w | EPUB r | LFP r | OTF r | SRW r/w
5120
+ ACR r | ERF r/w | LIF r | PAC r | SVG r
5121
+ AFM r | EXE r | LNK r | PAGES r | SWF r
5122
+ AI r/w | EXIF r/w/c | LRV r/w | PBM r/w | THM r/w
5123
+ AIFF r | EXR r | M2TS r | PCAP r | TIFF r/w
5124
+ APE r | EXV r/w/c | M4A/V r/w | PCAPNG r | TNEF r
5125
+ ARQ r/w | F4A/V r/w | MACOS r | PCD r | TORRENT r
5126
+ ARW r/w | FFF r/w | MAX r | PCX r | TTC r
5127
+ ASF r | FITS r | MEF r/w | PDB r | TTF r
5128
+ AVI r | FLA r | MIE r/w/c | PDF r/w | TXT r
5129
+ AVIF r/w | FLAC r | MIFF r | PEF r/w | URL r
5130
+ AZW r | FLIF r/w | MKA r | PFA r | VCF r
5131
+ BMP r | FLV r | MKS r | PFB r | VNT r
5132
+ BPG r | FPF r | MKV r | PFM r | VRD r/w/c
5133
+ BTF r | FPX r | MNG r/w | PGF r | VSD r
5134
+ C2PA r | GIF r/w | MOBI r | PGM r/w | VSDX r
5135
+ CHM r | GLV r/w | MODD r | PLIST r | WAV r
5136
+ COS r | GPR r/w | MOI r | PICT r | WDP r/w
5137
+ CR2 r/w | GZ r | MOS r/w | PMP r | WEBP r/w
5138
+ CR3 r/w | HDP r/w | MOV r/w | PNG r/w | WEBM r
5139
+ CRM r/w | HDR r | MP3 r | PPM r/w | WMA r
5140
+ CRW r/w | HEIC r/w | MP4 r/w | PPT r | WMV r
5141
+ CS1 r/w | HEIF r/w | MPC r | PPTX r | WOFF r
5142
+ CSV r | HTML r | MPG r | PS r/w | WOFF2 r
5143
+ CUR r | ICC r/w/c | MPO r/w | PSB r/w | WPG r
5144
+ CZI r | ICO r | MQV r/w | PSD r/w | WTV r
5145
+ DCM r | ICS r | MRC r | PSP r | WV r
5146
+ DCP r/w | IDML r | MRW r/w | QTIF r/w | X3F r/w
5147
+ DCR r | IIQ r/w | MXF r | R3D r | XCF r
5148
+ DFONT r | IND r/w | NEF r/w | RA r | XISF r
5149
+ DIVX r | INSP r/w | NKA r | RAF r/w | XLS r
5150
+ DJVU r | INSV r | NKSC r/w | RAM r | XLSX r
5151
+ DLL r | INX r | NRW r/w | RAR r | XMP r/w/c
5152
+ DNG r/w | ISO r | NUMBERS r | RAW r/w | ZIP r
5153
+ DOC r | ITC r | NXD r | RIFF r |
5154
+ DOCX r | J2C r | O r | RSRC r |
5155
+ DPX r | JNG r/w | ODP r | RTF r |
5167
5156
 
5168
5157
  Meta Information
5169
5158
  ----------------------+----------------------+---------------------
@@ -5349,7 +5338,7 @@ information. Use the B<-s> option to see the tag names instead.
5349
5338
  =item B<-->I<TAG>
5350
5339
 
5351
5340
  Exclude specified tag from extracted information. Same as the B<-x> option.
5352
- Group names and wildcards are permitted as described above for B<->I<TAG>.
5341
+ Group names and wildcards are permitted as described above for B<->I<TAG>.
5353
5342
  Once excluded from the output, a tag may not be re-included by a subsequent
5354
5343
  option. May also be used following a B<-tagsFromFile> option to exclude
5355
5344
  tags from being copied (when redirecting to another tag, it is the source
@@ -5378,7 +5367,7 @@ add or remove existing entries from a list, or to shift date/time values
5378
5367
  values (or decrement if I<VALUE> is negative), and C<-=> may be used to
5379
5368
  conditionally delete or replace a tag (see L</WRITING EXAMPLES> for
5380
5369
  examples). C<^=> is used to write an empty string instead of deleting the
5381
- tag when no I<VALUE> is given, but otherwise it is equivalent to C<=>.
5370
+ tag when no I<VALUE> is given, but otherwise it is equivalent to C<=>.
5382
5371
  (Note that the caret must be quoted on the Windows command line.)
5383
5372
 
5384
5373
  I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
@@ -5443,7 +5432,7 @@ deleting all groups. For example, C<-2all:all=> deletes tags individually,
5443
5432
  while C<-all:all=> deletes entire blocks.
5444
5433
 
5445
5434
  5) The "APP" group names ("APP0" through "APP15") are used to delete JPEG
5446
- application segments which are not associated with another deletable group.
5435
+ application segments which are not associated with another deletable group.
5447
5436
  For example, specifying C<-APP14:All=> will NOT delete the APP14 "Adobe"
5448
5437
  segment because this is accomplished with C<-Adobe:All>. But note that
5449
5438
  these unnamed APP segments may not be excluded with C<--APPxx:all> when
@@ -5455,7 +5444,7 @@ command line. To shift a date/time value and copy it to another tag in the
5455
5444
  same operation, use the B<-globalTimeShift> option.
5456
5445
 
5457
5446
  7) The C<+=> operator may not be used to shift a List-type date/time tag
5458
- (eg. XMP-dc:Date) because C<+=> is used to add elements to the list.
5447
+ (eg. XMP-dc:Date) because C<+=> is used to add elements to the list.
5459
5448
  Instead, the B<-globalTimeShift> option should be used.
5460
5449
 
5461
5450
  Special feature: Integer values may be specified in hexadecimal with a
@@ -5470,7 +5459,8 @@ option for more details). Note that quotes are required around this
5470
5459
  argument to prevent shell redirection since it contains a C<E<lt>> symbol.
5471
5460
  If I<DATFILE>/I<FMT> is not provided, the effect is the same as C<-TAG=>,
5472
5461
  and the tag is simply deleted. C<+E<lt>=> or C<-E<lt>=> may also be used to
5473
- add or delete specific list entries, or to shift date/time values.
5462
+ add or delete specific list entries, to conditionally delete/replace tags,
5463
+ or to shift date/time values.
5474
5464
 
5475
5465
  =item B<-tagsFromFile> I<SRCFILE> or I<FMT>
5476
5466
 
@@ -5525,15 +5515,15 @@ destination group is specified, the information is written to the preferred
5525
5515
  group. Whitespace around the C<E<gt>> or C<E<lt>> is ignored. As a
5526
5516
  convenience, C<-tagsFromFile @> is assumed for any redirected tags which are
5527
5517
  specified without a prior B<-tagsFromFile> option. Copied tags may also be
5528
- added or deleted from a list with arguments of the form
5529
- E<quot>'-I<SRCTAG>+E<lt>I<DSTTAG>'E<quot> or
5518
+ added or deleted from a list, or conditionally deleted/replaced with
5519
+ arguments of the form E<quot>'-I<SRCTAG>+E<lt>I<DSTTAG>'E<quot> or
5530
5520
  E<quot>'-I<SRCTAG>-E<lt>I<DSTTAG>'E<quot> (but see Note 5 below).
5531
5521
 
5532
5522
  An extension of the redirection feature allows strings involving tag names
5533
5523
  to be used on the right hand side of the C<E<lt>> symbol with the syntax
5534
5524
  E<quot>'-I<DSTTAG>E<lt>I<STR>'E<quot>, where tag names in I<STR> are
5535
5525
  prefixed with a C<$> symbol. See the B<-p> option and the
5536
- L</Advanced formatting feature> section for more details about this syntax.
5526
+ L</Advanced formatting feature> section for more details about this syntax.
5537
5527
  Strings starting with a C<=> sign must insert a single space after the
5538
5528
  C<E<lt>> to avoid confusion with the C<E<lt>=> operator which sets the tag
5539
5529
  value from the contents of a file. A single space at the start of the
@@ -5609,7 +5599,7 @@ value in a string (with C<$>), but isn't when copying the tag directly.
5609
5599
 
5610
5600
  Finally, the behaviour is different when a destination tag or group of
5611
5601
  C<All> is used. When copying directly, a destination group and/or tag name
5612
- of C<All> writes to the same family 1 group and/or tag name as the source.
5602
+ of C<All> writes to the same family 1 group and/or tag name as the source.
5613
5603
  But when interpolated in a string, the identity of the source tags are lost
5614
5604
  and the value is written to all possible groups/tags. For example, the
5615
5605
  string form must be used in the following command since the intent is to set
@@ -5694,7 +5684,7 @@ when copying tags using the B<-tagsFromFile> option.
5694
5684
 
5695
5685
  2) If the hemisphere is known, a reference direction (N, S, E or W) is
5696
5686
  appended to each printed coordinate, but adding a C<+> or C<-> to the format
5697
- specifier (eg. C<%+.6f> or C<%-.6f>) prints a signed coordinate instead.
5687
+ specifier (eg. C<%+.6f> or C<%-.6f>) prints a signed coordinate instead.
5698
5688
  (C<+> adds a leading "+" for positive coordinates, but C<-> does not.)
5699
5689
 
5700
5690
  3) This print formatting may be disabled with the B<-n> option to extract
@@ -5788,12 +5778,15 @@ single command.
5788
5778
 
5789
5779
  Specific tags may be imported from the CSV database by adding B<->I<TAG>
5790
5780
  options to the command after B<-csv=>I<CSVFILE>, or excluded with
5791
- B<-->I<TAG>, with exclusions taking priority. Group names and wildcards are
5792
- allowed, and tags from the CSV may be redirected and written to different
5793
- tags in the target file with support for advanced-formatting expressions
5794
- using the same syntax as the B<-tagsFromFile> feature. If no tags are
5795
- specified, then all tags except FileName, Directory and excluded tags are
5796
- imported (in the same order as the database entries).
5781
+ B<-->I<TAG>, with exclusions taking priority. Group names and wildcards in
5782
+ tag names are allowed, but the group name must match exactly the group in
5783
+ the CSV file (eg. a C<XMP-dc:Subject> column in the CSV file won't match
5784
+ C<-XMP:Subject> on the command line. Also, tags from the CSV may be
5785
+ redirected and written to different tags in the target file with support for
5786
+ advanced-formatting expressions using the same syntax as the
5787
+ B<-tagsFromFile> feature. If no tags are specified, then all tags except
5788
+ FileName, Directory and excluded tags are imported (in the same order as the
5789
+ database entries).
5797
5790
 
5798
5791
  When exporting a CSV file, the B<-g> or B<-G> option adds group names to the
5799
5792
  tag headings. If the B<-a> option is used to allow duplicate tag names, the
@@ -5815,7 +5808,8 @@ List-type tags are stored as simple strings in a CSV file, but the B<-sep>
5815
5808
  option may be used to split them back into separate items when importing.
5816
5809
 
5817
5810
  Special feature: B<-csv>+=I<CSVFILE> may be used to add items to existing
5818
- lists. This affects only list-type tags. Also applies to the B<-j> option.
5811
+ lists in the file. This affects only list-type tags. Also applies to the
5812
+ B<-j> option.
5819
5813
 
5820
5814
  Note that this and the B<-plot> options are fundamentally different than all
5821
5815
  other output format options because they require information from all input
@@ -5883,7 +5877,7 @@ Force printing of tags even if they don't exist. This option applies to
5883
5877
  tags specified on the command line, or with the B<-p>, B<-if> (unless the
5884
5878
  API UndefTags option is set), B<-fileNUM> or B<-tagsFromFile> options. When
5885
5879
  B<-f> is used, the value of any missing tag is set to a dash (C<->) by
5886
- default, but this may be configured via the API MissingTagValue option.
5880
+ default, but this may be configured via the API MissingTagValue option.
5887
5881
  B<-f> is also used to add a 'flags' attribute to the B<-listx> output, or to
5888
5882
  allow tags to be deleted when writing with the B<-csv>=I<CSVFILE> feature.
5889
5883
 
@@ -5943,7 +5937,7 @@ into individual tags in the JSON output, but the original structure may be
5943
5937
  preserved with the B<-struct> option (this also causes all list-type XMP
5944
5938
  tags to be output as JSON arrays, otherwise single-item lists would be
5945
5939
  output as simple strings). The B<-a> option is implied when B<-json> is
5946
- used, but entries with identical JSON names are suppressed in the output.
5940
+ used, but entries with identical JSON names are suppressed in the output.
5947
5941
  (B<-G4> may be used to ensure that all tags have unique JSON names.)
5948
5942
 
5949
5943
  Adding the B<-D> or B<-H> option changes tag values to JSON objects with
@@ -5984,18 +5978,22 @@ input JSON file may be suffixed with a C<#> to disable print conversion.
5984
5978
 
5985
5979
  Specific tags may be imported from the JSON database by adding B<->I<TAG>
5986
5980
  options to the command after B<-j=>I<JSONFILE>, or excluded with
5987
- B<-->I<TAG>, with exclusions taking priority. Group names and wildcards are
5988
- allowed, and tags from JSON may be redirected and written to different tags
5989
- in the target file with support for advanced-formatting expressions using
5990
- the same syntax as the B<-tagsFromFile> feature. If no tags are specified,
5991
- then all tags except FileName, Directory and excluded tags are imported (in
5992
- the same order as the database entries).
5981
+ B<-->I<TAG>, with exclusions taking priority. Group names and wildcards in
5982
+ tag names are allowed, but the group name must match exactly the group in
5983
+ the JSON file (eg. a C<XMP-dc:Subject> entry in the JSON file won't match
5984
+ C<-XMP:Subject> on the command line. Also, tags from JSON may be redirected
5985
+ and written to different tags in the target file with support for
5986
+ advanced-formatting expressions using the same syntax as the
5987
+ B<-tagsFromFile> feature. If no tags are specified, then all tags except
5988
+ FileName, Directory and excluded tags are imported (in the same order as the
5989
+ database entries).
5993
5990
 
5994
5991
  Unlike CSV import, empty values are not ignored, and will cause an empty
5995
5992
  value to be written if supported by the specific metadata type. Tags are
5996
5993
  deleted by using the B<-f> option and setting the tag value to "-" (or to
5997
5994
  the MissingTagValue setting if this API option was used). Importing with
5998
- B<-j>+=I<JSONFILE> causes new values to be added to existing lists.
5995
+ B<-j>+=I<JSONFILE> causes new values to be added to existing lists in the
5996
+ target file.
5999
5997
 
6000
5998
  =item B<-l> (B<-long>)
6001
5999
 
@@ -6130,7 +6128,7 @@ with this command:
6130
6128
 
6131
6129
  produces output like this:
6132
6130
 
6133
- -- Generated by ExifTool 13.41 --
6131
+ -- Generated by ExifTool 13.44 --
6134
6132
  File: a.jpg - 2003:10:31 15:44:19
6135
6133
  (f/5.6, 1/60s, ISO 100)
6136
6134
  File: b.jpg - 2006:05:23 11:57:38
@@ -6388,7 +6386,7 @@ example:
6388
6386
  A special feature allows the copy number to be incremented for each
6389
6387
  processed file by using %C (upper case) instead of %c. This allows a
6390
6388
  sequential number to be added to output file names, even if the names are
6391
- different. For %C, a copy number of zero is not omitted as it is with %c.
6389
+ different. For %C, a copy number of zero is not omitted as it is with %c.
6392
6390
  A leading '-' causes the number to be reset at the start of each new
6393
6391
  directory (in the original directory structure if the files are being
6394
6392
  moved), and '+' has no effect. The number before the decimal place gives
@@ -6450,7 +6448,7 @@ example, the following pairs of commands give the same result:
6450
6448
  exiftool test.jpg -W+ out.txt # equivalent -W option
6451
6449
 
6452
6450
  4) Adding the B<-v> option to B<-W> sends a list of the tags and output file
6453
- names to the console instead of giving a verbose dump of the entire file.
6451
+ names to the console instead of giving a verbose dump of the entire file.
6454
6452
  (Unless appending all output to one file for each source file by using
6455
6453
  B<-W+> with an output file I<FMT> that does not contain %t, %g, %s or %o.)
6456
6454
 
@@ -6483,7 +6481,7 @@ are formatted as an RDF Bag, but they are combined into a single string when
6483
6481
  B<-s> or B<-sep> is used. Using B<-L> changes the XML encoding from "UTF-8"
6484
6482
  to "windows-1252". Other B<-charset> settings change the encoding only if
6485
6483
  there is a corresponding standard XML character set. The B<-b> option
6486
- causes binary data values to be written, encoded in base64 if necessary.
6484
+ causes binary data values to be written, encoded in base64 if necessary.
6487
6485
  The B<-t> option adds tag table information to the output (see B<-t> for
6488
6486
  details).
6489
6487
 
@@ -6794,7 +6792,7 @@ superseded by any value written to the FileModifyDate tag.
6794
6792
 
6795
6793
  =item B<-password> I<PASSWD>
6796
6794
 
6797
- Specify password to allow processing of password-protected PDF documents.
6795
+ Specify password to allow processing of password-protected PDF documents.
6798
6796
  If a password is required but not given, a warning is issued and the
6799
6797
  document is not processed. This option is ignored if a password is not
6800
6798
  required.
@@ -6899,7 +6897,7 @@ argument per line (NOT one option per line -- some options require
6899
6897
  additional arguments, and all arguments must be placed on separate lines).
6900
6898
  Blank lines and lines beginning with C<#> are ignored (unless they start
6901
6899
  with C<#[CSTR]>, in which case the rest of the line is treated as a C
6902
- string, allowing standard C escape sequences such as "\n" for a newline).
6900
+ string, allowing standard C escape sequences such as "\n" for a newline).
6903
6901
  White space at the start of a line is removed. Normal shell processing of
6904
6902
  arguments is not performed, which among other things means that arguments
6905
6903
  should not be quoted and spaces are treated as any other character.
@@ -6944,7 +6942,7 @@ list. The B<-lang> option may be combined with B<-listx> to output
6944
6942
  descriptions in a single language, and the B<-sort> and/or B<-lang> options
6945
6943
  may be combined with B<-listgeo> (installation of the alternate database is
6946
6944
  required for the additional languages). Also, the API GeolocMinPop,
6947
- GeolocFeature and GeolocAltNames options apply to the B<-listgeo> output.
6945
+ GeolocFeature and GeolocAltNames options apply to the B<-listgeo> output.
6948
6946
  Here are some examples:
6949
6947
 
6950
6948
  -list # list all tag names
@@ -6963,7 +6961,7 @@ Here are some examples:
6963
6961
  When combined with B<-listx>, the B<-s> option shortens the output by
6964
6962
  omitting the descriptions and values (as in the last example above), and
6965
6963
  B<-f> adds 'flags' and 'struct' attributes if applicable. The flags are
6966
- formatted as a comma-separated list of the following possible values:
6964
+ formatted as a comma-separated list of the following possible values:
6967
6965
  Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe
6968
6966
  (see the L<Tag Name documentation|Image::ExifTool::TagNames>). For XMP List
6969
6967
  tags, the list type (Alt, Bag or Seq) is also given, and flattened structure
@@ -7073,7 +7071,7 @@ See L<https://exiftool.org/geolocation.html> for details.
7073
7071
 
7074
7072
  =item B<-globalTimeShift> I<SHIFT>
7075
7073
 
7076
- Shift all formatted date/time values by the specified amount when reading.
7074
+ Shift all formatted date/time values by the specified amount when reading.
7077
7075
  Does not apply to unformatted (B<-n>) output. I<SHIFT> takes the same form
7078
7076
  as the date/time shift when writing (see
7079
7077
  L<Image::ExifTool::Shift.pl|Image::ExifTool::Shift.pl> for details), with a
@@ -7299,7 +7297,7 @@ received up to this point, send a "{ready}" message to stdout when done
7299
7297
  (unless the B<-q> or B<-T> option is used), and continue trying to read
7300
7298
  arguments for the next command from I<ARGFILE>. To aid in command/response
7301
7299
  synchronization, any number appended to the B<-execute> option is echoed in
7302
- the "{ready}" message. For example, C<-execute613> results in "{ready613}".
7300
+ the "{ready}" message. For example, C<-execute613> results in "{ready613}".
7303
7301
  When this number is added, B<-q> no longer suppresses the "{ready}" message.
7304
7302
  (Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
7305
7303
  signals back to your application.)
@@ -7318,7 +7316,7 @@ writing the following lines to the currently open I<ARGFILE>:
7318
7316
  -@
7319
7317
  NEWARGFILE
7320
7318
 
7321
- This causes I<ARGFILE> to be closed, and I<NEWARGFILE> to be kept open.
7319
+ This causes I<ARGFILE> to be closed, and I<NEWARGFILE> to be kept open.
7322
7320
  (Without the B<-stay_open> here, exiftool would have returned to reading
7323
7321
  arguments from I<ARGFILE> after reaching the end of I<NEWARGFILE>.)
7324
7322
 
@@ -7335,7 +7333,7 @@ Set user parameter. I<PARAM> is an arbitrary user parameter name. This is
7335
7333
  an interface to the API UserParam option (see the
7336
7334
  L<Image::ExifTool Options|Image::ExifTool/Options> documentation), and
7337
7335
  provides a method to access user-defined parameters in arguments to the
7338
- B<-if>, B<-p> and B<-fileNUM> options as if they were any other tag.
7336
+ B<-if>, B<-p> and B<-fileNUM> options as if they were any other tag.
7339
7337
  Appending a hash tag (C<#>) to I<PARAM> (eg. C<-userParam MyTag#=yes>) also
7340
7338
  causes the parameter to be extracted as a normal tag in the UserParam group.
7341
7339
  Similar to the B<-api> option, the parameter value is set to 1 if I<=VAL>
@@ -7353,7 +7351,7 @@ interpolated within a B<-if>, B<-p> or B<-fileNUM> argument, or a
7353
7351
  B<-tagsFromFile> redirection string. Tag names within these strings are
7354
7352
  prefixed by a C<$> symbol, and an arbitrary Perl expression may be applied
7355
7353
  to the tag value by placing braces around the tag name and inserting the
7356
- expression after the name, separated by a semicolon (ie. C<${TAG;EXPR}>).
7354
+ expression after the name, separated by a semicolon (ie. C<${TAG;EXPR}>).
7357
7355
  The expression acts on the value of the tag through the default input
7358
7356
  variable (C<$_>), and has access to the full ExifTool API through the
7359
7357
  current ExifTool object (C<$self>) and the tag key (C<$tag>). It may
@@ -7379,6 +7377,10 @@ expression is empty (ie. C<${TAG;}>). This removes the characters / \ ? * :
7379
7377
  illegal in Windows file names, so this feature is useful if tag values are
7380
7378
  used in file names.)
7381
7379
 
7380
+ Note that the expression is not evaluated for undefined (non-existant) tags,
7381
+ which may have other values if either the B<-m> or B<-f> command-line option
7382
+ or the API MissingTagValue option is used.
7383
+
7382
7384
  =head4 Helper functions
7383
7385
 
7384
7386
  Note that function names are case sensitive.
@@ -7406,7 +7408,7 @@ shift syntax. For example, to shift a date/time value back by one year:
7406
7408
  B<C<NoDups>>
7407
7409
 
7408
7410
  Removes duplicate items from a list with a separator specified by the
7409
- B<-sep> option. This function is most useful when copying list-type tags.
7411
+ B<-sep> option. This function is most useful when copying list-type tags.
7410
7412
  For example, the following command may be used to remove duplicate Keywords:
7411
7413
 
7412
7414
  exiftool -sep '##' '-keywords<${keywords;NoDups}' a.jpg
@@ -7453,7 +7455,7 @@ ExifTool 9.79 and later allow the file name encoding to be specified with
7453
7455
  C<-charset filename=CHARSET>, where C<CHARSET> is the name of a valid
7454
7456
  ExifTool character set, preferably C<UTF8> (see the B<-charset> option for a
7455
7457
  complete list). Setting this triggers the use of Windows wide-character i/o
7456
- routines, thus providing support for most Unicode file names (see note 4).
7458
+ routines, thus providing support for most Unicode file names (see note 4).
7457
7459
  But note that it is not trivial to pass properly encoded file names on the
7458
7460
  Windows command line (see L<https://exiftool.org/faq.html#Q18> for details),
7459
7461
  so placing them in a UTF-8 encoded B<-@> argfile and using
@@ -7793,14 +7795,14 @@ C<src.jpg>.
7793
7795
  Rebuild all EXIF meta information from scratch in an image. This technique
7794
7796
  can be used in JPEG images to repair corrupted EXIF information which
7795
7797
  otherwise could not be written due to errors. The C<Unsafe> tag is a
7796
- shortcut for unsafe EXIF tags in JPEG images which are not normally copied.
7798
+ shortcut for unsafe EXIF tags in JPEG images which are not normally copied.
7797
7799
  See the L<tag name documentation|Image::ExifTool::TagNames> for more details
7798
7800
  about unsafe tags.
7799
7801
 
7800
7802
  =item C<exiftool -Tagsfromfile a.jpg out.xmp>
7801
7803
 
7802
7804
  Copy meta information from C<a.jpg> to an XMP data file. If the XMP data
7803
- file C<out.xmp> already exists, it will be updated with the new information.
7805
+ file C<out.xmp> already exists, it will be updated with the new information.
7804
7806
  Otherwise the XMP data file will be created. Only metadata-only files may
7805
7807
  be created like this (files containing images may be edited but not
7806
7808
  created). See L</WRITING EXAMPLES> above for another technique to generate
@@ -7840,7 +7842,7 @@ C<dst.jpg>.
7840
7842
 
7841
7843
  =item C<exiftool '-Description<${FileName;s/\.[^.]*$//}' dir>
7842
7844
 
7843
- Set the image Description from the file name after removing the extension.
7845
+ Set the image Description from the file name after removing the extension.
7844
7846
  This example uses the L</Advanced formatting feature> to perform a
7845
7847
  substitution operation to remove the last dot and subsequent characters from
7846
7848
  the file name.
@@ -8071,7 +8073,7 @@ Add an IPTC keyword in a pipeline, saving output to a new file.
8071
8073
 
8072
8074
  =item C<curl -s http://a.domain.com/bigfile.jpg | exiftool -fast ->
8073
8075
 
8074
- Extract information from an image over the internet using the cURL utility.
8076
+ Extract information from an image over the internet using the cURL utility.
8075
8077
  The B<-fast> option prevents exiftool from scanning for trailer information,
8076
8078
  so only the meta information header is transferred.
8077
8079