exiftool_vendored 12.18.0 → 12.33.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 +236 -4
- data/bin/MANIFEST +23 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -43
- data/bin/arg_files/xmp2exif.args +2 -1
- data/bin/config_files/acdsee.config +193 -6
- data/bin/config_files/convert_regions.config +25 -14
- data/bin/config_files/cuepointlist.config +70 -0
- data/bin/config_files/example.config +2 -9
- data/bin/exiftool +152 -97
- data/bin/fmt_files/gpx.fmt +2 -2
- data/bin/fmt_files/gpx_wpt.fmt +2 -2
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -13
- data/bin/lib/Image/ExifTool/CBOR.pm +331 -0
- data/bin/lib/Image/ExifTool/Canon.pm +44 -19
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/DPX.pm +13 -2
- data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
- data/bin/lib/Image/ExifTool/Exif.pm +124 -13
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
- data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
- data/bin/lib/Image/ExifTool/GPS.pm +22 -11
- data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/ID3.pm +15 -3
- data/bin/lib/Image/ExifTool/JPEG.pm +74 -4
- data/bin/lib/Image/ExifTool/JSON.pm +30 -5
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +395 -16
- data/bin/lib/Image/ExifTool/LIF.pm +153 -0
- data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
- data/bin/lib/Image/ExifTool/M2TS.pm +137 -5
- data/bin/lib/Image/ExifTool/MIE.pm +4 -3
- 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 +3 -3
- data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +18 -5
- data/bin/lib/Image/ExifTool/NikonSettings.pm +19 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +10 -3
- data/bin/lib/Image/ExifTool/Other.pm +93 -0
- data/bin/lib/Image/ExifTool/PDF.pm +9 -12
- data/bin/lib/Image/ExifTool/PNG.pm +8 -7
- data/bin/lib/Image/ExifTool/Panasonic.pm +28 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
- data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +234 -75
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
- data/bin/lib/Image/ExifTool/README +5 -2
- data/bin/lib/Image/ExifTool/RIFF.pm +89 -12
- data/bin/lib/Image/ExifTool/Samsung.pm +48 -10
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +230 -69
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4145 -4029
- data/bin/lib/Image/ExifTool/TagNames.pod +671 -287
- data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
- data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +55 -21
- data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -3
- data/bin/lib/Image/ExifTool/Writer.pl +47 -10
- data/bin/lib/Image/ExifTool/XMP.pm +45 -15
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
- data/bin/lib/Image/ExifTool.pm +233 -81
- data/bin/lib/Image/ExifTool.pod +114 -93
- data/bin/perl-Image-ExifTool.spec +43 -42
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +28 -13
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.33';
|
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;
|
@@ -1610,7 +1619,7 @@ if (@newValues) {
|
|
1610
1619
|
next;
|
1611
1620
|
}
|
1612
1621
|
my %opts = ( Shift => 0 ); # shift values if possible instead of adding/deleting
|
1613
|
-
# allow writing of '
|
1622
|
+
# allow writing of 'Unsafe' tags unless specified by wildcard
|
1614
1623
|
$opts{Protected} = 1 unless $tag =~ /[?*]/;
|
1615
1624
|
|
1616
1625
|
if ($tag =~ s/<// and defined $newVal) {
|
@@ -1945,10 +1954,19 @@ sub GetImageInfo($$)
|
|
1945
1954
|
my $pipe = $file;
|
1946
1955
|
if ($doUnzip) {
|
1947
1956
|
# pipe through gzip or bzip2 if necessary
|
1948
|
-
if ($file =~ /\.gz$/i) {
|
1949
|
-
$
|
1950
|
-
|
1951
|
-
|
1957
|
+
if ($file =~ /\.(gz|bz2)$/i) {
|
1958
|
+
my $type = lc $1;
|
1959
|
+
if ($file =~ /[^-_.'A-Za-z0-9\/\\]/) {
|
1960
|
+
Warn "Error: Insecure zip file name. Skipped\n";
|
1961
|
+
EFile($file);
|
1962
|
+
++$countBad;
|
1963
|
+
return;
|
1964
|
+
}
|
1965
|
+
if ($type eq 'gz') {
|
1966
|
+
$pipe = qq{gzip -dc "$file" |};
|
1967
|
+
} else {
|
1968
|
+
$pipe = qq{bzip2 -dc "$file" |};
|
1969
|
+
}
|
1952
1970
|
}
|
1953
1971
|
}
|
1954
1972
|
# evaluate -if expression for conditional processing
|
@@ -2209,7 +2227,7 @@ sub GetImageInfo($$)
|
|
2209
2227
|
my $f = $file;
|
2210
2228
|
CleanXML(\$f);
|
2211
2229
|
print $fp "\n<rdf:Description rdf:about='${f}'";
|
2212
|
-
print $fp "\n xmlns:et='http://ns.exiftool.
|
2230
|
+
print $fp "\n xmlns:et='http://ns.exiftool.org/1.0/'";
|
2213
2231
|
print $fp " et:toolkit='Image::ExifTool $Image::ExifTool::VERSION'";
|
2214
2232
|
# define namespaces for all tag groups
|
2215
2233
|
my (%groups, @groups, $grp0, $grp1);
|
@@ -2231,7 +2249,7 @@ sub GetImageInfo($$)
|
|
2231
2249
|
unless ($grp eq $grp1 and $grp =~ /^(ExifTool|File|Composite|Unknown)$/) {
|
2232
2250
|
$grp .= "/$grp1";
|
2233
2251
|
}
|
2234
|
-
print $fp "\n xmlns:$grp1='http://ns.exiftool.
|
2252
|
+
print $fp "\n xmlns:$grp1='http://ns.exiftool.org/$grp/1.0/'";
|
2235
2253
|
}
|
2236
2254
|
print $fp '>' if $outFormat < 1; # finish rdf:Description token unless short format
|
2237
2255
|
$ind = $outFormat >= 0 ? ' ' : ' ';
|
@@ -2267,10 +2285,11 @@ TAG: foreach $tag (@foundTags) {
|
|
2267
2285
|
# avoid extracting Protected binary tags (eg. data blocks) [insider information]
|
2268
2286
|
my $lcTag = lc $tag;
|
2269
2287
|
$lcTag =~ s/ .*//;
|
2270
|
-
next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
|
2288
|
+
next unless $$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{RequestAll} || 0) > 2;
|
2271
2289
|
}
|
2272
2290
|
$val = ConvertBinary($val); # convert SCALAR references
|
2273
|
-
|
2291
|
+
next unless defined $val;
|
2292
|
+
if ($structOpt and ref $val) {
|
2274
2293
|
# serialize structure if necessary
|
2275
2294
|
$val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
|
2276
2295
|
} elsif (ref $val eq 'ARRAY') {
|
@@ -2708,7 +2727,7 @@ sub SetImageInfo($$$)
|
|
2708
2727
|
return 0;
|
2709
2728
|
}
|
2710
2729
|
}
|
2711
|
-
if (not $isStdout and ($et->IsDirectory($outfile) or $outfile =~ /\/$/)) {
|
2730
|
+
if (not $isStdout and (($et->IsDirectory($outfile) and not $listDir) or $outfile =~ /\/$/)) {
|
2712
2731
|
$outfile .= '/' unless $outfile =~ /\/$/;
|
2713
2732
|
my $name = $file;
|
2714
2733
|
$name =~ s/^.*\///s; # remove directory name
|
@@ -2911,6 +2930,10 @@ sub SetImageInfo($$$)
|
|
2911
2930
|
unless (defined $tmpFile) {
|
2912
2931
|
# count the number of tags and pseudo-tags we are writing
|
2913
2932
|
my ($numSet, $numPseudo) = $et->CountNewValues();
|
2933
|
+
if ($numSet != $numPseudo and $et->IsDirectory($file)) {
|
2934
|
+
print $vout "Can't write real tags to a directory - $infile\n" if defined $verbose;
|
2935
|
+
$numSet = $numPseudo;
|
2936
|
+
}
|
2914
2937
|
if ($et->Exists($file)) {
|
2915
2938
|
unless ($numSet) {
|
2916
2939
|
# no need to write if no tags set
|
@@ -3227,7 +3250,8 @@ sub FormatXML($$$)
|
|
3227
3250
|
} elsif (ref $val eq 'HASH') {
|
3228
3251
|
$gt = " rdf:parseType='Resource'>";
|
3229
3252
|
my $val2 = '';
|
3230
|
-
|
3253
|
+
my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
|
3254
|
+
foreach (@keys) {
|
3231
3255
|
# (some variable-namespace XML structure fields may have a different group)
|
3232
3256
|
my $tok = /:/ ? $_ : ($grp . ':' . $_);
|
3233
3257
|
$val2 .= "\n$ind <$tok" . FormatXML($$val{$_}, "$ind ", $grp) . "</$tok>";
|
@@ -3304,7 +3328,8 @@ sub FormatJSON($$$)
|
|
3304
3328
|
} elsif (ref $val eq 'HASH') {
|
3305
3329
|
my ($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
|
3306
3330
|
print $fp $bra;
|
3307
|
-
|
3331
|
+
my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
|
3332
|
+
foreach (@keys) {
|
3308
3333
|
print $fp ',' if $comma;
|
3309
3334
|
my $key = EscapeJSON($_, 1);
|
3310
3335
|
print $fp qq(\n$ind $key$sep );
|
@@ -3395,20 +3420,25 @@ sub AddGroups($$$$)
|
|
3395
3420
|
#------------------------------------------------------------------------------
|
3396
3421
|
# Convert binary data (SCALAR references) for printing
|
3397
3422
|
# Inputs: 0) object reference
|
3398
|
-
# Returns: converted object
|
3423
|
+
# Returns: converted object, or undef if we don't want binary objects
|
3399
3424
|
sub ConvertBinary($)
|
3400
3425
|
{
|
3401
3426
|
my $obj = shift;
|
3402
3427
|
my ($key, $val);
|
3403
3428
|
if (ref $obj eq 'HASH') {
|
3404
3429
|
foreach $key (keys %$obj) {
|
3405
|
-
|
3430
|
+
next unless ref $$obj{$key};
|
3431
|
+
$$obj{$key} = ConvertBinary($$obj{$key});
|
3432
|
+
return undef unless defined $$obj{$key};
|
3406
3433
|
}
|
3407
3434
|
} elsif (ref $obj eq 'ARRAY') {
|
3408
3435
|
foreach $val (@$obj) {
|
3409
|
-
|
3436
|
+
next unless ref $val;
|
3437
|
+
$val = ConvertBinary($val);
|
3438
|
+
return undef unless defined $val;
|
3410
3439
|
}
|
3411
3440
|
} elsif (ref $obj eq 'SCALAR') {
|
3441
|
+
return undef if $noBinary;
|
3412
3442
|
# (binaryOutput flag is set to 0 for binary mode of XML/PHP/JSON output formats)
|
3413
3443
|
if (defined $binaryOutput) {
|
3414
3444
|
$obj = $$obj;
|
@@ -3585,7 +3615,7 @@ sub ProcessFiles($;$)
|
|
3585
3615
|
++$progressCount;
|
3586
3616
|
$progStr = " [$progressCount/$progressMax]" if $progress;
|
3587
3617
|
}
|
3588
|
-
if ($et->IsDirectory($file)) {
|
3618
|
+
if ($et->IsDirectory($file) and not $listDir) {
|
3589
3619
|
$multiFile = $validFile = 1;
|
3590
3620
|
ScanDir($et, $file, $list);
|
3591
3621
|
} elsif ($filterFlag and not AcceptFile($file)) {
|
@@ -4244,7 +4274,10 @@ sub FilterArgfileLine($)
|
|
4244
4274
|
# escaped by an odd number of backslashes, and escape a single backslash
|
4245
4275
|
# if it occurs at the end of the string
|
4246
4276
|
$arg =~ s{\\(.)|(["\$\@]|\\$)}{'\\'.($2 || $1)}sge;
|
4247
|
-
|
4277
|
+
# un-escape characters in C string
|
4278
|
+
my %esc = ( a => "\a", b => "\b", f => "\f", n => "\n",
|
4279
|
+
r => "\r", t => "\t", '"' => '"', '\\' => '\\' );
|
4280
|
+
$arg =~ s/\\(.)/$esc{$1}||'\\'.$1/egs;
|
4248
4281
|
} else {
|
4249
4282
|
$arg =~ s/^\s+//; # remove leading white space
|
4250
4283
|
$arg =~ s/[\x0d\x0a]+$//s; # remove trailing newline
|
@@ -4450,47 +4483,48 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4450
4483
|
|
4451
4484
|
File Types
|
4452
4485
|
------------+-------------+-------------+-------------+------------
|
4453
|
-
360 r/w |
|
4454
|
-
3FR r |
|
4455
|
-
3G2 r/w |
|
4456
|
-
3GP r/w |
|
4457
|
-
A r |
|
4458
|
-
AA r |
|
4459
|
-
AAE r |
|
4460
|
-
AAX r/w |
|
4461
|
-
ACR r |
|
4462
|
-
AFM r |
|
4463
|
-
AI r/w |
|
4464
|
-
AIFF r |
|
4465
|
-
APE r |
|
4466
|
-
ARQ r/w |
|
4467
|
-
ARW r/w |
|
4468
|
-
ASF r |
|
4469
|
-
AVI r |
|
4470
|
-
AVIF r/w |
|
4471
|
-
AZW r |
|
4472
|
-
BMP r |
|
4473
|
-
BPG r |
|
4474
|
-
BTF r |
|
4475
|
-
CHM r |
|
4476
|
-
COS r |
|
4477
|
-
CR2 r/w |
|
4478
|
-
CR3 r/w |
|
4479
|
-
CRM r/w |
|
4480
|
-
CRW r/w |
|
4481
|
-
CS1 r/w |
|
4482
|
-
CSV r |
|
4483
|
-
CZI r |
|
4484
|
-
DCM r |
|
4485
|
-
DCP r/w |
|
4486
|
-
DCR r |
|
4487
|
-
DFONT r |
|
4488
|
-
DIVX r |
|
4489
|
-
DJVU r |
|
4490
|
-
DLL r |
|
4491
|
-
DNG r/w |
|
4492
|
-
DOC r |
|
4493
|
-
DOCX r |
|
4486
|
+
360 r/w | DR4 r/w/c | JNG r/w | ODP r | RIFF r
|
4487
|
+
3FR r | DSS r | JP2 r/w | ODS r | RSRC r
|
4488
|
+
3G2 r/w | DV r | JPEG r/w | ODT r | RTF r
|
4489
|
+
3GP r/w | DVB r/w | JSON r | OFR r | RW2 r/w
|
4490
|
+
A r | DVR-MS r | JXL r | OGG r | RWL r/w
|
4491
|
+
AA r | DYLIB r | K25 r | OGV r | RWZ r
|
4492
|
+
AAE r | EIP r | KDC r | ONP r | RM r
|
4493
|
+
AAX r/w | EPS r/w | KEY r | OPUS r | SEQ r
|
4494
|
+
ACR r | EPUB r | LA r | ORF r/w | SKETCH r
|
4495
|
+
AFM r | ERF r/w | LFP r | ORI r/w | SO r
|
4496
|
+
AI r/w | EXE r | LIF r | OTF r | SR2 r/w
|
4497
|
+
AIFF r | EXIF r/w/c | LNK r | PAC r | SRF r
|
4498
|
+
APE r | EXR r | LRV r/w | PAGES r | SRW r/w
|
4499
|
+
ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SVG r
|
4500
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | SWF r
|
4501
|
+
ASF r | FFF r/w | MACOS r | PCX r | THM r/w
|
4502
|
+
AVI r | FITS r | MAX r | PDB r | TIFF r/w
|
4503
|
+
AVIF r/w | FLA r | MEF r/w | PDF r/w | TORRENT r
|
4504
|
+
AZW r | FLAC r | MIE r/w/ | PEF r/w | TTC r
|
4505
|
+
BMP r | FLIF r/w | MIFF r c | PFA r | TTF r
|
4506
|
+
BPG r | FLV r | MKA r | PFB r | TXT r
|
4507
|
+
BTF r | FPF r | MKS r | PFM r | VCF r
|
4508
|
+
CHM r | FPX r | MKV r | PGF r | VRD r/w/c
|
4509
|
+
COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
|
4510
|
+
CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
4511
|
+
CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
|
4512
|
+
CRM r/w | HDP r/w | MOI r | PMP r | WEBP r
|
4513
|
+
CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
4514
|
+
CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
4515
|
+
CSV r | HEIF r/w | MP3 r | PPT r | WMV r
|
4516
|
+
CZI r | HTML r | MP4 r/w | PPTX r | WTV r
|
4517
|
+
DCM r | ICC r/w/c | MPC r | PS r/w | WV r
|
4518
|
+
DCP r/w | ICS r | MPG r | PSB r/w | X3F r/w
|
4519
|
+
DCR r | IDML r | MPO r/w | PSD r/w | XCF r
|
4520
|
+
DFONT r | IIQ r/w | MQV r/w | PSP r | XLS r
|
4521
|
+
DIVX r | IND r/w | MRC r | QTIF r/w | XLSX r
|
4522
|
+
DJVU r | INSP r/w | MRW r/w | R3D r | XMP r/w/c
|
4523
|
+
DLL r | INSV r | MXF r | RA r | ZIP r
|
4524
|
+
DNG r/w | INX r | NEF r/w | RAF r/w |
|
4525
|
+
DOC r | ISO r | NRW r/w | RAM r |
|
4526
|
+
DOCX r | ITC r | NUMBERS r | RAR r |
|
4527
|
+
DPX r | J2C r | O r | RAW r/w |
|
4494
4528
|
|
4495
4529
|
Meta Information
|
4496
4530
|
----------------------+----------------------+---------------------
|
@@ -4624,6 +4658,7 @@ L<Advanced options|/Advanced options>
|
|
4624
4658
|
-echo[NUM] TEXT Echo text to stdout or stderr
|
4625
4659
|
-efile[NUM][!] ERRFILE Save names of files with errors
|
4626
4660
|
-execute[NUM] Execute multiple commands on one line
|
4661
|
+
-list_dir List directories, not their contents
|
4627
4662
|
-srcfile FMT Process a different source file
|
4628
4663
|
-stay_open FLAG Keep reading -@ argfile even after EOF
|
4629
4664
|
-userParam PARAM[[^]=[VAL]] Set user parameter (API UserParam opt)
|
@@ -4697,11 +4732,11 @@ I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
|
|
4697
4732
|
prefixed by optional family numbers, and separated colons. If no group name
|
4698
4733
|
is specified, the tag is created in the preferred group, and updated in any
|
4699
4734
|
other location where a same-named tag already exists. The preferred group
|
4700
|
-
is the first group in the following list
|
4701
|
-
IPTC, 3) XMP.
|
4735
|
+
in JPEG and TIFF-format images is the first group in the following list
|
4736
|
+
where I<TAG> is valid: 1) EXIF, 2) IPTC, 3) XMP.
|
4702
4737
|
|
4703
4738
|
The wildcards C<*> and C<?> may be used in tag names to assign the same
|
4704
|
-
value to multiple tags. When specified with wildcards, "
|
4739
|
+
value to multiple tags. When specified with wildcards, "Unsafe" tags are
|
4705
4740
|
not written. A tag name of C<All> is equivalent to C<*> (except that it
|
4706
4741
|
doesn't require quoting, while arguments with wildcards do on systems with
|
4707
4742
|
shell globbing), and is often used when deleting all metadata (ie. C<-All=>)
|
@@ -4847,10 +4882,10 @@ See L</COPYING EXAMPLES> for examples using B<-tagsFromFile>.
|
|
4847
4882
|
Notes:
|
4848
4883
|
|
4849
4884
|
1) Some tags (generally tags which may affect the appearance of the image)
|
4850
|
-
are considered "
|
4885
|
+
are considered "Unsafe" to write, and are only copied if specified
|
4851
4886
|
explicitly (ie. no wildcards). See the
|
4852
4887
|
L<tag name documentation|Image::ExifTool::TagNames> for more details about
|
4853
|
-
"
|
4888
|
+
"Unsafe" tags.
|
4854
4889
|
|
4855
4890
|
2) Be aware of the difference between excluding a tag from being copied
|
4856
4891
|
(--I<TAG>), and deleting a tag (-I<TAG>=). Excluding a tag prevents it from
|
@@ -4932,7 +4967,7 @@ documentation above for a complete description.
|
|
4932
4967
|
=head3 Input-output text formatting
|
4933
4968
|
|
4934
4969
|
Note that trailing spaces are removed from extracted values for most output
|
4935
|
-
text formats. The exceptions are
|
4970
|
+
text formats. The exceptions are B<-b>, B<-csv>, B<-j> and B<-X>.
|
4936
4971
|
|
4937
4972
|
=over 5
|
4938
4973
|
|
@@ -4948,7 +4983,7 @@ intermediate file (C<out.args> in this example):
|
|
4948
4983
|
exiftool -@ out.args -sep ', ' dst.jpg
|
4949
4984
|
|
4950
4985
|
Note: Be careful when copying information with this technique since it is
|
4951
|
-
easy to write tags which are normally considered "
|
4986
|
+
easy to write tags which are normally considered "Unsafe". For instance,
|
4952
4987
|
the FileName and Directory tags are excluded in the example above to avoid
|
4953
4988
|
renaming and moving the destination file. Also note that the second command
|
4954
4989
|
above will produce warning messages for any tags which are not writable.
|
@@ -4958,17 +4993,21 @@ maintain separate list items when writing metadata back to image files, and
|
|
4958
4993
|
the B<-struct> option may be used when extracting to preserve structured XMP
|
4959
4994
|
information.
|
4960
4995
|
|
4961
|
-
=item B<-b> (B<-binary>)
|
4996
|
+
=item B<-b>, B<--b> (B<-binary>, B<--binary>)
|
4997
|
+
|
4998
|
+
Output requested metadata in binary format without tag names or descriptions
|
4999
|
+
(B<-b> or B<-binary>). This option is mainly used for extracting embedded
|
5000
|
+
images or other binary data, but it may also be useful for some text strings
|
5001
|
+
since control characters (such as newlines) are not replaced by '.' as they
|
5002
|
+
are in the default output. By default, list items are separated by a
|
5003
|
+
newline when extracted with the B<-b> option, but this may be changed (see
|
5004
|
+
the B<-sep> option for details). May be combined with B<-j>, B<-php> or
|
5005
|
+
B<-X> to extract binary data in JSON, PHP or XML format, but note that
|
5006
|
+
"Unsafe" tags are not extracted as binary unless they are specified explicitly or
|
5007
|
+
the API RequestAll option is set to 3 or higher.
|
4962
5008
|
|
4963
|
-
|
4964
|
-
|
4965
|
-
other binary data, but it may also be useful for some text strings since
|
4966
|
-
control characters (such as newlines) are not replaced by '.' as they are in
|
4967
|
-
the default output. By default, list items are separated by a newline when
|
4968
|
-
extracted with the B<-b> option, but this may be changed (see the B<-sep>
|
4969
|
-
option for details). May be combined with C<-j>, C<-php> or C<-X> to
|
4970
|
-
extract binary data in JSON, PHP or XML format, but note that "unsafe" tags
|
4971
|
-
must be specified explicitly to be extracted as binary in these formats.
|
5009
|
+
With a leading double dash (B<--b> or B<--binary>), tags which contain
|
5010
|
+
binary data are suppressed in the output when reading.
|
4972
5011
|
|
4973
5012
|
=item B<-c> I<FMT> (B<-coordFormat>)
|
4974
5013
|
|
@@ -5166,7 +5205,7 @@ By default the resulting group name is simplified by removing any leading
|
|
5166
5205
|
C<Main:> and collapsing adjacent identical group names, but this can be
|
5167
5206
|
avoided by placing a colon before the first family number (eg. B<-g:3:1>).
|
5168
5207
|
Use the B<-listg> option to list group names for a specified family. The
|
5169
|
-
SavePath and SaveFormat
|
5208
|
+
API SavePath and SaveFormat options are automatically enabled if the
|
5170
5209
|
respective family 5 or 6 group names are requested. See the
|
5171
5210
|
L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
|
5172
5211
|
|
@@ -5369,7 +5408,7 @@ with this command:
|
|
5369
5408
|
|
5370
5409
|
produces output like this:
|
5371
5410
|
|
5372
|
-
-- Generated by ExifTool 12.
|
5411
|
+
-- Generated by ExifTool 12.33 --
|
5373
5412
|
File: a.jpg - 2003:10:31 15:44:19
|
5374
5413
|
(f/5.6, 1/60s, ISO 100)
|
5375
5414
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5386,7 +5425,7 @@ are effectively processed as separate input files.
|
|
5386
5425
|
If a specified tag does not exist, a minor warning is issued and the line
|
5387
5426
|
with the missing tag is not printed. However, the B<-f> option may be used
|
5388
5427
|
to set the value of missing tags to '-' (but this may be configured via the
|
5389
|
-
MissingTagValue
|
5428
|
+
API MissingTagValue option), or the B<-m> option may be used to ignore minor
|
5390
5429
|
warnings and leave the missing values empty. Alternatively, B<-q -q> may be
|
5391
5430
|
used to simply suppress the warning messages.
|
5392
5431
|
|
@@ -5685,9 +5724,10 @@ The B<-t> option adds tag table information to the output (see B<-t> for
|
|
5685
5724
|
details).
|
5686
5725
|
|
5687
5726
|
Note: This output is NOT the same as XMP because it uses
|
5688
|
-
dynamically-generated property names corresponding to the ExifTool tag
|
5689
|
-
names, and not the standard XMP
|
5690
|
-
|
5727
|
+
dynamically-generated property names corresponding to the ExifTool tag names
|
5728
|
+
with ExifTool family 1 group names as namespaces, and not the standard XMP
|
5729
|
+
properties and namespaces. To write XMP instead, use the B<-o> option with
|
5730
|
+
an XMP extension for the output file.
|
5691
5731
|
|
5692
5732
|
=back
|
5693
5733
|
|
@@ -5729,7 +5769,8 @@ L<https://exiftool.org/geotag.html#Inverse> for examples.
|
|
5729
5769
|
Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
|
5730
5770
|
until the first Supplemental Enhancement Information (SEI) message is
|
5731
5771
|
decoded, or 3 to parse the entire H624 stream and decode all SEI
|
5732
|
-
information.
|
5772
|
+
information. For M2TS videos, a setting of 3 causes the entire file to be
|
5773
|
+
parsed in search of unlisted programs which may contain timed GPS.
|
5733
5774
|
|
5734
5775
|
=item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
|
5735
5776
|
|
@@ -5818,10 +5859,10 @@ Ignore specified directory name. I<DIR> may be either an individual folder
|
|
5818
5859
|
name, or a full path. If a full path is specified, it must match the
|
5819
5860
|
Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
|
5820
5861
|
more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
|
5821
|
-
sensitive) may be specified to
|
5822
|
-
is used. As well, a value of C<HIDDEN>
|
5823
|
-
ignore files with names that start with a
|
5824
|
-
systems) when scanning a directory.
|
5862
|
+
sensitive) may be specified to avoid recursing into directories which are
|
5863
|
+
symbolic links when the B<-r> option is used. As well, a value of C<HIDDEN>
|
5864
|
+
(case sensitive) may be used to ignore files with names that start with a
|
5865
|
+
"." (ie. hidden files on Unix systems) when scanning a directory.
|
5825
5866
|
|
5826
5867
|
=item B<-if>[I<NUM>] I<EXPR>
|
5827
5868
|
|
@@ -6247,7 +6288,7 @@ As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
|
|
6247
6288
|
for any tag on the command line. See the L<MWG Tags
|
6248
6289
|
documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
|
6249
6290
|
that this option is not reversible, and remains in effect until the
|
6250
|
-
application terminates, even across the
|
6291
|
+
application terminates, even across the B<-execute> option.
|
6251
6292
|
|
6252
6293
|
=back
|
6253
6294
|
|
@@ -6333,7 +6374,7 @@ exit status of the command (see L</EXIT STATUS>).
|
|
6333
6374
|
|
6334
6375
|
Save the names of files giving errors (I<NUM> missing or 1), files that were
|
6335
6376
|
unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
|
6336
|
-
or any combination thereof
|
6377
|
+
or any combination thereof by summing I<NUM> (eg. B<-efile3> is the same
|
6337
6378
|
has having both B<-efile> and B<-efile2> options with the same I<ERRFILE>).
|
6338
6379
|
By default, file names are appended to any existing I<ERRFILE>, but
|
6339
6380
|
I<ERRFILE> is overwritten if an exclamation point is added to the option
|
@@ -6351,6 +6392,20 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
|
|
6351
6392
|
when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
|
6352
6393
|
option no longer suppresses the output "{readyNUM}" message.
|
6353
6394
|
|
6395
|
+
=item B<-list_dir>
|
6396
|
+
|
6397
|
+
List directories themselves instead of their contents. This option
|
6398
|
+
effectively causes directories to be treated as normal files when reading
|
6399
|
+
and writing. For example, with this option the output of the C<ls -la>
|
6400
|
+
command on Mac/Linux may be approximated by this exiftool command:
|
6401
|
+
|
6402
|
+
exiftool -list_dir -T -ls-l -api systemtags -fast5 .* *
|
6403
|
+
|
6404
|
+
(The B<-T> option formats the output in tab-separated columns, B<-ls-l> is a
|
6405
|
+
L<shortcut tag|Image::ExifTool::Shortcuts>, the API SystemTags option is
|
6406
|
+
required to extract some necessary tags, and the B<-fast5> option is added
|
6407
|
+
for speed since only system tags are being extracted.)
|
6408
|
+
|
6354
6409
|
=item B<-srcfile> I<FMT>
|
6355
6410
|
|
6356
6411
|
Specify a different source file to be processed based on the name of the
|
@@ -6398,7 +6453,7 @@ buffered output.) ExifTool will then execute the command with the arguments
|
|
6398
6453
|
received up to this point, send a "{ready}" message to stdout when done
|
6399
6454
|
(unless the B<-q> or B<-T> option is used), and continue trying to read
|
6400
6455
|
arguments for the next command from I<ARGFILE>. To aid in command/response
|
6401
|
-
synchronization, any number appended to the
|
6456
|
+
synchronization, any number appended to the B<-execute> option is echoed in
|
6402
6457
|
the "{ready}" message. For example, C<-execute613> results in "{ready613}".
|
6403
6458
|
When this number is added, B<-q> no longer suppresses the "{ready}" message.
|
6404
6459
|
(Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
|
@@ -6533,8 +6588,8 @@ complete list). Setting this triggers the use of Windows wide-character i/o
|
|
6533
6588
|
routines, thus providing support for most Unicode file names (see note 4).
|
6534
6589
|
But note that it is not trivial to pass properly encoded file names on the
|
6535
6590
|
Windows command line (see L<https://exiftool.org/faq.html#Q18> for details),
|
6536
|
-
so placing them in a UTF-8 encoded B<-@> argfile and using
|
6537
|
-
filename=utf8> is recommended if possible.
|
6591
|
+
so placing them in a UTF-8 encoded B<-@> argfile and using
|
6592
|
+
C<-charset filename=utf8> is recommended if possible.
|
6538
6593
|
|
6539
6594
|
A warning is issued if a specified filename contains special characters and
|
6540
6595
|
the filename character set was not provided. However, the warning may be
|
@@ -6608,7 +6663,7 @@ Print all meta information in an image, including duplicate and unknown
|
|
6608
6663
|
tags, sorted by group (for family 1). For performance reasons, this command
|
6609
6664
|
may not extract all available metadata. (Metadata in embedded documents,
|
6610
6665
|
metadata extracted by external utilities, and metadata requiring excessive
|
6611
|
-
processing time may not be extracted). Add C<-
|
6666
|
+
processing time may not be extracted). Add C<-ee3> and C<-api RequestAll=3>
|
6612
6667
|
to the command to extract absolutely everything available.
|
6613
6668
|
|
6614
6669
|
=item exiftool -common dir
|
@@ -6677,7 +6732,7 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>).
|
|
6677
6732
|
Print one line of output containing the file name and DateTimeOriginal for
|
6678
6733
|
each image in directory C<dir>.
|
6679
6734
|
|
6680
|
-
=item exiftool -
|
6735
|
+
=item exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
|
6681
6736
|
|
6682
6737
|
Extract all GPS positions from an AVCHD video.
|
6683
6738
|
|
data/bin/fmt_files/gpx.fmt
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# Description: Example ExifTool print format file to generate a GPX track log
|
5
5
|
#
|
6
|
-
# Usage: exiftool -p gpx.fmt -
|
6
|
+
# Usage: exiftool -p gpx.fmt -ee3 FILE [...] > out.gpx
|
7
7
|
#
|
8
8
|
# Requires: ExifTool version 10.49 or later
|
9
9
|
#
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
|
14
14
|
#
|
15
15
|
# Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
|
16
|
-
# 2) The -
|
16
|
+
# 2) The -ee3 option is to extract the full track from video files.
|
17
17
|
# 3) The -fileOrder option may be used to control the order of the
|
18
18
|
# generated track points when processing multiple files.
|
19
19
|
#------------------------------------------------------------------------------
|
data/bin/fmt_files/gpx_wpt.fmt
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# Description: Example ExifTool print format file to generate GPX waypoints
|
5
5
|
# with pictures
|
6
6
|
#
|
7
|
-
# Usage: exiftool -p gpx_wpt.fmt -
|
7
|
+
# Usage: exiftool -p gpx_wpt.fmt -ee3 FILE [...] > out.gpx
|
8
8
|
#
|
9
9
|
# Requires: ExifTool version 10.49 or later
|
10
10
|
#
|
@@ -14,7 +14,7 @@
|
|
14
14
|
# 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
|
15
15
|
#
|
16
16
|
# Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
|
17
|
-
# 2) The -
|
17
|
+
# 2) The -ee3 option is to extract the full track from video files.
|
18
18
|
# 3) The -fileOrder option may be used to control the order of the
|
19
19
|
# generated track points when processing multiple files.
|
20
20
|
#------------------------------------------------------------------------------
|
data/bin/fmt_files/kml.fmt
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
# 2020/01/11 - F. Kotov Limited image preview size to 500px
|
16
16
|
#
|
17
17
|
# Notes: 1) Input files must contain GPSLatitude and GPSLongitude.
|
18
|
-
# 2) Add the -
|
18
|
+
# 2) Add the -ee3 option to extract the full track from video files.
|
19
19
|
# 3) For Google Earth to be able to find the images, the input
|
20
20
|
# images must be specified using relative paths, and "out.kml"
|
21
21
|
# must stay in the same directory as where the command was run.
|
data/bin/fmt_files/kml_track.fmt
CHANGED
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool::Exif;
|
16
16
|
use Image::ExifTool::PLIST;
|
17
17
|
|
18
|
-
$VERSION = '1.
|
18
|
+
$VERSION = '1.05';
|
19
19
|
|
20
20
|
# Apple iPhone metadata (ref PH)
|
21
21
|
%Image::ExifTool::Apple::Main = (
|
@@ -72,7 +72,8 @@ $VERSION = '1.04';
|
|
72
72
|
# 0x000f - int32s: 2,3
|
73
73
|
# 0x0010 - int32s: 1
|
74
74
|
0x0011 => {
|
75
|
-
Name => '
|
75
|
+
Name => 'MediaGroupUUID', #NealKrawetz private communication
|
76
|
+
# (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
|
76
77
|
Writable => 'string',
|
77
78
|
},
|
78
79
|
# 0x0014 - int32s: 1,2,3,4,5 (iPhone 6s, iOS 6.1)
|