exiftool_vendored 12.16.0 → 12.25.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 +137 -1
- data/bin/MANIFEST +12 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +44 -43
- data/bin/config_files/acdsee.config +193 -6
- data/bin/config_files/cuepointlist.config +70 -0
- data/bin/config_files/example.config +1 -8
- data/bin/exiftool +139 -98
- data/bin/fmt_files/gpx.fmt +1 -1
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool.pm +158 -49
- data/bin/lib/Image/ExifTool.pod +94 -75
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +25 -14
- data/bin/lib/Image/ExifTool/Canon.pm +28 -3
- data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
- data/bin/lib/Image/ExifTool/Exif.pm +50 -22
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
- data/bin/lib/Image/ExifTool/GPS.pm +24 -13
- data/bin/lib/Image/ExifTool/H264.pm +20 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/JPEG.pm +6 -2
- data/bin/lib/Image/ExifTool/JSON.pm +24 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +361 -16
- data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
- data/bin/lib/Image/ExifTool/MIE.pm +2 -2
- data/bin/lib/Image/ExifTool/MRC.pm +341 -0
- data/bin/lib/Image/ExifTool/MWG.pm +3 -3
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
- data/bin/lib/Image/ExifTool/NikonSettings.pm +25 -16
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
- data/bin/lib/Image/ExifTool/PNG.pm +2 -2
- data/bin/lib/Image/ExifTool/Panasonic.pm +14 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +148 -68
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +94 -34
- data/bin/lib/Image/ExifTool/README +5 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +84 -12
- data/bin/lib/Image/ExifTool/Samsung.pm +2 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +157 -49
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4079 -3987
- data/bin/lib/Image/ExifTool/TagNames.pod +642 -273
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +44 -17
- data/bin/lib/Image/ExifTool/WriteXMP.pl +15 -8
- data/bin/lib/Image/ExifTool/Writer.pl +50 -14
- data/bin/lib/Image/ExifTool/XMP.pm +50 -11
- data/bin/perl-Image-ExifTool.spec +42 -42
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +52 -12
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#------------------------------------------------------------------------------
|
|
2
|
+
# File: cuepointlist.config
|
|
3
|
+
#
|
|
4
|
+
# Description: ExifTool config file to generate list of cue points and labels
|
|
5
|
+
# in WAV audio files
|
|
6
|
+
#
|
|
7
|
+
# Usage: exiftool -config cuepointlist.config -cuepointlist -b FILE
|
|
8
|
+
#
|
|
9
|
+
# Requires: ExifTool version 12.25 or later
|
|
10
|
+
#
|
|
11
|
+
# Revisions: 2021-04-20 - P. Harvey Created
|
|
12
|
+
#------------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
%Image::ExifTool::UserDefined = (
|
|
15
|
+
'Image::ExifTool::Composite' => {
|
|
16
|
+
CuePointList => {
|
|
17
|
+
Require => {
|
|
18
|
+
0 => 'CuePoints',
|
|
19
|
+
1 => 'SampleRate',
|
|
20
|
+
},
|
|
21
|
+
Desire => {
|
|
22
|
+
2 => 'CuePointLabel',
|
|
23
|
+
3 => 'CuePointNotes',
|
|
24
|
+
4 => 'LabeledText',
|
|
25
|
+
},
|
|
26
|
+
ValueConv => q{
|
|
27
|
+
SetByteOrder('II');
|
|
28
|
+
my (%lbl, %rgn, %rtyp, %rlbl, %note, $pos, $i);
|
|
29
|
+
# get labels if available
|
|
30
|
+
for ($i=1; defined $val[2]; ++$i) {
|
|
31
|
+
$lbl{$1} = $2 if $val[2] =~ /^(\d+) (.*)/ and length $2;
|
|
32
|
+
$val[2] = $self->GetValue("CuePointLabel ($i)");
|
|
33
|
+
}
|
|
34
|
+
# get notes if available
|
|
35
|
+
for ($i=1; defined $val[3]; ++$i) {
|
|
36
|
+
$note{$1} = $2 if $val[3] =~ /^(\d+) (.*)/ and length $2;
|
|
37
|
+
$val[3] = $self->GetValue("CuePointNotes ($i)");
|
|
38
|
+
}
|
|
39
|
+
# get regions if available
|
|
40
|
+
for ($i=1; defined $val[4]; ++$i) {
|
|
41
|
+
if ($val[4] =~ /^(\d+) (\d+) '(.*)' \d+ \d+ \d+ \d+ (.*)/) {
|
|
42
|
+
$rgn{$1} = $2;
|
|
43
|
+
$rtyp{$1} = $3;
|
|
44
|
+
$rlbl{$1} = $4;
|
|
45
|
+
}
|
|
46
|
+
$val[4] = $self->GetValue("LabeledText ($i)");
|
|
47
|
+
}
|
|
48
|
+
my $buff = "Cue\tStart\tEnd\tLabel\tPurpose\tText\tNotes\n";
|
|
49
|
+
for ($pos=4; $pos+24<=length(${$val[0]}); $pos+=24) {
|
|
50
|
+
my $n = Get32u($val[0], $pos);
|
|
51
|
+
my $start = Get32u($val[0], $pos + 4);
|
|
52
|
+
my (@lbl, $lbl);
|
|
53
|
+
push @lbl, $lbl{$n} if defined $lbl{$n};
|
|
54
|
+
push @lbl, $rlbl{$n} if defined $rlbl{$n};
|
|
55
|
+
push @lbl, '-', $note{$n} if defined $note{$n};
|
|
56
|
+
my $lbl = join ' ', @lbl;
|
|
57
|
+
$buff .= sprintf("%d\t%.3f\t%.3f\t%s\t%s\t%s\t%s\n",
|
|
58
|
+
$n, $start/$val[1], ($start+($rgn{$n}||0))/$val[1],
|
|
59
|
+
defined($lbl{$n}) ? $lbl{$n} : '',
|
|
60
|
+
defined($rtyp{$n}) ? $rtyp{$n} : '',
|
|
61
|
+
defined($rlbl{$n}) ? $rlbl{$n} : '',
|
|
62
|
+
defined($note{$n}) ? $note{$n} : '');
|
|
63
|
+
}
|
|
64
|
+
return $buff;
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
1; # end
|
|
@@ -165,14 +165,7 @@
|
|
|
165
165
|
# specified, then at least one of the Desire'd tags must exist. See
|
|
166
166
|
# the Composite table in Image::ExifTool::Exif for more examples,
|
|
167
167
|
# and lib/Image/ExifTool/README for all of the details.
|
|
168
|
-
|
|
169
|
-
Require => {
|
|
170
|
-
0 => 'FileName',
|
|
171
|
-
},
|
|
172
|
-
# remove the extension from FileName
|
|
173
|
-
ValueConv => '$val[0] =~ /(.*)\./ ? $1 : $val[0]',
|
|
174
|
-
},
|
|
175
|
-
# the next few examples demonstrate simplifications which may be
|
|
168
|
+
# The first few examples demonstrate simplifications which may be
|
|
176
169
|
# used if only one tag is Require'd or Desire'd:
|
|
177
170
|
# 1) the Require lookup may be replaced with a simple tag name
|
|
178
171
|
# 2) "$val" may be used to represent "$val[0]" in the expression
|
data/bin/exiftool
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
use strict;
|
|
11
11
|
require 5.004;
|
|
12
12
|
|
|
13
|
-
my $version = '12.
|
|
13
|
+
my $version = '12.25';
|
|
14
14
|
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
16
16
|
my $exeDir;
|
|
@@ -159,14 +159,17 @@ my $forcePrint; # string to use for missing tag values (undef to not print t
|
|
|
159
159
|
my $helped; # flag to avoid printing help if no tags specified
|
|
160
160
|
my $html; # flag for html-formatted output (2=html dump)
|
|
161
161
|
my $interrupted; # flag set if CTRL-C is pressed during a critical process
|
|
162
|
+
my $isBinary; # true if value is a SCALAR ref
|
|
162
163
|
my $isWriting; # flag set if we are writing tags
|
|
163
164
|
my $joinLists; # flag set to join list values into a single string
|
|
164
165
|
my $json; # flag for JSON/PHP output format (1=JSON, 2=PHP)
|
|
165
166
|
my $langOpt; # language option
|
|
167
|
+
my $listDir; # treat a directory as a regular file
|
|
166
168
|
my $listItem; # item number for extracting single item from a list
|
|
167
169
|
my $listSep; # list item separator (', ' by default)
|
|
168
170
|
my $mt; # main ExifTool object
|
|
169
171
|
my $multiFile; # non-zero if we are scanning multiple files
|
|
172
|
+
my $noBinary; # flag set to ignore binary tags
|
|
170
173
|
my $outFormat; # -1=Canon format, 0=same-line, 1=tag names, 2=values only
|
|
171
174
|
my $outOpt; # output file or directory name
|
|
172
175
|
my $overwriteOrig; # flag to overwrite original file (1=overwrite, 2=in place)
|
|
@@ -203,7 +206,6 @@ my $validFile; # flag indicating we processed a valid file
|
|
|
203
206
|
my $verbose; # verbose setting
|
|
204
207
|
my $vout; # verbose output file reference (\*STDOUT or \*STDERR)
|
|
205
208
|
my $windowTitle; # title for console window
|
|
206
|
-
my $isBinary; # true if value is a SCALAR ref
|
|
207
209
|
my $xml; # flag for XML-formatted output
|
|
208
210
|
|
|
209
211
|
# flag to keep the input -@ argfile open:
|
|
@@ -284,6 +286,7 @@ my @recommends = qw(
|
|
|
284
286
|
Digest::SHA
|
|
285
287
|
IO::Compress::Bzip2
|
|
286
288
|
POSIX::strptime
|
|
289
|
+
Time::Local
|
|
287
290
|
Unicode::LineBreak
|
|
288
291
|
IO::Compress::RawDeflate
|
|
289
292
|
IO::Uncompress::RawInflate
|
|
@@ -474,6 +477,7 @@ undef $joinLists;
|
|
|
474
477
|
undef $langOpt;
|
|
475
478
|
undef $listItem;
|
|
476
479
|
undef $multiFile;
|
|
480
|
+
undef $noBinary;
|
|
477
481
|
undef $outOpt;
|
|
478
482
|
undef $preserveTime;
|
|
479
483
|
undef $progress;
|
|
@@ -691,7 +695,7 @@ for (;;) {
|
|
|
691
695
|
} else { # 'g(\d*)'
|
|
692
696
|
# list all groups in specified family
|
|
693
697
|
my $family = $2 || 0;
|
|
694
|
-
PrintTagList("Groups in family $family", GetAllGroups($family));
|
|
698
|
+
PrintTagList("Groups in family $family", $mt->GetAllGroups($family));
|
|
695
699
|
}
|
|
696
700
|
next;
|
|
697
701
|
}
|
|
@@ -792,7 +796,11 @@ for (;;) {
|
|
|
792
796
|
next;
|
|
793
797
|
}
|
|
794
798
|
/^arg(s|format)$/i and $argFormat = 1, next;
|
|
795
|
-
/^b(inary)?$/i
|
|
799
|
+
if (/^(-?)b(inary)?$/i) {
|
|
800
|
+
($binaryOutput, $noBinary) = $1 ? (undef, 1) : (1, undef);
|
|
801
|
+
$mt->Options(Binary => $binaryOutput, NoPDFList => $binaryOutput);
|
|
802
|
+
next;
|
|
803
|
+
}
|
|
796
804
|
if (/^c(oordFormat)?$/i) {
|
|
797
805
|
my $fmt = shift;
|
|
798
806
|
$fmt or Error("Expecting coordinate format for -c option\n"), $badCmd=1, next;
|
|
@@ -876,6 +884,7 @@ for (;;) {
|
|
|
876
884
|
}
|
|
877
885
|
(/^D$/ or $a eq 'decimal') and $showTagID = 'D', next;
|
|
878
886
|
/^delete_original(!?)$/i and $deleteOrig = ($1 ? 2 : 1), next;
|
|
887
|
+
/^list_dir$/i and $listDir = 1, next;
|
|
879
888
|
(/^e$/ or $a eq '-composite') and $mt->Options(Composite => 0), next;
|
|
880
889
|
(/^-e$/ or $a eq 'composite') and $mt->Options(Composite => 1), next;
|
|
881
890
|
(/^E$/ or $a eq 'escapehtml') and require Image::ExifTool::HTML and $escapeHTML = 1, next;
|
|
@@ -1264,7 +1273,7 @@ for (;;) {
|
|
|
1264
1273
|
if (/^php$/i) {
|
|
1265
1274
|
$json = 2;
|
|
1266
1275
|
$html = $xml = 0;
|
|
1267
|
-
$mt->Options(Duplicates=>1);
|
|
1276
|
+
$mt->Options(Duplicates => 1);
|
|
1268
1277
|
next;
|
|
1269
1278
|
}
|
|
1270
1279
|
if (/^z(ip)?$/i) {
|
|
@@ -1505,7 +1514,6 @@ if ($xml) {
|
|
|
1505
1514
|
require Image::ExifTool::XMP if $json == 1; # (for EncodeBase64)
|
|
1506
1515
|
}
|
|
1507
1516
|
$mt->Options(List => 1) unless $joinLists;
|
|
1508
|
-
$mt->Options(Duplicates => 0) unless defined $showGroup;
|
|
1509
1517
|
$showTagID = 'D' if $tabFormat and not $showTagID;
|
|
1510
1518
|
} elsif ($structOpt) {
|
|
1511
1519
|
$mt->Options(List => 1);
|
|
@@ -2271,7 +2279,8 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2271
2279
|
next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
|
|
2272
2280
|
}
|
|
2273
2281
|
$val = ConvertBinary($val); # convert SCALAR references
|
|
2274
|
-
|
|
2282
|
+
next unless defined $val;
|
|
2283
|
+
if ($structOpt and ref $val) {
|
|
2275
2284
|
# serialize structure if necessary
|
|
2276
2285
|
$val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
|
|
2277
2286
|
} elsif (ref $val eq 'ARRAY') {
|
|
@@ -2304,7 +2313,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2304
2313
|
$group = $et->GetGroup($tag, $showGroup);
|
|
2305
2314
|
# look ahead to see if this tag may suppress a priority tag in
|
|
2306
2315
|
# the same group, and if so suppress this tag instead
|
|
2307
|
-
next if $noDups and $tag =~ /^(.*?)
|
|
2316
|
+
next if $noDups and $tag =~ /^(.*?) \(/ and defined $$info{$1} and
|
|
2308
2317
|
$group eq $et->GetGroup($1, $showGroup);
|
|
2309
2318
|
$group = 'Unknown' if not $group and ($xml or $json or $csv);
|
|
2310
2319
|
if ($fp and not ($allGroup or $csv)) {
|
|
@@ -2327,6 +2336,9 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2327
2336
|
}
|
|
2328
2337
|
undef $group; # undefine so we don't print it below
|
|
2329
2338
|
}
|
|
2339
|
+
} elsif ($noDups) {
|
|
2340
|
+
# don't allow duplicates, but avoid suppressing the priority tag
|
|
2341
|
+
next if $tag =~ /^(.*?) \(/ and defined $$info{$1};
|
|
2330
2342
|
}
|
|
2331
2343
|
|
|
2332
2344
|
++$lineCount; # we are printing something meaningful
|
|
@@ -2706,7 +2718,7 @@ sub SetImageInfo($$$)
|
|
|
2706
2718
|
return 0;
|
|
2707
2719
|
}
|
|
2708
2720
|
}
|
|
2709
|
-
if (not $isStdout and ($et->IsDirectory($outfile) or $outfile =~ /\/$/)) {
|
|
2721
|
+
if (not $isStdout and (($et->IsDirectory($outfile) and not $listDir) or $outfile =~ /\/$/)) {
|
|
2710
2722
|
$outfile .= '/' unless $outfile =~ /\/$/;
|
|
2711
2723
|
my $name = $file;
|
|
2712
2724
|
$name =~ s/^.*\///s; # remove directory name
|
|
@@ -2909,6 +2921,10 @@ sub SetImageInfo($$$)
|
|
|
2909
2921
|
unless (defined $tmpFile) {
|
|
2910
2922
|
# count the number of tags and pseudo-tags we are writing
|
|
2911
2923
|
my ($numSet, $numPseudo) = $et->CountNewValues();
|
|
2924
|
+
if ($numSet != $numPseudo and $et->IsDirectory($file)) {
|
|
2925
|
+
print $vout "Can't write real tags to a directory - $infile\n" if defined $verbose;
|
|
2926
|
+
$numSet = $numPseudo;
|
|
2927
|
+
}
|
|
2912
2928
|
if ($et->Exists($file)) {
|
|
2913
2929
|
unless ($numSet) {
|
|
2914
2930
|
# no need to write if no tags set
|
|
@@ -3393,20 +3409,25 @@ sub AddGroups($$$$)
|
|
|
3393
3409
|
#------------------------------------------------------------------------------
|
|
3394
3410
|
# Convert binary data (SCALAR references) for printing
|
|
3395
3411
|
# Inputs: 0) object reference
|
|
3396
|
-
# Returns: converted object
|
|
3412
|
+
# Returns: converted object, or undef if we don't want binary objects
|
|
3397
3413
|
sub ConvertBinary($)
|
|
3398
3414
|
{
|
|
3399
3415
|
my $obj = shift;
|
|
3400
3416
|
my ($key, $val);
|
|
3401
3417
|
if (ref $obj eq 'HASH') {
|
|
3402
3418
|
foreach $key (keys %$obj) {
|
|
3403
|
-
|
|
3419
|
+
next unless ref $$obj{$key};
|
|
3420
|
+
$$obj{$key} = ConvertBinary($$obj{$key});
|
|
3421
|
+
return undef unless defined $$obj{$key};
|
|
3404
3422
|
}
|
|
3405
3423
|
} elsif (ref $obj eq 'ARRAY') {
|
|
3406
3424
|
foreach $val (@$obj) {
|
|
3407
|
-
|
|
3425
|
+
next unless ref $val;
|
|
3426
|
+
$val = ConvertBinary($val);
|
|
3427
|
+
return undef unless defined $val;
|
|
3408
3428
|
}
|
|
3409
3429
|
} elsif (ref $obj eq 'SCALAR') {
|
|
3430
|
+
return undef if $noBinary;
|
|
3410
3431
|
# (binaryOutput flag is set to 0 for binary mode of XML/PHP/JSON output formats)
|
|
3411
3432
|
if (defined $binaryOutput) {
|
|
3412
3433
|
$obj = $$obj;
|
|
@@ -3583,7 +3604,7 @@ sub ProcessFiles($;$)
|
|
|
3583
3604
|
++$progressCount;
|
|
3584
3605
|
$progStr = " [$progressCount/$progressMax]" if $progress;
|
|
3585
3606
|
}
|
|
3586
|
-
if ($et->IsDirectory($file)) {
|
|
3607
|
+
if ($et->IsDirectory($file) and not $listDir) {
|
|
3587
3608
|
$multiFile = $validFile = 1;
|
|
3588
3609
|
ScanDir($et, $file, $list);
|
|
3589
3610
|
} elsif ($filterFlag and not AcceptFile($file)) {
|
|
@@ -4448,47 +4469,47 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4448
4469
|
|
|
4449
4470
|
File Types
|
|
4450
4471
|
------------+-------------+-------------+-------------+------------
|
|
4451
|
-
360 r/w | DPX r | ITC r |
|
|
4452
|
-
3FR r | DR4 r/w/c | J2C r |
|
|
4453
|
-
3G2 r/w | DSS r | JNG r/w |
|
|
4454
|
-
3GP r/w | DV r | JP2 r/w |
|
|
4455
|
-
A r | DVB r/w | JPEG r/w |
|
|
4456
|
-
AA r | DVR-MS r | JSON r |
|
|
4457
|
-
AAE r | DYLIB r |
|
|
4458
|
-
AAX r/w | EIP r |
|
|
4459
|
-
ACR r | EPS r/w |
|
|
4460
|
-
AFM r | EPUB r |
|
|
4461
|
-
AI r/w | ERF r/w |
|
|
4462
|
-
AIFF r | EXE r |
|
|
4463
|
-
APE r | EXIF r/w/c |
|
|
4464
|
-
ARQ r/w | EXR r |
|
|
4465
|
-
ARW r/w | EXV r/w/c |
|
|
4466
|
-
ASF r | F4A/V r/w |
|
|
4467
|
-
AVI r | FFF r/w |
|
|
4468
|
-
AVIF r/w | FITS r |
|
|
4469
|
-
AZW r | FLA r |
|
|
4470
|
-
BMP r | FLAC r |
|
|
4471
|
-
BPG r | FLIF r/w |
|
|
4472
|
-
BTF r | FLV r |
|
|
4473
|
-
CHM r | FPF r |
|
|
4474
|
-
COS r | FPX r |
|
|
4475
|
-
CR2 r/w | GIF r/w |
|
|
4476
|
-
CR3 r/w | GPR r/w |
|
|
4477
|
-
CRM r/w | GZ r |
|
|
4478
|
-
CRW r/w | HDP r/w |
|
|
4479
|
-
CS1 r/w | HDR r |
|
|
4480
|
-
CSV r | HEIC r/w |
|
|
4481
|
-
CZI r | HEIF r/w |
|
|
4482
|
-
DCM r | HTML r |
|
|
4483
|
-
DCP r/w | ICC r/w/c |
|
|
4484
|
-
DCR r | ICS r |
|
|
4485
|
-
DFONT r | IDML r |
|
|
4486
|
-
DIVX r | IIQ r/w |
|
|
4487
|
-
DJVU r | IND r/w |
|
|
4488
|
-
DLL r | INSP r/w |
|
|
4489
|
-
DNG r/w | INSV r |
|
|
4490
|
-
DOC r | INX r |
|
|
4491
|
-
DOCX r | ISO r |
|
|
4472
|
+
360 r/w | DPX r | ITC r | NUMBERS r | RAM r
|
|
4473
|
+
3FR r | DR4 r/w/c | J2C r | O r | RAR r
|
|
4474
|
+
3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w
|
|
4475
|
+
3GP r/w | DV r | JP2 r/w | ODS r | RIFF r
|
|
4476
|
+
A r | DVB r/w | JPEG r/w | ODT r | RSRC r
|
|
4477
|
+
AA r | DVR-MS r | JSON r | OFR r | RTF r
|
|
4478
|
+
AAE r | DYLIB r | JXL r | OGG r | RW2 r/w
|
|
4479
|
+
AAX r/w | EIP r | K25 r | OGV r | RWL r/w
|
|
4480
|
+
ACR r | EPS r/w | KDC r | ONP r | RWZ r
|
|
4481
|
+
AFM r | EPUB r | KEY r | OPUS r | RM r
|
|
4482
|
+
AI r/w | ERF r/w | LA r | ORF r/w | SEQ r
|
|
4483
|
+
AIFF r | EXE r | LFP r | ORI r/w | SKETCH r
|
|
4484
|
+
APE r | EXIF r/w/c | LNK r | OTF r | SO r
|
|
4485
|
+
ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w
|
|
4486
|
+
ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r
|
|
4487
|
+
ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w
|
|
4488
|
+
AVI r | FFF r/w | MACOS r | PCD r | SVG r
|
|
4489
|
+
AVIF r/w | FITS r | MAX r | PCX r | SWF r
|
|
4490
|
+
AZW r | FLA r | MEF r/w | PDB r | THM r/w
|
|
4491
|
+
BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w
|
|
4492
|
+
BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r
|
|
4493
|
+
BTF r | FLV r | MKA r | PFA r | TTC r
|
|
4494
|
+
CHM r | FPF r | MKS r | PFB r | TTF r
|
|
4495
|
+
COS r | FPX r | MKV r | PFM r | TXT r
|
|
4496
|
+
CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r
|
|
4497
|
+
CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c
|
|
4498
|
+
CRM r/w | GZ r | MODD r | PLIST r | VSD r
|
|
4499
|
+
CRW r/w | HDP r/w | MOI r | PICT r | WAV r
|
|
4500
|
+
CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w
|
|
4501
|
+
CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r
|
|
4502
|
+
CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r
|
|
4503
|
+
DCM r | HTML r | MP4 r/w | PPT r | WMA r
|
|
4504
|
+
DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r
|
|
4505
|
+
DCR r | ICS r | MPG r | PS r/w | WTV r
|
|
4506
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | WV r
|
|
4507
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
|
|
4508
|
+
DJVU r | IND r/w | MRC r | PSP r | XCF r
|
|
4509
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
|
|
4510
|
+
DNG r/w | INSV r | MXF r | R3D r | XLSX r
|
|
4511
|
+
DOC r | INX r | NEF r/w | RA r | XMP r/w/c
|
|
4512
|
+
DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r
|
|
4492
4513
|
|
|
4493
4514
|
Meta Information
|
|
4494
4515
|
----------------------+----------------------+---------------------
|
|
@@ -4622,6 +4643,7 @@ L<Advanced options|/Advanced options>
|
|
|
4622
4643
|
-echo[NUM] TEXT Echo text to stdout or stderr
|
|
4623
4644
|
-efile[NUM][!] ERRFILE Save names of files with errors
|
|
4624
4645
|
-execute[NUM] Execute multiple commands on one line
|
|
4646
|
+
-list_dir List directories, not their contents
|
|
4625
4647
|
-srcfile FMT Process a different source file
|
|
4626
4648
|
-stay_open FLAG Keep reading -@ argfile even after EOF
|
|
4627
4649
|
-userParam PARAM[[^]=[VAL]] Set user parameter (API UserParam opt)
|
|
@@ -4917,7 +4939,7 @@ and the value is written to all possible groups/tags. For example, the
|
|
|
4917
4939
|
string form must be used in the following command since the intent is to set
|
|
4918
4940
|
the value of all existing date/time tags from C<CreateDate>:
|
|
4919
4941
|
|
|
4920
|
-
exiftool
|
|
4942
|
+
exiftool '-time:all<$createdate' -wm w FILE
|
|
4921
4943
|
|
|
4922
4944
|
=item B<-x> I<TAG> (B<-exclude>)
|
|
4923
4945
|
|
|
@@ -4930,7 +4952,7 @@ documentation above for a complete description.
|
|
|
4930
4952
|
=head3 Input-output text formatting
|
|
4931
4953
|
|
|
4932
4954
|
Note that trailing spaces are removed from extracted values for most output
|
|
4933
|
-
text formats. The exceptions are
|
|
4955
|
+
text formats. The exceptions are B<-b>, B<-csv>, B<-j> and B<-X>.
|
|
4934
4956
|
|
|
4935
4957
|
=over 5
|
|
4936
4958
|
|
|
@@ -4943,7 +4965,7 @@ between images, but allows the metadata to be altered by editing the
|
|
|
4943
4965
|
intermediate file (C<out.args> in this example):
|
|
4944
4966
|
|
|
4945
4967
|
exiftool -args -G1 --filename --directory src.jpg > out.args
|
|
4946
|
-
exiftool -@ out.args -sep
|
|
4968
|
+
exiftool -@ out.args -sep ', ' dst.jpg
|
|
4947
4969
|
|
|
4948
4970
|
Note: Be careful when copying information with this technique since it is
|
|
4949
4971
|
easy to write tags which are normally considered "unsafe". For instance,
|
|
@@ -4956,17 +4978,21 @@ maintain separate list items when writing metadata back to image files, and
|
|
|
4956
4978
|
the B<-struct> option may be used when extracting to preserve structured XMP
|
|
4957
4979
|
information.
|
|
4958
4980
|
|
|
4959
|
-
=item B<-b> (B<-binary>)
|
|
4981
|
+
=item B<-b>, B<--b> (B<-binary>, B<--binary>)
|
|
4960
4982
|
|
|
4961
|
-
Output requested metadata in binary format without tag names or
|
|
4962
|
-
|
|
4963
|
-
other binary data, but it may also be useful for some text strings
|
|
4964
|
-
control characters (such as newlines) are not replaced by '.' as they
|
|
4965
|
-
the default output. By default, list items are separated by a
|
|
4966
|
-
extracted with the B<-b> option, but this may be changed (see
|
|
4967
|
-
option for details). May be combined with
|
|
4968
|
-
extract binary data in JSON, PHP or XML format, but note that
|
|
4969
|
-
must be specified explicitly to be extracted as binary in
|
|
4983
|
+
Output requested metadata in binary format without tag names or descriptions
|
|
4984
|
+
(B<-b> or B<-binary>). This option is mainly used for extracting embedded
|
|
4985
|
+
images or other binary data, but it may also be useful for some text strings
|
|
4986
|
+
since control characters (such as newlines) are not replaced by '.' as they
|
|
4987
|
+
are in the default output. By default, list items are separated by a
|
|
4988
|
+
newline when extracted with the B<-b> option, but this may be changed (see
|
|
4989
|
+
the B<-sep> option for details). May be combined with B<-j>, B<-php> or
|
|
4990
|
+
B<-X> to extract binary data in JSON, PHP or XML format, but note that
|
|
4991
|
+
"unsafe" tags must be specified explicitly to be extracted as binary in
|
|
4992
|
+
these formats.
|
|
4993
|
+
|
|
4994
|
+
With a leading double dash (B<--b> or B<--binary>), tags which contain
|
|
4995
|
+
binary data are suppressed in the output when reading.
|
|
4970
4996
|
|
|
4971
4997
|
=item B<-c> I<FMT> (B<-coordFormat>)
|
|
4972
4998
|
|
|
@@ -5207,18 +5233,18 @@ JSON arrays unless B<-sep> is used. By default XMP structures are flattened
|
|
|
5207
5233
|
into individual tags in the JSON output, but the original structure may be
|
|
5208
5234
|
preserved with the B<-struct> option (this also causes all list-type XMP
|
|
5209
5235
|
tags to be output as JSON arrays, otherwise single-item lists would be
|
|
5210
|
-
output as simple strings). The B<-a> option is implied
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
5214
|
-
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5236
|
+
output as simple strings). The B<-a> option is implied when B<-json> is
|
|
5237
|
+
used, but entries with identical JSON names are suppressed in the output.
|
|
5238
|
+
(B<-G4> may be used to ensure that all tags have unique JSON names.) Adding
|
|
5239
|
+
the B<-D> or B<-H> option changes tag values to JSON objects with "val" and
|
|
5240
|
+
"id" fields, and adding B<-l> adds a "desc" field, and a "num" field if the
|
|
5241
|
+
numerical value is different from the converted "val". The B<-b> option may
|
|
5242
|
+
be added to output binary data, encoded in base64 if necessary (indicated by
|
|
5243
|
+
ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
|
|
5244
|
+
to include tag table information (see B<-t> for details). The JSON output
|
|
5245
|
+
is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
|
|
5246
|
+
UTF-8 validation is disabled if a character set other than UTF-8 is
|
|
5247
|
+
specified.
|
|
5222
5248
|
|
|
5223
5249
|
If I<JSONFILE> is specified, the file is imported and the tag definitions
|
|
5224
5250
|
from the file are used to set tag values on a per-file basis. The special
|
|
@@ -5367,7 +5393,7 @@ with this command:
|
|
|
5367
5393
|
|
|
5368
5394
|
produces output like this:
|
|
5369
5395
|
|
|
5370
|
-
-- Generated by ExifTool 12.
|
|
5396
|
+
-- Generated by ExifTool 12.25 --
|
|
5371
5397
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5372
5398
|
(f/5.6, 1/60s, ISO 100)
|
|
5373
5399
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5527,18 +5553,18 @@ Notes:
|
|
|
5527
5553
|
argument like C<%d%f.txt> is written as C<%%d%%f.txt>.
|
|
5528
5554
|
|
|
5529
5555
|
2) If the argument for B<-w> does not contain a valid format code (eg. %f),
|
|
5530
|
-
then it is interpreted as a file extension
|
|
5531
|
-
|
|
5532
|
-
multiple source files is typically done by shell redirection, ie)
|
|
5556
|
+
then it is interpreted as a file extension, but there are three different
|
|
5557
|
+
ways to create a single output file from multiple source files:
|
|
5533
5558
|
|
|
5559
|
+
# 1. Shell redirection
|
|
5534
5560
|
exiftool FILE1 FILE2 ... > out.txt
|
|
5535
5561
|
|
|
5536
|
-
|
|
5537
|
-
be interpreted as a format string, and the same result may be obtained
|
|
5538
|
-
without the use of shell redirection:
|
|
5539
|
-
|
|
5562
|
+
# 2. With the -w option and a zero-width format code
|
|
5540
5563
|
exiftool -w+! %0fout.txt FILE1 FILE2 ...
|
|
5541
5564
|
|
|
5565
|
+
# 3. With the -W option (see the -W option below)
|
|
5566
|
+
exiftool -W+! out.txt FILE1 FILE2 ...
|
|
5567
|
+
|
|
5542
5568
|
Advanced features:
|
|
5543
5569
|
|
|
5544
5570
|
A substring of the original file name, directory or extension may be taken
|
|
@@ -5727,7 +5753,8 @@ L<https://exiftool.org/geotag.html#Inverse> for examples.
|
|
|
5727
5753
|
Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
|
|
5728
5754
|
until the first Supplemental Enhancement Information (SEI) message is
|
|
5729
5755
|
decoded, or 3 to parse the entire H624 stream and decode all SEI
|
|
5730
|
-
information.
|
|
5756
|
+
information. For M2TS videos, a setting of 3 causes the entire file to be
|
|
5757
|
+
parsed in search of unlisted programs which may contain timed GPS.
|
|
5731
5758
|
|
|
5732
5759
|
=item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
|
|
5733
5760
|
|
|
@@ -5816,10 +5843,10 @@ Ignore specified directory name. I<DIR> may be either an individual folder
|
|
|
5816
5843
|
name, or a full path. If a full path is specified, it must match the
|
|
5817
5844
|
Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
|
|
5818
5845
|
more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
|
|
5819
|
-
sensitive) may be specified to
|
|
5820
|
-
is used. As well, a value of C<HIDDEN>
|
|
5821
|
-
ignore files with names that start with a
|
|
5822
|
-
systems) when scanning a directory.
|
|
5846
|
+
sensitive) may be specified to avoid recursing into directories which are
|
|
5847
|
+
symbolic links when the B<-r> option is used. As well, a value of C<HIDDEN>
|
|
5848
|
+
(case sensitive) may be used to ignore files with names that start with a
|
|
5849
|
+
"." (ie. hidden files on Unix systems) when scanning a directory.
|
|
5823
5850
|
|
|
5824
5851
|
=item B<-if>[I<NUM>] I<EXPR>
|
|
5825
5852
|
|
|
@@ -6245,7 +6272,7 @@ As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
|
|
|
6245
6272
|
for any tag on the command line. See the L<MWG Tags
|
|
6246
6273
|
documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
|
|
6247
6274
|
that this option is not reversible, and remains in effect until the
|
|
6248
|
-
application terminates, even across the
|
|
6275
|
+
application terminates, even across the B<-execute> option.
|
|
6249
6276
|
|
|
6250
6277
|
=back
|
|
6251
6278
|
|
|
@@ -6349,6 +6376,20 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
|
|
|
6349
6376
|
when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
|
|
6350
6377
|
option no longer suppresses the output "{readyNUM}" message.
|
|
6351
6378
|
|
|
6379
|
+
=item B<-list_dir>
|
|
6380
|
+
|
|
6381
|
+
List directories themselves instead of their contents. This option
|
|
6382
|
+
effectively causes directories to be treated as normal files when reading
|
|
6383
|
+
and writing. For example, with this option the output of the C<ls -la>
|
|
6384
|
+
command on Mac/Linux may be approximated by this exiftool command:
|
|
6385
|
+
|
|
6386
|
+
exiftool -list_dir -T -ls-l -api systemtags -fast5 .* *
|
|
6387
|
+
|
|
6388
|
+
(The B<-T> option formats the output in tab-separated columns, B<-ls-l> is a
|
|
6389
|
+
L<shortcut tag|Image::ExifTool::Shortcuts>, the API SystemTags option is
|
|
6390
|
+
required to extract some necessary tags, and the B<-fast5> option is added
|
|
6391
|
+
for speed since only system tags are being extracted.)
|
|
6392
|
+
|
|
6352
6393
|
=item B<-srcfile> I<FMT>
|
|
6353
6394
|
|
|
6354
6395
|
Specify a different source file to be processed based on the name of the
|
|
@@ -6396,7 +6437,7 @@ buffered output.) ExifTool will then execute the command with the arguments
|
|
|
6396
6437
|
received up to this point, send a "{ready}" message to stdout when done
|
|
6397
6438
|
(unless the B<-q> or B<-T> option is used), and continue trying to read
|
|
6398
6439
|
arguments for the next command from I<ARGFILE>. To aid in command/response
|
|
6399
|
-
synchronization, any number appended to the
|
|
6440
|
+
synchronization, any number appended to the B<-execute> option is echoed in
|
|
6400
6441
|
the "{ready}" message. For example, C<-execute613> results in "{ready613}".
|
|
6401
6442
|
When this number is added, B<-q> no longer suppresses the "{ready}" message.
|
|
6402
6443
|
(Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
|
|
@@ -6531,8 +6572,8 @@ complete list). Setting this triggers the use of Windows wide-character i/o
|
|
|
6531
6572
|
routines, thus providing support for most Unicode file names (see note 4).
|
|
6532
6573
|
But note that it is not trivial to pass properly encoded file names on the
|
|
6533
6574
|
Windows command line (see L<https://exiftool.org/faq.html#Q18> for details),
|
|
6534
|
-
so placing them in a UTF-8 encoded B<-@> argfile and using
|
|
6535
|
-
filename=utf8> is recommended if possible.
|
|
6575
|
+
so placing them in a UTF-8 encoded B<-@> argfile and using
|
|
6576
|
+
C<-charset filename=utf8> is recommended if possible.
|
|
6536
6577
|
|
|
6537
6578
|
A warning is issued if a specified filename contains special characters and
|
|
6538
6579
|
the filename character set was not provided. However, the warning may be
|
|
@@ -6606,7 +6647,7 @@ Print all meta information in an image, including duplicate and unknown
|
|
|
6606
6647
|
tags, sorted by group (for family 1). For performance reasons, this command
|
|
6607
6648
|
may not extract all available metadata. (Metadata in embedded documents,
|
|
6608
6649
|
metadata extracted by external utilities, and metadata requiring excessive
|
|
6609
|
-
processing time may not be extracted). Add C<-
|
|
6650
|
+
processing time may not be extracted). Add C<-ee3> and C<-api RequestAll=3>
|
|
6610
6651
|
to the command to extract absolutely everything available.
|
|
6611
6652
|
|
|
6612
6653
|
=item exiftool -common dir
|
|
@@ -6675,7 +6716,7 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>).
|
|
|
6675
6716
|
Print one line of output containing the file name and DateTimeOriginal for
|
|
6676
6717
|
each image in directory C<dir>.
|
|
6677
6718
|
|
|
6678
|
-
=item exiftool -
|
|
6719
|
+
=item exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
|
|
6679
6720
|
|
|
6680
6721
|
Extract all GPS positions from an AVCHD video.
|
|
6681
6722
|
|