exiftool_vendored 12.41.0 → 12.50.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 +209 -6
- data/bin/MANIFEST +12 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -44
- data/bin/config_files/acdsee.config +2 -1
- data/bin/config_files/frameCount.config +56 -0
- data/bin/config_files/tiff_version.config +1 -1
- data/bin/exiftool +115 -96
- data/bin/fmt_files/gpx.fmt +3 -0
- data/bin/fmt_files/gpx_wpt.fmt +3 -0
- data/bin/lib/Image/ExifTool/Apple.pm +16 -3
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +23 -12
- data/bin/lib/Image/ExifTool/Canon.pm +71 -33
- data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- data/bin/lib/Image/ExifTool/DJI.pm +60 -1
- data/bin/lib/Image/ExifTool/DNG.pm +8 -2
- data/bin/lib/Image/ExifTool/DarwinCore.pm +13 -1
- data/bin/lib/Image/ExifTool/EXE.pm +9 -1
- data/bin/lib/Image/ExifTool/Exif.pm +26 -12
- data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +4 -3
- data/bin/lib/Image/ExifTool/FlashPix.pm +26 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +51 -4
- data/bin/lib/Image/ExifTool/GPS.pm +21 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +25 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +12 -9
- data/bin/lib/Image/ExifTool/ICO.pm +143 -0
- data/bin/lib/Image/ExifTool/ID3.pm +11 -11
- data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
- data/bin/lib/Image/ExifTool/LNK.pm +5 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +98 -8
- data/bin/lib/Image/ExifTool/MIE.pm +9 -3
- data/bin/lib/Image/ExifTool/MISB.pm +494 -0
- data/bin/lib/Image/ExifTool/MakerNotes.pm +8 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +24 -16
- data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +293 -122
- data/bin/lib/Image/ExifTool/NikonCustom.pm +4 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +22 -2
- data/bin/lib/Image/ExifTool/PDF.pm +2 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +30 -4
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
- data/bin/lib/Image/ExifTool/Parrot.pm +96 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +8 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +35 -8
- data/bin/lib/Image/ExifTool/QuickTime.pm +163 -13
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +119 -13
- data/bin/lib/Image/ExifTool/README +13 -3
- data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
- data/bin/lib/Image/ExifTool/Samsung.pm +234 -3
- data/bin/lib/Image/ExifTool/Shortcuts.pm +2 -1
- data/bin/lib/Image/ExifTool/Sigma.pm +27 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
- data/bin/lib/Image/ExifTool/Sony.pm +71 -43
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +3 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4752 -4516
- data/bin/lib/Image/ExifTool/TagNames.pod +1885 -1434
- data/bin/lib/Image/ExifTool/Text.pm +3 -4
- data/bin/lib/Image/ExifTool/Torrent.pm +2 -3
- data/bin/lib/Image/ExifTool/Validate.pm +3 -3
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
- data/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +5 -5
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- data/bin/lib/Image/ExifTool/Writer.pl +14 -6
- data/bin/lib/Image/ExifTool/XMP.pm +78 -59
- data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
- data/bin/lib/Image/ExifTool.pm +120 -33
- data/bin/lib/Image/ExifTool.pod +83 -69
- data/bin/perl-Image-ExifTool.spec +43 -43
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +9 -4
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '12.
|
14
|
+
my $version = '12.50';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
BEGIN {
|
@@ -663,7 +663,7 @@ for (;;) {
|
|
663
663
|
}
|
664
664
|
$group = $2;
|
665
665
|
shift;
|
666
|
-
$group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), next;
|
666
|
+
$group =~ /IFD/i and Warn("Can't list tags for specific IFD\n"), $helped=1, next;
|
667
667
|
$group =~ /^(all|\*)$/ and undef $group;
|
668
668
|
} else {
|
669
669
|
$pass or next;
|
@@ -1009,8 +1009,12 @@ for (;;) {
|
|
1009
1009
|
}
|
1010
1010
|
if (/^if(\d*)$/i) {
|
1011
1011
|
my $cond = shift;
|
1012
|
-
$
|
1012
|
+
my $fast = length($1) ? $1 : undef;
|
1013
1013
|
defined $cond or Error("Expecting expression for -if option\n"), $badCmd=1, next;
|
1014
|
+
# use lowest -fast setting if multiple conditions
|
1015
|
+
if (not @condition or not defined $fast or (defined $fastCondition and $fastCondition > $fast)) {
|
1016
|
+
$fastCondition = $fast;
|
1017
|
+
}
|
1014
1018
|
# prevent processing file unnecessarily for simple case of failed '$ok' or 'not $ok'
|
1015
1019
|
$cond =~ /^\s*(not\s*)\$ok\s*$/i and ($1 xor $rtnValPrev) and $failCondition=1;
|
1016
1020
|
# add to list of requested tags
|
@@ -2307,7 +2311,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2307
2311
|
if (ref $val) {
|
2308
2312
|
# happens with -X, -j or -php when combined with -b:
|
2309
2313
|
if (defined $binaryOutput and not $binaryOutput and $$et{TAG_INFO}{$tag}{Protected}) {
|
2310
|
-
# avoid extracting
|
2314
|
+
# avoid extracting Unsafe binary tags (eg. data blocks) [insider information]
|
2311
2315
|
my $lcTag = lc $tag;
|
2312
2316
|
$lcTag =~ s/ .*//;
|
2313
2317
|
next unless $$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{RequestAll} || 0) > 2;
|
@@ -2554,8 +2558,9 @@ TAG: foreach $tag (@foundTags) {
|
|
2554
2558
|
if ($showTagID or $outFormat < 0) {
|
2555
2559
|
$val = { val => $val };
|
2556
2560
|
if ($showTagID) {
|
2557
|
-
my $id = $et->GetTagID($tag);
|
2561
|
+
my ($id, $lang) = $et->GetTagID($tag);
|
2558
2562
|
$id = sprintf('0x%.4x', $id) if $showTagID eq 'H' and $id =~ /^\d+$/;
|
2563
|
+
$$val{lang} = $lang if $lang;
|
2559
2564
|
$$val{id} = $id;
|
2560
2565
|
}
|
2561
2566
|
if ($tabFormat) {
|
@@ -3253,7 +3258,7 @@ sub EncodeXML($)
|
|
3253
3258
|
{
|
3254
3259
|
my $strPt = shift;
|
3255
3260
|
if ($$strPt =~ /[\0-\x08\x0b\x0c\x0e-\x1f]/ or
|
3256
|
-
(not $altEnc and Image::ExifTool::
|
3261
|
+
(not $altEnc and Image::ExifTool::IsUTF8($strPt) < 0))
|
3257
3262
|
{
|
3258
3263
|
# encode binary data and non-UTF8 with special characters as base64
|
3259
3264
|
$$strPt = Image::ExifTool::XMP::EncodeBase64($$strPt);
|
@@ -3317,7 +3322,7 @@ sub EscapeJSON($;$)
|
|
3317
3322
|
return $str if $str =~ /^-?(\d|[1-9]\d{1,14})(\.\d{1,16})?(e[-+]?\d{1,3})?$/i;
|
3318
3323
|
}
|
3319
3324
|
# encode JSON string in base64 if necessary
|
3320
|
-
if ($json < 2 and defined $binaryOutput and Image::ExifTool::
|
3325
|
+
if ($json < 2 and defined $binaryOutput and Image::ExifTool::IsUTF8(\$str) < 0) {
|
3321
3326
|
return '"base64:' . Image::ExifTool::XMP::EncodeBase64($str, 1) . '"';
|
3322
3327
|
}
|
3323
3328
|
# escape special characters
|
@@ -3393,7 +3398,7 @@ sub FormatCSV($)
|
|
3393
3398
|
my $val = shift;
|
3394
3399
|
# check for valid encoding if the Charset option was used
|
3395
3400
|
if ($setCharset and ($val =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xff]/ or
|
3396
|
-
($setCharset eq 'UTF8' and Image::ExifTool::
|
3401
|
+
($setCharset eq 'UTF8' and Image::ExifTool::IsUTF8(\$val) < 0)))
|
3397
3402
|
{
|
3398
3403
|
$val = 'base64:' . Image::ExifTool::XMP::EncodeBase64($val, 1);
|
3399
3404
|
}
|
@@ -3480,7 +3485,7 @@ sub ConvertBinary($)
|
|
3480
3485
|
$obj = $$obj;
|
3481
3486
|
# encode in base64 if necessary (0xf7 allows for up to 21-bit UTF-8 code space)
|
3482
3487
|
if ($json == 1 and ($obj =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xf7]/ or
|
3483
|
-
Image::ExifTool::
|
3488
|
+
Image::ExifTool::IsUTF8(\$obj) < 0))
|
3484
3489
|
{
|
3485
3490
|
$obj = 'base64:' . Image::ExifTool::XMP::EncodeBase64($obj, 1);
|
3486
3491
|
}
|
@@ -3614,8 +3619,7 @@ sub CheckUTF8($$)
|
|
3614
3619
|
my ($file, $enc) = @_;
|
3615
3620
|
my $isUTF8 = 0;
|
3616
3621
|
if ($file =~ /[\x80-\xff]/) {
|
3617
|
-
|
3618
|
-
$isUTF8 = Image::ExifTool::XMP::IsUTF8(\$file);
|
3622
|
+
$isUTF8 = Image::ExifTool::IsUTF8(\$file);
|
3619
3623
|
if ($isUTF8 < 0) {
|
3620
3624
|
if ($enc) {
|
3621
3625
|
Warn("Invalid filename encoding for $file\n");
|
@@ -4528,48 +4532,48 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4528
4532
|
|
4529
4533
|
File Types
|
4530
4534
|
------------+-------------+-------------+-------------+------------
|
4531
|
-
360 r/w |
|
4532
|
-
3FR r |
|
4533
|
-
3G2 r/w |
|
4534
|
-
3GP r/w |
|
4535
|
-
A r |
|
4536
|
-
AA r |
|
4537
|
-
AAE r |
|
4538
|
-
AAX r/w |
|
4539
|
-
ACR r |
|
4540
|
-
AFM r |
|
4541
|
-
AI r/w |
|
4542
|
-
AIFF r |
|
4543
|
-
APE r |
|
4544
|
-
ARQ r/w |
|
4545
|
-
ARW r/w |
|
4546
|
-
ASF r |
|
4547
|
-
AVI r |
|
4548
|
-
AVIF r/w |
|
4549
|
-
AZW r |
|
4550
|
-
BMP r |
|
4551
|
-
BPG r |
|
4552
|
-
BTF r |
|
4553
|
-
CHM r |
|
4554
|
-
COS r |
|
4555
|
-
CR2 r/w |
|
4556
|
-
CR3 r/w |
|
4557
|
-
CRM r/w |
|
4558
|
-
CRW r/w |
|
4559
|
-
CS1 r/w |
|
4560
|
-
CSV r |
|
4561
|
-
|
4562
|
-
|
4563
|
-
|
4564
|
-
|
4565
|
-
|
4566
|
-
|
4567
|
-
|
4568
|
-
|
4569
|
-
|
4570
|
-
|
4571
|
-
|
4572
|
-
|
4535
|
+
360 r/w | DPX r | ITC r | NRW r/w | RAM r
|
4536
|
+
3FR r | DR4 r/w/c | J2C r | NUMBERS r | RAR r
|
4537
|
+
3G2 r/w | DSS r | JNG r/w | O r | RAW r/w
|
4538
|
+
3GP r/w | DV r | JP2 r/w | ODP r | RIFF r
|
4539
|
+
A r | DVB r/w | JPEG r/w | ODS r | RSRC r
|
4540
|
+
AA r | DVR-MS r | JSON r | ODT r | RTF r
|
4541
|
+
AAE r | DYLIB r | JXL r | OFR r | RW2 r/w
|
4542
|
+
AAX r/w | EIP r | K25 r | OGG r | RWL r/w
|
4543
|
+
ACR r | EPS r/w | KDC r | OGV r | RWZ r
|
4544
|
+
AFM r | EPUB r | KEY r | ONP r | RM r
|
4545
|
+
AI r/w | ERF r/w | LA r | OPUS r | SEQ r
|
4546
|
+
AIFF r | EXE r | LFP r | ORF r/w | SKETCH r
|
4547
|
+
APE r | EXIF r/w/c | LIF r | ORI r/w | SO r
|
4548
|
+
ARQ r/w | EXR r | LNK r | OTF r | SR2 r/w
|
4549
|
+
ARW r/w | EXV r/w/c | LRV r/w | PAC r | SRF r
|
4550
|
+
ASF r | F4A/V r/w | M2TS r | PAGES r | SRW r/w
|
4551
|
+
AVI r | FFF r/w | M4A/V r/w | PBM r/w | SVG r
|
4552
|
+
AVIF r/w | FITS r | MACOS r | PCD r | SWF r
|
4553
|
+
AZW r | FLA r | MAX r | PCX r | THM r/w
|
4554
|
+
BMP r | FLAC r | MEF r/w | PDB r | TIFF r/w
|
4555
|
+
BPG r | FLIF r/w | MIE r/w/c | PDF r/w | TORRENT r
|
4556
|
+
BTF r | FLV r | MIFF r | PEF r/w | TTC r
|
4557
|
+
CHM r | FPF r | MKA r | PFA r | TTF r
|
4558
|
+
COS r | FPX r | MKS r | PFB r | TXT r
|
4559
|
+
CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
|
4560
|
+
CR3 r/w | GPR r/w | MNG r/w | PGF r | VRD r/w/c
|
4561
|
+
CRM r/w | GZ r | MOBI r | PGM r/w | VSD r
|
4562
|
+
CRW r/w | HDP r/w | MODD r | PLIST r | WAV r
|
4563
|
+
CS1 r/w | HDR r | MOI r | PICT r | WDP r/w
|
4564
|
+
CSV r | HEIC r/w | MOS r/w | PMP r | WEBP r/w
|
4565
|
+
CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBM r
|
4566
|
+
CZI r | HTML r | MP3 r | PPM r/w | WMA r
|
4567
|
+
DCM r | ICC r/w/c | MP4 r/w | PPT r | WMV r
|
4568
|
+
DCP r/w | ICO r | MPC r | PPTX r | WTV r
|
4569
|
+
DCR r | ICS r | MPG r | PS r/w | WV r
|
4570
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | X3F r/w
|
4571
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | XCF r
|
4572
|
+
DJVU r | IND r/w | MRC r | PSP r | XLS r
|
4573
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
|
4574
|
+
DNG r/w | INSV r | MXF r | R3D r | XMP r/w/c
|
4575
|
+
DOC r | INX r | NEF r/w | RA r | ZIP r
|
4576
|
+
DOCX r | ISO r | NKSC r/w | RAF r/w |
|
4573
4577
|
|
4574
4578
|
Meta Information
|
4575
4579
|
----------------------+----------------------+---------------------
|
@@ -4989,16 +4993,17 @@ B<-struct> option for details.
|
|
4989
4993
|
8) With the redirection feature, copying a tag directly (ie.
|
4990
4994
|
E<quot>'-I<DSTTAG>E<lt>I<SRCTAG>'E<quot>) is not the same as interpolating
|
4991
4995
|
its value inside a string (ie. E<quot>'-I<DSTTAG>E<lt>$I<SRCTAG>'E<quot>)
|
4992
|
-
for list-type tags,
|
4993
|
-
|
4994
|
-
|
4995
|
-
destination tag (as if they were
|
4996
|
-
interpolated inside a string, list
|
4997
|
-
|
4998
|
-
not allowed. Also, UserParam
|
4999
|
-
in a string. Another
|
5000
|
-
|
5001
|
-
isn't when copying the
|
4996
|
+
for source tags which are list-type tags,
|
4997
|
+
L<shortcut tags|Image::ExifTool::Shortcuts>, tag names containing wildcards,
|
4998
|
+
or UserParam variables. When copying directly, the values of each matching
|
4999
|
+
source tag are copied individually to the destination tag (as if they were
|
5000
|
+
separate assignments). However, when interpolated inside a string, list
|
5001
|
+
items and the values of shortcut tags are concatenated (with a separator set
|
5002
|
+
by the B<-sep> option), and wildcards are not allowed. Also, UserParam
|
5003
|
+
variables are available only when interpolated in a string. Another
|
5004
|
+
difference is that a minor warning is generated if a tag doesn't exist when
|
5005
|
+
interpolating its value in a string (with C<$>), but isn't when copying the
|
5006
|
+
tag directly.
|
5002
5007
|
|
5003
5008
|
Finally, the behaviour is different when a destination tag or group of
|
5004
5009
|
C<All> is used. When copying directly, a destination group and/or tag name
|
@@ -5057,8 +5062,8 @@ are in the default output. By default, list items are separated by a
|
|
5057
5062
|
newline when extracted with the B<-b> option, but this may be changed (see
|
5058
5063
|
the B<-sep> option for details). May be combined with B<-j>, B<-php> or
|
5059
5064
|
B<-X> to extract binary data in JSON, PHP or XML format, but note that
|
5060
|
-
"Unsafe" tags are not extracted as binary unless they are specified
|
5061
|
-
the API RequestAll option is set to 3 or higher.
|
5065
|
+
"Unsafe" tags are not extracted as binary unless they are specified
|
5066
|
+
explicitly or the API RequestAll option is set to 3 or higher.
|
5062
5067
|
|
5063
5068
|
With a leading double dash (B<--b> or B<--binary>), tags which contain
|
5064
5069
|
binary data are suppressed in the output when reading.
|
@@ -5223,7 +5228,8 @@ option has no effect on date-only or time-only tags and ignores timezone
|
|
5223
5228
|
information if present. ExifTool adds a C<%f> format code to represent
|
5224
5229
|
fractional seconds, and supports an optional width to specify the number of
|
5225
5230
|
digits after the decimal point (eg. C<%3f> would give something like
|
5226
|
-
C<.437>)
|
5231
|
+
C<.437>), and a minus sign to drop the decimal point (eg. C<%-3f> would give
|
5232
|
+
C<437>). Only one B<-d> option may be used per command. Requires
|
5227
5233
|
POSIX::strptime or Time::Piece for the inversion conversion when writing.
|
5228
5234
|
|
5229
5235
|
=item B<-D> (B<-decimal>)
|
@@ -5316,7 +5322,9 @@ ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
|
|
5316
5322
|
to include tag table information (see B<-t> for details). The JSON output
|
5317
5323
|
is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
|
5318
5324
|
UTF-8 validation is disabled if a character set other than UTF-8 is
|
5319
|
-
specified.
|
5325
|
+
specified. Note that ExifTool quotes JSON values only if they don't look
|
5326
|
+
like numbers (regardless of the original storage format or the relevant
|
5327
|
+
metadata specification).
|
5320
5328
|
|
5321
5329
|
If I<JSONFILE> is specified, the file is imported and the tag definitions
|
5322
5330
|
from the file are used to set tag values on a per-file basis. The special
|
@@ -5360,7 +5368,7 @@ been implemented. May also be combined with B<-listx> to output
|
|
5360
5368
|
descriptions in one language only.
|
5361
5369
|
|
5362
5370
|
By default, ExifTool uses UTF-8 encoding for special characters, but the
|
5363
|
-
|
5371
|
+
B<-L> or B<-charset> option may be used to invoke other encodings. Note
|
5364
5372
|
that ExifTool uses Unicode::LineBreak if available to help preserve the
|
5365
5373
|
column alignment of the plain text output for languages with a
|
5366
5374
|
variable-width character set.
|
@@ -5466,7 +5474,7 @@ with this command:
|
|
5466
5474
|
|
5467
5475
|
produces output like this:
|
5468
5476
|
|
5469
|
-
-- Generated by ExifTool 12.
|
5477
|
+
-- Generated by ExifTool 12.50 --
|
5470
5478
|
File: a.jpg - 2003:10:31 15:44:19
|
5471
5479
|
(f/5.6, 1/60s, ISO 100)
|
5472
5480
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5474,8 +5482,8 @@ produces output like this:
|
|
5474
5482
|
-- end --
|
5475
5483
|
|
5476
5484
|
The values of List-type tags with multiple items and Shortcut tags
|
5477
|
-
representing multiple tags are joined according the
|
5478
|
-
|
5485
|
+
representing multiple tags are joined according the B<-sep> option setting
|
5486
|
+
when interpolated in the string.
|
5479
5487
|
|
5480
5488
|
When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents
|
5481
5489
|
are effectively processed as separate input files.
|
@@ -5488,7 +5496,12 @@ warnings and leave the missing values empty. Alternatively, B<-q -q> may be
|
|
5488
5496
|
used to simply suppress the warning messages.
|
5489
5497
|
|
5490
5498
|
The L</Advanced formatting feature> may be used to modify the values of
|
5491
|
-
individual tags
|
5499
|
+
individual tags within the B<-p> option string.
|
5500
|
+
|
5501
|
+
Note that the API RequestTags option is automatically set for all tags used
|
5502
|
+
in the I<FMTFILE> or I<STR>. This allows all other tags to be ignored using
|
5503
|
+
B<-API IgnoreTags=all>, resulting in reduced memory usage and increased
|
5504
|
+
speed.
|
5492
5505
|
|
5493
5506
|
=item B<-php>
|
5494
5507
|
|
@@ -5880,12 +5893,14 @@ audio/video data in WAV/AVI files to search for additional metadata. These
|
|
5880
5893
|
speed benefits are small when reading images directly from disk, but can be
|
5881
5894
|
substantial if piping images through a network connection. For more
|
5882
5895
|
substantial speed benefits, B<-fast2> also causes exiftool to avoid
|
5883
|
-
extracting any EXIF MakerNote information
|
5884
|
-
|
5885
|
-
|
5886
|
-
|
5887
|
-
|
5888
|
-
|
5896
|
+
extracting any EXIF MakerNote information, and to stop processing at the
|
5897
|
+
IDAT chunk of PNG images and the mdat atom of QuickTime-format files (but
|
5898
|
+
note that some files may store metadata after this). B<-fast3> avoids
|
5899
|
+
extracting metadata from the file, and returns only pseudo System tags, but
|
5900
|
+
still reads the file header to obtain an educated guess at FileType.
|
5901
|
+
B<-fast4> doesn't even read the file header, and returns only System tags
|
5902
|
+
and a FileType based on the file extension. B<-fast5> also disables
|
5903
|
+
generation of the Composite tags (like B<-e>). Has no effect when writing.
|
5889
5904
|
|
5890
5905
|
Note that a separate B<-fast> setting may be used for evaluation of a B<-if>
|
5891
5906
|
condition, or when ordering files with the B<-fileOrder> option. See the
|
@@ -5905,14 +5920,13 @@ order may be reversed by prefixing the tag name with a C<-> (eg.
|
|
5905
5920
|
C<-fileOrder -createdate>). Print conversion of the sorted values is
|
5906
5921
|
disabled with the B<-n> option, or a C<#> appended to the tag name. Other
|
5907
5922
|
formatting options (eg. B<-d>) have no effect on the sorted values. Note
|
5908
|
-
that the B<-fileOrder> option can
|
5909
|
-
involves an additional processing pass of
|
5910
|
-
reduced by specifying a I<NUM>
|
5911
|
-
|
5912
|
-
|
5913
|
-
|
5914
|
-
|
5915
|
-
specified.
|
5923
|
+
that the B<-fileOrder> option can incur large performance penalty since it
|
5924
|
+
involves an additional initial processing pass of all files, but this impact
|
5925
|
+
may be reduced by specifying a I<NUM> to effectively set the B<-fast> level
|
5926
|
+
for the initial pass. For example, B<-fileOrder4> may be used if I<TAG> is
|
5927
|
+
a pseudo System tag. If multiple B<-fileOrder> options are used, the
|
5928
|
+
extraction is done at the lowest B<-fast> level. Note that files are sorted
|
5929
|
+
across directory boundaries if multiple input directories are specified.
|
5916
5930
|
|
5917
5931
|
=item B<-i> I<DIR> (B<-ignore>)
|
5918
5932
|
|
@@ -5977,10 +5991,11 @@ also specified on the command line. The alternative is to use the
|
|
5977
5991
|
C<$GROUP:all> syntax. (eg. Use C<$exif:all> instead of C<$exif> in I<EXPR>
|
5978
5992
|
to test for the existence of EXIF tags.)
|
5979
5993
|
|
5980
|
-
3) Tags in the string are interpolated
|
5994
|
+
3) Tags in the string are interpolated in a similar way to B<-p> before the
|
5981
5995
|
expression is evaluated. In this interpolation, C<$/> is converted to a
|
5982
|
-
newline and C<$$> represents a single C<$> symbol
|
5983
|
-
used, require a double C
|
5996
|
+
newline and C<$$> represents a single C<$> symbol. So Perl variables, if
|
5997
|
+
used, require a double C<$>, and regular expressions ending in C<$/> must
|
5998
|
+
use C<$$/> instead.
|
5984
5999
|
|
5985
6000
|
4) The condition may only test tags from the file being processed. To
|
5986
6001
|
process one file based on tags from another, two steps are required. For
|
@@ -5998,6 +6013,9 @@ the values of duplicate tags are accessible only by specifying a group name
|
|
5998
6013
|
command when B<-execute> was used, and may be used like any other tag in the
|
5999
6014
|
condition (ie. "$OK").
|
6000
6015
|
|
6016
|
+
7) The API RequestTags option is automatically set for all tags used in the
|
6017
|
+
B<-if> condition.
|
6018
|
+
|
6001
6019
|
=item B<-m> (B<-ignoreMinorErrors>)
|
6002
6020
|
|
6003
6021
|
Ignore minor errors and warnings. This enables writing to files with minor
|
@@ -6243,12 +6261,13 @@ are some examples:
|
|
6243
6261
|
|
6244
6262
|
When combined with B<-listx>, the B<-s> option shortens the output by
|
6245
6263
|
omitting the descriptions and values (as in the last example above), and
|
6246
|
-
B<-f> adds
|
6247
|
-
comma-separated list of the following possible values:
|
6248
|
-
Mandatory, Permanent, Protected, Unknown and Unsafe
|
6249
|
-
documentation|Image::ExifTool::TagNames>). For XMP List
|
6250
|
-
(Alt, Bag or Seq) is added to the flags, and flattened
|
6251
|
-
indicated by a Flattened flag
|
6264
|
+
B<-f> adds 'flags' and 'struct' attributes if applicable. The flags are
|
6265
|
+
formatted as a comma-separated list of the following possible values:
|
6266
|
+
Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe
|
6267
|
+
(see the L<Tag Name documentation|Image::ExifTool::TagNames>). For XMP List
|
6268
|
+
tags, the list type (Alt, Bag or Seq) is added to the flags, and flattened
|
6269
|
+
structure tags are indicated by a Flattened flag with 'struct' giving the ID
|
6270
|
+
of the parent structure.
|
6252
6271
|
|
6253
6272
|
Note that none of the B<-list> options require an input I<FILE>.
|
6254
6273
|
|
@@ -7227,7 +7246,7 @@ Combine multiple track logs and geotag an entire directory tree of images.
|
|
7227
7246
|
|
7228
7247
|
Read all track logs from the C<tracks> directory.
|
7229
7248
|
|
7230
|
-
=item exiftool -p gpx.fmt
|
7249
|
+
=item exiftool -p gpx.fmt dir > out.gpx
|
7231
7250
|
|
7232
7251
|
Generate a GPX track log from all images in directory C<dir>. This example
|
7233
7252
|
uses the C<gpx.fmt> file included in the full ExifTool distribution package
|
data/bin/fmt_files/gpx.fmt
CHANGED
@@ -16,6 +16,9 @@
|
|
16
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
|
+
# 4) Coordinates are written at full resolution. To change this,
|
20
|
+
# remove the "#" from the GPSLatitude/Longitude tag names below
|
21
|
+
# and use the -c option to set the desired precision.
|
19
22
|
#------------------------------------------------------------------------------
|
20
23
|
#[HEAD]<?xml version="1.0" encoding="utf-8"?>
|
21
24
|
#[HEAD]<gpx version="1.0"
|
data/bin/fmt_files/gpx_wpt.fmt
CHANGED
@@ -17,6 +17,9 @@
|
|
17
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
|
+
# 4) Coordinates are written at full resolution. To change this,
|
21
|
+
# remove the "#" from the GPSLatitude/Longitude tag names below
|
22
|
+
# and use the -c option to set the desired precision.
|
20
23
|
#------------------------------------------------------------------------------
|
21
24
|
#[HEAD]<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
22
25
|
#[HEAD]<gpx version="1.1"
|
@@ -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.07';
|
19
19
|
|
20
20
|
# Apple iPhone metadata (ref PH)
|
21
21
|
%Image::ExifTool::Apple::Main = (
|
@@ -66,12 +66,21 @@ $VERSION = '1.05';
|
|
66
66
|
Writable => 'string',
|
67
67
|
Notes => 'unique ID for all images in a burst',
|
68
68
|
},
|
69
|
-
#
|
69
|
+
0x000c => { # ref forum13710 (Neal Krawetz)
|
70
|
+
Name => 'FocusDistanceRange',
|
71
|
+
Writable => 'rational64s',
|
72
|
+
Count => 2,
|
73
|
+
PrintConv => q{
|
74
|
+
my @a = split ' ', $val;
|
75
|
+
sprintf('%.2f - %.2f m', $a[0] <= $a[1] ? @a : reverse @a);
|
76
|
+
},
|
77
|
+
PrintConvInv => '$val =~ s/ - //; $val =~ s/ ?m$//; $val',
|
78
|
+
},
|
70
79
|
# 0x000d - int32s: 0,1,6,20,24,32,40
|
71
80
|
# 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
|
72
81
|
# 0x000f - int32s: 2,3
|
73
82
|
# 0x0010 - int32s: 1
|
74
|
-
0x0011 => {
|
83
|
+
0x0011 => { # (if defined, there is a live photo associated with the video, #forum13565)
|
75
84
|
Name => 'MediaGroupUUID', #NealKrawetz private communication
|
76
85
|
# (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
|
77
86
|
Writable => 'string',
|
@@ -82,6 +91,10 @@ $VERSION = '1.05';
|
|
82
91
|
Writable => 'string',
|
83
92
|
},
|
84
93
|
# 0x0016 - string[29]: "AXZ6pMTOh2L+acSh4Kg630XCScoO\0"
|
94
|
+
0x0017 => { #forum13565 (only valid if MediaGroupUUID exists)
|
95
|
+
Name => 'LivePhotoVideoIndex',
|
96
|
+
Notes => 'divide by RunTimeScale to get time in seconds',
|
97
|
+
},
|
85
98
|
# 0x0017 - int32s: 0,8192
|
86
99
|
# 0x0019 - int32s: 0,2,128
|
87
100
|
# 0x001a - string[6]: "q825s\0"
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
35
35
|
use Image::ExifTool::Validate;
|
36
36
|
use Image::ExifTool::MacOS;
|
37
37
|
|
38
|
-
$VERSION = '3.
|
38
|
+
$VERSION = '3.50';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -501,11 +501,13 @@ been decoded. Use the L<Unknown|../ExifTool.html#Unknown> (-u) option to extrac
|
|
501
501
|
},
|
502
502
|
GeoTiff => q{
|
503
503
|
ExifTool extracts the following tags from GeoTIFF images. See
|
504
|
-
L<http://www.remotesensing.org/geotiff/spec/geotiffhome.html>
|
505
|
-
complete GeoTIFF specification. Also included in the table below
|
506
|
-
ChartTIFF tags (see
|
507
|
-
|
508
|
-
|
504
|
+
L<https://web.archive.org/web/20070820121549/http://www.remotesensing.org/geotiff/spec/geotiffhome.html>
|
505
|
+
for the complete GeoTIFF specification. Also included in the table below
|
506
|
+
are ChartTIFF tags (see
|
507
|
+
L<https://web.archive.org/web/20020828193928/http://www.charttiff.com/whitepapers.shtml>).
|
508
|
+
GeoTIFF tags are not writable individually, but they may be copied en mass
|
509
|
+
via the block tags GeoTiffDirectory, GeoTiffDoubleParams and
|
510
|
+
GeoTiffAsciiParams.
|
509
511
|
},
|
510
512
|
JFIF => q{
|
511
513
|
The following information is extracted from the JPEG JFIF header. See
|
@@ -1289,16 +1291,19 @@ TagID: foreach $tagID (@keys) {
|
|
1289
1291
|
$printConv = shift @printConvList;
|
1290
1292
|
$index = shift @indexList;
|
1291
1293
|
}
|
1292
|
-
|
1294
|
+
# look inside scalar PrintConv for a bit/byte conversion
|
1295
|
+
# (see Photoshop:PrintFlags for use of "$byte" decoding)
|
1296
|
+
} elsif ($printConv and $printConv =~ /DecodeBits\(\$(val|byte),\s*(\\\%[\w:]+|\{.*\})\s*\)/s) {
|
1297
|
+
my $type = $1 eq 'byte' ? 'Byte' : 'Bit';
|
1293
1298
|
$$self{Model} = ''; # needed for Nikon ShootingMode
|
1294
|
-
my $bits = eval $
|
1299
|
+
my $bits = eval $2;
|
1295
1300
|
delete $$self{Model};
|
1296
1301
|
if ($@) {
|
1297
1302
|
warn $@;
|
1298
1303
|
} else {
|
1299
1304
|
my @pk = sort { NumbersFirst($a,$b) } keys %$bits;
|
1300
1305
|
foreach (@pk) {
|
1301
|
-
push @values, "
|
1306
|
+
push @values, "$type $_ = " . $$bits{$_};
|
1302
1307
|
}
|
1303
1308
|
}
|
1304
1309
|
}
|
@@ -1324,9 +1329,12 @@ TagID: foreach $tagID (@keys) {
|
|
1324
1329
|
if ($writable) {
|
1325
1330
|
foreach ('PrintConv','ValueConv') {
|
1326
1331
|
next unless $$tagInfo{$_};
|
1327
|
-
next if $$tagInfo{$_ . 'Inv'};
|
1328
|
-
|
1329
|
-
|
1332
|
+
next if defined $$tagInfo{$_ . 'Inv'};
|
1333
|
+
# (undefined inverse conversion overrides hash lookup)
|
1334
|
+
unless (exists $$tagInfo{$_ . 'Inv'}) {
|
1335
|
+
next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/;
|
1336
|
+
next if $$tagInfo{WriteAlso};
|
1337
|
+
}
|
1330
1338
|
if ($_ eq 'ValueConv') {
|
1331
1339
|
undef $writable;
|
1332
1340
|
} else {
|
@@ -2570,6 +2578,9 @@ sub WriteTagNames($$)
|
|
2570
2578
|
$tip = '';
|
2571
2579
|
# use copyright symbol in QuickTime UserData tags
|
2572
2580
|
$tagIDstr =~ s/^"\\xa9/"©/;
|
2581
|
+
# escape necessary characters in html
|
2582
|
+
$tagIDstr =~ s/>/>/g;
|
2583
|
+
$tagIDstr =~ s/</</g;
|
2573
2584
|
}
|
2574
2585
|
# add tooltip for special writable attributes
|
2575
2586
|
my $wtip = '';
|