exiftool_vendored 12.55.0 → 12.57.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 +38 -1
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +19 -19
- data/bin/arg_files/xmp2exif.args +4 -1
- data/bin/exiftool +97 -53
- data/bin/fmt_files/kml.fmt +3 -0
- data/bin/fmt_files/kml_track.fmt +3 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +13 -6
- data/bin/lib/Image/ExifTool/Canon.pm +8 -2
- data/bin/lib/Image/ExifTool/Exif.pm +31 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +73 -8
- data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
- data/bin/lib/Image/ExifTool/GPS.pm +7 -2
- data/bin/lib/Image/ExifTool/InfiRay.pm +227 -0
- data/bin/lib/Image/ExifTool/JPEG.pm +40 -6
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +5 -5
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +862 -1264
- data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +32 -15
- data/bin/lib/Image/ExifTool/PNG.pm +80 -2
- data/bin/lib/Image/ExifTool/Photoshop.pm +36 -5
- data/bin/lib/Image/ExifTool/QuickTime.pm +18 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +25 -14
- data/bin/lib/Image/ExifTool/README +11 -2
- data/bin/lib/Image/ExifTool/Real.pm +2 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +2 -1
- data/bin/lib/Image/ExifTool/Sony.pm +5 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4667 -4624
- data/bin/lib/Image/ExifTool/TagNames.pod +400 -90
- data/bin/lib/Image/ExifTool/VCard.pm +19 -5
- data/bin/lib/Image/ExifTool/Writer.pl +36 -16
- data/bin/lib/Image/ExifTool.pm +92 -35
- data/bin/lib/Image/ExifTool.pod +54 -53
- data/bin/perl-Image-ExifTool.spec +18 -18
- 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: 1c02a2a1efe1fc3f63f7527ed968432fc73d7e1ebeda7cfbf424413b8907bd0c
|
4
|
+
data.tar.gz: 5140c2587870d324d63d4d35beb70d1cbbecb92a78fb6ea55d9885cf9f320c1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: edd012dc39bc24a6b257f147e5d698648c686aa54e1ac04229cd3cd4880a91d96e21f6f017305a6d763826470ef1f990e94221320bd1d7ee0a73fb5cb2b32ab4
|
7
|
+
data.tar.gz: 78856db2a60493444afe450c663d190553147b651140c2f18a2a2641e8c9bc0d5af7f31bd0db4a5f55c89f72b460119192889f4f10190cad3a21bffae976e630
|
data/bin/Changes
CHANGED
@@ -7,6 +7,43 @@ RSS feed: https://exiftool.org/rss.xml
|
|
7
7
|
Note: The most recent production release is Version 12.50. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Feb. 23, 2023 - Version 12.57
|
11
|
+
|
12
|
+
- Added two new Nikon Z lenses (thanks LibRaw)
|
13
|
+
- Added a new Sigma LensType (thanks LibRaw)
|
14
|
+
- Added a new Olympus LensType (thanks Herb)
|
15
|
+
- Decode more new Nikon tags (thanks Warren Hatch)
|
16
|
+
- Decode Photoshop LayerColors, LayerSections and LayerVisible tags
|
17
|
+
- Improved Verbose output for QuickTime-format files
|
18
|
+
- Set family 1 group name for Garmin GPS from uuid atom
|
19
|
+
- Enhanced -progress option to allow message to be displayed every NUM files
|
20
|
+
- Significant improvements to parsing of Nikon ShotInfo records for newer
|
21
|
+
models
|
22
|
+
- Removed hex dump of APP segments from -v3 output when writing
|
23
|
+
- Fixed bug writing negative MIE GPS coordinates
|
24
|
+
- Fixed bug where a duplicate XMP could be generated when writing XMP to a
|
25
|
+
JPEG XL image which already contained XMP
|
26
|
+
- Fixed problem where HEAD lines may be duplicated in an output file if the -p
|
27
|
+
option was combined with -w+ or -W+
|
28
|
+
|
29
|
+
Feb. 9, 2023 - Version 12.56
|
30
|
+
|
31
|
+
- Added support for VNT files (both Scene7 Vignette and V-Note document)
|
32
|
+
- Added read support for InfiRay IJPEG metadata (thanks Marcos Del Sol Vives)
|
33
|
+
- Added some new Sony LensType values (thanks Jos Roost and Francois Piette)
|
34
|
+
- Added a new FujiFilm VideoRecordingMode value (thanks Greybeard)
|
35
|
+
- Added two new Canon LensTypes and CanonModelIDs (thanks Norbert Wasser)
|
36
|
+
- Added ability to extract semantic images from Apple ProRaw DNG files
|
37
|
+
- Added read support for the PNG cICP chunk
|
38
|
+
- Decode more Nikon tags (thanks Warren Hatch)
|
39
|
+
- Extract PreviewImage from Insta360 trailer record 0x200
|
40
|
+
- Extract EmbeddedImageRectangle and some other new tags from VNT files
|
41
|
+
- Minor improvement to arg_files/xmp2exif.args (thanks StarGeek)
|
42
|
+
- Enhanced -ee option to extract metadata from all frames of a multipart EXR
|
43
|
+
image
|
44
|
+
- Removed EXR Layout tag and incorporated into new Flags tag
|
45
|
+
- Patched possible hang problem when reading corrupted .rm audio files
|
46
|
+
|
10
47
|
Jan. 17, 2023 - Version 12.55
|
11
48
|
|
12
49
|
- Added support for geotagging from FlightAware KML files
|
@@ -14,7 +51,7 @@ Jan. 17, 2023 - Version 12.55
|
|
14
51
|
- Decode a few new Nikon tags (thanks Warren Hatch)
|
15
52
|
- Decode a new Samsung HEIC tag
|
16
53
|
- Decode FujiFilm RollAngle
|
17
|
-
- Fixed bug where FlatName property wasn't working properly for some
|
54
|
+
- Fixed bug where the FlatName property wasn't working properly for some
|
18
55
|
user-defined structure tags
|
19
56
|
|
20
57
|
Jan. 6, 2023 - Version 12.54
|
data/bin/MANIFEST
CHANGED
@@ -90,6 +90,7 @@ html/TagNames/ID3.html
|
|
90
90
|
html/TagNames/IPTC.html
|
91
91
|
html/TagNames/ISO.html
|
92
92
|
html/TagNames/ITC.html
|
93
|
+
html/TagNames/InfiRay.html
|
93
94
|
html/TagNames/JFIF.html
|
94
95
|
html/TagNames/JPEG.html
|
95
96
|
html/TagNames/JSON.html
|
@@ -301,6 +302,7 @@ lib/Image/ExifTool/ISO.pm
|
|
301
302
|
lib/Image/ExifTool/ITC.pm
|
302
303
|
lib/Image/ExifTool/Import.pm
|
303
304
|
lib/Image/ExifTool/InDesign.pm
|
305
|
+
lib/Image/ExifTool/InfiRay.pm
|
304
306
|
lib/Image/ExifTool/JPEG.pm
|
305
307
|
lib/Image/ExifTool/JPEGDigest.pm
|
306
308
|
lib/Image/ExifTool/JSON.pm
|
@@ -616,6 +618,8 @@ t/InDesign.t
|
|
616
618
|
t/InDesign_2.out
|
617
619
|
t/InDesign_3.out
|
618
620
|
t/InDesign_4.out
|
621
|
+
t/InfiRay.t
|
622
|
+
t/InfiRay_2.out
|
619
623
|
t/JSON.t
|
620
624
|
t/JSON_2.out
|
621
625
|
t/JVC.t
|
@@ -1034,6 +1038,7 @@ t/images/IPTC.jpg
|
|
1034
1038
|
t/images/ISO.iso
|
1035
1039
|
t/images/ITC.itc
|
1036
1040
|
t/images/InDesign.indd
|
1041
|
+
t/images/InfiRay.jpg
|
1037
1042
|
t/images/JSON.json
|
1038
1043
|
t/images/JVC.jpg
|
1039
1044
|
t/images/JVC2.jpg
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -39,23 +39,23 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
39
39
|
CHM r | FPF r | MKA r | PFA r | TTF r
|
40
40
|
COS r | FPX r | MKS r | PFB r | TXT r
|
41
41
|
CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
|
42
|
-
CR3 r/w | GPR r/w | MNG r/w | PGF r |
|
43
|
-
CRM r/w | GZ r | MOBI r | PGM r/w |
|
44
|
-
CRW r/w | HDP r/w | MODD r | PLIST r |
|
45
|
-
CS1 r/w | HDR r | MOI r | PICT r |
|
46
|
-
CSV r | HEIC r/w | MOS r/w | PMP r |
|
47
|
-
CUR r | HEIF r/w | MOV r/w | PNG r/w |
|
48
|
-
CZI r | HTML r | MP3 r | PPM r/w |
|
49
|
-
DCM r | ICC r/w/c | MP4 r/w | PPT r |
|
50
|
-
DCP r/w | ICO r | MPC r | PPTX r |
|
51
|
-
DCR r | ICS r | MPG r | PS r/w |
|
52
|
-
DFONT r | IDML r | MPO r/w | PSB r/w |
|
53
|
-
DIVX r | IIQ r/w | MQV r/w | PSD r/w |
|
54
|
-
DJVU r | IND r/w | MRC r | PSP r |
|
55
|
-
DLL r | INSP r/w | MRW r/w | QTIF r/w |
|
56
|
-
DNG r/w | INSV r | MXF r | R3D r |
|
57
|
-
DOC r | INX r | NEF r/w | RA r |
|
58
|
-
DOCX r | ISO r | NKSC r/w | RAF r/w |
|
42
|
+
CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
|
43
|
+
CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
|
44
|
+
CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
|
45
|
+
CS1 r/w | HDR r | MOI r | PICT r | WAV r
|
46
|
+
CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
|
47
|
+
CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
|
48
|
+
CZI r | HTML r | MP3 r | PPM r/w | WEBM r
|
49
|
+
DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
|
50
|
+
DCP r/w | ICO r | MPC r | PPTX r | WMV r
|
51
|
+
DCR r | ICS r | MPG r | PS r/w | WTV r
|
52
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | WV r
|
53
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
|
54
|
+
DJVU r | IND r/w | MRC r | PSP r | XCF r
|
55
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
|
56
|
+
DNG r/w | INSV r | MXF r | R3D r | XLSX r
|
57
|
+
DOC r | INX r | NEF r/w | RA r | XMP r/w/c
|
58
|
+
DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
|
59
59
|
|
60
60
|
Meta Information
|
61
61
|
----------------------+----------------------+---------------------
|
@@ -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.57.tar.gz | tar -xf -
|
111
|
+
cd Image-ExifTool-12.57
|
112
112
|
./exiftool t/images/ExifTool.jpg
|
113
113
|
|
114
114
|
Note: These commands extract meta information from one of the test images.
|
data/bin/arg_files/xmp2exif.args
CHANGED
@@ -15,6 +15,8 @@
|
|
15
15
|
# 2018/05/07 - PH Added support for GPSDestXxxRef tags
|
16
16
|
# 2021/09/30 - PH Removed erroneous "-" when copying CreatorTool
|
17
17
|
# 2022/03/31 - PH IPTC Photometadata Mapping Guidelines 2202.1 update
|
18
|
+
# 2023/01/30 - PH Also write Composite:SubSecDateTimeOriginal from
|
19
|
+
# XMP-exif:DateTimeOriginal
|
18
20
|
#
|
19
21
|
# References: http://www.metadataworkinggroup.org/specs/
|
20
22
|
# https://iptc.org/std/photometadata/documentation/mappingguidelines/
|
@@ -34,8 +36,9 @@
|
|
34
36
|
-EXIF:all < XMP-tiff:all
|
35
37
|
-EXIF:ImageDescription < XMP-dc:Description
|
36
38
|
-EXIF:DateTimeOriginal < XMP-photoshop:DateCreated
|
37
|
-
# the following
|
39
|
+
# the following SubSec tags also write/delete the corresponding EXIF
|
38
40
|
# SubSecTime and OffsetTime tags as appropriate
|
41
|
+
-Composite:SubSecDateTimeOriginal < XMP-exif:DateTimeOriginal
|
39
42
|
-Composite:SubSecDateTimeOriginal < XMP-photoshop:DateCreated
|
40
43
|
-Composite:SubSecCreateDate < XMP-xmp:CreateDate
|
41
44
|
-Composite:SubSecModifyDate < XMP-xmp:ModifyDate
|
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.57';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
BEGIN {
|
@@ -77,6 +77,7 @@ sub AcceptFile($);
|
|
77
77
|
sub SlurpFile($$);
|
78
78
|
sub FilterArgfileLine($);
|
79
79
|
sub ReadStayOpen($);
|
80
|
+
sub Progress($$);
|
80
81
|
sub PrintTagList($@);
|
81
82
|
sub PrintErrors($$$);
|
82
83
|
|
@@ -182,7 +183,9 @@ my $pause; # pause before returning
|
|
182
183
|
my $preserveTime; # flag to preserve times of updated files (2=preserve FileCreateDate only)
|
183
184
|
my $progress; # flag to calculate total files to process (0=calculate but don't display)
|
184
185
|
my $progressCount; # count of files processed
|
186
|
+
my $progressIncr; # increment for progress counter
|
185
187
|
my $progressMax; # total number of files to process
|
188
|
+
my $progressNext; # next progress count to output
|
186
189
|
my $progStr; # progress message string
|
187
190
|
my $quiet; # flag to disable printing of informational messages / warnings
|
188
191
|
my $rafStdin; # File::RandomAccess for stdin (if necessary to rewind)
|
@@ -211,6 +214,7 @@ my $validFile; # flag indicating we processed a valid file
|
|
211
214
|
my $verbose; # verbose setting
|
212
215
|
my $vout; # verbose output file reference (\*STDOUT or \*STDERR)
|
213
216
|
my $windowTitle; # title for console window
|
217
|
+
my %wroteHEAD; # list of output txt files to which we wrote HEAD
|
214
218
|
my $xml; # flag for XML-formatted output
|
215
219
|
|
216
220
|
# flag to keep the input -@ argfile open:
|
@@ -489,7 +493,9 @@ undef $outOpt;
|
|
489
493
|
undef $preserveTime;
|
490
494
|
undef $progress;
|
491
495
|
undef $progressCount;
|
496
|
+
undef $progressIncr;
|
492
497
|
undef $progressMax;
|
498
|
+
undef $progressNext;
|
493
499
|
undef $recurse;
|
494
500
|
undef $scanWritable;
|
495
501
|
undef $sectHeader;
|
@@ -725,7 +731,7 @@ for (;;) {
|
|
725
731
|
}
|
726
732
|
if ($verbose > 1) {
|
727
733
|
print "Include directories:\n";
|
728
|
-
print " $_\n" foreach @INC;
|
734
|
+
ref $_ or print " $_\n" foreach @INC;
|
729
735
|
}
|
730
736
|
} else {
|
731
737
|
print "$version$str$Image::ExifTool::RELEASE\n";
|
@@ -1119,9 +1125,11 @@ for (;;) {
|
|
1119
1125
|
}
|
1120
1126
|
(/^P$/ or $a eq 'preserve') and $preserveTime = 1, next;
|
1121
1127
|
/^password$/i and $mt->Options(Password => shift), next;
|
1122
|
-
if (/^progress(:.*)?$/i) {
|
1123
|
-
|
1124
|
-
|
1128
|
+
if (/^progress(\d*)(:.*)?$/i) {
|
1129
|
+
$progressIncr = $1 || 1;
|
1130
|
+
$progressNext = 0; # start showing progress at the first file
|
1131
|
+
if ($2) {
|
1132
|
+
$windowTitle = substr $2, 1;
|
1125
1133
|
$windowTitle = 'ExifTool %p%%' unless length $windowTitle;
|
1126
1134
|
$windowTitle =~ /%\d*[bpr]/ and $progress = 0 unless defined $progress;
|
1127
1135
|
} else {
|
@@ -1239,7 +1247,8 @@ for (;;) {
|
|
1239
1247
|
next;
|
1240
1248
|
}
|
1241
1249
|
if (/^(w|textout|tagout)([!+]*)$/i) {
|
1242
|
-
|
1250
|
+
# (note: all logic ignores $textOut of 0 or '')
|
1251
|
+
$textOut = shift || Warn("Expecting argument for -$_ option\n");
|
1243
1252
|
my ($t1, $t2) = ($1, $2);
|
1244
1253
|
$textOverwrite = 0;
|
1245
1254
|
$textOverwrite += 1 if $t2 =~ /!/; # overwrite
|
@@ -1711,7 +1720,7 @@ if (defined $showGroup and not (@tags and $allGroup) and ($sortOpt or not define
|
|
1711
1720
|
$mt->Options(Sort => "Group$showGroup");
|
1712
1721
|
}
|
1713
1722
|
|
1714
|
-
if (
|
1723
|
+
if ($textOut) {
|
1715
1724
|
CleanFilename($textOut); # make all forward slashes
|
1716
1725
|
# add '.' before output extension if necessary
|
1717
1726
|
$textOut = ".$textOut" unless $textOut =~ /[.%]/ or defined $tagOut;
|
@@ -1935,7 +1944,7 @@ sub GetImageInfo($$)
|
|
1935
1944
|
my (@foundTags, $info, $file, $ind);
|
1936
1945
|
|
1937
1946
|
# set window title for this file if necessary
|
1938
|
-
if (defined $windowTitle) {
|
1947
|
+
if (defined $windowTitle and $progressCount >= $progressNext) {
|
1939
1948
|
my $prog = $progressMax ? "$progressCount/$progressMax" : '0/0';
|
1940
1949
|
my $title = $windowTitle;
|
1941
1950
|
my ($num, $denom) = split '/', $prog;
|
@@ -1951,6 +1960,7 @@ sub GetImageInfo($$)
|
|
1951
1960
|
);
|
1952
1961
|
$title =~ s/%([%bfpr])/$lkup{$1}/eg;
|
1953
1962
|
SetWindowTitle($title);
|
1963
|
+
undef $progressNext;
|
1954
1964
|
}
|
1955
1965
|
unless (length $orig or $outOpt) {
|
1956
1966
|
Warn qq(Error: Zero-length file name - ""\n);
|
@@ -2044,7 +2054,7 @@ sub GetImageInfo($$)
|
|
2044
2054
|
undef @foundTags if $fastCondition; # ignore if we didn't get all tags
|
2045
2055
|
}
|
2046
2056
|
unless ($result) {
|
2047
|
-
$
|
2057
|
+
Progress($vout, "-------- $file (failed condition)") if $verbose;
|
2048
2058
|
EFile($file, 2);
|
2049
2059
|
++$countFailed;
|
2050
2060
|
return;
|
@@ -2054,7 +2064,7 @@ sub GetImageInfo($$)
|
|
2054
2064
|
undef $info if $verbose or defined $fastCondition;
|
2055
2065
|
}
|
2056
2066
|
if (defined $deleteOrig) {
|
2057
|
-
|
2067
|
+
Progress($vout, "======== $file") if defined $verbose;
|
2058
2068
|
++$count;
|
2059
2069
|
my $original = "${file}_original";
|
2060
2070
|
$et->Exists($original) or return;
|
@@ -2084,12 +2094,12 @@ sub GetImageInfo($$)
|
|
2084
2094
|
}
|
2085
2095
|
|
2086
2096
|
if ($isWriting) {
|
2087
|
-
|
2097
|
+
Progress($vout, "======== $file") if defined $verbose;
|
2088
2098
|
SetImageInfo($et, $file, $orig);
|
2089
2099
|
$info = $et->GetInfo('Warning', 'Error');
|
2090
2100
|
PrintErrors($et, $info, $file);
|
2091
2101
|
# close output text file if necessary
|
2092
|
-
if ($outfile) {
|
2102
|
+
if (defined $outfile) {
|
2093
2103
|
undef $tmpText;
|
2094
2104
|
close($fp);
|
2095
2105
|
$et->Options(TextOut => $vout);
|
@@ -2108,7 +2118,7 @@ sub GetImageInfo($$)
|
|
2108
2118
|
unless ($file eq '-' or $et->Exists($file)) {
|
2109
2119
|
Warn "Error: File not found - $file\n";
|
2110
2120
|
FileNotFound($file);
|
2111
|
-
$outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
|
2121
|
+
defined $outfile and close($fp), undef($tmpText), $et->Unlink($outfile);
|
2112
2122
|
EFile($file);
|
2113
2123
|
++$countBad;
|
2114
2124
|
return;
|
@@ -2125,7 +2135,7 @@ sub GetImageInfo($$)
|
|
2125
2135
|
}
|
2126
2136
|
}
|
2127
2137
|
$o = \*STDERR if $progress and not $o;
|
2128
|
-
$o
|
2138
|
+
Progress($o, "======== $file") if $o;
|
2129
2139
|
if ($info) {
|
2130
2140
|
# get the information we wanted
|
2131
2141
|
if (@tags and not %printFmt) {
|
@@ -2147,7 +2157,7 @@ sub GetImageInfo($$)
|
|
2147
2157
|
}
|
2148
2158
|
# all done now if we already wrote output text file (eg. verbose option)
|
2149
2159
|
if ($fp) {
|
2150
|
-
if ($outfile) {
|
2160
|
+
if (defined $outfile) {
|
2151
2161
|
$et->Options(TextOut => \*STDOUT);
|
2152
2162
|
undef $tmpText;
|
2153
2163
|
if ($info->{Error}) {
|
@@ -2176,7 +2186,7 @@ sub GetImageInfo($$)
|
|
2176
2186
|
}
|
2177
2187
|
|
2178
2188
|
# open output file (or stdout if no output file) if not done already
|
2179
|
-
unless ($outfile or $tagOut) {
|
2189
|
+
unless (defined $outfile or $tagOut) {
|
2180
2190
|
($fp, $outfile, $append) = OpenOutputFile($orig);
|
2181
2191
|
$fp or EFile($file), ++$countBad, return;
|
2182
2192
|
$tmpText = $outfile unless $append;
|
@@ -2201,6 +2211,10 @@ sub GetImageInfo($$)
|
|
2201
2211
|
my $skipBody;
|
2202
2212
|
foreach $type (qw(HEAD SECT IF BODY ENDS TAIL)) {
|
2203
2213
|
my $prf = $printFmt{$type} or next;
|
2214
|
+
if ($type eq 'HEAD' and defined $outfile) {
|
2215
|
+
next if $wroteHEAD{$outfile};
|
2216
|
+
$wroteHEAD{$outfile} = 1;
|
2217
|
+
}
|
2204
2218
|
next if $type eq 'BODY' and $skipBody;
|
2205
2219
|
if ($lastDoc) {
|
2206
2220
|
if ($doc) {
|
@@ -2238,7 +2252,7 @@ sub GetImageInfo($$)
|
|
2238
2252
|
}
|
2239
2253
|
}
|
2240
2254
|
}
|
2241
|
-
delete $printFmt{HEAD} unless $outfile; # print header only once per output file
|
2255
|
+
delete $printFmt{HEAD} unless defined $outfile; # print header only once per output file
|
2242
2256
|
my $errs = $et->GetInfo('Warning', 'Error');
|
2243
2257
|
PrintErrors($et, $errs, $file) and EFile($file);
|
2244
2258
|
} elsif (not $disableOutput) {
|
@@ -2394,7 +2408,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2394
2408
|
next TAG;
|
2395
2409
|
}
|
2396
2410
|
my @groups = $et->GetGroup($tag);
|
2397
|
-
$outfile and close($fp), undef($tmpText); # (shouldn't happen)
|
2411
|
+
defined $outfile and close($fp), undef($tmpText); # (shouldn't happen)
|
2398
2412
|
my $org = $et->GetValue('OriginalRawFileName') || $et->GetValue('OriginalFileName');
|
2399
2413
|
($fp, $outfile, $append) = OpenOutputFile($orig, $tagName, \@groups, $ext, $org);
|
2400
2414
|
$fp or ++$countBad, next TAG;
|
@@ -2700,7 +2714,7 @@ TAG: foreach $tag (@foundTags) {
|
|
2700
2714
|
}
|
2701
2715
|
}
|
2702
2716
|
}
|
2703
|
-
if ($outfile) {
|
2717
|
+
if (defined $outfile) {
|
2704
2718
|
if ($textOverwrite & 0x02) {
|
2705
2719
|
# save state of this file if we may be appending
|
2706
2720
|
$outComma{$outfile} = $comma;
|
@@ -3661,8 +3675,19 @@ sub ProcessFiles($;$)
|
|
3661
3675
|
foreach $file (@files) {
|
3662
3676
|
$et->Options(CharsetFileName => 'UTF8') if $utf8FileName{$file};
|
3663
3677
|
if (defined $progressMax) {
|
3678
|
+
unless (defined $progressNext) {
|
3679
|
+
$progressNext = $progressCount + $progressIncr;
|
3680
|
+
$progressNext -= $progressNext % $progressIncr;
|
3681
|
+
$progressNext = $progressMax if $progressNext > $progressMax;
|
3682
|
+
}
|
3664
3683
|
++$progressCount;
|
3665
|
-
|
3684
|
+
if ($progress) {
|
3685
|
+
if ($progressCount >= $progressNext) {
|
3686
|
+
$progStr = " [$progressCount/$progressMax]";
|
3687
|
+
} else {
|
3688
|
+
undef $progStr; # don't update progress yet
|
3689
|
+
}
|
3690
|
+
}
|
3666
3691
|
}
|
3667
3692
|
if ($et->IsDirectory($file) and not $listDir) {
|
3668
3693
|
$multiFile = $validFile = 1;
|
@@ -3670,7 +3695,7 @@ sub ProcessFiles($;$)
|
|
3670
3695
|
} elsif ($filterFlag and not AcceptFile($file)) {
|
3671
3696
|
if ($et->Exists($file)) {
|
3672
3697
|
$filtered = 1;
|
3673
|
-
$
|
3698
|
+
Progress($vout, "-------- $file (wrong extension)") if $verbose;
|
3674
3699
|
} else {
|
3675
3700
|
Warn "Error: File not found - $file\n";
|
3676
3701
|
FileNotFound($file);
|
@@ -4426,6 +4451,18 @@ sub EFile($$)
|
|
4426
4451
|
}
|
4427
4452
|
}
|
4428
4453
|
|
4454
|
+
#------------------------------------------------------------------------------
|
4455
|
+
# Print progress message if it is time for it
|
4456
|
+
# Inputs: 0) file ref, 1) message
|
4457
|
+
sub Progress($$)
|
4458
|
+
{
|
4459
|
+
my ($file, $msg) = @_;
|
4460
|
+
if (defined $progStr) {
|
4461
|
+
print $file $msg, $progStr, "\n";
|
4462
|
+
undef $progressNext;
|
4463
|
+
}
|
4464
|
+
}
|
4465
|
+
|
4429
4466
|
#------------------------------------------------------------------------------
|
4430
4467
|
# Print list of tags
|
4431
4468
|
# Inputs: 0) message, 1-N) list of tag names
|
@@ -4558,23 +4595,23 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4558
4595
|
CHM r | FPF r | MKA r | PFA r | TTF r
|
4559
4596
|
COS r | FPX r | MKS r | PFB r | TXT r
|
4560
4597
|
CR2 r/w | GIF r/w | MKV r | PFM r | VCF r
|
4561
|
-
CR3 r/w | GPR r/w | MNG r/w | PGF r |
|
4562
|
-
CRM r/w | GZ r | MOBI r | PGM r/w |
|
4563
|
-
CRW r/w | HDP r/w | MODD r | PLIST r |
|
4564
|
-
CS1 r/w | HDR r | MOI r | PICT r |
|
4565
|
-
CSV r | HEIC r/w | MOS r/w | PMP r |
|
4566
|
-
CUR r | HEIF r/w | MOV r/w | PNG r/w |
|
4567
|
-
CZI r | HTML r | MP3 r | PPM r/w |
|
4568
|
-
DCM r | ICC r/w/c | MP4 r/w | PPT r |
|
4569
|
-
DCP r/w | ICO r | MPC r | PPTX r |
|
4570
|
-
DCR r | ICS r | MPG r | PS r/w |
|
4571
|
-
DFONT r | IDML r | MPO r/w | PSB r/w |
|
4572
|
-
DIVX r | IIQ r/w | MQV r/w | PSD r/w |
|
4573
|
-
DJVU r | IND r/w | MRC r | PSP r |
|
4574
|
-
DLL r | INSP r/w | MRW r/w | QTIF r/w |
|
4575
|
-
DNG r/w | INSV r | MXF r | R3D r |
|
4576
|
-
DOC r | INX r | NEF r/w | RA r |
|
4577
|
-
DOCX r | ISO r | NKSC r/w | RAF r/w |
|
4598
|
+
CR3 r/w | GPR r/w | MNG r/w | PGF r | VNT r
|
4599
|
+
CRM r/w | GZ r | MOBI r | PGM r/w | VRD r/w/c
|
4600
|
+
CRW r/w | HDP r/w | MODD r | PLIST r | VSD r
|
4601
|
+
CS1 r/w | HDR r | MOI r | PICT r | WAV r
|
4602
|
+
CSV r | HEIC r/w | MOS r/w | PMP r | WDP r/w
|
4603
|
+
CUR r | HEIF r/w | MOV r/w | PNG r/w | WEBP r/w
|
4604
|
+
CZI r | HTML r | MP3 r | PPM r/w | WEBM r
|
4605
|
+
DCM r | ICC r/w/c | MP4 r/w | PPT r | WMA r
|
4606
|
+
DCP r/w | ICO r | MPC r | PPTX r | WMV r
|
4607
|
+
DCR r | ICS r | MPG r | PS r/w | WTV r
|
4608
|
+
DFONT r | IDML r | MPO r/w | PSB r/w | WV r
|
4609
|
+
DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
|
4610
|
+
DJVU r | IND r/w | MRC r | PSP r | XCF r
|
4611
|
+
DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
|
4612
|
+
DNG r/w | INSV r | MXF r | R3D r | XLSX r
|
4613
|
+
DOC r | INX r | NEF r/w | RA r | XMP r/w/c
|
4614
|
+
DOCX r | ISO r | NKSC r/w | RAF r/w | ZIP r
|
4578
4615
|
|
4579
4616
|
Meta Information
|
4580
4617
|
----------------------+----------------------+---------------------
|
@@ -4672,7 +4709,7 @@ L<Processing control|/Processing control>
|
|
4672
4709
|
-overwrite_original_in_place Overwrite original by copying tmp file
|
4673
4710
|
-P (-preserve) Preserve file modification date/time
|
4674
4711
|
-password PASSWD Password for processing protected files
|
4675
|
-
-progress[:[TITLE]]
|
4712
|
+
-progress[NUM][:[TITLE]] Show file progress count
|
4676
4713
|
-q (-quiet) Quiet processing
|
4677
4714
|
-r[.] (-recurse) Recursively process subdirectories
|
4678
4715
|
-scanForXMP Brute force XMP scan
|
@@ -4819,6 +4856,9 @@ are removed if the containing group is deleted:
|
|
4819
4856
|
- Deleting EXIF only removes ExifIFD which also deletes
|
4820
4857
|
InteropIFD and MakerNotes.
|
4821
4858
|
|
4859
|
+
MOV/MP4 video:
|
4860
|
+
- Deleting ItemList also deletes Keys tags
|
4861
|
+
|
4822
4862
|
Notes:
|
4823
4863
|
|
4824
4864
|
1) B<Many tag values may be assigned in a single command>. If two
|
@@ -4915,7 +4955,9 @@ prevent shell redirection, and there is no C<=> sign as when assigning new
|
|
4915
4955
|
values. Source and/or destination tags may be prefixed by a group name
|
4916
4956
|
and/or suffixed by C<#>. Wildcards are allowed in both the source and
|
4917
4957
|
destination tag names. A destination group and/or tag name of C<All> or
|
4918
|
-
C<*> writes to the same family 1 group and/or tag name as the source
|
4958
|
+
C<*> writes to the same family 1 group and/or tag name as the source (but
|
4959
|
+
the family may be specified by adding a leading number to the group name,
|
4960
|
+
eg. C<0All> writes to the same family 0 group as the source). If no
|
4919
4961
|
destination group is specified, the information is written to the preferred
|
4920
4962
|
group. Whitespace around the C<E<gt>> or C<E<lt>> is ignored. As a
|
4921
4963
|
convenience, C<-tagsFromFile @> is assumed for any redirected tags which are
|
@@ -5206,9 +5248,9 @@ Note that this option is fundamentally different than all other output
|
|
5206
5248
|
format options because it requires information from all input files to be
|
5207
5249
|
buffered in memory before the output is written. This may result in
|
5208
5250
|
excessive memory usage when processing a very large number of files with a
|
5209
|
-
single command. Also, it makes this option incompatible with the B<-w>
|
5210
|
-
|
5211
|
-
either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
|
5251
|
+
single command. Also, it makes this option incompatible with the B<-w> and
|
5252
|
+
B<-W> options. When processing a large number of files, it is recommended
|
5253
|
+
to either use the JSON (B<-j>) or XML (B<-X>) output format, or use B<-p> to
|
5212
5254
|
generate a fixed-column CSV file instead of using the B<-csv> option.
|
5213
5255
|
|
5214
5256
|
=item B<-csvDelim> I<STR>
|
@@ -5477,7 +5519,7 @@ with this command:
|
|
5477
5519
|
|
5478
5520
|
produces output like this:
|
5479
5521
|
|
5480
|
-
-- Generated by ExifTool 12.
|
5522
|
+
-- Generated by ExifTool 12.57 --
|
5481
5523
|
File: a.jpg - 2003:10:31 15:44:19
|
5482
5524
|
(f/5.6, 1/60s, ISO 100)
|
5483
5525
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -5981,8 +6023,8 @@ of the file processing. Both functions have a return value of 1. Case is
|
|
5981
6023
|
significant for function names.
|
5982
6024
|
|
5983
6025
|
End() - end processing after this file
|
5984
|
-
EndDir() - end processing of files in
|
5985
|
-
compatible with
|
6026
|
+
EndDir() - end processing of files in the current directory
|
6027
|
+
after this file (not compatible with -fileOrder)
|
5986
6028
|
|
5987
6029
|
Notes:
|
5988
6030
|
|
@@ -6110,7 +6152,7 @@ If a password is required but not given, a warning is issued and the
|
|
6110
6152
|
document is not processed. This option is ignored if a password is not
|
6111
6153
|
required.
|
6112
6154
|
|
6113
|
-
=item B<-progress>[:[I<TITLE>]]
|
6155
|
+
=item B<-progress>[NUM][:[I<TITLE>]]
|
6114
6156
|
|
6115
6157
|
Show the progress when processing files. Without a colon, the B<-progress>
|
6116
6158
|
option adds a progress count in brackets after the name of each processed
|
@@ -6118,17 +6160,19 @@ file, giving the current file number and the total number of files to be
|
|
6118
6160
|
processed. Implies the B<-v0> option, causing the names of processed files
|
6119
6161
|
to also be printed when writing. When combined with the B<-if> option, the
|
6120
6162
|
total count includes all files before the condition is applied, but files
|
6121
|
-
that fail the condition will not have their names printed.
|
6163
|
+
that fail the condition will not have their names printed. If NUM is
|
6164
|
+
specified, the progress is shown every NUM input files.
|
6122
6165
|
|
6123
6166
|
If followed by a colon (ie. B<-progress:>), the console window title is set
|
6124
6167
|
according to the specified I<TITLE> string. If no I<TITLE> is given, a
|
6125
6168
|
default I<TITLE> string of "ExifTool %p%%" is assumed. In the string, %f
|
6126
6169
|
represents the file name, %p is the progress as a percent, %r is the
|
6127
|
-
progress as a ratio, %##b is a progress bar of width "##" (
|
6128
|
-
|
6129
|
-
|
6130
|
-
|
6131
|
-
to
|
6170
|
+
progress as a ratio, %##b is a progress bar of width "##" (where "##" is an
|
6171
|
+
integer specifying the bar width in characters, or 20 characters by default
|
6172
|
+
if "##" is omitted), and %% is a % character. May be combined with the
|
6173
|
+
normal B<-progress> option to also show the progress count in console
|
6174
|
+
messages. (Note: For this feature to function correctly on Mac/Linux, stderr
|
6175
|
+
must go to the console.)
|
6132
6176
|
|
6133
6177
|
=item B<-q> (B<-quiet>)
|
6134
6178
|
|
data/bin/fmt_files/kml.fmt
CHANGED
@@ -24,6 +24,9 @@
|
|
24
24
|
# extension is used.
|
25
25
|
# 5) The -fileOrder option may be used to control the order of the
|
26
26
|
# generated placemarks when processing multiple files.
|
27
|
+
# 6) The "0" in the coordinates line may be changed to "$gpsaltitude#"
|
28
|
+
# and the altitudeMode may be changed to "absolute" to store
|
29
|
+
# altitude information if it exists in the track log.
|
27
30
|
#------------------------------------------------------------------------------
|
28
31
|
#[HEAD]<?xml version="1.0" encoding="UTF-8"?>
|
29
32
|
#[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
|
data/bin/fmt_files/kml_track.fmt
CHANGED
@@ -21,6 +21,9 @@
|
|
21
21
|
# 2) The -fileOrder option may be used to control the order of the
|
22
22
|
# waypoints when processing multiple still-image files, or the
|
23
23
|
# order of the tracks when processing multiple video files.
|
24
|
+
# 3) The "0" in the BODY line below may be changed to "$gpsaltitude#"
|
25
|
+
# and the altitudeMode may be changed to "absolute" to store
|
26
|
+
# altitude information if it exists in the track log.
|
24
27
|
#------------------------------------------------------------------------------
|
25
28
|
#[HEAD]<?xml version="1.0" encoding="UTF-8"?>
|
26
29
|
#[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
|
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
|
|
35
35
|
use Image::ExifTool::Validate;
|
36
36
|
use Image::ExifTool::MacOS;
|
37
37
|
|
38
|
-
$VERSION = '3.
|
38
|
+
$VERSION = '3.51';
|
39
39
|
@ISA = qw(Exporter);
|
40
40
|
|
41
41
|
sub NumbersFirst($$);
|
@@ -314,10 +314,12 @@ C<integer> is a string of digits (possibly beginning with a '+' or '-'),
|
|
314
314
|
C<real> is a floating point number, C<rational> is entered as a floating
|
315
315
|
point number but stored as two C<integer> strings separated by a '/'
|
316
316
|
character, C<date> is a date/time string entered in the format "YYYY:mm:dd
|
317
|
-
HH:MM:SS[.ss][+/-HH:MM]"
|
318
|
-
|
319
|
-
|
320
|
-
|
317
|
+
HH:MM:SS[.ss][+/-HH:MM]" but some partial date/time formats are also
|
318
|
+
accepted (see L<https://exiftool.org/faq.html#Q5>), C<boolean> is either
|
319
|
+
"True" or "False" (but "true" and "false" may be written as a ValueConv
|
320
|
+
value for compatibility with non-conforming applications), C<struct>
|
321
|
+
indicates a structured tag, and C<lang-alt> is a tag that supports alternate
|
322
|
+
languages.
|
321
323
|
|
322
324
|
When reading, C<struct> tags are extracted only if the L<Struct|../ExifTool.html#Struct> (-struct)
|
323
325
|
option is used. Otherwise the corresponding I<Flattened> tags, indicated by
|
@@ -443,6 +445,11 @@ QuickTime-based files; it extracts other track-specific and timed metadata,
|
|
443
445
|
but can not yet edit tags in these locations (with the exception of
|
444
446
|
track-level date/time tags).
|
445
447
|
|
448
|
+
Beware that the Keys tags are actually stored inside the ItemList in the
|
449
|
+
file, so deleting the ItemList group as a block (ie. C<-ItemList:all=>) also
|
450
|
+
deletes Keys tags. Instead, to preserve Keys tags the ItemList tags may be
|
451
|
+
deleted individually with C<-QuickTime:ItemList:all=>.
|
452
|
+
|
446
453
|
Alternate language tags may be accessed for
|
447
454
|
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags> and
|
448
455
|
L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags> tags by adding
|
@@ -1049,7 +1056,7 @@ TagID: foreach $tagID (@keys) {
|
|
1049
1056
|
if ($$tagInfo{SubIFD}) {
|
1050
1057
|
warn "Warning: Wrong SubDirectory Start for SubIFD tag - $short $name\n" unless $isSub;
|
1051
1058
|
} else {
|
1052
|
-
warn "Warning: SubIFD flag not set for $short $name\n" if $isSub;
|
1059
|
+
warn "Warning: SubIFD flag not set for $short $name\n" if $isSub and not $processBinaryData;
|
1053
1060
|
}
|
1054
1061
|
if ($$tagInfo{Notes}) {
|
1055
1062
|
my $note = $$tagInfo{Notes};
|