exiftool_vendored 12.17.1 → 12.32.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 +225 -1
- 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 +142 -87
- 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 +30 -12
- data/bin/lib/Image/ExifTool/CBOR.pm +277 -0
- data/bin/lib/Image/ExifTool/Canon.pm +49 -18
- 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 +28 -11
- 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 +27 -4
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +393 -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 +1 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +19 -8
- data/bin/lib/Image/ExifTool/NikonSettings.pm +28 -11
- data/bin/lib/Image/ExifTool/Olympus.pm +6 -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 +247 -88
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
- data/bin/lib/Image/ExifTool/README +3 -0
- 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 +237 -78
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4125 -4028
- data/bin/lib/Image/ExifTool/TagNames.pod +644 -286
- 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 +39 -14
- data/bin/lib/Image/ExifTool/XMP2.pl +2 -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 +223 -72
- 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.32';
|
|
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;
|
|
@@ -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 ? ' ' : ' ';
|
|
@@ -2270,7 +2288,8 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2270
2288
|
next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
|
|
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)
|
|
@@ -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
|
|
|
@@ -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 must be specified explicitly to be extracted as binary in
|
|
5007
|
+
these formats.
|
|
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
|
|
|
@@ -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.32 --
|
|
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
|
|
@@ -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)
|