exiftool-vendored.pl 12.43.0 → 12.45.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 +45 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +2 -2
- package/bin/exiftool +26 -22
- package/bin/fmt_files/gpx.fmt +3 -0
- package/bin/fmt_files/gpx_wpt.fmt +3 -0
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -4
- package/bin/lib/Image/ExifTool/Canon.pm +17 -11
- package/bin/lib/Image/ExifTool/CanonVRD.pm +7 -8
- package/bin/lib/Image/ExifTool/DarwinCore.pm +1 -0
- package/bin/lib/Image/ExifTool/EXE.pm +9 -1
- package/bin/lib/Image/ExifTool/Exif.pm +5 -5
- package/bin/lib/Image/ExifTool/FLIR.pm +4 -3
- package/bin/lib/Image/ExifTool/FlashPix.pm +9 -1
- package/bin/lib/Image/ExifTool/FujiFilm.pm +3 -1
- package/bin/lib/Image/ExifTool/GPS.pm +21 -1
- package/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -1
- package/bin/lib/Image/ExifTool/ID3.pm +1 -1
- package/bin/lib/Image/ExifTool/Matroska.pm +24 -16
- package/bin/lib/Image/ExifTool/Motorola.pm +8 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +70 -24
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +18 -5
- package/bin/lib/Image/ExifTool/Parrot.pm +95 -2
- package/bin/lib/Image/ExifTool/QuickTime.pm +86 -4
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +7 -4
- package/bin/lib/Image/ExifTool/README +3 -1
- package/bin/lib/Image/ExifTool/Sony.pm +8 -1
- package/bin/lib/Image/ExifTool/TagLookup.pm +34 -8
- package/bin/lib/Image/ExifTool/TagNames.pod +94 -25
- package/bin/lib/Image/ExifTool/Validate.pm +3 -3
- package/bin/lib/Image/ExifTool/WriteExif.pl +81 -22
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +2 -6
- package/bin/lib/Image/ExifTool/Writer.pl +7 -4
- package/bin/lib/Image/ExifTool/XMP.pm +7 -3
- package/bin/lib/Image/ExifTool/XMP2.pl +11 -4
- package/bin/lib/Image/ExifTool.pm +1 -1
- package/bin/lib/Image/ExifTool.pod +6 -5
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- package/package.json +1 -1
package/bin/Changes
CHANGED
|
@@ -7,6 +7,50 @@ RSS feed: https://exiftool.org/rss.xml
|
|
|
7
7
|
Note: The most recent production release is Version 12.42. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Sept. 16, 2022 - Version 12.45
|
|
11
|
+
|
|
12
|
+
- Added new IPTC Video Metadata version 1.3 tags
|
|
13
|
+
- Added a couple of new Canon lenses (thanks Norbert Wasser)
|
|
14
|
+
- Added a new Sony LensType (thanks Jos Roost)
|
|
15
|
+
- Added known Unknown value for IPTC ChromaticityColorant (thanks Herb)
|
|
16
|
+
- Added new Nikon WhiteBalanceFineTune tag (thanks Milos Komarcevic)
|
|
17
|
+
- Extract the raw thermal data from all frames of a SEQ file when -ee2 is used
|
|
18
|
+
- Decode individual tags in QuickTime ColorRepresentation
|
|
19
|
+
- Decode a new Matroska tag
|
|
20
|
+
- Improved verbose "nothing changed" messages when writing
|
|
21
|
+
- Patched -ee option to extract metadata after the first Cluster in MKV videos
|
|
22
|
+
(previously only -U and -v did this)
|
|
23
|
+
- Patched to differentiate Java bytecode .class files from Mach-O fat binaries
|
|
24
|
+
- Patched to avoid "Use of uninitialized value" warning when deleting GPS
|
|
25
|
+
coordinates via the newly writable Composite tags
|
|
26
|
+
- Patched to avoid duplicating raw data when writing Sony ARW images where the
|
|
27
|
+
raw data is double-referenced as both strips and tiles (affects ARW images
|
|
28
|
+
from some newer models like the ILCE-1 when SonyRawFileType is "Lossless
|
|
29
|
+
Compressed RAW 2")
|
|
30
|
+
- Patched to avoid "fixing" the order of IFD entries in TIFF-based RAW files
|
|
31
|
+
to improve compatibility with some RAW viewers
|
|
32
|
+
- Minor change to Composite FileNumber to remove "-" when -n is used
|
|
33
|
+
- Fixed problem extracting some timed metadata when "-api ignoretags=all" was
|
|
34
|
+
used with "-api requesttags" to request the specific information
|
|
35
|
+
- Fixed -validate feature to avoid incorrectly warning about non-capitalized
|
|
36
|
+
boolean values in XMP
|
|
37
|
+
|
|
38
|
+
July 21, 2022 - Version 12.44
|
|
39
|
+
|
|
40
|
+
- Added a few new Sony lenses (thanks Jos Roost)
|
|
41
|
+
- Decode Accelerometer and Gyroscope data from ARCore videos
|
|
42
|
+
- Decode a couple of new Motorola tags (thanks Neal Krawetz)
|
|
43
|
+
- Decode FujiFilm FirmwareVersion (thanks Justin Arkinson)
|
|
44
|
+
- Decode MetaType for timed metadata in videos
|
|
45
|
+
- Decode a number of new Nikon Z tags (thanks Warren Hatch)
|
|
46
|
+
- Extract more types of embedded images from FlashPix-format files
|
|
47
|
+
- Made Composite GPSLatitude and GPSLongitude writable for setting GPS
|
|
48
|
+
coordinates and reference directions with one assignment
|
|
49
|
+
- Fixed bug introduced in 12.39 which broke extraction of timed GPS from some
|
|
50
|
+
INNOVV videos
|
|
51
|
+
- Fixed bug introduced in 12.43 which broke extraction of timed GPSDateTime
|
|
52
|
+
from Insta360 videos
|
|
53
|
+
|
|
10
54
|
July 6, 2022 - Version 12.43
|
|
11
55
|
|
|
12
56
|
- Added the ability to geotag from Google Takeout JSON files
|
|
@@ -99,6 +143,7 @@ Jan. 13, 2022 - Version 12.39
|
|
|
99
143
|
- Added a new Pentax LensType (thanks Christian Shulz)
|
|
100
144
|
- Added a couple of new Nikon LensID's
|
|
101
145
|
- Added support for Nikon NKSC sidecar files
|
|
146
|
+
- Decode another type of timed GPS from MP4 videos
|
|
102
147
|
- Decode more tags for the Nikon Z7 and Z9 (thanks Warren Hatch)
|
|
103
148
|
- Decode a couple more FLIR tags
|
|
104
149
|
- Extract ZIP file comments
|
package/bin/META.json
CHANGED
package/bin/META.yml
CHANGED
package/bin/README
CHANGED
|
@@ -107,8 +107,8 @@ your home directory, then you would type the following commands in a
|
|
|
107
107
|
terminal window to extract and run ExifTool:
|
|
108
108
|
|
|
109
109
|
cd ~/Desktop
|
|
110
|
-
gzip -dc Image-ExifTool-12.
|
|
111
|
-
cd Image-ExifTool-12.
|
|
110
|
+
gzip -dc Image-ExifTool-12.45.tar.gz | tar -xf -
|
|
111
|
+
cd Image-ExifTool-12.45
|
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
|
113
113
|
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
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.45';
|
|
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;
|
|
@@ -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;
|
|
@@ -4990,16 +4990,17 @@ B<-struct> option for details.
|
|
|
4990
4990
|
8) With the redirection feature, copying a tag directly (ie.
|
|
4991
4991
|
E<quot>'-I<DSTTAG>E<lt>I<SRCTAG>'E<quot>) is not the same as interpolating
|
|
4992
4992
|
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
|
|
4993
|
+
for source tags which are list-type tags,
|
|
4994
|
+
L<shortcut tags|Image::ExifTool::Shortcuts>, tag names containing wildcards,
|
|
4995
|
+
or UserParam variables. When copying directly, the values of each matching
|
|
4996
|
+
source tag are copied individually to the destination tag (as if they were
|
|
4997
|
+
separate assignments). However, when interpolated inside a string, list
|
|
4998
|
+
items and the values of shortcut tags are concatenated (with a separator set
|
|
4999
|
+
by the B<-sep> option), and wildcards are not allowed. Also, UserParam
|
|
5000
|
+
variables are available only when interpolated in a string. Another
|
|
5001
|
+
difference is that a minor warning is generated if a tag doesn't exist when
|
|
5002
|
+
interpolating its value in a string (with C<$>), but isn't when copying the
|
|
5003
|
+
tag directly.
|
|
5003
5004
|
|
|
5004
5005
|
Finally, the behaviour is different when a destination tag or group of
|
|
5005
5006
|
C<All> is used. When copying directly, a destination group and/or tag name
|
|
@@ -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.45 --
|
|
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.
|
|
@@ -5978,10 +5981,11 @@ also specified on the command line. The alternative is to use the
|
|
|
5978
5981
|
C<$GROUP:all> syntax. (eg. Use C<$exif:all> instead of C<$exif> in I<EXPR>
|
|
5979
5982
|
to test for the existence of EXIF tags.)
|
|
5980
5983
|
|
|
5981
|
-
3) Tags in the string are interpolated
|
|
5984
|
+
3) Tags in the string are interpolated in a similar way to B<-p> before the
|
|
5982
5985
|
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
|
|
5986
|
+
newline and C<$$> represents a single C<$> symbol. So Perl variables, if
|
|
5987
|
+
used, require a double C<$>, and regular expressions ending in C<$/> must
|
|
5988
|
+
use C<$$/> instead.
|
|
5985
5989
|
|
|
5986
5990
|
4) The condition may only test tags from the file being processed. To
|
|
5987
5991
|
process one file based on tags from another, two steps are required. For
|
|
@@ -7228,7 +7232,7 @@ Combine multiple track logs and geotag an entire directory tree of images.
|
|
|
7228
7232
|
|
|
7229
7233
|
Read all track logs from the C<tracks> directory.
|
|
7230
7234
|
|
|
7231
|
-
=item exiftool -p gpx.fmt
|
|
7235
|
+
=item exiftool -p gpx.fmt dir > out.gpx
|
|
7232
7236
|
|
|
7233
7237
|
Generate a GPX track log from all images in directory C<dir>. This example
|
|
7234
7238
|
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"
|
|
@@ -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.48';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -1324,9 +1324,12 @@ TagID: foreach $tagID (@keys) {
|
|
|
1324
1324
|
if ($writable) {
|
|
1325
1325
|
foreach ('PrintConv','ValueConv') {
|
|
1326
1326
|
next unless $$tagInfo{$_};
|
|
1327
|
-
next if $$tagInfo{$_ . 'Inv'};
|
|
1328
|
-
|
|
1329
|
-
|
|
1327
|
+
next if defined $$tagInfo{$_ . 'Inv'};
|
|
1328
|
+
# (undefined inverse conversion overrides hash lookup)
|
|
1329
|
+
unless (exists $$tagInfo{$_ . 'Inv'}) {
|
|
1330
|
+
next if ref($$tagInfo{$_}) =~ /^(HASH|ARRAY)$/;
|
|
1331
|
+
next if $$tagInfo{WriteAlso};
|
|
1332
|
+
}
|
|
1330
1333
|
if ($_ eq 'ValueConv') {
|
|
1331
1334
|
undef $writable;
|
|
1332
1335
|
} else {
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.60';
|
|
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)
|
|
@@ -605,15 +605,17 @@ $VERSION = '4.59';
|
|
|
605
605
|
'61182.27' => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
606
606
|
'61182.28' => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
607
607
|
'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
|
-
|
|
616
|
-
'61182.37' => 'Canon RF
|
|
608
|
+
'61182.30' => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
|
609
|
+
'61182.31' => 'Canon RF 16mm F2.8 STM', #42
|
|
610
|
+
'61182.32' => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
611
|
+
'61182.33' => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
612
|
+
'61182.34' => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
613
|
+
'61182.35' => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
614
|
+
'61182.36' => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
615
|
+
# we need the RFLensType values for the following...
|
|
616
|
+
'61182.37' => 'Canon RF 800mm F5.6L IS USM', #PH (NC)
|
|
617
|
+
'61182.38' => 'Canon RF 1200mm F8L IS USM', #PH (NC)
|
|
618
|
+
'61182.39' => 'Canon RF 5.2mm F2.8L Dual Fisheye 3D VR', #PH (NC)
|
|
617
619
|
65535 => 'n/a',
|
|
618
620
|
);
|
|
619
621
|
|
|
@@ -6815,11 +6817,13 @@ my %ciMaxFocal = (
|
|
|
6815
6817
|
284 => 'Canon RF 100-400mm F5.6-8 IS USM + RF1.4x', #42 (NC)
|
|
6816
6818
|
285 => 'Canon RF 100-400mm F5.6-8 IS USM + RF2x', #42 (NC)
|
|
6817
6819
|
286 => 'Canon RF-S 18-150mm F3.5-6.3 IS STM', #42
|
|
6820
|
+
287 => 'Canon RF 24mm F1.8 MACRO IS STM', #42
|
|
6818
6821
|
288 => 'Canon RF 16mm F2.8 STM', #42
|
|
6819
6822
|
289 => 'Canon RF 400mm F2.8L IS USM', #IB
|
|
6820
6823
|
290 => 'Canon RF 400mm F2.8L IS USM + RF1.4x', #IB
|
|
6821
6824
|
291 => 'Canon RF 400mm F2.8L IS USM + RF2x', #IB
|
|
6822
6825
|
292 => 'Canon RF 600mm F4L IS USM', #GiaZopatti
|
|
6826
|
+
302 => 'Canon RF 15-30mm F4.5-6.3 IS STM', #42
|
|
6823
6827
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6824
6828
|
},
|
|
6825
6829
|
},
|
|
@@ -6864,6 +6868,7 @@ my %ciMaxFocal = (
|
|
|
6864
6868
|
8 => '4:5',
|
|
6865
6869
|
12 => '3:2 (APS-H crop)', #IB
|
|
6866
6870
|
13 => '3:2 (APS-C crop)', #IB
|
|
6871
|
+
258 => '4:3 crop', #PH (NC)
|
|
6867
6872
|
},
|
|
6868
6873
|
},
|
|
6869
6874
|
# (could use better names for these, or the Crop tags above, or both)
|
|
@@ -9393,8 +9398,9 @@ my %filterConv = (
|
|
|
9393
9398
|
# numbers from the previous image, so we need special logic
|
|
9394
9399
|
# to handle the FileIndex wrap properly)
|
|
9395
9400
|
$val[1] == 10000 and $val[1] = 1, ++$val[0];
|
|
9396
|
-
return sprintf("%.3d
|
|
9401
|
+
return sprintf("%.3d%.4d",@val);
|
|
9397
9402
|
},
|
|
9403
|
+
PrintConv => '$_=$val;s/(\d+)(\d{4})/$1-$2/;$_',
|
|
9398
9404
|
},
|
|
9399
9405
|
);
|
|
9400
9406
|
|
|
@@ -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
|
|
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
56
56
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
57
57
|
use Image::ExifTool::MakerNotes;
|
|
58
58
|
|
|
59
|
-
$VERSION = '4.
|
|
59
|
+
$VERSION = '4.41';
|
|
60
60
|
|
|
61
61
|
sub ProcessExif($$$);
|
|
62
62
|
sub WriteExif($$$);
|
|
@@ -4842,10 +4842,10 @@ my %subSecConv = (
|
|
|
4842
4842
|
Writable => 1,
|
|
4843
4843
|
Protected => 1,
|
|
4844
4844
|
WriteAlso => {
|
|
4845
|
-
GPSLatitude => '$val =~ /(.*?)( ?[NS])?,/ ? $1 : undef',
|
|
4846
|
-
GPSLatitudeRef => '$val =~ /(-?)(.*?) ?([NS]?),/ ? ($3 || ($1 ? "S" : "N")) : undef',
|
|
4847
|
-
GPSLongitude => '$val =~ /, ?(.*?)( ?[EW]?)$/ ? $1 : undef',
|
|
4848
|
-
GPSLongitudeRef => '$val =~ /, ?(-?)(.*?) ?([EW]?)$/ ? ($3 || ($1 ? "W" : "E")) : undef',
|
|
4845
|
+
GPSLatitude => '(defined $val and $val =~ /(.*?)( ?[NS])?,/) ? $1 : undef',
|
|
4846
|
+
GPSLatitudeRef => '(defined $val and $val =~ /(-?)(.*?) ?([NS]?),/) ? ($3 || ($1 ? "S" : "N")) : undef',
|
|
4847
|
+
GPSLongitude => '(defined $val and $val =~ /, ?(.*?)( ?[EW]?)$/) ? $1 : undef',
|
|
4848
|
+
GPSLongitudeRef => '(defined $val and $val =~ /, ?(-?)(.*?) ?([EW]?)$/) ? ($3 || ($1 ? "W" : "E")) : undef',
|
|
4849
4849
|
},
|
|
4850
4850
|
PrintConvInv => q{
|
|
4851
4851
|
return undef unless $val =~ /(.*? ?[NS]?), ?(.*? ?[EW]?)$/;
|
|
@@ -24,7 +24,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
|
24
24
|
use Image::ExifTool::Exif;
|
|
25
25
|
use Image::ExifTool::GPS;
|
|
26
26
|
|
|
27
|
-
$VERSION = '1.
|
|
27
|
+
$VERSION = '1.21';
|
|
28
28
|
|
|
29
29
|
sub ProcessFLIR($$;$);
|
|
30
30
|
sub ProcessFLIRText($$$);
|
|
@@ -99,7 +99,8 @@ my %float8g = ( Format => 'float', PrintConv => 'sprintf("%.8g",$val)' );
|
|
|
99
99
|
NOTES => q{
|
|
100
100
|
Information extracted from FLIR FFF images and the APP1 FLIR segment of JPEG
|
|
101
101
|
images. These tags may also be extracted from the first frame of an FLIR
|
|
102
|
-
SEQ file, or all frames if the ExtractEmbedded option is used.
|
|
102
|
+
SEQ file, or all frames if the ExtractEmbedded option is used. Setting
|
|
103
|
+
ExtractEmbedded to 2 also the raw thermal data from all frames.
|
|
103
104
|
},
|
|
104
105
|
"_header" => {
|
|
105
106
|
Name => 'FFFHeader',
|
|
@@ -1551,7 +1552,7 @@ sub ProcessFLIR($$;$)
|
|
|
1551
1552
|
$$et{INDENT}, $i, $recType, $recPos, $recLen;
|
|
1552
1553
|
|
|
1553
1554
|
# skip RawData records for embedded documents
|
|
1554
|
-
if ($recType == 1 and $$et{DOC_NUM}) {
|
|
1555
|
+
if ($recType == 1 and $$et{DOC_NUM} and $et->Options('ExtractEmbedded') < 2) {
|
|
1555
1556
|
$raf->Seek($base+$recPos+$recLen) or $success = 0, last;
|
|
1556
1557
|
next;
|
|
1557
1558
|
}
|
|
@@ -298,6 +298,7 @@ my %fpxFileType = (
|
|
|
298
298
|
%Image::ExifTool::FlashPix::Main = (
|
|
299
299
|
PROCESS_PROC => \&ProcessFPXR,
|
|
300
300
|
GROUPS => { 2 => 'Image' },
|
|
301
|
+
VARS => { LONG_TAGS => 0 },
|
|
301
302
|
NOTES => q{
|
|
302
303
|
The FlashPix file format, introduced in 1996, was developed by Kodak,
|
|
303
304
|
Hewlett-Packard and Microsoft. Internally the FPX file structure mimics
|
|
@@ -480,6 +481,12 @@ my %fpxFileType = (
|
|
|
480
481
|
return $val;
|
|
481
482
|
},
|
|
482
483
|
},
|
|
484
|
+
IeImg => {
|
|
485
|
+
Name => 'EmbeddedImage',
|
|
486
|
+
Notes => 'embedded images in Scene7 vignette VNT files',
|
|
487
|
+
Groups => { 2 => 'Preview' },
|
|
488
|
+
Binary => 1,
|
|
489
|
+
},
|
|
483
490
|
);
|
|
484
491
|
|
|
485
492
|
# Summary Information properties
|
|
@@ -2255,7 +2262,8 @@ sub ProcessFPX($$)
|
|
|
2255
2262
|
# remove instance number or class ID from tag if necessary
|
|
2256
2263
|
$tagInfo = $et->GetTagInfo($tagTablePtr, $1) if
|
|
2257
2264
|
($tag =~ /(.*) \d{6}$/s and $$tagTablePtr{$1}) or
|
|
2258
|
-
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1})
|
|
2265
|
+
($tag =~ /(.*)_[0-9a-f]{16}$/s and $$tagTablePtr{$1}) or
|
|
2266
|
+
($tag =~ /(.*)_[0-9]{4}$/s and $$tagTablePtr{$1}); # IeImg instances
|
|
2259
2267
|
}
|
|
2260
2268
|
|
|
2261
2269
|
my $lSib = Get32u(\$dir, $pos + 0x44); # left sibling
|
|
@@ -31,7 +31,7 @@ use vars qw($VERSION);
|
|
|
31
31
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
32
32
|
use Image::ExifTool::Exif;
|
|
33
33
|
|
|
34
|
-
$VERSION = '1.
|
|
34
|
+
$VERSION = '1.82';
|
|
35
35
|
|
|
36
36
|
sub ProcessFujiDir($$$);
|
|
37
37
|
sub ProcessFaceRec($$$);
|
|
@@ -763,6 +763,8 @@ my %faceCategories = (
|
|
|
763
763
|
},
|
|
764
764
|
PrintConvInv => '$val=~/(0x[0-9a-f]+)/i; hex $1',
|
|
765
765
|
},
|
|
766
|
+
0x1447 => { Name => 'FirmwareVersion', Writable => 'string' },
|
|
767
|
+
0x1448 => { Name => 'FirmwareVersion2', Writable => 'string' },
|
|
766
768
|
0x3803 => { #forum10037
|
|
767
769
|
Name => 'VideoRecordingMode',
|
|
768
770
|
Groups => { 2 => 'Video' },
|
|
@@ -12,7 +12,7 @@ use strict;
|
|
|
12
12
|
use vars qw($VERSION);
|
|
13
13
|
use Image::ExifTool::Exif;
|
|
14
14
|
|
|
15
|
-
$VERSION = '1.
|
|
15
|
+
$VERSION = '1.54';
|
|
16
16
|
|
|
17
17
|
my %coordConv = (
|
|
18
18
|
ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
|
|
@@ -360,21 +360,41 @@ my %coordConv = (
|
|
|
360
360
|
# which must therefore require this module as necessary
|
|
361
361
|
GPSLatitude => {
|
|
362
362
|
SubDoc => 1, # generate for all sub-documents
|
|
363
|
+
Writable => 1,
|
|
364
|
+
Avoid => 1,
|
|
365
|
+
Priority => 1, # (necessary because Avoid sets default Priority to 0)
|
|
363
366
|
Require => {
|
|
364
367
|
0 => 'GPS:GPSLatitude',
|
|
365
368
|
1 => 'GPS:GPSLatitudeRef',
|
|
366
369
|
},
|
|
370
|
+
WriteAlso => {
|
|
371
|
+
'GPS:GPSLatitude' => '$val',
|
|
372
|
+
'GPS:GPSLatitudeRef' => '(defined $val and $val < 0) ? "S" : "N"',
|
|
373
|
+
},
|
|
367
374
|
ValueConv => '$val[1] =~ /^S/i ? -$val[0] : $val[0]',
|
|
368
375
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
|
|
376
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
|
|
369
377
|
},
|
|
370
378
|
GPSLongitude => {
|
|
371
379
|
SubDoc => 1, # generate for all sub-documents
|
|
380
|
+
Writable => 1,
|
|
381
|
+
Avoid => 1,
|
|
382
|
+
Priority => 1,
|
|
383
|
+
Require => {
|
|
384
|
+
0 => 'GPS:GPSLongitude',
|
|
385
|
+
1 => 'GPS:GPSLongitudeRef',
|
|
386
|
+
},
|
|
387
|
+
WriteAlso => {
|
|
388
|
+
'GPS:GPSLongitude' => '$val',
|
|
389
|
+
'GPS:GPSLongitudeRef' => '(defined $val and $val < 0) ? "W" : "E"',
|
|
390
|
+
},
|
|
372
391
|
Require => {
|
|
373
392
|
0 => 'GPS:GPSLongitude',
|
|
374
393
|
1 => 'GPS:GPSLongitudeRef',
|
|
375
394
|
},
|
|
376
395
|
ValueConv => '$val[1] =~ /^W/i ? -$val[0] : $val[0]',
|
|
377
396
|
PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
|
|
397
|
+
PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
|
|
378
398
|
},
|
|
379
399
|
GPSAltitude => {
|
|
380
400
|
SubDoc => [1,3], # generate for sub-documents if Desire 1 or 3 has a chance to exist
|
|
@@ -25,7 +25,7 @@ use strict;
|
|
|
25
25
|
use vars qw($VERSION);
|
|
26
26
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
27
27
|
|
|
28
|
-
$VERSION = '1.
|
|
28
|
+
$VERSION = '1.40';
|
|
29
29
|
|
|
30
30
|
sub ProcessICC($$);
|
|
31
31
|
sub ProcessICC_Profile($$$);
|
|
@@ -815,6 +815,7 @@ my %manuSig = ( #6
|
|
|
815
815
|
Name => 'ChromaticityColorant',
|
|
816
816
|
Format => 'int16u',
|
|
817
817
|
PrintConv => {
|
|
818
|
+
0 => 'Unknown',
|
|
818
819
|
1 => 'ITU-R BT.709',
|
|
819
820
|
2 => 'SMPTE RP145-1994',
|
|
820
821
|
3 => 'EBU Tech.3213-E',
|
|
@@ -14,7 +14,7 @@ use strict;
|
|
|
14
14
|
use vars qw($VERSION);
|
|
15
15
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
16
16
|
|
|
17
|
-
$VERSION = '1.
|
|
17
|
+
$VERSION = '1.12';
|
|
18
18
|
|
|
19
19
|
my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
20
20
|
|
|
@@ -27,8 +27,10 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
|
27
27
|
NOTES => q{
|
|
28
28
|
The following tags are extracted from Matroska multimedia container files.
|
|
29
29
|
This container format is used by file types such as MKA, MKV, MKS and WEBM.
|
|
30
|
-
For speed, ExifTool extracts tags only up to the first Cluster
|
|
31
|
-
L<Verbose|../ExifTool.html#Verbose> (-v)
|
|
30
|
+
For speed, by default ExifTool extracts tags only up to the first Cluster.
|
|
31
|
+
However, the L<Verbose|../ExifTool.html#Verbose> (-v) and L<Unknown|../ExifTool.html#Unknown> = 2 (-U) options force processing of
|
|
32
|
+
Cluster data, and the L<ExtractEmbedded|../ExifTool.html#ExtractEmbedded> (-ee) option skips over Clusters to
|
|
33
|
+
read subsequent tags. See
|
|
32
34
|
L<http://www.matroska.org/technical/specs/index.html> for the official
|
|
33
35
|
Matroska specification.
|
|
34
36
|
},
|
|
@@ -269,10 +271,11 @@ my %noYes = ( 0 => 'No', 1 => 'Yes' );
|
|
|
269
271
|
}
|
|
270
272
|
],
|
|
271
273
|
0x3314f => { Name => 'TrackTimecodeScale',Format => 'float' },
|
|
272
|
-
0x137f => { Name => 'TrackOffset',
|
|
274
|
+
0x137f => { Name => 'TrackOffset', Format => 'signed', Unknown => 1 },
|
|
273
275
|
0x15ee => { Name => 'MaxBlockAdditionID',Format => 'unsigned', Unknown => 1 },
|
|
274
|
-
0x136e => { Name => 'TrackName',
|
|
275
|
-
0x2b59c => { Name => 'TrackLanguage',
|
|
276
|
+
0x136e => { Name => 'TrackName', Format => 'utf8' },
|
|
277
|
+
0x2b59c => { Name => 'TrackLanguage', Format => 'string' },
|
|
278
|
+
0x2b59d => { Name => 'TrackLanguageIETF', Format => 'string' },
|
|
276
279
|
0x06 => [
|
|
277
280
|
{
|
|
278
281
|
Name => 'VideoCodecID',
|
|
@@ -743,7 +746,8 @@ sub ProcessMKV($$)
|
|
|
743
746
|
|
|
744
747
|
# set flag to process entire file (otherwise we stop at the first Cluster)
|
|
745
748
|
my $verbose = $et->Options('Verbose');
|
|
746
|
-
my $processAll = ($verbose or $et->Options('Unknown') > 1);
|
|
749
|
+
my $processAll = ($verbose or $et->Options('Unknown') > 1) ? 2 : 0;
|
|
750
|
+
++$processAll if $et->Options('ExtractEmbedded');
|
|
747
751
|
$$et{TrackTypes} = \%trackTypes; # store Track types reference
|
|
748
752
|
my $oldIndent = $$et{INDENT};
|
|
749
753
|
my $chapterNum = 0;
|
|
@@ -786,16 +790,20 @@ sub ProcessMKV($$)
|
|
|
786
790
|
my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
|
|
787
791
|
# just fall through into the contained EBML elements
|
|
788
792
|
if ($tagInfo and $$tagInfo{SubDirectory}) {
|
|
789
|
-
# stop processing at first cluster unless we are
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
$$
|
|
796
|
-
$
|
|
793
|
+
# stop processing at first cluster unless we are using -v -U or -ee
|
|
794
|
+
if ($$tagInfo{Name} eq 'Cluster' and $processAll < 2) {
|
|
795
|
+
last unless $processAll;
|
|
796
|
+
undef $tagInfo; # just skip the Cluster when -ee is used
|
|
797
|
+
} else {
|
|
798
|
+
$$et{INDENT} .= '| ';
|
|
799
|
+
$et->VerboseDir($$tagTablePtr{$tag}{Name}, undef, $size);
|
|
800
|
+
push @dirEnd, [ $pos + $dataPos + $size, $$tagInfo{Name} ];
|
|
801
|
+
if ($$tagInfo{Name} eq 'ChapterAtom') {
|
|
802
|
+
$$et{SET_GROUP1} = 'Chapter' . (++$chapterNum);
|
|
803
|
+
$trackIndent = $$et{INDENT};
|
|
804
|
+
}
|
|
805
|
+
next;
|
|
797
806
|
}
|
|
798
|
-
next;
|
|
799
807
|
}
|
|
800
808
|
last if $unknownSize;
|
|
801
809
|
if ($pos + $size > $dataLen) {
|