exiftool-vendored.pl 12.85.0 → 12.89.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 +69 -0
- package/bin/MANIFEST +1 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +16 -16
- package/bin/README +3 -2
- package/bin/build_geolocation +6 -3
- package/bin/config_files/example.config +5 -0
- package/bin/config_files/onone.config +28 -0
- package/bin/exiftool +20 -12
- package/bin/lib/Image/ExifTool/AIFF.pm +8 -4
- package/bin/lib/Image/ExifTool/ASF.pm +4 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -8
- package/bin/lib/Image/ExifTool/Canon.pm +90 -6
- package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonVRD.pm +5 -2
- package/bin/lib/Image/ExifTool/FujiFilm.pm +46 -4
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +6 -0
- package/bin/lib/Image/ExifTool/ID3.pm +39 -33
- package/bin/lib/Image/ExifTool/InDesign.pm +8 -4
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
- package/bin/lib/Image/ExifTool/Matroska.pm +66 -10
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +3 -2
- package/bin/lib/Image/ExifTool/Olympus.pm +27 -17
- package/bin/lib/Image/ExifTool/Panasonic.pm +1 -0
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
- package/bin/lib/Image/ExifTool/Pentax.pm +80 -14
- package/bin/lib/Image/ExifTool/QuickTime.pm +52 -12
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +24 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +20 -10
- package/bin/lib/Image/ExifTool/Samsung.pm +29 -1
- package/bin/lib/Image/ExifTool/Sony.pm +21 -11
- package/bin/lib/Image/ExifTool/TagLookup.pm +6804 -6788
- package/bin/lib/Image/ExifTool/TagNames.pod +111 -50
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +84 -15
- package/bin/lib/Image/ExifTool/Writer.pl +7 -4
- package/bin/lib/Image/ExifTool/XMP.pm +8 -8
- package/bin/lib/Image/ExifTool/XMP2.pl +51 -30
- package/bin/lib/Image/ExifTool/ZIP.pm +8 -4
- package/bin/lib/Image/ExifTool.pm +65 -42
- package/bin/lib/Image/ExifTool.pod +28 -20
- package/bin/perl-Image-ExifTool.spec +1 -1
- package/bin/pp_build_exe.args +4 -4
- package/package.json +3 -3
package/bin/Changes
CHANGED
|
@@ -7,6 +7,73 @@ 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 12, 2024 - Version 12.89
|
|
11
|
+
|
|
12
|
+
- Added new Sony lenses and updated decoding of some tags (thanks Jos Roost)
|
|
13
|
+
- Minor change to description of NKA files
|
|
14
|
+
- Fixed Archive::Zip problem in Windows executable version
|
|
15
|
+
|
|
16
|
+
July 11, 2024 - Version 12.88 - "New Windows/MacOS packages"
|
|
17
|
+
|
|
18
|
+
-
|
|
19
|
+
|
|
20
|
+
NOTE: The install procedure for the Windows executable has changed!
|
|
21
|
+
- Windows EXE version now uses Oliver Betz's bundle with Strawberry Perl and
|
|
22
|
+
comes in 32- and 64-bit versions
|
|
23
|
+
- MacOS distribution now uses a flattened package
|
|
24
|
+
- Added ability to read/write deflate-compressed XMP in HEIC files
|
|
25
|
+
- Added a new Canon LensType (thanks Norbert Wasser)
|
|
26
|
+
- Added a new XMP-GCamera tag (thanks Herb)
|
|
27
|
+
- Added a new Nikon LensID
|
|
28
|
+
- Added a few new Canon AFAreaMode values (thanks Wernfried)
|
|
29
|
+
- Added config_files/onone.config to the distribution
|
|
30
|
+
- Decode timed accelerometer readings from NextBase 622GW videos
|
|
31
|
+
- Decode Pentax K-3III CameraOrentation (thanks Peter)
|
|
32
|
+
- Improved German translation for LensModel
|
|
33
|
+
- Enhanced the API StructFormat JSONQ setting to quote all JSON values, even
|
|
34
|
+
if they aren't in a structure
|
|
35
|
+
- Changed -geolocate option so specifying the Keys group writes
|
|
36
|
+
Keys:GPSPosition only if an input city is specified, and Keys:LocationName
|
|
37
|
+
only for input GPS coordinates
|
|
38
|
+
- Tweaked API Geolocation option recognized space-separated lat/lon even when
|
|
39
|
+
there is no decimal point in the numbers
|
|
40
|
+
- API Changes:
|
|
41
|
+
- Changed LargeFileSupport default to 2 and added a warning if a large
|
|
42
|
+
chunk is encountered. Set to 1 to avoid the warning.
|
|
43
|
+
|
|
44
|
+
June 13, 2024 - Version 12.87
|
|
45
|
+
|
|
46
|
+
- Added ability to write Google Container XMP tags (using the namespace prefix
|
|
47
|
+
'GContainer' to avoid conflict with the Google Device Container prefix)
|
|
48
|
+
- Decode a few new tags for the Canon EOS R5 (thanks John Moyer)
|
|
49
|
+
- Decode battery information for the Pentax K-3 III (thanks Peter)
|
|
50
|
+
- Decode RAFCompression from FujiFilm RAF images (thanks Albert Shan)
|
|
51
|
+
- Avoid reporting FileSize for pipes
|
|
52
|
+
- Updated Geolocation databases from current geonames.org files
|
|
53
|
+
- Enhanced Geolocation feature to allow lat/lon to be input with a space
|
|
54
|
+
separator instead of a comma
|
|
55
|
+
- Skip over Matroska Cluster if necessary to read Tags when referenced from
|
|
56
|
+
SeekHead
|
|
57
|
+
- Changed conversion for Matroska SeekID (now in hex with tag name in
|
|
58
|
+
brackets) and SeekPosition (now returns an absolute offset)
|
|
59
|
+
- Fixed problem writing XMP-Device:EarthPos coordinates
|
|
60
|
+
- Fixed typo in a value of Canon:DigitalLensOptimizer (thanks Martin B.)
|
|
61
|
+
- Fixed decoding of Matroska VideoScanType
|
|
62
|
+
- Fixed misleading error message when -o option was used to write to an
|
|
63
|
+
unsupported file type
|
|
64
|
+
|
|
65
|
+
June 7, 2024 - Version 12.86
|
|
66
|
+
|
|
67
|
+
- Added a new value for a couple of Olympus tags (thanks Herb)
|
|
68
|
+
- Improved handling of ID3 user-defined tags
|
|
69
|
+
- Decode all JPEG segments from RICO box in Ricoh MOV videos
|
|
70
|
+
- Decode a few new values for some tags written by Canon EOS R cameras (thanks
|
|
71
|
+
John Moyer and Martin B.)
|
|
72
|
+
- Patched some Olympus WB_RBLevels tags to allow 4 values to be written as per
|
|
73
|
+
some newer models
|
|
74
|
+
- Fixed issue when writing IPTC date tags with a date/time value containing
|
|
75
|
+
subseconds with 4 or more digits
|
|
76
|
+
|
|
10
77
|
May 21, 2024 - Version 12.85
|
|
11
78
|
|
|
12
79
|
- Added GeolocationFeatureType tag
|
|
@@ -36,6 +103,8 @@ Apr. 23, 2024 - Version 12.84
|
|
|
36
103
|
- Decode a few more Apple tags and a new CanonVRD tag
|
|
37
104
|
- Enhanced Geolocation feature with the ability to return any number of nearby
|
|
38
105
|
cities
|
|
106
|
+
- Allow coordinates to be entered without comma separator for the Geolocation
|
|
107
|
+
feature as long as both coordinates have a decimal point
|
|
39
108
|
- Fixed long-standing bug in Windows version that didn't properly handle dates
|
|
40
109
|
older than 50 years when writing FileModifyDate or FileCreateDate
|
|
41
110
|
- Fixed API TimeZone option to work in Windows
|
package/bin/MANIFEST
CHANGED
package/bin/META.json
CHANGED
package/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: 0
|
|
10
10
|
generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240, CPAN::Meta::Converter version 2.133380'
|
|
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.89'
|
package/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.89.tar.gz | tar -xf -
|
|
113
|
+
cd Image-ExifTool-12.89
|
|
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
|
package/bin/build_geolocation
CHANGED
|
@@ -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;
|
|
@@ -293,6 +293,11 @@
|
|
|
293
293
|
NewXMPxxxStructX => { Name => 'SomeOtherName', Flat => 1 },
|
|
294
294
|
);
|
|
295
295
|
|
|
296
|
+
# the namespace may be registered so ExifTool generates the expected family 1
|
|
297
|
+
# group names when reading if the UserDefined namespace uses a different prefix
|
|
298
|
+
require Image::ExifTool::XMP;
|
|
299
|
+
Image::ExifTool::XMP::RegisterNamespace(\%Image::ExifTool::UserDefined::xxx);
|
|
300
|
+
|
|
296
301
|
# Adding a new MIE group requires a few extra definitions
|
|
297
302
|
use Image::ExifTool::MIE;
|
|
298
303
|
%Image::ExifTool::UserDefined::MIETest = (
|
|
@@ -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
|
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.89';
|
|
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;
|
|
@@ -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.89 --
|
|
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
|
|
@@ -600,7 +602,8 @@ running ExifTool the old information may be removed permanently using the
|
|
|
600
602
|
DNG => q{
|
|
601
603
|
The main DNG tags are found in the EXIF table. The tables below define only
|
|
602
604
|
information found within structures of these main DNG tag values. See
|
|
603
|
-
L<
|
|
605
|
+
L<https://helpx.adobe.com/camera-raw/digital-negative.html> for the official
|
|
606
|
+
DNG specification.
|
|
604
607
|
},
|
|
605
608
|
MPEG => q{
|
|
606
609
|
The MPEG format doesn't specify any file-level meta information. In lieu of
|
|
@@ -905,6 +908,9 @@ TagID: foreach $tagID (@keys) {
|
|
|
905
908
|
@infoArray = GetTagInfoList($table,$tagID);
|
|
906
909
|
}
|
|
907
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
|
+
}
|
|
908
914
|
my $name = $$tagInfo{Name};
|
|
909
915
|
if ($$tagInfo{WritePseudo}) {
|
|
910
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.78';
|
|
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.75';
|
|
|
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,12 @@ 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
|
+
19 => 'Flexible Zone AF 1', #github268 (R7)
|
|
6407
|
+
20 => 'Flexible Zone AF 2', #github268 (R7)
|
|
6408
|
+
21 => 'Flexible Zone AF 3', #github268 (R7)
|
|
6409
|
+
22 => 'Whole Area AF', #github268 (R7)
|
|
6394
6410
|
},
|
|
6395
6411
|
},
|
|
6396
6412
|
2 => {
|
|
@@ -6969,6 +6985,7 @@ my %ciMaxFocal = (
|
|
|
6969
6985
|
313 => 'Canon RF 28mm F2.8 STM', #42
|
|
6970
6986
|
314 => 'Canon RF 24-105mm F2.8 L IS USM Z', #42
|
|
6971
6987
|
315 => 'Canon RF-S 10-18mm F4.5-6.3 IS STM', #42
|
|
6988
|
+
316 => 'Canon RF 35mm F1.4 L VCM', #42
|
|
6972
6989
|
# Note: add new RF lenses to %canonLensTypes with ID 61182
|
|
6973
6990
|
},
|
|
6974
6991
|
},
|
|
@@ -8768,7 +8785,7 @@ my %ciMaxFocal = (
|
|
|
8768
8785
|
Name => 'DigitalLensOptimizer',
|
|
8769
8786
|
PrintConv => {
|
|
8770
8787
|
0 => 'Off',
|
|
8771
|
-
1 => '
|
|
8788
|
+
1 => 'Standard',
|
|
8772
8789
|
2 => 'High',
|
|
8773
8790
|
},
|
|
8774
8791
|
},
|
|
@@ -9001,20 +9018,32 @@ my %filterConv = (
|
|
|
9001
9018
|
4 => 'Focus High Priority',
|
|
9002
9019
|
},
|
|
9003
9020
|
},
|
|
9004
|
-
7 => { #
|
|
9021
|
+
7 => [{ #forum16068
|
|
9005
9022
|
Name => 'USMLensElectronicMF',
|
|
9023
|
+
Condition => '$$self{Model} =~ /EOS R\d/',
|
|
9024
|
+
Notes => 'EOS R models',
|
|
9025
|
+
PrintConv => {
|
|
9026
|
+
0 => 'Disable After One-Shot',
|
|
9027
|
+
1 => 'One-Shot -> Enabled',
|
|
9028
|
+
2 => 'One-Shot -> Enabled (magnify)',
|
|
9029
|
+
3 => 'Disable in AF Mode',
|
|
9030
|
+
},
|
|
9031
|
+
},{ #52
|
|
9032
|
+
Name => 'USMLensElectronicMF',
|
|
9033
|
+
Notes => 'Other models',
|
|
9006
9034
|
PrintConv => {
|
|
9007
9035
|
0 => 'Enable After AF',
|
|
9008
9036
|
1 => 'Disable After AF',
|
|
9009
9037
|
2 => 'Disable in AF Mode',
|
|
9010
9038
|
},
|
|
9011
|
-
},
|
|
9039
|
+
}],
|
|
9012
9040
|
8 => { #52
|
|
9013
9041
|
Name => 'AFAssistBeam',
|
|
9014
9042
|
PrintConv => {
|
|
9015
9043
|
0 => 'Enable',
|
|
9016
9044
|
1 => 'Disable',
|
|
9017
9045
|
2 => 'IR AF Assist Beam Only',
|
|
9046
|
+
3 => 'LED AF Assist Beam Only', #forum16068
|
|
9018
9047
|
},
|
|
9019
9048
|
},
|
|
9020
9049
|
9 => { #52
|
|
@@ -9113,6 +9142,19 @@ my %filterConv = (
|
|
|
9113
9142
|
2 => 'Auto', #PH (1DXmkII)
|
|
9114
9143
|
},
|
|
9115
9144
|
},
|
|
9145
|
+
20 => { #forum16068
|
|
9146
|
+
Name => 'SubjectToDetect',
|
|
9147
|
+
PrintConv => {
|
|
9148
|
+
0 => 'None',
|
|
9149
|
+
1 => 'People',
|
|
9150
|
+
2 => 'Animals',
|
|
9151
|
+
3 => 'Vehicles',
|
|
9152
|
+
},
|
|
9153
|
+
},
|
|
9154
|
+
24 => { #forum16068
|
|
9155
|
+
Name => 'EyeDetection',
|
|
9156
|
+
PrintConv => \%offOn,
|
|
9157
|
+
},
|
|
9116
9158
|
);
|
|
9117
9159
|
|
|
9118
9160
|
# RAW burst mode info (MakerNotes tag 0x403f) (ref 25)
|
|
@@ -9125,6 +9167,48 @@ my %filterConv = (
|
|
|
9125
9167
|
2 => 'RawBurstImageCount',
|
|
9126
9168
|
);
|
|
9127
9169
|
|
|
9170
|
+
# level information (ref forum16111, EOS R5)
|
|
9171
|
+
%Image::ExifTool::Canon::LevelInfo = (
|
|
9172
|
+
%binaryDataAttrs,
|
|
9173
|
+
GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
|
|
9174
|
+
FORMAT => 'int32s',
|
|
9175
|
+
FIRST_ENTRY => 1,
|
|
9176
|
+
4 => {
|
|
9177
|
+
Name => 'RollAngle',
|
|
9178
|
+
Notes => 'converted to degrees of clockwise camera rotation',
|
|
9179
|
+
ValueConv => '$val > 1800 and $val -= 3600; -$val / 10',
|
|
9180
|
+
ValueConvInv => '$val > 0 and $val -= 360; int(-$val * 10 + 0.5)',
|
|
9181
|
+
},
|
|
9182
|
+
5 => {
|
|
9183
|
+
Name => 'PitchAngle',
|
|
9184
|
+
Notes => 'converted to degrees of upward camera tilt',
|
|
9185
|
+
ValueConv => '$val > 1800 and $val -= 3600; $val / 10',
|
|
9186
|
+
ValueConvInv => '$val < 0 and $val += 360; int($val * 10 + 0.5)',
|
|
9187
|
+
},
|
|
9188
|
+
7 => {
|
|
9189
|
+
Name => 'FocalLength',
|
|
9190
|
+
ValueConv => '$val / 10',
|
|
9191
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9192
|
+
PrintConv => '"$val mm"',
|
|
9193
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9194
|
+
},
|
|
9195
|
+
8 => {
|
|
9196
|
+
Name => 'MinFocalLength',
|
|
9197
|
+
ValueConv => '$val / 10',
|
|
9198
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9199
|
+
PrintConv => '"$val mm"',
|
|
9200
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9201
|
+
},
|
|
9202
|
+
9 => {
|
|
9203
|
+
Name => 'MaxFocalLength',
|
|
9204
|
+
ValueConv => '$val / 10',
|
|
9205
|
+
ValueConvInv => 'int($val * 10 + 0.5)',
|
|
9206
|
+
PrintConv => '"$val mm"',
|
|
9207
|
+
PrintConvInv => '$val=~s/\s*mm//;$val',
|
|
9208
|
+
},
|
|
9209
|
+
|
|
9210
|
+
);
|
|
9211
|
+
|
|
9128
9212
|
# Canon UUID atoms (ref PH, SX280)
|
|
9129
9213
|
%Image::ExifTool::Canon::uuid = (
|
|
9130
9214
|
GROUPS => { 0 => 'MakerNotes', 1 => 'Canon', 2 => 'Video' },
|