exiftool_vendored 12.16.0 → 12.25.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|