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.
- checksums.yaml +4 -4
- data/bin/Changes +45 -1
- data/bin/MANIFEST +2 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +48 -48
- data/bin/exiftool +172 -170
- data/bin/lib/Image/ExifTool/Apple.pm +0 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -2
- data/bin/lib/Image/ExifTool/Canon.pm +27 -2
- data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +2 -2
- data/bin/lib/Image/ExifTool/EXE.pm +1 -1
- data/bin/lib/Image/ExifTool/Exif.pm +1 -0
- data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -2
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/Google.pm +2 -2
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +0 -1
- data/bin/lib/Image/ExifTool/Import.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +7 -6
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
- data/bin/lib/Image/ExifTool/Kandao.pm +399 -0
- data/bin/lib/Image/ExifTool/LNK.pm +1 -1
- data/bin/lib/Image/ExifTool/MRC.pm +4 -4
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -2
- data/bin/lib/Image/ExifTool/Matroska.pm +56 -15
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
- data/bin/lib/Image/ExifTool/NikonCustom.pm +5 -6
- data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- data/bin/lib/Image/ExifTool/PPM.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +30 -6
- data/bin/lib/Image/ExifTool/PhaseOne.pm +17 -1
- data/bin/lib/Image/ExifTool/Plot.pm +2 -2
- data/bin/lib/Image/ExifTool/Protobuf.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +50 -8
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -2
- data/bin/lib/Image/ExifTool/README +5 -5
- data/bin/lib/Image/ExifTool/RIFF.pm +5 -4
- data/bin/lib/Image/ExifTool/Reconyx.pm +2 -2
- data/bin/lib/Image/ExifTool/Samsung.pm +137 -4
- data/bin/lib/Image/ExifTool/Sony.pm +16 -4
- data/bin/lib/Image/ExifTool/TNEF.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +7195 -7108
- data/bin/lib/Image/ExifTool/TagNames.pod +370 -111
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Trailer.pm +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +18 -3
- data/bin/lib/Image/ExifTool/Writer.pl +3 -2
- data/bin/lib/Image/ExifTool/XMP.pm +4 -2
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +7 -4
- data/bin/lib/Image/ExifTool.pod +79 -79
- data/bin/perl-Image-ExifTool.spec +47 -47
- data/lib/exiftool_vendored/version.rb +1 -1
- 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.
|
|
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 $
|
|
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 $
|
|
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
|
-
$
|
|
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 '
|
|
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 = '
|
|
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 $
|
|
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
|
-
|
|
932
|
-
|
|
933
|
-
|
|
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
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
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
|
-
$
|
|
960
|
+
my $chset = $mt->Options('Charset');
|
|
961
|
+
$msg = Image::ExifTool::Import::ReadJSON(\*CSVFILE, \%database, $forcePrint, $chset);
|
|
951
962
|
}
|
|
952
|
-
|
|
953
|
-
|
|
963
|
+
close(CSVFILE);
|
|
964
|
+
} else {
|
|
965
|
+
$msg = "Error opening $dbType file '${dbFile}'";
|
|
954
966
|
}
|
|
955
|
-
$
|
|
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 '
|
|
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 '
|
|
1401
|
+
if (not $setTagsFile and $tagsFrom ne 'CSV' and /(<|>)/) {
|
|
1424
1402
|
AddSetTagsFile($setTagsFile = '@');
|
|
1425
|
-
$tagsFrom = '
|
|
1403
|
+
$tagsFrom = 'File';
|
|
1426
1404
|
}
|
|
1427
|
-
if ($tagsFrom eq '
|
|
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} == $
|
|
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, $
|
|
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
|
-
$
|
|
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, '
|
|
3303
|
-
|
|
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 => $
|
|
3341
|
-
ProtectSaved => $
|
|
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 ($
|
|
3330
|
+
if ($csvEtPrt) {
|
|
3347
3331
|
my @excl = map "-$_", @csvExclude; # add back leading dashes
|
|
3348
|
-
$
|
|
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 |
|
|
5122
|
-
3FR r | DSF r | JPEG r/w |
|
|
5123
|
-
3G2 r/w | DSS r | JSON r |
|
|
5124
|
-
3GP r/w | DV r | JXL r/w |
|
|
5125
|
-
7Z r | DVB r/w | K25 r |
|
|
5126
|
-
A r | DVR-MS r | KDC r |
|
|
5127
|
-
AA r | DYLIB r | KEY r |
|
|
5128
|
-
AAC r | EIP r |
|
|
5129
|
-
AAE r | EPS r/w |
|
|
5130
|
-
AAX r/w | EPUB r |
|
|
5131
|
-
ACR r | ERF r/w |
|
|
5132
|
-
AFM r | EXE r |
|
|
5133
|
-
AI r/w | EXIF r/w/c |
|
|
5134
|
-
AIFF r | EXR r |
|
|
5135
|
-
APE r | EXV r/w/c |
|
|
5136
|
-
ARQ r/w | F4A/V r/w |
|
|
5137
|
-
ARW r/w | FFF r/w |
|
|
5138
|
-
ASF r | FITS r |
|
|
5139
|
-
AVI r | FLA r |
|
|
5140
|
-
AVIF r/w | FLAC r |
|
|
5141
|
-
AZW r | FLIF r/w |
|
|
5142
|
-
BMP r | FLV r |
|
|
5143
|
-
BPG r | FPF r |
|
|
5144
|
-
BTF r | FPX r |
|
|
5145
|
-
C2PA r | GIF r/w |
|
|
5146
|
-
CHM r | GLV r/w |
|
|
5147
|
-
COS r | GPR r/w |
|
|
5148
|
-
CR2 r/w | GZ r |
|
|
5149
|
-
CR3 r/w | HDP r/w |
|
|
5150
|
-
CRM r/w | HDR r |
|
|
5151
|
-
CRW r/w | HEIC r/w |
|
|
5152
|
-
CS1 r/w | HEIF r/w |
|
|
5153
|
-
CSV r | HTML r |
|
|
5154
|
-
CUR r | ICC r/w/c |
|
|
5155
|
-
CZI r | ICO r |
|
|
5156
|
-
DCM r | ICS r |
|
|
5157
|
-
DCP r/w | IDML r |
|
|
5158
|
-
DCR r | IIQ r/w |
|
|
5159
|
-
DFONT r | IND r/w |
|
|
5160
|
-
DIVX r | INSP r/w |
|
|
5161
|
-
DJVU r | INSV r |
|
|
5162
|
-
DLL r | INX r |
|
|
5163
|
-
DNG r/w | ISO r |
|
|
5164
|
-
DOC r | ITC r |
|
|
5165
|
-
DOCX r | J2C r |
|
|
5166
|
-
DPX r | JNG 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,
|
|
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
|
|
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
|
|
5792
|
-
allowed,
|
|
5793
|
-
|
|
5794
|
-
|
|
5795
|
-
|
|
5796
|
-
|
|
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
|
|
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
|
|
5988
|
-
allowed,
|
|
5989
|
-
|
|
5990
|
-
|
|
5991
|
-
|
|
5992
|
-
the same
|
|
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.
|
|
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
|
|