exiftool_vendored 12.81.0 → 12.82.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/Changes +19 -1
- data/bin/MANIFEST +2 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +13 -7
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +44 -31
- data/bin/lib/Image/ExifTool/FujiFilm.pm +9 -2
- data/bin/lib/Image/ExifTool/GM.pm +543 -0
- data/bin/lib/Image/ExifTool/Geolocation.pm +43 -20
- data/bin/lib/Image/ExifTool/Nikon.pm +3 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +28 -23
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +61 -30
- data/bin/lib/Image/ExifTool/README +2 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +26 -1
- data/bin/lib/Image/ExifTool/TagNames.pod +392 -237
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +3 -1
- data/bin/lib/Image/ExifTool/Writer.pl +2 -2
- data/bin/lib/Image/ExifTool/XMP.pm +3 -2
- data/bin/lib/Image/ExifTool.pm +27 -5
- data/bin/lib/Image/ExifTool.pod +18 -11
- 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: e72fd223e20ba074cc12f4a4b8746c48911099845c2b0bdabb3066ba3b68c930
|
4
|
+
data.tar.gz: 03c78c3768b36216b3ad2c5d83d1fbd9e3e702581d2bd2cd09ce85b895fe169e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a0c7336b467061e914f44977a25fa24cb67572998306b21b1019b346ecd423a908774759c9af636f79ff3467624762cd5437d5c347e1a6475f78e6ea839fba5
|
7
|
+
data.tar.gz: b654799b378c684a8d2ec1d2638e3d16de1d9daf91b67f1c0c681fc1407872e057f94b90d630a0cc2218ec286c4d92e5c0a2df4f01ed730f9852feb527857d98
|
data/bin/Changes
CHANGED
@@ -7,6 +7,24 @@ 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
|
+
Apr. 5, 2024 - Version 12.82 - "GM PDR"
|
11
|
+
|
12
|
+
- Added support for reading GM PDR data from MP4 videos written by cars such
|
13
|
+
as Corvettes and Cameros
|
14
|
+
- Added support for reading timed GPS from Wolfbox dashcam videos
|
15
|
+
- Added "Unknown trailer" to QuickTime warnings originating from an unknown
|
16
|
+
trailer
|
17
|
+
- Added a new Nikon LensID
|
18
|
+
- Extract PreviewImage from Chigee AIO-5 dashcam videos
|
19
|
+
- Changed name and print conversion of a recently added FujiFilm tag
|
20
|
+
- Only issue "Tag not defined" warnings for the first sub-document when using
|
21
|
+
the -p option
|
22
|
+
- Fixed a Nikon Z lens name (github #250)
|
23
|
+
- Fixed Windows version so -sort works properly with -listgeo
|
24
|
+
- API Changes:
|
25
|
+
- Added PrintCSV option for optimized extraction of GM PDR data in CSV
|
26
|
+
format
|
27
|
+
|
10
28
|
Mar. 27, 2024 - Version 12.81
|
11
29
|
|
12
30
|
- Added ability to read EXIF and XMP from EXR images
|
@@ -19,8 +37,8 @@ Mar. 27, 2024 - Version 12.81
|
|
19
37
|
- Added support for new version of Canon DR4 files
|
20
38
|
- Added a number of new iTunesInfo tags
|
21
39
|
- Added a new Olympus LensType
|
22
|
-
- Allow regular expressions to be used when writing Geolocate tag
|
23
40
|
- Decode a number of new Nikon tags (thanks Warren Hatch)
|
41
|
+
- Allow regular expressions to be used when writing Geolocate tag
|
24
42
|
- Enhanced writing of Geolocate tag to also write Keys:LocationName
|
25
43
|
- Cache the results of the last reverse geolocation search to speed batch
|
26
44
|
processing when multiple files have the same search parameters
|
data/bin/MANIFEST
CHANGED
@@ -80,6 +80,7 @@ html/TagNames/FujiFilm.html
|
|
80
80
|
html/TagNames/GE.html
|
81
81
|
html/TagNames/GIF.html
|
82
82
|
html/TagNames/GIMP.html
|
83
|
+
html/TagNames/GM.html
|
83
84
|
html/TagNames/GPS.html
|
84
85
|
html/TagNames/GeoTiff.html
|
85
86
|
html/TagNames/GoPro.html
|
@@ -293,6 +294,7 @@ lib/Image/ExifTool/FujiFilm.pm
|
|
293
294
|
lib/Image/ExifTool/GE.pm
|
294
295
|
lib/Image/ExifTool/GIF.pm
|
295
296
|
lib/Image/ExifTool/GIMP.pm
|
297
|
+
lib/Image/ExifTool/GM.pm
|
296
298
|
lib/Image/ExifTool/GPS.pm
|
297
299
|
lib/Image/ExifTool/GeoLang/cs.pm
|
298
300
|
lib/Image/ExifTool/GeoLang/de.pm
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
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.82.tar.gz | tar -xf -
|
113
|
+
cd Image-ExifTool-12.82
|
114
114
|
./exiftool t/images/ExifTool.jpg
|
115
115
|
|
116
116
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '12.
|
14
|
+
my $version = '12.82';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -217,7 +217,7 @@ my $tmpFile; # temporary file to delete on exit
|
|
217
217
|
my $tmpText; # temporary text file
|
218
218
|
my $validFile; # flag indicating we processed a valid file
|
219
219
|
my $verbose; # verbose setting
|
220
|
-
my $vout; # verbose output file reference (\*STDOUT or \*STDERR)
|
220
|
+
my $vout; # verbose output file reference (\*STDOUT or \*STDERR by default)
|
221
221
|
my $windowTitle; # title for console window
|
222
222
|
my %wroteHEAD; # list of output txt files to which we wrote HEAD
|
223
223
|
my $xml; # flag for XML-formatted output
|
@@ -735,10 +735,11 @@ for (;;) {
|
|
735
735
|
push @isUTF8, 10 if $isAlt;
|
736
736
|
for ($i=0; ; ++$i) {
|
737
737
|
my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt,1) or last;
|
738
|
-
push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
|
739
738
|
next if $minPop and $entry[7] < $minPop;
|
740
739
|
next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
|
740
|
+
push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
|
741
741
|
$_ = defined $_ ? $mt->Decode($_, 'UTF8') : '' foreach @entry[@isUTF8];
|
742
|
+
pop @entry if $isAlt and not $entry[10];
|
742
743
|
print join(',', @entry), "\n";
|
743
744
|
}
|
744
745
|
} else { # 'g(\d*)'
|
@@ -2180,7 +2181,7 @@ sub GetImageInfo($$)
|
|
2180
2181
|
|
2181
2182
|
my $lineCount = 0;
|
2182
2183
|
my ($fp, $outfile, $append);
|
2183
|
-
if ($textOut and $verbose and not $tagOut) {
|
2184
|
+
if ($textOut and ($verbose or $et->Options('PrintCSV')) and not $tagOut) {
|
2184
2185
|
($fp, $outfile, $append) = OpenOutputFile($orig);
|
2185
2186
|
$fp or EFile($file), ++$countBad, return;
|
2186
2187
|
# delete file if we exit prematurely (unless appending)
|
@@ -2303,7 +2304,7 @@ sub GetImageInfo($$)
|
|
2303
2304
|
$lastDoc = 0;
|
2304
2305
|
}
|
2305
2306
|
for ($doc=0; $doc<=$lastDoc; ++$doc) {
|
2306
|
-
my $skipBody;
|
2307
|
+
my ($skipBody, $opt);
|
2307
2308
|
foreach $type (qw(HEAD SECT IF BODY ENDS TAIL)) {
|
2308
2309
|
my $prf = $printFmt{$type} or next;
|
2309
2310
|
if ($type eq 'HEAD' and defined $outfile) {
|
@@ -2311,6 +2312,12 @@ sub GetImageInfo($$)
|
|
2311
2312
|
$wroteHEAD{$outfile} = 1;
|
2312
2313
|
}
|
2313
2314
|
next if $type eq 'BODY' and $skipBody;
|
2315
|
+
# silence "IF" warnings and warnings for subdocuments > 1
|
2316
|
+
if ($type eq 'IF' or ($doc > 1 and not $$et{OPTIONS}{IgnoreMinorErrors})) {
|
2317
|
+
$opt = 'Silent';
|
2318
|
+
} else {
|
2319
|
+
$opt = 'Warn';
|
2320
|
+
}
|
2314
2321
|
if ($lastDoc) {
|
2315
2322
|
if ($doc) {
|
2316
2323
|
next if $type eq 'HEAD' or $type eq 'TAIL'; # only repeat SECT/IF/BODY/ENDS
|
@@ -2320,7 +2327,6 @@ sub GetImageInfo($$)
|
|
2320
2327
|
}
|
2321
2328
|
}
|
2322
2329
|
my @lines;
|
2323
|
-
my $opt = $type eq 'IF' ? 'Silent' : 'Warn'; # silence "IF" warnings
|
2324
2330
|
foreach (@$prf) {
|
2325
2331
|
my $line = $et->InsertTagValues($_, \@foundTags, $opt, $grp, $cache);
|
2326
2332
|
if ($type eq 'IF') {
|
@@ -5662,7 +5668,7 @@ with this command:
|
|
5662
5668
|
|
5663
5669
|
produces output like this:
|
5664
5670
|
|
5665
|
-
-- Generated by ExifTool 12.
|
5671
|
+
-- Generated by ExifTool 12.82 --
|
5666
5672
|
File: a.jpg - 2003:10:31 15:44:19
|
5667
5673
|
(f/5.6, 1/60s, ISO 100)
|
5668
5674
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -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.55';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -95,16 +95,9 @@ my %tweakOrder = (
|
|
95
95
|
Lytro => 'SigmaRaw',
|
96
96
|
PhotoMechanic => 'FotoStation',
|
97
97
|
Microsoft => 'PhotoMechanic',
|
98
|
-
'Microsoft::MP'=> 'Microsoft::MP1',
|
99
98
|
GIMP => 'Microsoft',
|
100
|
-
'Nikon::CameraSettingsD300' => 'Nikon::ShotInfoD300b',
|
101
|
-
'Pentax::LensData' => 'Pentax::LensInfo2',
|
102
|
-
'Sony::SRF2' => 'Sony::SRF',
|
103
99
|
DarwinCore => 'AFCP',
|
104
|
-
|
105
|
-
'MWG::Keywords' => 'MWG::Regions',
|
106
|
-
'MWG::Collections' => 'MWG::Keywords',
|
107
|
-
'GoPro::fdsc' => 'GoPro::KBAT',
|
100
|
+
MWG => 'Shortcuts',
|
108
101
|
);
|
109
102
|
|
110
103
|
# list of all recognized Format strings
|
@@ -671,6 +664,15 @@ will extract all available information even for tags not listed.
|
|
671
664
|
Tags in these tables are referred to as "pseudo" tags because their
|
672
665
|
information is not stored in the file itself. As such, B<Writable> tags in
|
673
666
|
these tables may be changed without having to rewrite the file.
|
667
|
+
},
|
668
|
+
GM => q{
|
669
|
+
These tags are extracted from GM/Cosworth PDR (Performance Data Recorder)
|
670
|
+
information found in videos from General Motors cars such as Corvette and
|
671
|
+
Camero.
|
672
|
+
|
673
|
+
Use the API L<PrintCSV|../ExifTool.html#PrintCSV> option to output all timed
|
674
|
+
PDR data in CSV format at greatly increased speed and with much lower memory
|
675
|
+
usage.
|
674
676
|
},
|
675
677
|
PodTrailer => q{
|
676
678
|
~head1 NOTES
|
@@ -708,7 +710,7 @@ my %shortcutNotes = (
|
|
708
710
|
color space when deleting all other metadata
|
709
711
|
},
|
710
712
|
CommonIFD0 => q{
|
711
|
-
common metadata tags found in IFD0 of TIFF-format images. Used to
|
713
|
+
common metadata tags found in IFD0 of TIFF-format images. Used to simplify
|
712
714
|
deletion of all metadata from these images. See
|
713
715
|
L<FAQ number 7|../faq.html#Q7> for details
|
714
716
|
},
|
@@ -852,7 +854,7 @@ sub new
|
|
852
854
|
my ($tagID, $binaryTable, $noID, $hexID, $isIPTC, $isXMP);
|
853
855
|
$isIPTC = 1 if $writeProc and $writeProc eq \&Image::ExifTool::IPTC::WriteIPTC;
|
854
856
|
# generate flattened tag names for structure fields if this is an XMP table
|
855
|
-
if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP') {
|
857
|
+
if ($$table{GROUPS} and $$table{GROUPS}{0} eq 'XMP' or $$vars{ADD_FLATTENED}) {
|
856
858
|
Image::ExifTool::XMP::AddFlattenedTags($table);
|
857
859
|
$isXMP = 1;
|
858
860
|
}
|
@@ -1526,7 +1528,8 @@ TagID: foreach $tagID (@keys) {
|
|
1526
1528
|
my $fullName = ($strName =~ / / ? '' : 'XMP ') . "$strName Struct";
|
1527
1529
|
my $info = $tagNameInfo{$fullName} = [ ];
|
1528
1530
|
my $tag;
|
1529
|
-
|
1531
|
+
my $order = $$struct{SORT_ORDER} || [ sort keys %$struct ];
|
1532
|
+
foreach $tag (@$order) {
|
1530
1533
|
my $tagInfo = $$struct{$tag};
|
1531
1534
|
next unless ref $tagInfo eq 'HASH' and $tag ne 'NAMESPACE' and $tag ne 'GROUPS';
|
1532
1535
|
warn "WARNING: $strName Struct containes $tag\n" if $Image::ExifTool::specialTags{$tag};
|
@@ -1539,6 +1542,8 @@ TagID: foreach $tagID (@keys) {
|
|
1539
1542
|
push @vals, $writable;
|
1540
1543
|
$structs{$writable} = 1;
|
1541
1544
|
$writable = "=$writable";
|
1545
|
+
} elsif (defined $$tagInfo{Writable}) {
|
1546
|
+
$writable = 'no';
|
1542
1547
|
} else {
|
1543
1548
|
$writable = 'string';
|
1544
1549
|
}
|
@@ -1548,7 +1553,7 @@ TagID: foreach $tagID (@keys) {
|
|
1548
1553
|
# handle PrintConv lookups in Structure elements
|
1549
1554
|
my $printConv = $$tagInfo{PrintConv};
|
1550
1555
|
if (ref $printConv eq 'HASH') {
|
1551
|
-
foreach (sort keys %$printConv) {
|
1556
|
+
foreach (sort { NumbersFirst($a,$b) } keys %$printConv) {
|
1552
1557
|
next if /^(OTHER|BITMASK)$/;
|
1553
1558
|
push @vals, "$_ = $$printConv{$_}";
|
1554
1559
|
}
|
@@ -1822,24 +1827,7 @@ sub TweakOrder($$)
|
|
1822
1827
|
local $_;
|
1823
1828
|
my ($sortedTables, $tweakOrder) = @_;
|
1824
1829
|
my @tweak = sort keys %$tweakOrder;
|
1825
|
-
my (%
|
1826
|
-
# flag files which have a "Main" table
|
1827
|
-
foreach (@$sortedTables) {
|
1828
|
-
$addedMain{$1} = 0 if /^Image::ExifTool::(\w+)::(\w+)/ and $2 eq 'Main';
|
1829
|
-
}
|
1830
|
-
# make sure that the main table always comes first in each file
|
1831
|
-
foreach (@$sortedTables) {
|
1832
|
-
if (/^Image::ExifTool::(\w+)::(\w+)/) {
|
1833
|
-
if ($addedMain{$1}) {
|
1834
|
-
next if $2 eq 'Main'; # don't add again
|
1835
|
-
} elsif (defined $addedMain{$1}) {
|
1836
|
-
push @sorted, "Image::ExifTool::${1}::Main" if $2 ne 'Main';
|
1837
|
-
$addedMain{$1} = 1;
|
1838
|
-
}
|
1839
|
-
}
|
1840
|
-
push @sorted, $_;
|
1841
|
-
}
|
1842
|
-
@$sortedTables = @sorted;
|
1830
|
+
my (@sorted, %hasMain, %module, $entry);
|
1843
1831
|
# apply manual tweaks
|
1844
1832
|
while (@tweak) {
|
1845
1833
|
my $table = shift @tweak;
|
@@ -1858,6 +1846,31 @@ sub TweakOrder($$)
|
|
1858
1846
|
}
|
1859
1847
|
@$sortedTables = (@notMoving, @moving, @after);
|
1860
1848
|
}
|
1849
|
+
# flag modules which have a "Main" table, and organize tables by module name
|
1850
|
+
foreach (@$sortedTables) {
|
1851
|
+
if (not /^Image::ExifTool::(\w+)::(\w+)/) {
|
1852
|
+
push @sorted, $_;
|
1853
|
+
} else {
|
1854
|
+
$hasMain{$1} = 1 if $2 eq 'Main';
|
1855
|
+
push @sorted, $module{$1} = [ ] unless $module{$1};
|
1856
|
+
push @{$module{$1}}, $_;
|
1857
|
+
}
|
1858
|
+
}
|
1859
|
+
# force MWG::Composite table first
|
1860
|
+
my @mwg = ( 'Image::ExifTool::MWG::Composite' );
|
1861
|
+
/Composite/ or push @mwg, $_ foreach @{$module{MWG}};
|
1862
|
+
@{$module{MWG}} = @mwg;
|
1863
|
+
# make sure that the main table always comes first in each file
|
1864
|
+
# and that all other tables from this group follow
|
1865
|
+
@$sortedTables = ( );
|
1866
|
+
foreach $entry (@sorted) {
|
1867
|
+
ref $entry or push(@$sortedTables, $entry), next;
|
1868
|
+
$$entry[0] =~ /^Image::ExifTool::(\w+)::(\w+)/ or die 'Internal error';
|
1869
|
+
my $main = "Image::ExifTool::$1::Main";
|
1870
|
+
# main table must come first (even if it doesn't exist)
|
1871
|
+
push @$sortedTables, $main if $hasMain{$1};
|
1872
|
+
$_ eq $main or push(@$sortedTables, $_) foreach @$entry;
|
1873
|
+
}
|
1861
1874
|
}
|
1862
1875
|
|
1863
1876
|
#------------------------------------------------------------------------------
|
@@ -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.94';
|
35
35
|
|
36
36
|
sub ProcessFujiDir($$$);
|
37
37
|
sub ProcessFaceRec($$$);
|
@@ -550,7 +550,14 @@ my %faceCategories = (
|
|
550
550
|
3 => 'Electronic Front Curtain', #10
|
551
551
|
},
|
552
552
|
},
|
553
|
-
0x1051 => {
|
553
|
+
0x1051 => { #forum15784
|
554
|
+
Name => 'CropFlag',
|
555
|
+
Writable => 'int8u',
|
556
|
+
Notes => q(
|
557
|
+
this tag exists only if the image was cropped, and is 0 for cropped JPG
|
558
|
+
image or 1 for a cropped RAF
|
559
|
+
),
|
560
|
+
},
|
554
561
|
0x1052 => { Name => 'CropTopLeft', Writable => 'int32u' }, #forum15784
|
555
562
|
0x1053 => { Name => 'CropSize', Writable => 'int32u' }, #forum15784
|
556
563
|
# 0x1100 - This may not work well for newer cameras (ref forum12682)
|