exiftool_vendored 12.86.0 → 12.92.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +81 -1
- data/bin/MANIFEST +1 -0
- data/bin/META.json +2 -2
- data/bin/META.yml +17 -17
- data/bin/README +3 -2
- data/bin/build_geolocation +7 -4
- data/bin/config_files/onone.config +28 -0
- data/bin/exiftool +23 -15
- data/bin/lib/Image/ExifTool/AIFF.pm +8 -4
- data/bin/lib/Image/ExifTool/ASF.pm +4 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +12 -7
- data/bin/lib/Image/ExifTool/Canon.pm +75 -10
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +46 -4
- data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- data/bin/lib/Image/ExifTool/Geolocation.pm +6 -0
- data/bin/lib/Image/ExifTool/InDesign.pm +8 -4
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +0 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
- data/bin/lib/Image/ExifTool/Matroska.pm +66 -10
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +36 -2
- data/bin/lib/Image/ExifTool/PNG.pm +10 -2
- data/bin/lib/Image/ExifTool/Panasonic.pm +1 -0
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
- data/bin/lib/Image/ExifTool/Pentax.pm +80 -14
- data/bin/lib/Image/ExifTool/QuickTime.pm +51 -9
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +111 -8
- data/bin/lib/Image/ExifTool/RIFF.pm +20 -10
- data/bin/lib/Image/ExifTool/Samsung.pm +28 -19
- data/bin/lib/Image/ExifTool/Sony.pm +21 -11
- data/bin/lib/Image/ExifTool/TagLookup.pm +6804 -6784
- data/bin/lib/Image/ExifTool/TagNames.pod +92 -21
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +84 -15
- data/bin/lib/Image/ExifTool/Writer.pl +7 -4
- data/bin/lib/Image/ExifTool/XMP.pm +8 -8
- data/bin/lib/Image/ExifTool/XMP2.pl +51 -30
- data/bin/lib/Image/ExifTool/ZIP.pm +8 -4
- data/bin/lib/Image/ExifTool.pm +22 -16
- data/bin/lib/Image/ExifTool.pod +15 -6
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f86c2dcf64db70e03d4758fcba7dd1a711528fee369de76762474f076018d779
|
4
|
+
data.tar.gz: e21c4bebc90dee50fa43ee7b7d9fb4aa84ca699ce1403eb18011454bfc34e201
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2189eadffa5201003f5247c0c97a3dc0cc5f26ff0fbac13a49691bee0bd779656c07be72fbc4803b1a3cc98bcf8cdad79e314d551cdd893fb789f2c929f7790d
|
7
|
+
data.tar.gz: aa2912573a6781d7d087e3b8449ea85841f6484c3cd3b8ba378e60fb5df49a3f485a6a74fceb705052cc565cb561043faca5ce970f4be3e71ef20d342b48af09
|
data/bin/Changes
CHANGED
@@ -7,12 +7,88 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.76. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
July 24, 2024 - Version 12.92
|
11
|
+
|
12
|
+
- Removed -w from exiftool shebang
|
13
|
+
|
14
|
+
July 24, 2024 - Version 12.91
|
15
|
+
|
16
|
+
- Fixed 2 test files that were causing failed tests (ExifTool itself is
|
17
|
+
unchanged)
|
18
|
+
|
19
|
+
July 24, 2024 - Version 12.90
|
20
|
+
|
21
|
+
- Added support for reading Samsung trailer from PNG images
|
22
|
+
- Decode two more formats of timed GPS from MP4 videos
|
23
|
+
- Decode a few more Samung trailer tags (thanks Neal Krawetz)
|
24
|
+
- Decode Canon AntiFlicker tag
|
25
|
+
- Drop Nikon ShotInfo record when copying MakerNotes from NEF to JPG if it is
|
26
|
+
larger than 50000 bytes (then MakerNotes would be too large for a single
|
27
|
+
JPEG segment)
|
28
|
+
- Changed exiftool shebang from "#!/usr/bin/perl" to "#!/usr/bin/env perl"
|
29
|
+
- Revert change of 12.84 to iterate through sub-documents with the -p option
|
30
|
+
only if -ee is used
|
31
|
+
|
32
|
+
July 12, 2024 - Version 12.89
|
33
|
+
|
34
|
+
- Added new Sony lenses and updated decoding of some tags (thanks Jos Roost)
|
35
|
+
- Minor change to description of NKA files
|
36
|
+
- Fixed Archive::Zip problem in Windows executable version
|
37
|
+
|
38
|
+
July 11, 2024 - Version 12.88 - "New Windows/MacOS packages"
|
39
|
+
|
40
|
+
- NOTE: The install procedure for the Windows executable has changed!
|
41
|
+
- Windows EXE version now uses Oliver Betz's bundle with Strawberry Perl and
|
42
|
+
comes in 32- and 64-bit versions
|
43
|
+
- MacOS distribution now uses a flattened package
|
44
|
+
- Added ability to read/write deflate-compressed XMP in HEIC files
|
45
|
+
- Added a new Canon LensType (thanks Norbert Wasser)
|
46
|
+
- Added a new XMP-GCamera tag (thanks Herb)
|
47
|
+
- Added a new Nikon LensID
|
48
|
+
- Added a few new Canon AFAreaMode values (thanks Wernfried)
|
49
|
+
- Added config_files/onone.config to the distribution
|
50
|
+
- Decode timed accelerometer readings from NextBase 622GW videos
|
51
|
+
- Decode Pentax K-3III CameraOrentation (thanks Peter)
|
52
|
+
- Improved German translation for LensModel
|
53
|
+
- Enhanced the API StructFormat JSONQ setting to quote all JSON values, even
|
54
|
+
if they aren't in a structure
|
55
|
+
- Changed -geolocate option so specifying the Keys group writes
|
56
|
+
Keys:GPSPosition only if an input city is specified, and Keys:LocationName
|
57
|
+
only for input GPS coordinates
|
58
|
+
- Tweaked API Geolocation option recognized space-separated lat/lon even when
|
59
|
+
there is no decimal point in the numbers
|
60
|
+
- API Changes:
|
61
|
+
- Changed LargeFileSupport default to 2 and added a warning if a large
|
62
|
+
chunk is encountered. Set to 1 to avoid the warning.
|
63
|
+
|
64
|
+
June 13, 2024 - Version 12.87
|
65
|
+
|
66
|
+
- Added ability to write Google Container XMP tags (using the namespace prefix
|
67
|
+
'GContainer' to avoid conflict with the Google Device Container prefix)
|
68
|
+
- Decode a few new tags for the Canon EOS R5 (thanks John Moyer)
|
69
|
+
- Decode battery information for the Pentax K-3 III (thanks Peter)
|
70
|
+
- Decode RAFCompression from FujiFilm RAF images (thanks Albert Shan)
|
71
|
+
- Avoid reporting FileSize for pipes
|
72
|
+
- Updated Geolocation databases from current geonames.org files
|
73
|
+
- Enhanced Geolocation feature to allow lat/lon to be input with a space
|
74
|
+
separator instead of a comma
|
75
|
+
- Skip over Matroska Cluster if necessary to read Tags when referenced from
|
76
|
+
SeekHead
|
77
|
+
- Changed conversion for Matroska SeekID (now in hex with tag name in
|
78
|
+
brackets) and SeekPosition (now returns an absolute offset)
|
79
|
+
- Fixed problem writing XMP-Device:EarthPos coordinates
|
80
|
+
- Fixed typo in a value of Canon:DigitalLensOptimizer (thanks Martin B.)
|
81
|
+
- Fixed decoding of Matroska VideoScanType
|
82
|
+
- Fixed misleading error message when -o option was used to write to an
|
83
|
+
unsupported file type
|
84
|
+
|
10
85
|
June 7, 2024 - Version 12.86
|
11
86
|
|
12
87
|
- Added a new value for a couple of Olympus tags (thanks Herb)
|
13
88
|
- Improved handling of ID3 user-defined tags
|
14
89
|
- Decode all JPEG segments from RICO box in Ricoh MOV videos
|
15
|
-
- Decode a few new values for some tags written by Canon EOS R cameras
|
90
|
+
- Decode a few new values for some tags written by Canon EOS R cameras (thanks
|
91
|
+
John Moyer and Martin B.)
|
16
92
|
- Patched some Olympus WB_RBLevels tags to allow 4 values to be written as per
|
17
93
|
some newer models
|
18
94
|
- Fixed issue when writing IPTC date tags with a date/time value containing
|
@@ -47,6 +123,10 @@ Apr. 23, 2024 - Version 12.84
|
|
47
123
|
- Decode a few more Apple tags and a new CanonVRD tag
|
48
124
|
- Enhanced Geolocation feature with the ability to return any number of nearby
|
49
125
|
cities
|
126
|
+
- Allow coordinates to be entered without comma separator for the Geolocation
|
127
|
+
feature as long as both coordinates have a decimal point
|
128
|
+
- Changed -p option to iterate through sub-documents if they exist even if -ee
|
129
|
+
isn't used
|
50
130
|
- Fixed long-standing bug in Windows version that didn't properly handle dates
|
51
131
|
older than 50 years when writing FileModifyDate or FileCreateDate
|
52
132
|
- Fixed API TimeZone option to work in Windows
|
data/bin/MANIFEST
CHANGED
data/bin/META.json
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
"Phil Harvey (philharvey66 at gmail.com)"
|
5
5
|
],
|
6
6
|
"dynamic_config" : 1,
|
7
|
-
"generated_by" : "ExtUtils::MakeMaker version
|
7
|
+
"generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240",
|
8
8
|
"license" : [
|
9
9
|
"perl_5"
|
10
10
|
],
|
@@ -50,5 +50,5 @@
|
|
50
50
|
}
|
51
51
|
},
|
52
52
|
"release_status" : "stable",
|
53
|
-
"version" : "12.
|
53
|
+
"version" : "12.92"
|
54
54
|
}
|
data/bin/META.yml
CHANGED
@@ -3,32 +3,32 @@ abstract: 'Read and write meta information'
|
|
3
3
|
author:
|
4
4
|
- 'Phil Harvey (philharvey66 at gmail.com)'
|
5
5
|
build_requires:
|
6
|
-
ExtUtils::MakeMaker: 0
|
6
|
+
ExtUtils::MakeMaker: '0'
|
7
7
|
configure_requires:
|
8
|
-
ExtUtils::MakeMaker: 0
|
8
|
+
ExtUtils::MakeMaker: '0'
|
9
9
|
dynamic_config: 1
|
10
|
-
generated_by: 'ExtUtils::MakeMaker version
|
10
|
+
generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240'
|
11
11
|
license: perl
|
12
12
|
meta-spec:
|
13
13
|
url: http://module-build.sourceforge.net/META-spec-v1.4.html
|
14
|
-
version: 1.4
|
14
|
+
version: '1.4'
|
15
15
|
name: Image-ExifTool
|
16
16
|
no_index:
|
17
17
|
directory:
|
18
18
|
- t
|
19
19
|
- inc
|
20
20
|
recommends:
|
21
|
-
Archive::Zip: 0
|
22
|
-
Compress::Raw::Lzma: 0
|
23
|
-
Compress::Zlib: 0
|
24
|
-
Digest::MD5: 0
|
25
|
-
Digest::SHA: 0
|
26
|
-
IO::Compress::Brotli: 0
|
27
|
-
IO::Compress::RawDeflate: 0
|
28
|
-
IO::Uncompress::Brotli: 0
|
29
|
-
IO::Uncompress::RawInflate: 0
|
30
|
-
POSIX::strptime: 0
|
31
|
-
Time::HiRes: 0
|
21
|
+
Archive::Zip: '0'
|
22
|
+
Compress::Raw::Lzma: '0'
|
23
|
+
Compress::Zlib: '0'
|
24
|
+
Digest::MD5: '0'
|
25
|
+
Digest::SHA: '0'
|
26
|
+
IO::Compress::Brotli: '0'
|
27
|
+
IO::Compress::RawDeflate: '0'
|
28
|
+
IO::Uncompress::Brotli: '0'
|
29
|
+
IO::Uncompress::RawInflate: '0'
|
30
|
+
POSIX::strptime: '0'
|
31
|
+
Time::HiRes: '0'
|
32
32
|
requires:
|
33
|
-
perl: 5.004
|
34
|
-
version: 12.
|
33
|
+
perl: '5.004'
|
34
|
+
version: '12.92'
|
data/bin/README
CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
|
|
109
109
|
terminal window to extract and run ExifTool:
|
110
110
|
|
111
111
|
cd ~/Desktop
|
112
|
-
gzip -dc Image-ExifTool-12.
|
113
|
-
cd Image-ExifTool-12.
|
112
|
+
gzip -dc Image-ExifTool-12.92.tar.gz | tar -xf -
|
113
|
+
cd Image-ExifTool-12.92
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
115
115
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
@@ -209,6 +209,7 @@ distribution package:
|
|
209
209
|
gps2utm.config - Generate UTM coordinate tags from GPS info
|
210
210
|
guano.config - Decode individual tags from Guano metadata
|
211
211
|
nksc.config - Decode tags in Nikon ViewNX NKSC files
|
212
|
+
onone.config - Definitions for writing On1 XMP tags
|
212
213
|
photoshop_paths.config - For extracting or copying Photoshop paths
|
213
214
|
picasa_faces.config - Convert from Picasa to MWG/MP face regions
|
214
215
|
pix4d.config - Definitions for writing Pix4D XMP tags
|
data/bin/build_geolocation
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/perl
|
1
|
+
#!/usr/bin/env perl
|
2
2
|
#-------------------------------------------------------------------------------
|
3
3
|
# File: build_geolocation
|
4
4
|
#
|
@@ -15,6 +15,7 @@
|
|
15
15
|
# 2024-04-24 - PH Fixed problem with population exponent when run
|
16
16
|
# under ActivePerl
|
17
17
|
# 2024-04-29 - PH Added feature types and default to db v1.03
|
18
|
+
# 2024-06-13 - PH Tweaked case of imported feature types
|
18
19
|
#
|
19
20
|
# Notes: Requires these files from https://download.geonames.org/export/
|
20
21
|
#
|
@@ -208,8 +209,9 @@ Syntax: build_geolocation [OPTIONS] [DBFILE] ...
|
|
208
209
|
Options:
|
209
210
|
DBFILE - Input database file name or directory. Multiple input database
|
210
211
|
files may be specified. The -p, -c and -cp options apply to
|
211
|
-
the database that comes after them on the command line.
|
212
|
-
|
212
|
+
the database that comes after them on the command line. The
|
213
|
+
other input files are assumed to be in the same directory as
|
214
|
+
the first database file. Default is "$dbFile".
|
213
215
|
-p POP - Minimum population for cities to include. POP may be a number
|
214
216
|
or be of the form "CC[,C2...]=###" to set different limits for
|
215
217
|
specific countries/regions, where CC and C2 are country codes
|
@@ -250,7 +252,7 @@ Input files (download from https://download.geonames.org/export/dump/):
|
|
250
252
|
$countryFile - mandatory country names file
|
251
253
|
$regionFile - mandatory region names file
|
252
254
|
$admin2File - mandatory subregion names file
|
253
|
-
$featureFile - optional feature codes file
|
255
|
+
$featureFile - optional feature codes file(s)
|
254
256
|
$altNamesFile - optional alternate names file (must exist to
|
255
257
|
to generate $outAltNames and $geoLang files)
|
256
258
|
|
@@ -478,6 +480,7 @@ if (open INFILE, '<', "$dbdir/$featureFile") {
|
|
478
480
|
next unless $featureCodes{$items[0]};
|
479
481
|
my $name = ucfirst $items[1];
|
480
482
|
$name =~ s/ ([a-z])/ \U$1/g;
|
483
|
+
$name =~ s/(.)\b(Of|Or|A|An|On|In|The|By|For|And)\b/$1\L$2/g;
|
481
484
|
$featureNames{$items[0]} = $name;
|
482
485
|
}
|
483
486
|
close INFILE;
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# File: onone.config
|
3
|
+
#
|
4
|
+
# Description: This config file defines On1 XMP tags for writing.
|
5
|
+
#
|
6
|
+
# Usage: exiftool -config onone.config -UserFlag=VALUE FILE ...
|
7
|
+
#
|
8
|
+
# Requires: ExifTool version 10.28 or later
|
9
|
+
#
|
10
|
+
# Revisions: 2024/07/10 - P. Harvey Created
|
11
|
+
#------------------------------------------------------------------------------
|
12
|
+
|
13
|
+
%Image::ExifTool::UserDefined = (
|
14
|
+
'Image::ExifTool::XMP::Main' => {
|
15
|
+
onone => {
|
16
|
+
SubDirectory => { TagTable => 'Image::ExifTool::UserDefined::onone' },
|
17
|
+
},
|
18
|
+
},
|
19
|
+
);
|
20
|
+
|
21
|
+
%Image::ExifTool::UserDefined::onone = (
|
22
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-onone', 2 => 'Other' },
|
23
|
+
NAMESPACE => { 'onone' => 'http://www.ononesoftware.com/vcb/1.0/' },
|
24
|
+
WRITABLE => 'string',
|
25
|
+
UserFlag => { },
|
26
|
+
);
|
27
|
+
|
28
|
+
1; #end
|
data/bin/exiftool
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/perl
|
1
|
+
#!/usr/bin/env perl
|
2
2
|
#------------------------------------------------------------------------------
|
3
3
|
# File: exiftool
|
4
4
|
#
|
@@ -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.92';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -51,7 +51,7 @@ sub CleanXML($);
|
|
51
51
|
sub EncodeXML($);
|
52
52
|
sub FormatXML($$$);
|
53
53
|
sub EscapeJSON($;$);
|
54
|
-
sub FormatJSON(
|
54
|
+
sub FormatJSON($$$;$);
|
55
55
|
sub PrintCSV();
|
56
56
|
sub AddGroups($$$$);
|
57
57
|
sub ConvertBinary($);
|
@@ -1802,7 +1802,12 @@ if ($outOpt) {
|
|
1802
1802
|
my $type = GetFileType($outOpt);
|
1803
1803
|
if ($type) {
|
1804
1804
|
# (must test original file name because we can write .webp but not other RIFF types)
|
1805
|
-
|
1805
|
+
my $canWrite = CanWrite($outOpt);
|
1806
|
+
unless ($canWrite) {
|
1807
|
+
if (defined $canWrite and $canWrite eq '') {
|
1808
|
+
$type = Image::ExifTool::GetFileExtension($outOpt);
|
1809
|
+
$type = uc($outOpt) unless defined $type;
|
1810
|
+
}
|
1806
1811
|
Warn "Can't write $type files\n";
|
1807
1812
|
$rtnVal = 1;
|
1808
1813
|
next;
|
@@ -2305,8 +2310,8 @@ sub GetImageInfo($$)
|
|
2305
2310
|
# output using print format file (-p) option
|
2306
2311
|
my ($type, $doc, $grp, $lastDoc, $cache);
|
2307
2312
|
$fileTrailer = '';
|
2308
|
-
# repeat for each
|
2309
|
-
if (
|
2313
|
+
# repeat for each embedded document if necessary (only if -ee used)
|
2314
|
+
if ($et->Options('ExtractEmbedded')) {
|
2310
2315
|
# (cache tag keys if there are sub-documents)
|
2311
2316
|
$lastDoc = $$et{DOC_COUNT} and $cache = { };
|
2312
2317
|
} else {
|
@@ -2366,7 +2371,7 @@ sub GetImageInfo($$)
|
|
2366
2371
|
my $errs = $et->GetInfo('Warning', 'Error');
|
2367
2372
|
PrintErrors($et, $errs, $file) and EFile($file);
|
2368
2373
|
} elsif (not $disableOutput) {
|
2369
|
-
my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep);
|
2374
|
+
my ($tag, $line, %noDups, %csvInfo, $bra, $ket, $sep, $quote);
|
2370
2375
|
if ($fp) {
|
2371
2376
|
# print file header (only once)
|
2372
2377
|
if ($fileHeader) {
|
@@ -2409,6 +2414,7 @@ sub GetImageInfo($$)
|
|
2409
2414
|
} elsif ($json) {
|
2410
2415
|
# set delimiters for JSON or PHP output
|
2411
2416
|
($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
|
2417
|
+
$quote = 1 if $$et{OPTIONS}{StructFormat} and $$et{OPTIONS}{StructFormat} eq 'JSONQ';
|
2412
2418
|
print $fp ",\n" if $comma;
|
2413
2419
|
print $fp qq($bra\n "SourceFile"$sep ), EscapeJSON(MyConvertFileName($et,$file),1);
|
2414
2420
|
$comma = 1;
|
@@ -2702,7 +2708,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2702
2708
|
}
|
2703
2709
|
}
|
2704
2710
|
}
|
2705
|
-
FormatJSON($fp, $val, $ind);
|
2711
|
+
FormatJSON($fp, $val, $ind, $quote);
|
2706
2712
|
$comma = 1;
|
2707
2713
|
next;
|
2708
2714
|
}
|
@@ -3494,17 +3500,17 @@ sub EscapeJSON($;$)
|
|
3494
3500
|
|
3495
3501
|
#------------------------------------------------------------------------------
|
3496
3502
|
# Print JSON or PHP value
|
3497
|
-
# Inputs: 0) file reference, 1) value, 2) indentation
|
3498
|
-
sub FormatJSON(
|
3503
|
+
# Inputs: 0) file reference, 1) value, 2) indentation, 3) true to quote numbers
|
3504
|
+
sub FormatJSON($$$;$)
|
3499
3505
|
{
|
3500
3506
|
local $_;
|
3501
|
-
my ($fp, $val, $ind) = @_;
|
3507
|
+
my ($fp, $val, $ind, $quote) = @_;
|
3502
3508
|
my $comma;
|
3503
3509
|
if (not ref $val) {
|
3504
|
-
print $fp EscapeJSON($val);
|
3510
|
+
print $fp EscapeJSON($val, $quote);
|
3505
3511
|
} elsif (ref $val eq 'ARRAY') {
|
3506
3512
|
if ($joinLists and not ref $$val[0]) {
|
3507
|
-
print $fp EscapeJSON(join
|
3513
|
+
print $fp EscapeJSON(join($listSep, @$val), $quote);
|
3508
3514
|
} else {
|
3509
3515
|
my ($bra, $ket) = $json == 1 ? ('[',']') : ('Array(',')');
|
3510
3516
|
print $fp $bra;
|
@@ -5678,7 +5684,7 @@ with this command:
|
|
5678
5684
|
|
5679
5685
|
produces output like this:
|
5680
5686
|
|
5681
|
-
-- Generated by ExifTool 12.
|
5687
|
+
-- Generated by ExifTool 12.92 --
|
5682
5688
|
File: a.jpg - 2003:10:31 15:44:19
|
5683
5689
|
(f/5.6, 1/60s, ISO 100)
|
5684
5690
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -6119,7 +6125,9 @@ B<-if> and B<-fileOrder> options for details.
|
|
6119
6125
|
=item B<-fileOrder>[I<NUM>] [-]I<TAG>
|
6120
6126
|
|
6121
6127
|
Set file processing order according to the sorted value of the specified
|
6122
|
-
I<TAG>.
|
6128
|
+
I<TAG>. Without this option, files are processed in the order returned by
|
6129
|
+
the system, which is commonly by file name, but this is filesystem
|
6130
|
+
dependent. For example, to process files in order of date:
|
6123
6131
|
|
6124
6132
|
exiftool -fileOrder DateTimeOriginal DIR
|
6125
6133
|
|
@@ -18,7 +18,7 @@ use vars qw($VERSION);
|
|
18
18
|
use Image::ExifTool qw(:DataAccess :Utils);
|
19
19
|
use Image::ExifTool::ID3;
|
20
20
|
|
21
|
-
$VERSION = '1.
|
21
|
+
$VERSION = '1.13';
|
22
22
|
|
23
23
|
# information for time/date-based tags (time zero is Jan 1, 1904)
|
24
24
|
my %timeInfo = (
|
@@ -226,9 +226,13 @@ sub ProcessAIFF($$)
|
|
226
226
|
# AIFF chunks are padded to an even number of bytes
|
227
227
|
my $len2 = $len + ($len & 0x01);
|
228
228
|
if ($len2 > 100000000) {
|
229
|
-
if ($len2 >= 0x80000000
|
230
|
-
$et->
|
231
|
-
|
229
|
+
if ($len2 >= 0x80000000) {
|
230
|
+
if (not $et->Options('LargeFileSupport')) {
|
231
|
+
$et->Warn('End of processing at large chunk (LargeFileSupport not enabled)');
|
232
|
+
last;
|
233
|
+
} elsif ($et->Options('LargeFileSupport') eq '2') {
|
234
|
+
$et->WarnOnce('Skipping large chunk (LargeFileSupport is 2)');
|
235
|
+
}
|
232
236
|
}
|
233
237
|
if ($tagInfo) {
|
234
238
|
$et->Warn("Skipping large $$tagInfo{Name} chunk (> 100 MB)");
|
@@ -17,7 +17,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
use Image::ExifTool::Exif;
|
18
18
|
use Image::ExifTool::RIFF;
|
19
19
|
|
20
|
-
$VERSION = '1.
|
20
|
+
$VERSION = '1.26';
|
21
21
|
|
22
22
|
sub ProcessASF($$;$);
|
23
23
|
sub ProcessContentDescription($$$);
|
@@ -780,6 +780,9 @@ sub ProcessASF($$;$)
|
|
780
780
|
if ($size > 0x7fffffff * 4294967296) {
|
781
781
|
$err = 'Invalid ASF object size';
|
782
782
|
} elsif ($et->Options('LargeFileSupport')) {
|
783
|
+
if ($et->Options('LargeFileSupport') eq '2') {
|
784
|
+
$et->WarnOnce('Skipping large ASF object (LargeFileSupport is 2)');
|
785
|
+
}
|
783
786
|
if ($raf->Seek($size, 1)) {
|
784
787
|
$et->VPrint(0, " Skipped large ASF object ($size bytes)\n");
|
785
788
|
$pos += $size;
|
@@ -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.58';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -98,6 +98,8 @@ my %tweakOrder = (
|
|
98
98
|
GIMP => 'Microsoft',
|
99
99
|
DarwinCore => 'AFCP',
|
100
100
|
MWG => 'Shortcuts',
|
101
|
+
'FujiFilm::RAF' => 'FujiFilm::RAFHeader',
|
102
|
+
'FujiFilm::RAFData' => 'FujiFilm::RAF',
|
101
103
|
);
|
102
104
|
|
103
105
|
# list of all recognized Format strings
|
@@ -423,11 +425,11 @@ parameters, as well as proprietary information written by many camera
|
|
423
425
|
models. Tags with a question mark after their name are not extracted unless
|
424
426
|
the L<Unknown|../ExifTool.html#Unknown> option is set.
|
425
427
|
|
426
|
-
When writing, ExifTool creates both QuickTime and XMP tags by
|
427
|
-
the group may be specified to write one or the other
|
428
|
-
location is specified, newly created QuickTime tags are
|
429
|
-
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags>
|
430
|
-
possible, otherwise in
|
428
|
+
When writing video files, ExifTool creates both QuickTime and XMP tags by
|
429
|
+
default, but the group may be specified to write one or the other
|
430
|
+
separately. If no location is specified, newly created QuickTime tags are
|
431
|
+
added in the L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags>
|
432
|
+
location if possible, otherwise in
|
431
433
|
L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags>, and
|
432
434
|
finally in L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags>,
|
433
435
|
but this order may be changed by setting the PREFERRED level of the
|
@@ -478,7 +480,7 @@ the original size by padding with nulls if necessary.
|
|
478
480
|
|
479
481
|
See
|
480
482
|
L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
|
481
|
-
for the official specification.
|
483
|
+
for the official QuickTime specification.
|
482
484
|
},
|
483
485
|
Photoshop => q{
|
484
486
|
Photoshop tags are found in PSD and PSB files, as well as inside embedded
|
@@ -906,6 +908,9 @@ TagID: foreach $tagID (@keys) {
|
|
906
908
|
@infoArray = GetTagInfoList($table,$tagID);
|
907
909
|
}
|
908
910
|
foreach $tagInfo (@infoArray) {
|
911
|
+
if ($binaryTable and $$tagInfo{Writable} and $$tagInfo{Writable} ne '1') {
|
912
|
+
warn("$tableName $$tagInfo{Name} Writable should be 1, not $$tagInfo{Writable}\n");
|
913
|
+
}
|
909
914
|
my $name = $$tagInfo{Name};
|
910
915
|
if ($$tagInfo{WritePseudo}) {
|
911
916
|
push @writePseudo, $name;
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
88
88
|
sub ProcessExifInfo($$$);
|
89
89
|
sub SwapWords($);
|
90
90
|
|
91
|
-
$VERSION = '4.
|
91
|
+
$VERSION = '4.79';
|
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)
|
@@ -630,6 +630,7 @@ $VERSION = '4.76';
|
|
630
630
|
'61182.53' => 'Canon RF 28mm F2.8 STM', #42
|
631
631
|
'61182.54' => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
632
632
|
'61182.55' => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
633
|
+
'61182.56' => 'Canon RF 35mm F1.4 L VCM', #42
|
633
634
|
65535 => 'n/a',
|
634
635
|
);
|
635
636
|
|
@@ -2128,6 +2129,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2128
2129
|
TagTable => 'Image::ExifTool::Canon::RawBurstInfo',
|
2129
2130
|
}
|
2130
2131
|
},
|
2132
|
+
0x4059 => { #forum16111
|
2133
|
+
Name => 'LevelInfo',
|
2134
|
+
SubDirectory => {
|
2135
|
+
Validate => 'Image::ExifTool::Canon::Validate($dirData,$subdirStart,$size)',
|
2136
|
+
TagTable => 'Image::ExifTool::Canon::LevelInfo',
|
2137
|
+
}
|
2138
|
+
},
|
2131
2139
|
);
|
2132
2140
|
|
2133
2141
|
#..............................................................................
|
@@ -2590,6 +2598,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
2590
2598
|
},
|
2591
2599
|
# 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
|
2592
2600
|
# (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
|
2601
|
+
# 48 - 3 for CR2/CR3, 4 or 7 for JPG, -1 for edited JPG (see forum16127)
|
2593
2602
|
51 => { #forum16036 (EOS R models)
|
2594
2603
|
Name => 'Clarity',
|
2595
2604
|
PrintConv => {
|
@@ -4722,12 +4731,15 @@ my %ciMaxFocal = (
|
|
4722
4731
|
FIRST_ENTRY => 0,
|
4723
4732
|
PRIORITY => 0,
|
4724
4733
|
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
4725
|
-
NOTES => 'CameraInfo tags for the EOS R6.',
|
4734
|
+
NOTES => 'CameraInfo tags for the EOS R5 and R6.',
|
4735
|
+
# (see forum16111 for more notes on these tags)
|
4736
|
+
# 0x0a5d - some sort of sequence number starting from 1 (ref forum16111)
|
4726
4737
|
0x0af1 => { #forum15210/15579
|
4727
4738
|
Name => 'ShutterCount',
|
4728
4739
|
Format => 'int32u',
|
4729
4740
|
Notes => 'includes electronic + mechanical shutter',
|
4730
4741
|
},
|
4742
|
+
# 0x0bb7 - counts down during focus stack (ref forum16111)
|
4731
4743
|
);
|
4732
4744
|
|
4733
4745
|
# ref https://exiftool.org/forum/index.php?topic=15356.0
|
@@ -6389,8 +6401,14 @@ my %ciMaxFocal = (
|
|
6389
6401
|
10 => 'AF Point Expansion (8 point)', #forum6237
|
6390
6402
|
11 => 'Flexizone Multi (49 point)', #PH (NC, EOS M, live view; 750D 49 points)
|
6391
6403
|
12 => 'Flexizone Multi (9 point)', #PH (750D, 9 points)
|
6392
|
-
13 => 'Flexizone Single', #PH (EOS M default, live view)
|
6404
|
+
13 => 'Flexizone Single', #PH (EOS M default, live view) (R7 calls this '1-point AF', ref github268)
|
6393
6405
|
14 => 'Large Zone AF', #PH/forum6237 (7DmkII)
|
6406
|
+
16 => 'Large Zone AF (vertical)', #forum16223
|
6407
|
+
17 => 'Large Zone AF (horizontal)', #forum16223
|
6408
|
+
19 => 'Flexible Zone AF 1', #github268 (R7)
|
6409
|
+
20 => 'Flexible Zone AF 2', #github268 (R7)
|
6410
|
+
21 => 'Flexible Zone AF 3', #github268 (R7)
|
6411
|
+
22 => 'Whole Area AF', #github268 (R7)
|
6394
6412
|
},
|
6395
6413
|
},
|
6396
6414
|
2 => {
|
@@ -6905,6 +6923,10 @@ my %ciMaxFocal = (
|
|
6905
6923
|
Name => 'FlashExposureLock',
|
6906
6924
|
PrintConv => \%offOn,
|
6907
6925
|
},
|
6926
|
+
32 => { #forum16257
|
6927
|
+
Name => 'AntiFlicker',
|
6928
|
+
PrintConv => \%offOn,
|
6929
|
+
},
|
6908
6930
|
0x3d => { #IB
|
6909
6931
|
Name => 'RFLensType',
|
6910
6932
|
Format => 'int16u',
|
@@ -6969,6 +6991,7 @@ my %ciMaxFocal = (
|
|
6969
6991
|
313 => 'Canon RF 28mm F2.8 STM', #42
|
6970
6992
|
314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
6971
6993
|
315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
6994
|
+
316 => 'Canon RF 35mm F1.4 L VCM', #42
|
6972
6995
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
6973
6996
|
},
|
6974
6997
|
},
|
@@ -8768,7 +8791,7 @@ my %ciMaxFocal = (
|
|
8768
8791
|
Name => 'DigitalLensOptimizer',
|
8769
8792
|
PrintConv => {
|
8770
8793
|
0 => 'Off',
|
8771
|
-
1 => '
|
8794
|
+
1 => 'Standard',
|
8772
8795
|
2 => 'High',
|
8773
8796
|
},
|
8774
8797
|
},
|
@@ -9106,19 +9129,19 @@ my %filterConv = (
|
|
9106
9129
|
2 => 'Disable',
|
9107
9130
|
},
|
9108
9131
|
},
|
9109
|
-
18 => { #52
|
9132
|
+
18 => { #52/forum16223
|
9110
9133
|
Name => 'AFStatusViewfinder',
|
9111
|
-
Condition => '$$self{Model} =~ /1D X/',
|
9112
|
-
Notes => '1D X
|
9134
|
+
Condition => '$$self{Model} =~ /EOS-1D X|EOS R/',
|
9135
|
+
Notes => '1D X and R models',
|
9113
9136
|
PrintConv => {
|
9114
9137
|
0 => 'Show in Field of View',
|
9115
9138
|
1 => 'Show Outside View',
|
9116
9139
|
},
|
9117
9140
|
},
|
9118
|
-
19 => { #52
|
9141
|
+
19 => { #52/forum16223
|
9119
9142
|
Name => 'InitialAFPointInServo',
|
9120
|
-
Condition => '$$self{Model} =~ /1D X/',
|
9121
|
-
Notes => '1D X
|
9143
|
+
Condition => '$$self{Model} =~ /EOS-1D X|EOS R/',
|
9144
|
+
Notes => '1D X and R models',
|
9122
9145
|
PrintConv => {
|
9123
9146
|
0 => 'Initial AF Point Selected',
|
9124
9147
|
1 => 'Manual AF Point',
|
@@ -9150,6 +9173,48 @@ my %filterConv = (
|
|
9150
9173
|
2 => 'RawBurstImageCount',
|
9151
9174
|
);
|
9152
9175
|
|
9176
|
+
# level information (ref forum16111, EOS R5)
|
9177
|
+
%Image::ExifTool::Canon::LevelInfo = (
|
9178
|
+
%binaryDataAttrs,
|
9179
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
9180
|
+
FORMAT => 'int32s',
|
9181
|
+
FIRST_ENTRY => 1,
|
9182
|
+
4 => {
|
9183
|
+
Name => 'RollAngle',
|
9184
|
+
Notes => 'converted to degrees of clockwise camera rotation',
|
9185
|
+
ValueConv => '$val > 1800 and $val -= 3600; -$val / 10',
|
9186
|
+
ValueConvInv => '$val > 0 and $val -= 360; int(-$val * 10 + 0.5)',
|
9187
|
+
},
|
9188
|
+
5 => {
|
9189
|
+
Name => 'PitchAngle',
|
9190
|
+
Notes => 'converted to degrees of upward camera tilt',
|
9191
|
+
ValueConv => '$val > 1800 and $val -= 3600; $val / 10',
|
9192
|
+
ValueConvInv => '$val < 0 and $val += 360; int($val * 10 + 0.5)',
|
9193
|
+
},
|
9194
|
+
7 => {
|
9195
|
+
Name => 'FocalLength',
|
9196
|
+
ValueConv => '$val / 10',
|
9197
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
9198
|
+
PrintConv => '"$val mm"',
|
9199
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
9200
|
+
},
|
9201
|
+
8 => {
|
9202
|
+
Name => 'MinFocalLength',
|
9203
|
+
ValueConv => '$val / 10',
|
9204
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
9205
|
+
PrintConv => '"$val mm"',
|
9206
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
9207
|
+
},
|
9208
|
+
9 => {
|
9209
|
+
Name => 'MaxFocalLength',
|
9210
|
+
ValueConv => '$val / 10',
|
9211
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
9212
|
+
PrintConv => '"$val mm"',
|
9213
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
9214
|
+
},
|
9215
|
+
|
9216
|
+
);
|
9217
|
+
|
9153
9218
|
# Canon UUID atoms (ref PH, SX280)
|
9154
9219
|
%Image::ExifTool::Canon::uuid = (
|
9155
9220
|
GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' },
|