exiftool-vendored.pl 12.44.0 → 12.49.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.
- package/bin/Changes +112 -3
- package/bin/MANIFEST +9 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +45 -44
- package/bin/config_files/acdsee.config +2 -1
- package/bin/config_files/frameCount.config +56 -0
- package/bin/config_files/tiff_version.config +1 -1
- package/bin/exiftool +85 -73
- package/bin/fmt_files/gpx.fmt +3 -0
- package/bin/fmt_files/gpx_wpt.fmt +3 -0
- package/bin/lib/Image/ExifTool/Apple.pm +6 -2
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +17 -9
- package/bin/lib/Image/ExifTool/Canon.pm +33 -15
- package/bin/lib/Image/ExifTool/CanonRaw.pm +8 -1
- package/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- package/bin/lib/Image/ExifTool/EXE.pm +9 -1
- package/bin/lib/Image/ExifTool/Exif.pm +11 -7
- package/bin/lib/Image/ExifTool/FLAC.pm +17 -3
- package/bin/lib/Image/ExifTool/FLIR.pm +4 -3
- package/bin/lib/Image/ExifTool/FlashPix.pm +4 -2
- package/bin/lib/Image/ExifTool/FujiFilm.pm +31 -5
- package/bin/lib/Image/ExifTool/GPS.pm +2 -2
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +3 -2
- package/bin/lib/Image/ExifTool/ICO.pm +141 -0
- package/bin/lib/Image/ExifTool/ID3.pm +6 -6
- package/bin/lib/Image/ExifTool/M2TS.pm +55 -8
- package/bin/lib/Image/ExifTool/MIE.pm +9 -3
- package/bin/lib/Image/ExifTool/MISB.pm +494 -0
- package/bin/lib/Image/ExifTool/MakerNotes.pm +3 -1
- package/bin/lib/Image/ExifTool/Matroska.pm +24 -16
- package/bin/lib/Image/ExifTool/Nikon.pm +39 -31
- package/bin/lib/Image/ExifTool/NikonSettings.pm +5 -3
- package/bin/lib/Image/ExifTool/Panasonic.pm +21 -4
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +25 -5
- package/bin/lib/Image/ExifTool/Photoshop.pm +29 -3
- package/bin/lib/Image/ExifTool/QuickTime.pm +113 -8
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +44 -6
- package/bin/lib/Image/ExifTool/README +1 -1
- package/bin/lib/Image/ExifTool/RIFF.pm +106 -9
- package/bin/lib/Image/ExifTool/Samsung.pm +2 -2
- package/bin/lib/Image/ExifTool/Sigma.pm +27 -1
- package/bin/lib/Image/ExifTool/SigmaRaw.pm +37 -13
- package/bin/lib/Image/ExifTool/Sony.pm +8 -3
- package/bin/lib/Image/ExifTool/TagLookup.pm +188 -7
- package/bin/lib/Image/ExifTool/TagNames.pod +3051 -2732
- package/bin/lib/Image/ExifTool/Text.pm +3 -4
- package/bin/lib/Image/ExifTool/Torrent.pm +2 -3
- package/bin/lib/Image/ExifTool/Validate.pm +3 -3
- package/bin/lib/Image/ExifTool/WriteCanonRaw.pl +7 -0
- package/bin/lib/Image/ExifTool/WriteExif.pl +100 -23
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- package/bin/lib/Image/ExifTool/WriteRIFF.pl +359 -0
- package/bin/lib/Image/ExifTool/Writer.pl +10 -3
- package/bin/lib/Image/ExifTool/XMP.pm +76 -58
- package/bin/lib/Image/ExifTool/XMP2.pl +11 -4
- package/bin/lib/Image/ExifTool.pm +75 -15
- package/bin/lib/Image/ExifTool.pod +61 -57
- package/bin/perl-Image-ExifTool.spec +43 -43
- package/bin/pp_build_exe.args +7 -4
- package/package.json +2 -2
package/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.49';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
BEGIN {
|
|
@@ -2307,7 +2307,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2307
2307
|
if (ref $val) {
|
|
2308
2308
|
# happens with -X, -j or -php when combined with -b:
|
|
2309
2309
|
if (defined $binaryOutput and not $binaryOutput and $$et{TAG_INFO}{$tag}{Protected}) {
|
|
2310
|
-
# avoid extracting
|
|
2310
|
+
# avoid extracting Unsafe binary tags (eg. data blocks) [insider information]
|
|
2311
2311
|
my $lcTag = lc $tag;
|
|
2312
2312
|
$lcTag =~ s/ .*//;
|
|
2313
2313
|
next unless $$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{RequestAll} || 0) > 2;
|
|
@@ -3254,7 +3254,7 @@ sub EncodeXML($)
|
|
|
3254
3254
|
{
|
|
3255
3255
|
my $strPt = shift;
|
|
3256
3256
|
if ($$strPt =~ /[\0-\x08\x0b\x0c\x0e-\x1f]/ or
|
|
3257
|
-
(not $altEnc and Image::ExifTool::
|
|
3257
|
+
(not $altEnc and Image::ExifTool::IsUTF8($strPt) < 0))
|
|
3258
3258
|
{
|
|
3259
3259
|
# encode binary data and non-UTF8 with special characters as base64
|
|
3260
3260
|
$$strPt = Image::ExifTool::XMP::EncodeBase64($$strPt);
|
|
@@ -3318,7 +3318,7 @@ sub EscapeJSON($;$)
|
|
|
3318
3318
|
return $str if $str =~ /^-?(\d|[1-9]\d{1,14})(\.\d{1,16})?(e[-+]?\d{1,3})?$/i;
|
|
3319
3319
|
}
|
|
3320
3320
|
# encode JSON string in base64 if necessary
|
|
3321
|
-
if ($json < 2 and defined $binaryOutput and Image::ExifTool::
|
|
3321
|
+
if ($json < 2 and defined $binaryOutput and Image::ExifTool::IsUTF8(\$str) < 0) {
|
|
3322
3322
|
return '"base64:' . Image::ExifTool::XMP::EncodeBase64($str, 1) . '"';
|
|
3323
3323
|
}
|
|
3324
3324
|
# escape special characters
|
|
@@ -3394,7 +3394,7 @@ sub FormatCSV($)
|
|
|
3394
3394
|
my $val = shift;
|
|
3395
3395
|
# check for valid encoding if the Charset option was used
|
|
3396
3396
|
if ($setCharset and ($val =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xff]/ or
|
|
3397
|
-
($setCharset eq 'UTF8' and Image::ExifTool::
|
|
3397
|
+
($setCharset eq 'UTF8' and Image::ExifTool::IsUTF8(\$val) < 0)))
|
|
3398
3398
|
{
|
|
3399
3399
|
$val = 'base64:' . Image::ExifTool::XMP::EncodeBase64($val, 1);
|
|
3400
3400
|
}
|
|
@@ -3481,7 +3481,7 @@ sub ConvertBinary($)
|
|
|
3481
3481
|
$obj = $$obj;
|
|
3482
3482
|
# encode in base64 if necessary (0xf7 allows for up to 21-bit UTF-8 code space)
|
|
3483
3483
|
if ($json == 1 and ($obj =~ /[^\x09\x0a\x0d\x20-\x7e\x80-\xf7]/ or
|
|
3484
|
-
Image::ExifTool::
|
|
3484
|
+
Image::ExifTool::IsUTF8(\$obj) < 0))
|
|
3485
3485
|
{
|
|
3486
3486
|
$obj = 'base64:' . Image::ExifTool::XMP::EncodeBase64($obj, 1);
|
|
3487
3487
|
}
|
|
@@ -3615,8 +3615,7 @@ sub CheckUTF8($$)
|
|
|
3615
3615
|
my ($file, $enc) = @_;
|
|
3616
3616
|
my $isUTF8 = 0;
|
|
3617
3617
|
if ($file =~ /[\x80-\xff]/) {
|
|
3618
|
-
|
|
3619
|
-
$isUTF8 = Image::ExifTool::XMP::IsUTF8(\$file);
|
|
3618
|
+
$isUTF8 = Image::ExifTool::IsUTF8(\$file);
|
|
3620
3619
|
if ($isUTF8 < 0) {
|
|
3621
3620
|
if ($enc) {
|
|
3622
3621
|
Warn("Invalid filename encoding for $file\n");
|
|
@@ -4529,48 +4528,48 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4529
4528
|
|
|
4530
4529
|
File Types
|
|
4531
4530
|
------------+-------------+-------------+-------------+------------
|
|
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
|
-
|
|
4531
|
+
360 r/w | DPX r | ITC r | NRW r/w | RAM r
|
|
4532
|
+
3FR r | DR4 r/w/c | J2C r | NUMBERS r | RAR r
|
|
4533
|
+
3G2 r/w | DSS r | JNG r/w | O r | RAW r/w
|
|
4534
|
+
3GP r/w | DV r | JP2 r/w | ODP r | RIFF r
|
|
4535
|
+
A r | DVB r/w | JPEG r/w | ODS r | RSRC r
|
|
4536
|
+
AA r | DVR-MS r | JSON r | ODT r | RTF r
|
|
4537
|
+
AAE r | DYLIB r | JXL r | OFR r | RW2 r/w
|
|
4538
|
+
AAX r/w | EIP r | K25 r | OGG r | RWL r/w
|
|
4539
|
+
ACR r | EPS r/w | KDC r | OGV r | RWZ r
|
|
4540
|
+
AFM r | EPUB r | KEY r | ONP r | RM r
|
|
4541
|
+
AI r/w | ERF r/w | LA r | OPUS r | SEQ r
|
|
4542
|
+
AIFF r | EXE r | LFP r | ORF r/w | SKETCH r
|
|
4543
|
+
APE r | EXIF r/w/c | LIF r | ORI r/w | SO r
|
|
4544
|
+
ARQ r/w | EXR r | LNK r | OTF r | SR2 r/w
|
|
4545
|
+
ARW r/w | EXV r/w/c | LRV r/w | PAC r | SRF r
|
|
4546
|
+
ASF r | F4A/V r/w | M2TS r | PAGES r | SRW r/w
|
|
4547
|
+
AVI r | FFF r/w | M4A/V r/w | PBM r/w | SVG r
|
|
4548
|
+
AVIF r/w | FITS r | MACOS r | PCD r | SWF r
|
|
4549
|
+
AZW r | FLA r | MAX r | PCX r | THM r/w
|
|
4550
|
+
BMP r | FLAC r | MEF r/w | PDB r | TIFF r/w
|
|
4551
|
+
BPG r | FLIF r/w | MIE r/w/c | PDF r/w | TORRENT r
|
|
4552
|
+
BTF r | FLV r | MIFF r | PEF r/w | TTC r
|
|
4553
|
+
CHM r | FPF r | MKA r | PFA r | TTF r
|
|
4554
|
+
COS r | FPX r | MKS r | PFB r | TXT r
|
|
4555
|
+
CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
|
|
4556
|
+
CR3 r/w | GPR r/w | MNG r/w | PGF r | VRD r/w/c
|
|
4557
|
+
CRM r/w | GZ r | MOBI r | PGM r/w | VSD r
|
|
4558
|
+
CRW r/w | HDP r/w | MODD r | PLIST r | WAV r
|
|
4559
|
+
CS1 r/w | HDR r | MOI r | PICT r | WDP r/w
|
|
4560
|
+
CSV r | HEIC r/w | MOS r/w | PMP r | WEBP r/w
|
|
4561
|
+
CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBM r
|
|
4562
|
+
CZI r | HTML r | MP3 r | PPM r/w | WMA r
|
|
4563
|
+
DCM r | ICC r/w/c | MP4 r/w | PPT r | WMV r
|
|
4564
|
+
DCP r/w | ICO r | MPC r | PPTX r | WTV r
|
|
4565
|
+
DCR r | ICS r | MPG r | PS r/w | WV r
|
|
4566
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | X3F r/w
|
|
4567
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | XCF r
|
|
4568
|
+
DJVU r | IND r/w | MRC r | PSP r | XLS r
|
|
4569
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLSX r
|
|
4570
|
+
DNG r/w | INSV r | MXF r | R3D r | XMP r/w/c
|
|
4571
|
+
DOC r | INX r | NEF r/w | RA r | ZIP r
|
|
4572
|
+
DOCX r | ISO r | NKSC r/w | RAF r/w |
|
|
4574
4573
|
|
|
4575
4574
|
Meta Information
|
|
4576
4575
|
----------------------+----------------------+---------------------
|
|
@@ -4990,16 +4989,17 @@ B<-struct> option for details.
|
|
|
4990
4989
|
8) With the redirection feature, copying a tag directly (ie.
|
|
4991
4990
|
E<quot>'-I<DSTTAG>E<lt>I<SRCTAG>'E<quot>) is not the same as interpolating
|
|
4992
4991
|
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
|
|
4992
|
+
for source tags which are list-type tags,
|
|
4993
|
+
L<shortcut tags|Image::ExifTool::Shortcuts>, tag names containing wildcards,
|
|
4994
|
+
or UserParam variables. When copying directly, the values of each matching
|
|
4995
|
+
source tag are copied individually to the destination tag (as if they were
|
|
4996
|
+
separate assignments). However, when interpolated inside a string, list
|
|
4997
|
+
items and the values of shortcut tags are concatenated (with a separator set
|
|
4998
|
+
by the B<-sep> option), and wildcards are not allowed. Also, UserParam
|
|
4999
|
+
variables are available only when interpolated in a string. Another
|
|
5000
|
+
difference is that a minor warning is generated if a tag doesn't exist when
|
|
5001
|
+
interpolating its value in a string (with C<$>), but isn't when copying the
|
|
5002
|
+
tag directly.
|
|
5003
5003
|
|
|
5004
5004
|
Finally, the behaviour is different when a destination tag or group of
|
|
5005
5005
|
C<All> is used. When copying directly, a destination group and/or tag name
|
|
@@ -5058,8 +5058,8 @@ are in the default output. By default, list items are separated by a
|
|
|
5058
5058
|
newline when extracted with the B<-b> option, but this may be changed (see
|
|
5059
5059
|
the B<-sep> option for details). May be combined with B<-j>, B<-php> or
|
|
5060
5060
|
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.
|
|
5061
|
+
"Unsafe" tags are not extracted as binary unless they are specified
|
|
5062
|
+
explicitly or the API RequestAll option is set to 3 or higher.
|
|
5063
5063
|
|
|
5064
5064
|
With a leading double dash (B<--b> or B<--binary>), tags which contain
|
|
5065
5065
|
binary data are suppressed in the output when reading.
|
|
@@ -5224,7 +5224,8 @@ option has no effect on date-only or time-only tags and ignores timezone
|
|
|
5224
5224
|
information if present. ExifTool adds a C<%f> format code to represent
|
|
5225
5225
|
fractional seconds, and supports an optional width to specify the number of
|
|
5226
5226
|
digits after the decimal point (eg. C<%3f> would give something like
|
|
5227
|
-
C<.437>)
|
|
5227
|
+
C<.437>), and a minus sign to drop the decimal point (eg. C<%-3f> would give
|
|
5228
|
+
C<437>). Only one B<-d> option may be used per command. Requires
|
|
5228
5229
|
POSIX::strptime or Time::Piece for the inversion conversion when writing.
|
|
5229
5230
|
|
|
5230
5231
|
=item B<-D> (B<-decimal>)
|
|
@@ -5317,7 +5318,9 @@ ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
|
|
|
5317
5318
|
to include tag table information (see B<-t> for details). The JSON output
|
|
5318
5319
|
is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
|
|
5319
5320
|
UTF-8 validation is disabled if a character set other than UTF-8 is
|
|
5320
|
-
specified.
|
|
5321
|
+
specified. Note that ExifTool quotes JSON values only if they don't look
|
|
5322
|
+
like numbers (regardless of the original storage format or the relevant
|
|
5323
|
+
metadata specification).
|
|
5321
5324
|
|
|
5322
5325
|
If I<JSONFILE> is specified, the file is imported and the tag definitions
|
|
5323
5326
|
from the file are used to set tag values on a per-file basis. The special
|
|
@@ -5361,7 +5364,7 @@ been implemented. May also be combined with B<-listx> to output
|
|
|
5361
5364
|
descriptions in one language only.
|
|
5362
5365
|
|
|
5363
5366
|
By default, ExifTool uses UTF-8 encoding for special characters, but the
|
|
5364
|
-
|
|
5367
|
+
B<-L> or B<-charset> option may be used to invoke other encodings. Note
|
|
5365
5368
|
that ExifTool uses Unicode::LineBreak if available to help preserve the
|
|
5366
5369
|
column alignment of the plain text output for languages with a
|
|
5367
5370
|
variable-width character set.
|
|
@@ -5467,7 +5470,7 @@ with this command:
|
|
|
5467
5470
|
|
|
5468
5471
|
produces output like this:
|
|
5469
5472
|
|
|
5470
|
-
-- Generated by ExifTool 12.
|
|
5473
|
+
-- Generated by ExifTool 12.49 --
|
|
5471
5474
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5472
5475
|
(f/5.6, 1/60s, ISO 100)
|
|
5473
5476
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5475,8 +5478,8 @@ produces output like this:
|
|
|
5475
5478
|
-- end --
|
|
5476
5479
|
|
|
5477
5480
|
The values of List-type tags with multiple items and Shortcut tags
|
|
5478
|
-
representing multiple tags are joined according the
|
|
5479
|
-
|
|
5481
|
+
representing multiple tags are joined according the B<-sep> option setting
|
|
5482
|
+
when interpolated in the string.
|
|
5480
5483
|
|
|
5481
5484
|
When B<-ee> (B<-extractEmbedded>) is combined with B<-p>, embedded documents
|
|
5482
5485
|
are effectively processed as separate input files.
|
|
@@ -5489,7 +5492,12 @@ warnings and leave the missing values empty. Alternatively, B<-q -q> may be
|
|
|
5489
5492
|
used to simply suppress the warning messages.
|
|
5490
5493
|
|
|
5491
5494
|
The L</Advanced formatting feature> may be used to modify the values of
|
|
5492
|
-
individual tags
|
|
5495
|
+
individual tags within the B<-p> option string.
|
|
5496
|
+
|
|
5497
|
+
Note that the API RequestTags option is automatically set for all tags used
|
|
5498
|
+
in the I<FMTFILE> or I<STR>. This allows all other tags to be ignored using
|
|
5499
|
+
B<-API IgnoreTags=all>, resulting in reduced memory usage and increased
|
|
5500
|
+
speed.
|
|
5493
5501
|
|
|
5494
5502
|
=item B<-php>
|
|
5495
5503
|
|
|
@@ -5978,10 +5986,11 @@ also specified on the command line. The alternative is to use the
|
|
|
5978
5986
|
C<$GROUP:all> syntax. (eg. Use C<$exif:all> instead of C<$exif> in I<EXPR>
|
|
5979
5987
|
to test for the existence of EXIF tags.)
|
|
5980
5988
|
|
|
5981
|
-
3) Tags in the string are interpolated
|
|
5989
|
+
3) Tags in the string are interpolated in a similar way to B<-p> before the
|
|
5982
5990
|
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
|
|
5991
|
+
newline and C<$$> represents a single C<$> symbol. So Perl variables, if
|
|
5992
|
+
used, require a double C<$>, and regular expressions ending in C<$/> must
|
|
5993
|
+
use C<$$/> instead.
|
|
5985
5994
|
|
|
5986
5995
|
4) The condition may only test tags from the file being processed. To
|
|
5987
5996
|
process one file based on tags from another, two steps are required. For
|
|
@@ -5999,6 +6008,9 @@ the values of duplicate tags are accessible only by specifying a group name
|
|
|
5999
6008
|
command when B<-execute> was used, and may be used like any other tag in the
|
|
6000
6009
|
condition (ie. "$OK").
|
|
6001
6010
|
|
|
6011
|
+
7) The API RequestTags option is automatically set for all tags used in the
|
|
6012
|
+
B<-if> condition.
|
|
6013
|
+
|
|
6002
6014
|
=item B<-m> (B<-ignoreMinorErrors>)
|
|
6003
6015
|
|
|
6004
6016
|
Ignore minor errors and warnings. This enables writing to files with minor
|
|
@@ -7228,7 +7240,7 @@ Combine multiple track logs and geotag an entire directory tree of images.
|
|
|
7228
7240
|
|
|
7229
7241
|
Read all track logs from the C<tracks> directory.
|
|
7230
7242
|
|
|
7231
|
-
=item exiftool -p gpx.fmt
|
|
7243
|
+
=item exiftool -p gpx.fmt dir > out.gpx
|
|
7232
7244
|
|
|
7233
7245
|
Generate a GPX track log from all images in directory C<dir>. This example
|
|
7234
7246
|
uses the C<gpx.fmt> file included in the full ExifTool distribution package
|
package/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"
|
|
@@ -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 = (
|
|
@@ -80,7 +80,7 @@ $VERSION = '1.06';
|
|
|
80
80
|
# 0x000e - int32s: 0,1,4,12 (Orientation? 0=landscape? 4=portrait? ref 1)
|
|
81
81
|
# 0x000f - int32s: 2,3
|
|
82
82
|
# 0x0010 - int32s: 1
|
|
83
|
-
0x0011 => {
|
|
83
|
+
0x0011 => { # (if defined, there is a live photo associated with the video, #forum13565)
|
|
84
84
|
Name => 'MediaGroupUUID', #NealKrawetz private communication
|
|
85
85
|
# (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
|
|
86
86
|
Writable => 'string',
|
|
@@ -91,6 +91,10 @@ $VERSION = '1.06';
|
|
|
91
91
|
Writable => 'string',
|
|
92
92
|
},
|
|
93
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
|
+
},
|
|
94
98
|
# 0x0017 - int32s: 0,8192
|
|
95
99
|
# 0x0019 - int32s: 0,2,128
|
|
96
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.49';
|
|
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
|
|
@@ -1324,9 +1326,12 @@ TagID: foreach $tagID (@keys) {
|
|
|
1324
1326
|
if ($writable) {
|
|
1325
1327
|
foreach ('PrintConv','ValueConv') {
|
|
1326
1328
|
next unless $$tagInfo{$_};
|
|
1327
|
-
next if $$tagInfo{$_ . 'Inv'};
|
|
1328
|
-
|
|
1329
|
-
|
|
1329
|
+
next if defined $$tagInfo{$_ . 'Inv'};
|
|
1330
|
+
# (undefined inverse conversion overrides hash lookup)
|
|
1331
|
+
unless (exists $$tagInfo{$_ . 'Inv'}) {
|
|
1332
|
+
next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/;
|
|
1333
|
+
next if $$tagInfo{WriteAlso};
|
|
1334
|
+
}
|
|
1330
1335
|
if ($_ eq 'ValueConv') {
|
|
1331
1336
|
undef $writable;
|
|
1332
1337
|
} else {
|
|
@@ -2570,6 +2575,9 @@ sub WriteTagNames($$)
|
|
|
2570
2575
|
$tip = '';
|
|
2571
2576
|
# use copyright symbol in QuickTime UserData tags
|
|
2572
2577
|
$tagIDstr =~ s/^"\\xa9/"©/;
|
|
2578
|
+
# escape necessary characters in html
|
|
2579
|
+
$tagIDstr =~ s/>/>/g;
|
|
2580
|
+
$tagIDstr =~ s/</</g;
|
|
2573
2581
|
}
|
|
2574
2582
|
# add tooltip for special writable attributes
|
|
2575
2583
|
my $wtip = '';
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.62';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -480,6 +480,7 @@ $VERSION = '4.59';
|
|
|
480
480
|
255 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Lens', #50
|
|
481
481
|
255.1 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro', #50
|
|
482
482
|
255.2 => 'Tamron SP 70-200mm f/2.8 Di VC USD', #exiv issue 1202 (A009)
|
|
483
|
+
255.3 => 'Yongnuo YN 50mm f/1.8', #50
|
|
483
484
|
368 => 'Sigma 14-24mm f/2.8 DG HSM | A or other Sigma Lens', #IB (A018)
|
|
484
485
|
368.1 => 'Sigma 20mm f/1.4 DG HSM | A', #50 (newer firmware)
|
|
485
486
|
368.2 => 'Sigma 50mm f/1.4 DG HSM | A', #50
|
|
@@ -493,6 +494,7 @@ $VERSION = '4.59';
|
|
|
493
494
|
'368.10' => 'Sigma 35mm f/1.4 DG HSM | A', #PH (012)
|
|
494
495
|
'368.11' => 'Sigma 70mm f/2.8 DG Macro', #IB (A018)
|
|
495
496
|
'368.12' => 'Sigma 18-35mm f/1.8 DC HSM | A', #50
|
|
497
|
+
'368.13' => 'Sigma 24-105mm f/4 DG OS HSM | A', #forum3833
|
|
496
498
|
# Note: LensType 488 (0x1e8) is reported as 232 (0xe8) in 7D CameraSettings
|
|
497
499
|
488 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM', #PH
|
|
498
500
|
489 => 'Canon EF 70-300mm f/4-5.6L IS USM', #Gerald Kapounek
|
|
@@ -602,18 +604,24 @@ $VERSION = '4.59';
|
|
|
602
604
|
'61182.24' => 'Canon RF 14-35mm F4L IS USM', #IB
|
|
603
605
|
'61182.25' => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
604
606
|
'61182.26' => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
605
|
-
'61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
606
|
-
'61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
607
|
+
'61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
608
|
+
'61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
607
609
|
'61182.29' => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
608
|
-
'61182.30' => 'Canon RF
|
|
609
|
-
'61182.31' => 'Canon RF
|
|
610
|
-
'61182.32' => 'Canon RF 400mm F2.8L IS USM
|
|
611
|
-
'61182.33' => 'Canon RF 400mm F2.8L IS USM +
|
|
612
|
-
'61182.34' => 'Canon RF
|
|
613
|
-
|
|
614
|
-
'61182.
|
|
615
|
-
'61182.
|
|
616
|
-
'61182.
|
|
610
|
+
'61182.30' => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
|
611
|
+
'61182.31' => 'Canon RF 16mm F2.8 STM', #42
|
|
612
|
+
'61182.32' => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
613
|
+
'61182.33' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
614
|
+
'61182.34' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
615
|
+
'61182.35' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
616
|
+
'61182.36' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
617
|
+
'61182.37' => 'Canon RF 800mm F5.6L IS USM', #42
|
|
618
|
+
'61182.38' => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
|
|
619
|
+
'61182.39' => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
|
|
620
|
+
'61182.40' => 'Canon RF 1200mm F8L IS USM', #42
|
|
621
|
+
'61182.41' => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
|
622
|
+
'61182.42' => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
623
|
+
# we need the RFLensType values for the following...
|
|
624
|
+
'61182.43' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
|
617
625
|
65535 => 'n/a',
|
|
618
626
|
);
|
|
619
627
|
|
|
@@ -6812,14 +6820,22 @@ my %ciMaxFocal = (
|
|
|
6812
6820
|
281 => 'Canon RF 14-35mm F4L IS USM', #42/IB
|
|
6813
6821
|
282 => 'Canon RF-S 18-45mm F4.5-6.3 IS STM', #42
|
|
6814
6822
|
283 => 'Canon RF 100-400mm F5.6-8 IS USM', #42
|
|
6815
|
-
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
6816
|
-
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
6823
|
+
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42
|
|
6824
|
+
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42
|
|
6817
6825
|
286 => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
6826
|
+
287 => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
|
6818
6827
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
|
6819
6828
|
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
6820
6829
|
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
6821
6830
|
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
6822
6831
|
292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
6832
|
+
295 => 'Canon RF 800mm F5.6L IS USM', #42
|
|
6833
|
+
296 => 'Canon RF 800mm F5.6L IS USM + RF1.4x', #42
|
|
6834
|
+
297 => 'Canon RF 800mm F5.6L IS USM + RF2x', #42
|
|
6835
|
+
298 => 'Canon RF 1200mm F8L IS USM', #42
|
|
6836
|
+
299 => 'Canon RF 1200mm F8L IS USM + RF1.4x', #42
|
|
6837
|
+
300 => 'Canon RF 1200mm F8L IS USM + RF2x', #42
|
|
6838
|
+
302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
6823
6839
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6824
6840
|
},
|
|
6825
6841
|
},
|
|
@@ -6864,6 +6880,7 @@ my %ciMaxFocal = (
|
|
|
6864
6880
|
8 => '4:5',
|
|
6865
6881
|
12 => '3:2 (APS-H crop)', #IB
|
|
6866
6882
|
13 => '3:2 (APS-C crop)', #IB
|
|
6883
|
+
258 => '4:3 crop', #PH (NC)
|
|
6867
6884
|
},
|
|
6868
6885
|
},
|
|
6869
6886
|
# (could use better names for these, or the Crop tags above, or both)
|
|
@@ -9393,8 +9410,9 @@ my %filterConv = (
|
|
|
9393
9410
|
# numbers from the previous image, so we need special logic
|
|
9394
9411
|
# to handle the FileIndex wrap properly)
|
|
9395
9412
|
$val[1] == 10000 and $val[1] = 1, ++$val[0];
|
|
9396
|
-
return sprintf("%.3d
|
|
9413
|
+
return sprintf("%.3d%.4d",@val);
|
|
9397
9414
|
},
|
|
9415
|
+
PrintConv => '$_=$val;s/(\d+)(\d{4})/$1-$2/;$_',
|
|
9398
9416
|
},
|
|
9399
9417
|
);
|
|
9400
9418
|
|
|
@@ -21,7 +21,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
21
21
|
use Image::ExifTool::Exif;
|
|
22
22
|
use Image::ExifTool::Canon;
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.59';
|
|
25
25
|
|
|
26
26
|
sub WriteCRW($$);
|
|
27
27
|
sub ProcessCanonRaw($$$);
|
|
@@ -625,6 +625,13 @@ sub ProcessCanonRaw($$$)
|
|
|
625
625
|
$raf->Seek($blockStart+$blockSize-4, 0) or return 0;
|
|
626
626
|
$raf->Read($buff, 4) == 4 or return 0;
|
|
627
627
|
my $dirOffset = Get32u(\$buff,0) + $blockStart;
|
|
628
|
+
# avoid infinite recursion
|
|
629
|
+
$$et{ProcessedCanonRaw} or $$et{ProcessedCanonRaw} = { };
|
|
630
|
+
if ($$et{ProcessedCanonRaw}{$dirOffset}) {
|
|
631
|
+
$et->Warn("Not processing double-referenced $$dirInfo{DirName} directory");
|
|
632
|
+
return 0;
|
|
633
|
+
}
|
|
634
|
+
$$et{ProcessedCanonRaw}{$dirOffset} = 1;
|
|
628
635
|
$raf->Seek($dirOffset, 0) or return 0;
|
|
629
636
|
$raf->Read($buff, 2) == 2 or return 0;
|
|
630
637
|
my $entries = Get16u(\$buff,0); # get number of entries in directory
|
|
@@ -23,7 +23,7 @@ use vars qw($VERSION);
|
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
24
24
|
use Image::ExifTool::Canon;
|
|
25
25
|
|
|
26
|
-
$VERSION = '1.
|
|
26
|
+
$VERSION = '1.34';
|
|
27
27
|
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
|
29
29
|
sub WriteCanonVRD($$;$);
|
|
@@ -2046,17 +2046,16 @@ sub ProcessCanonVRD($$;$)
|
|
|
2046
2046
|
return 0;
|
|
2047
2047
|
}
|
|
2048
2048
|
}
|
|
2049
|
-
# exit quickly if writing and no CanonVRD tags are being edited
|
|
2050
|
-
if ($outfile and not exists $$et{EDIT_DIRS}{CanonVRD}) {
|
|
2051
|
-
print $out "$$et{INDENT} [nothing changed]\n" if $verbose;
|
|
2052
|
-
return 1 if $outfile eq $dataPt;
|
|
2053
|
-
return Write($outfile, $$dataPt) ? 1 : -1;
|
|
2054
|
-
}
|
|
2055
|
-
|
|
2056
2049
|
my $vrdType = 'VRD';
|
|
2057
2050
|
|
|
2058
2051
|
if ($outfile) {
|
|
2059
2052
|
$verbose and not $created and print $out " Rewriting CanonVRD trailer\n";
|
|
2053
|
+
# exit quickly if writing and no CanonVRD tags are being edited
|
|
2054
|
+
unless (exists $$et{EDIT_DIRS}{CanonVRD}) {
|
|
2055
|
+
print $out "$$et{INDENT} [nothing changed in CanonVRD]\n" if $verbose;
|
|
2056
|
+
return 1 if $outfile eq $dataPt;
|
|
2057
|
+
return Write($outfile, $$dataPt) ? 1 : -1;
|
|
2058
|
+
}
|
|
2060
2059
|
# delete CanonVRD information if specified
|
|
2061
2060
|
my $doDel = $$et{DEL_GROUP}{CanonVRD};
|
|
2062
2061
|
unless ($doDel) {
|
|
@@ -21,7 +21,7 @@ use strict;
|
|
|
21
21
|
use vars qw($VERSION);
|
|
22
22
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
23
23
|
|
|
24
|
-
$VERSION = '1.
|
|
24
|
+
$VERSION = '1.18';
|
|
25
25
|
|
|
26
26
|
sub ProcessPEResources($$);
|
|
27
27
|
sub ProcessPEVersion($$);
|
|
@@ -1233,6 +1233,14 @@ sub ProcessEXE($$)
|
|
|
1233
1233
|
$tagTablePtr = GetTagTable('Image::ExifTool::EXE::MachO');
|
|
1234
1234
|
if ($1 eq "\xca\xfe\xba\xbe") {
|
|
1235
1235
|
SetByteOrder('MM');
|
|
1236
|
+
my $ver = Get32u(\$buff, 4);
|
|
1237
|
+
# Java bytecode .class files have the same magic number, so we need to look deeper
|
|
1238
|
+
# (ref https://github.com/file/file/blob/master/magic/Magdir/cafebabe#L6-L15)
|
|
1239
|
+
if ($ver > 30) {
|
|
1240
|
+
# this is Java bytecode
|
|
1241
|
+
$et->SetFileType('Java bytecode', 'application/java-byte-code', 'class');
|
|
1242
|
+
return 1;
|
|
1243
|
+
}
|
|
1236
1244
|
$et->SetFileType('Mach-O fat binary executable', undef, '');
|
|
1237
1245
|
return 1 if $fast3;
|
|
1238
1246
|
my $count = Get32u(\$buff, 4); # get architecture count
|