exiftool_vendored 12.42.0 → 12.52.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 +226 -6
- data/bin/MANIFEST +14 -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 +116 -97
- 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 +66 -37
- data/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- data/bin/lib/Image/ExifTool/Casio.pm +3 -3
- data/bin/lib/Image/ExifTool/DJI.pm +2 -1
- 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 +17 -12
- data/bin/lib/Image/ExifTool/FLAC.pm +17 -3
- data/bin/lib/Image/ExifTool/FLIR.pm +9 -7
- 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 +31 -5
- data/bin/lib/Image/ExifTool/Geotag.pm +36 -8
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -2
- data/bin/lib/Image/ExifTool/ICO.pm +143 -0
- data/bin/lib/Image/ExifTool/ID3.pm +6 -6
- data/bin/lib/Image/ExifTool/IPTC.pm +5 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -0
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +24 -3
- data/bin/lib/Image/ExifTool/LNK.pm +5 -2
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +6015 -759
- data/bin/lib/Image/ExifTool/Lang/sk.pm +1927 -0
- 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 +3 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +272 -48
- data/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +746 -382
- data/bin/lib/Image/ExifTool/NikonCustom.pm +139 -106
- data/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
- data/bin/lib/Image/ExifTool/Olympus.pm +6 -4
- data/bin/lib/Image/ExifTool/PNG.pm +8 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +21 -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 +7 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +29 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +166 -13
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +161 -22
- data/bin/lib/Image/ExifTool/README +15 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +106 -9
- data/bin/lib/Image/ExifTool/Samsung.pm +2 -2
- 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 +75 -47
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +13 -6
- data/bin/lib/Image/ExifTool/TagLookup.pm +4791 -4519
- data/bin/lib/Image/ExifTool/TagNames.pod +2056 -1446
- 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/WriteQuickTime.pl +12 -7
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- data/bin/lib/Image/ExifTool/WriteXMP.pl +15 -1
- data/bin/lib/Image/ExifTool/Writer.pl +46 -18
- data/bin/lib/Image/ExifTool/XMP.pm +78 -59
- data/bin/lib/Image/ExifTool/XMP2.pl +19 -4
- data/bin/lib/Image/ExifTool/ZIP.pm +19 -7
- data/bin/lib/Image/ExifTool.pm +146 -38
- 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 +10 -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.52';
|
|
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;
|
|
@@ -2347,7 +2351,8 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2347
2351
|
$group = $et->GetGroup($tag, $showGroup);
|
|
2348
2352
|
# look ahead to see if this tag may suppress a priority tag in
|
|
2349
2353
|
# the same group, and if so suppress this tag instead
|
|
2350
|
-
|
|
2354
|
+
# (note that the tag key may look like "TAG #(1)" when the "#" feature is used)
|
|
2355
|
+
next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
|
|
2351
2356
|
$group eq $et->GetGroup($1, $showGroup);
|
|
2352
2357
|
$group = 'Unknown' if not $group and ($xml or $json or $csv);
|
|
2353
2358
|
if ($fp and not ($allGroup or $csv)) {
|
|
@@ -2372,7 +2377,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2372
2377
|
}
|
|
2373
2378
|
} elsif ($noDups) {
|
|
2374
2379
|
# don't allow duplicates, but avoid suppressing the priority tag
|
|
2375
|
-
next if $tag =~ /^(.*?)
|
|
2380
|
+
next if $tag =~ /^(.*?) ?\(/ and defined $$info{$1};
|
|
2376
2381
|
}
|
|
2377
2382
|
|
|
2378
2383
|
++$lineCount; # we are printing something meaningful
|
|
@@ -3254,7 +3259,7 @@ sub EncodeXML($)
|
|
|
3254
3259
|
{
|
|
3255
3260
|
my $strPt = shift;
|
|
3256
3261
|
if ($$strPt =~ /[\0-\x08\x0b\x0c\x0e-\x1f]/ or
|
|
3257
|
-
(not $altEnc and Image::ExifTool::
|
|
3262
|
+
(not $altEnc and Image::ExifTool::IsUTF8($strPt) < 0))
|
|
3258
3263
|
{
|
|
3259
3264
|
# encode binary data and non-UTF8 with special characters as base64
|
|
3260
3265
|
$$strPt = Image::ExifTool::XMP::EncodeBase64($$strPt);
|
|
@@ -3318,7 +3323,7 @@ sub EscapeJSON($;$)
|
|
|
3318
3323
|
return $str if $str =~ /^-?(\d|[1-9]\d{1,14})(\.\d{1,16})?(e[-+]?\d{1,3})?$/i;
|
|
3319
3324
|
}
|
|
3320
3325
|
# encode JSON string in base64 if necessary
|
|
3321
|
-
if ($json < 2 and defined $binaryOutput and Image::ExifTool::
|
|
3326
|
+
if ($json < 2 and defined $binaryOutput and Image::ExifTool::IsUTF8(\$str) < 0) {
|
|
3322
3327
|
return '"base64:' . Image::ExifTool::XMP::EncodeBase64($str, 1) . '"';
|
|
3323
3328
|
}
|
|
3324
3329
|
# escape special characters
|
|
@@ -3394,7 +3399,7 @@ sub FormatCSV($)
|
|
|
3394
3399
|
my $val = shift;
|
|
3395
3400
|
# check for valid encoding if the Charset option was used
|
|
3396
3401
|
if ($setCharset and ($val =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xff]/ or
|
|
3397
|
-
($setCharset eq 'UTF8' and Image::ExifTool::
|
|
3402
|
+
($setCharset eq 'UTF8' and Image::ExifTool::IsUTF8(\$val) < 0)))
|
|
3398
3403
|
{
|
|
3399
3404
|
$val = 'base64:' . Image::ExifTool::XMP::EncodeBase64($val, 1);
|
|
3400
3405
|
}
|
|
@@ -3481,7 +3486,7 @@ sub ConvertBinary($)
|
|
|
3481
3486
|
$obj = $$obj;
|
|
3482
3487
|
# encode in base64 if necessary (0xf7 allows for up to 21-bit UTF-8 code space)
|
|
3483
3488
|
if ($json == 1 and ($obj =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xf7]/ or
|
|
3484
|
-
Image::ExifTool::
|
|
3489
|
+
Image::ExifTool::IsUTF8(\$obj) < 0))
|
|
3485
3490
|
{
|
|
3486
3491
|
$obj = 'base64:' . Image::ExifTool::XMP::EncodeBase64($obj, 1);
|
|
3487
3492
|
}
|
|
@@ -3615,8 +3620,7 @@ sub CheckUTF8($$)
|
|
|
3615
3620
|
my ($file, $enc) = @_;
|
|
3616
3621
|
my $isUTF8 = 0;
|
|
3617
3622
|
if ($file =~ /[\x80-\xff]/) {
|
|
3618
|
-
|
|
3619
|
-
$isUTF8 = Image::ExifTool::XMP::IsUTF8(\$file);
|
|
3623
|
+
$isUTF8 = Image::ExifTool::IsUTF8(\$file);
|
|
3620
3624
|
if ($isUTF8 < 0) {
|
|
3621
3625
|
if ($enc) {
|
|
3622
3626
|
Warn("Invalid filename encoding for $file\n");
|
|
@@ -4529,48 +4533,48 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4529
4533
|
|
|
4530
4534
|
File Types
|
|
4531
4535
|
------------+-------------+-------------+-------------+------------
|
|
4532
|
-
360 r/w |
|
|
4533
|
-
3FR r |
|
|
4534
|
-
3G2 r/w |
|
|
4535
|
-
3GP r/w |
|
|
4536
|
-
A r |
|
|
4537
|
-
AA r |
|
|
4538
|
-
AAE r |
|
|
4539
|
-
AAX r/w |
|
|
4540
|
-
ACR r |
|
|
4541
|
-
AFM r |
|
|
4542
|
-
AI r/w |
|
|
4543
|
-
AIFF r |
|
|
4544
|
-
APE r |
|
|
4545
|
-
ARQ r/w |
|
|
4546
|
-
ARW r/w |
|
|
4547
|
-
ASF r |
|
|
4548
|
-
AVI r |
|
|
4549
|
-
AVIF r/w |
|
|
4550
|
-
AZW r |
|
|
4551
|
-
BMP r |
|
|
4552
|
-
BPG r |
|
|
4553
|
-
BTF r |
|
|
4554
|
-
CHM r |
|
|
4555
|
-
COS r |
|
|
4556
|
-
CR2 r/w |
|
|
4557
|
-
CR3 r/w |
|
|
4558
|
-
CRM r/w |
|
|
4559
|
-
CRW r/w |
|
|
4560
|
-
CS1 r/w |
|
|
4561
|
-
CSV r |
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
4567
|
-
|
|
4568
|
-
|
|
4569
|
-
|
|
4570
|
-
|
|
4571
|
-
|
|
4572
|
-
|
|
4573
|
-
|
|
4536
|
+
360 r/w | DPX r | ITC r | NRW r/w | RAM r
|
|
4537
|
+
3FR r | DR4 r/w/c | J2C r | NUMBERS r | RAR r
|
|
4538
|
+
3G2 r/w | DSS r | JNG r/w | O r | RAW r/w
|
|
4539
|
+
3GP r/w | DV r | JP2 r/w | ODP r | RIFF r
|
|
4540
|
+
A r | DVB r/w | JPEG r/w | ODS r | RSRC r
|
|
4541
|
+
AA r | DVR-MS r | JSON r | ODT r | RTF r
|
|
4542
|
+
AAE r | DYLIB r | JXL r | OFR r | RW2 r/w
|
|
4543
|
+
AAX r/w | EIP r | K25 r | OGG r | RWL r/w
|
|
4544
|
+
ACR r | EPS r/w | KDC r | OGV r | RWZ r
|
|
4545
|
+
AFM r | EPUB r | KEY r | ONP r | RM r
|
|
4546
|
+
AI r/w | ERF r/w | LA r | OPUS r | SEQ r
|
|
4547
|
+
AIFF r | EXE r | LFP r | ORF r/w | SKETCH r
|
|
4548
|
+
APE r | EXIF r/w/c | LIF r | ORI r/w | SO r
|
|
4549
|
+
ARQ r/w | EXR r | LNK r | OTF r | SR2 r/w
|
|
4550
|
+
ARW r/w | EXV r/w/c | LRV r/w | PAC r | SRF r
|
|
4551
|
+
ASF r | F4A/V r/w | M2TS r | PAGES r | SRW r/w
|
|
4552
|
+
AVI r | FFF r/w | M4A/V r/w | PBM r/w | SVG r
|
|
4553
|
+
AVIF r/w | FITS r | MACOS r | PCD r | SWF r
|
|
4554
|
+
AZW r | FLA r | MAX r | PCX r | THM r/w
|
|
4555
|
+
BMP r | FLAC r | MEF r/w | PDB r | TIFF r/w
|
|
4556
|
+
BPG r | FLIF r/w | MIE r/w/c | PDF r/w | TORRENT r
|
|
4557
|
+
BTF r | FLV r | MIFF r | PEF r/w | TTC r
|
|
4558
|
+
CHM r | FPF r | MKA r | PFA r | TTF r
|
|
4559
|
+
COS r | FPX r | MKS r | PFB r | TXT r
|
|
4560
|
+
CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
|
|
4561
|
+
CR3 r/w | GPR r/w | MNG r/w | PGF r | VRD r/w/c
|
|
4562
|
+
CRM r/w | GZ r | MOBI r | PGM r/w | VSD r
|
|
4563
|
+
CRW r/w | HDP r/w | MODD r | PLIST r | WAV r
|
|
4564
|
+
CS1 r/w | HDR r | MOI r | PICT r | WDP r/w
|
|
4565
|
+
CSV r | HEIC r/w | MOS r/w | PMP r | WEBP r/w
|
|
4566
|
+
CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBM r
|
|
4567
|
+
CZI r | HTML r | MP3 r | PPM r/w | WMA r
|
|
4568
|
+
DCM r | ICC r/w/c | MP4 r/w | PPT r | WMV r
|
|
4569
|
+
DCP r/w | ICO r | MPC r | PPTX r | WTV r
|
|
4570
|
+
DCR r | ICS r | MPG r | PS r/w | WV r
|
|
4571
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | X3F r/w
|
|
4572
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | XCF r
|
|
4573
|
+
DJVU r | IND r/w | MRC r | PSP r | XLS r
|
|
4574
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
|
|
4575
|
+
DNG r/w | INSV r | MXF r | R3D r | XMP r/w/c
|
|
4576
|
+
DOC r | INX r | NEF r/w | RA r | ZIP r
|
|
4577
|
+
DOCX r | ISO r | NKSC r/w | RAF r/w |
|
|
4574
4578
|
|
|
4575
4579
|
Meta Information
|
|
4576
4580
|
----------------------+----------------------+---------------------
|
|
@@ -4990,16 +4994,17 @@ B<-struct> option for details.
|
|
|
4990
4994
|
8) With the redirection feature, copying a tag directly (ie.
|
|
4991
4995
|
E<quot>'-I<DSTTAG>E<lt>I<SRCTAG>'E<quot>) is not the same as interpolating
|
|
4992
4996
|
its value inside a string (ie. E<quot>'-I<DSTTAG>E<lt>$I<SRCTAG>'E<quot>)
|
|
4993
|
-
for list-type tags,
|
|
4994
|
-
|
|
4995
|
-
|
|
4996
|
-
destination tag (as if they were
|
|
4997
|
-
interpolated inside a string, list
|
|
4998
|
-
|
|
4999
|
-
not allowed. Also, UserParam
|
|
5000
|
-
in a string. Another
|
|
5001
|
-
|
|
5002
|
-
isn't when copying the
|
|
4997
|
+
for source tags which are list-type tags,
|
|
4998
|
+
L<shortcut tags|Image::ExifTool::Shortcuts>, tag names containing wildcards,
|
|
4999
|
+
or UserParam variables. When copying directly, the values of each matching
|
|
5000
|
+
source tag are copied individually to the destination tag (as if they were
|
|
5001
|
+
separate assignments). However, when interpolated inside a string, list
|
|
5002
|
+
items and the values of shortcut tags are concatenated (with a separator set
|
|
5003
|
+
by the B<-sep> option), and wildcards are not allowed. Also, UserParam
|
|
5004
|
+
variables are available only when interpolated in a string. Another
|
|
5005
|
+
difference is that a minor warning is generated if a tag doesn't exist when
|
|
5006
|
+
interpolating its value in a string (with C<$>), but isn't when copying the
|
|
5007
|
+
tag directly.
|
|
5003
5008
|
|
|
5004
5009
|
Finally, the behaviour is different when a destination tag or group of
|
|
5005
5010
|
C<All> is used. When copying directly, a destination group and/or tag name
|
|
@@ -5058,8 +5063,8 @@ are in the default output. By default, list items are separated by a
|
|
|
5058
5063
|
newline when extracted with the B<-b> option, but this may be changed (see
|
|
5059
5064
|
the B<-sep> option for details). May be combined with B<-j>, B<-php> or
|
|
5060
5065
|
B<-X> to extract binary data in JSON, PHP or XML format, but note that
|
|
5061
|
-
"Unsafe" tags are not extracted as binary unless they are specified
|
|
5062
|
-
the API RequestAll option is set to 3 or higher.
|
|
5066
|
+
"Unsafe" tags are not extracted as binary unless they are specified
|
|
5067
|
+
explicitly or the API RequestAll option is set to 3 or higher.
|
|
5063
5068
|
|
|
5064
5069
|
With a leading double dash (B<--b> or B<--binary>), tags which contain
|
|
5065
5070
|
binary data are suppressed in the output when reading.
|
|
@@ -5224,7 +5229,8 @@ option has no effect on date-only or time-only tags and ignores timezone
|
|
|
5224
5229
|
information if present. ExifTool adds a C<%f> format code to represent
|
|
5225
5230
|
fractional seconds, and supports an optional width to specify the number of
|
|
5226
5231
|
digits after the decimal point (eg. C<%3f> would give something like
|
|
5227
|
-
C<.437>)
|
|
5232
|
+
C<.437>), and a minus sign to drop the decimal point (eg. C<%-3f> would give
|
|
5233
|
+
C<437>). Only one B<-d> option may be used per command. Requires
|
|
5228
5234
|
POSIX::strptime or Time::Piece for the inversion conversion when writing.
|
|
5229
5235
|
|
|
5230
5236
|
=item B<-D> (B<-decimal>)
|
|
@@ -5317,7 +5323,9 @@ ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
|
|
|
5317
5323
|
to include tag table information (see B<-t> for details). The JSON output
|
|
5318
5324
|
is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
|
|
5319
5325
|
UTF-8 validation is disabled if a character set other than UTF-8 is
|
|
5320
|
-
specified.
|
|
5326
|
+
specified. Note that ExifTool quotes JSON values only if they don't look
|
|
5327
|
+
like numbers (regardless of the original storage format or the relevant
|
|
5328
|
+
metadata specification).
|
|
5321
5329
|
|
|
5322
5330
|
If I<JSONFILE> is specified, the file is imported and the tag definitions
|
|
5323
5331
|
from the file are used to set tag values on a per-file basis. The special
|
|
@@ -5361,7 +5369,7 @@ been implemented. May also be combined with B<-listx> to output
|
|
|
5361
5369
|
descriptions in one language only.
|
|
5362
5370
|
|
|
5363
5371
|
By default, ExifTool uses UTF-8 encoding for special characters, but the
|
|
5364
|
-
|
|
5372
|
+
B<-L> or B<-charset> option may be used to invoke other encodings. Note
|
|
5365
5373
|
that ExifTool uses Unicode::LineBreak if available to help preserve the
|
|
5366
5374
|
column alignment of the plain text output for languages with a
|
|
5367
5375
|
variable-width character set.
|
|
@@ -5467,7 +5475,7 @@ with this command:
|
|
|
5467
5475
|
|
|
5468
5476
|
produces output like this:
|
|
5469
5477
|
|
|
5470
|
-
-- Generated by ExifTool 12.
|
|
5478
|
+
-- Generated by ExifTool 12.52 --
|
|
5471
5479
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5472
5480
|
(f/5.6, 1/60s, ISO 100)
|
|
5473
5481
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5475,8 +5483,8 @@ produces output like this:
|
|
|
5475
5483
|
-- end --
|
|
5476
5484
|
|
|
5477
5485
|
The values of List-type tags with multiple items and Shortcut tags
|
|
5478
|
-
representing multiple tags are joined according the
|
|
5479
|
-
|
|
5486
|
+
representing multiple tags are joined according the B<-sep> option setting
|
|
5487
|
+
when interpolated in the string.
|
|
5480
5488
|
|
|
5481
5489
|
When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents
|
|
5482
5490
|
are effectively processed as separate input files.
|
|
@@ -5489,7 +5497,12 @@ warnings and leave the missing values empty. Alternatively, B<-q -q> may be
|
|
|
5489
5497
|
used to simply suppress the warning messages.
|
|
5490
5498
|
|
|
5491
5499
|
The L</Advanced formatting feature> may be used to modify the values of
|
|
5492
|
-
individual tags
|
|
5500
|
+
individual tags within the B<-p> option string.
|
|
5501
|
+
|
|
5502
|
+
Note that the API RequestTags option is automatically set for all tags used
|
|
5503
|
+
in the I<FMTFILE> or I<STR>. This allows all other tags to be ignored using
|
|
5504
|
+
B<-API IgnoreTags=all>, resulting in reduced memory usage and increased
|
|
5505
|
+
speed.
|
|
5493
5506
|
|
|
5494
5507
|
=item B<-php>
|
|
5495
5508
|
|
|
@@ -5881,12 +5894,14 @@ audio/video data in WAV/AVI files to search for additional metadata. These
|
|
|
5881
5894
|
speed benefits are small when reading images directly from disk, but can be
|
|
5882
5895
|
substantial if piping images through a network connection. For more
|
|
5883
5896
|
substantial speed benefits, B<-fast2> also causes exiftool to avoid
|
|
5884
|
-
extracting any EXIF MakerNote information
|
|
5885
|
-
|
|
5886
|
-
|
|
5887
|
-
|
|
5888
|
-
|
|
5889
|
-
|
|
5897
|
+
extracting any EXIF MakerNote information, and to stop processing at the
|
|
5898
|
+
IDAT chunk of PNG images and the mdat atom of QuickTime-format files (but
|
|
5899
|
+
note that some files may store metadata after this). B<-fast3> avoids
|
|
5900
|
+
extracting metadata from the file, and returns only pseudo System tags, but
|
|
5901
|
+
still reads the file header to obtain an educated guess at FileType.
|
|
5902
|
+
B<-fast4> doesn't even read the file header, and returns only System tags
|
|
5903
|
+
and a FileType based on the file extension. B<-fast5> also disables
|
|
5904
|
+
generation of the Composite tags (like B<-e>). Has no effect when writing.
|
|
5890
5905
|
|
|
5891
5906
|
Note that a separate B<-fast> setting may be used for evaluation of a B<-if>
|
|
5892
5907
|
condition, or when ordering files with the B<-fileOrder> option. See the
|
|
@@ -5906,14 +5921,13 @@ order may be reversed by prefixing the tag name with a C<-> (eg.
|
|
|
5906
5921
|
C<-fileOrder -createdate>). Print conversion of the sorted values is
|
|
5907
5922
|
disabled with the B<-n> option, or a C<#> appended to the tag name. Other
|
|
5908
5923
|
formatting options (eg. B<-d>) have no effect on the sorted values. Note
|
|
5909
|
-
that the B<-fileOrder> option can
|
|
5910
|
-
involves an additional processing pass of
|
|
5911
|
-
reduced by specifying a I<NUM>
|
|
5912
|
-
|
|
5913
|
-
|
|
5914
|
-
|
|
5915
|
-
|
|
5916
|
-
specified.
|
|
5924
|
+
that the B<-fileOrder> option can incur large performance penalty since it
|
|
5925
|
+
involves an additional initial processing pass of all files, but this impact
|
|
5926
|
+
may be reduced by specifying a I<NUM> to effectively set the B<-fast> level
|
|
5927
|
+
for the initial pass. For example, B<-fileOrder4> may be used if I<TAG> is
|
|
5928
|
+
a pseudo System tag. If multiple B<-fileOrder> options are used, the
|
|
5929
|
+
extraction is done at the lowest B<-fast> level. Note that files are sorted
|
|
5930
|
+
across directory boundaries if multiple input directories are specified.
|
|
5917
5931
|
|
|
5918
5932
|
=item B<-i> I<DIR> (B<-ignore>)
|
|
5919
5933
|
|
|
@@ -5978,10 +5992,11 @@ also specified on the command line. The alternative is to use the
|
|
|
5978
5992
|
C<$GROUP:all> syntax. (eg. Use C<$exif:all> instead of C<$exif> in I<EXPR>
|
|
5979
5993
|
to test for the existence of EXIF tags.)
|
|
5980
5994
|
|
|
5981
|
-
3) Tags in the string are interpolated
|
|
5995
|
+
3) Tags in the string are interpolated in a similar way to B<-p> before the
|
|
5982
5996
|
expression is evaluated. In this interpolation, C<$/> is converted to a
|
|
5983
|
-
newline and C<$$> represents a single C<$> symbol
|
|
5984
|
-
used, require a double C
|
|
5997
|
+
newline and C<$$> represents a single C<$> symbol. So Perl variables, if
|
|
5998
|
+
used, require a double C<$>, and regular expressions ending in C<$/> must
|
|
5999
|
+
use C<$$/> instead.
|
|
5985
6000
|
|
|
5986
6001
|
4) The condition may only test tags from the file being processed. To
|
|
5987
6002
|
process one file based on tags from another, two steps are required. For
|
|
@@ -5999,6 +6014,9 @@ the values of duplicate tags are accessible only by specifying a group name
|
|
|
5999
6014
|
command when B<-execute> was used, and may be used like any other tag in the
|
|
6000
6015
|
condition (ie. "$OK").
|
|
6001
6016
|
|
|
6017
|
+
7) The API RequestTags option is automatically set for all tags used in the
|
|
6018
|
+
B<-if> condition.
|
|
6019
|
+
|
|
6002
6020
|
=item B<-m> (B<-ignoreMinorErrors>)
|
|
6003
6021
|
|
|
6004
6022
|
Ignore minor errors and warnings. This enables writing to files with minor
|
|
@@ -6244,12 +6262,13 @@ are some examples:
|
|
|
6244
6262
|
|
|
6245
6263
|
When combined with B<-listx>, the B<-s> option shortens the output by
|
|
6246
6264
|
omitting the descriptions and values (as in the last example above), and
|
|
6247
|
-
B<-f> adds
|
|
6248
|
-
comma-separated list of the following possible values:
|
|
6249
|
-
Mandatory, Permanent, Protected, Unknown and Unsafe
|
|
6250
|
-
documentation|Image::ExifTool::TagNames>). For XMP List
|
|
6251
|
-
(Alt, Bag or Seq) is added to the flags, and flattened
|
|
6252
|
-
indicated by a Flattened flag
|
|
6265
|
+
B<-f> adds 'flags' and 'struct' attributes if applicable. The flags are
|
|
6266
|
+
formatted as a comma-separated list of the following possible values:
|
|
6267
|
+
Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe
|
|
6268
|
+
(see the L<Tag Name documentation|Image::ExifTool::TagNames>). For XMP List
|
|
6269
|
+
tags, the list type (Alt, Bag or Seq) is added to the flags, and flattened
|
|
6270
|
+
structure tags are indicated by a Flattened flag with 'struct' giving the ID
|
|
6271
|
+
of the parent structure.
|
|
6253
6272
|
|
|
6254
6273
|
Note that none of the B<-list> options require an input I<FILE>.
|
|
6255
6274
|
|
|
@@ -7228,7 +7247,7 @@ Combine multiple track logs and geotag an entire directory tree of images.
|
|
|
7228
7247
|
|
|
7229
7248
|
Read all track logs from the C<tracks> directory.
|
|
7230
7249
|
|
|
7231
|
-
=item exiftool -p gpx.fmt
|
|
7250
|
+
=item exiftool -p gpx.fmt dir > out.gpx
|
|
7232
7251
|
|
|
7233
7252
|
Generate a GPX track log from all images in directory C<dir>. This example
|
|
7234
7253
|
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 = '';
|