exiftool_vendored 12.15.0 → 12.22.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 +96 -2
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/config_files/example.config +1 -8
- data/bin/exiftool +104 -59
- data/bin/fmt_files/gpx.fmt +1 -1
- data/bin/fmt_files/gpx_wpt.fmt +1 -1
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool.pm +74 -24
- data/bin/lib/Image/ExifTool.pod +34 -24
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +24 -13
- data/bin/lib/Image/ExifTool/Canon.pm +26 -2
- data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/DPX.pm +3 -3
- data/bin/lib/Image/ExifTool/Exif.pm +35 -16
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
- data/bin/lib/Image/ExifTool/GPS.pm +24 -13
- data/bin/lib/Image/ExifTool/H264.pm +20 -5
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
- data/bin/lib/Image/ExifTool/MIE.pm +2 -2
- data/bin/lib/Image/ExifTool/Microsoft.pm +296 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
- data/bin/lib/Image/ExifTool/NikonSettings.pm +16 -16
- data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +58 -30
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +27 -8
- data/bin/lib/Image/ExifTool/README +5 -4
- data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +63 -29
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4032 -3981
- data/bin/lib/Image/ExifTool/TagNames.pod +261 -104
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -5
- data/bin/lib/Image/ExifTool/WriteXMP.pl +9 -6
- data/bin/lib/Image/ExifTool/Writer.pl +49 -14
- data/bin/lib/Image/ExifTool/XMP.pm +31 -5
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +48 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e2862287affdad95022ad8df06fd1b420c2861e28f5daefa50c627c42db2e396
|
|
4
|
+
data.tar.gz: 90b7804c201830e6cacc5b28b9ba29ef4a5fff7bb6a1cb26db1fce970495769e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 85a74e99266a89cf019066af0227b8d6515b153d2d5612814afa1bac1faffa874e6defa7aa524577a4031154cc81f0b74277136476cf35c6bb2aa9cc35e1148f
|
|
7
|
+
data.tar.gz: 42911ad4e1f2c03ff6a95cc25f3fcb47f8fbda099d6cfb669e72fefa9c743b002865225d872d179654dc79f3958d6e94feb20d7bfb317e3006c7b8bdee195e98
|
data/bin/Changes
CHANGED
|
@@ -4,9 +4,103 @@ ExifTool Version History
|
|
|
4
4
|
|
|
5
5
|
RSS feed: https://exiftool.org/rss.xml
|
|
6
6
|
|
|
7
|
-
Note: The most recent production release is Version 12.
|
|
7
|
+
Note: The most recent production release is Version 12.16. (Other versions are
|
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
|
9
9
|
|
|
10
|
+
Mar. 17, 2021 - Version 12.22
|
|
11
|
+
|
|
12
|
+
- Added a few new Sony LensTypes and a new SonyModelID (thanks Jos Roost and
|
|
13
|
+
LibRaw)
|
|
14
|
+
- Added Extra BaseName tag
|
|
15
|
+
- Added a new CanonModelID (thanks LibRaw)
|
|
16
|
+
- Decode timed GPS from unlisted programs in M2TS videos with the -ee3 option
|
|
17
|
+
- Decode more Sony rtmd tags
|
|
18
|
+
- Decode some tags for the Sony ILME-FX3 (thanks Jos Roost)
|
|
19
|
+
- Allow negative values to be written to XMP-aux:LensID
|
|
20
|
+
- Recognize HEVC video program in M2TS files
|
|
21
|
+
- Enhanced -b option so --b suppresses tags with binary data
|
|
22
|
+
- Improved flexibility when writing GPS coordinates:
|
|
23
|
+
- Now pulls latitude and longitude from a combined GPSCoordinates string
|
|
24
|
+
- Recognizes the full word "South" and "West" to write negative coordinates
|
|
25
|
+
- Improved warning when trying to write an integer QuickTime date/time tag and
|
|
26
|
+
Time::Local is not available
|
|
27
|
+
- Convert GPSSpeed from mph to km/h in timed GPS from Garmin MP4 videos
|
|
28
|
+
|
|
29
|
+
Feb. 24, 2021 - Version 12.21
|
|
30
|
+
|
|
31
|
+
- Added a few new iOS QuickTime tags
|
|
32
|
+
- Decode a couple more Sony rtmd tags
|
|
33
|
+
- Patch to avoid possible "Use of uninitialized value" warning when attempting
|
|
34
|
+
to write QuickTime date/time tags with an invalid value
|
|
35
|
+
- Fixed problem writing Microsoft Xtra tags
|
|
36
|
+
- Fixed Windows daylight savings time patch for file times that was broken in
|
|
37
|
+
12.19 (however directory times will not yet handle DST properly)
|
|
38
|
+
|
|
39
|
+
Feb. 23, 2021 - Version 12.20
|
|
40
|
+
|
|
41
|
+
- Added ability to write some Microsoft Xtra tags in MOV/MP4 videos
|
|
42
|
+
- Added two new Canon LensType values (thanks Norbert Wasser)
|
|
43
|
+
- Added a new Nikon LensID
|
|
44
|
+
- Fixed problem reading FITS comments that start before column 11
|
|
45
|
+
|
|
46
|
+
Feb. 18, 2021 - Version 12.19
|
|
47
|
+
|
|
48
|
+
- Added -list_dir option
|
|
49
|
+
- Added the "ls-l" Shortcut tag
|
|
50
|
+
- Extract Comment and History from FITS files
|
|
51
|
+
- Enhanced FilePermissions to include device type (similar to "ls -l")
|
|
52
|
+
- Changed the name of Apple ContentIdentifier tag to MediaGroupUUID
|
|
53
|
+
(thanks Neal Krawetz)
|
|
54
|
+
- Fixed a potential "substr outside of string" runtime error when reading
|
|
55
|
+
corrupted EXIF
|
|
56
|
+
- Fixed edge case where NikonScanIFD may not be copied properly when copying
|
|
57
|
+
MakerNotes to another file
|
|
58
|
+
- API Changes:
|
|
59
|
+
- Added ability to read/write System tags of directories
|
|
60
|
+
- Enhanced GetAllGroups() to support family 7 and take optional ExifTool
|
|
61
|
+
reference
|
|
62
|
+
- Changed QuickTimeHandler option default to 1
|
|
63
|
+
|
|
64
|
+
Feb. 9, 2021 - Version 12.18
|
|
65
|
+
|
|
66
|
+
- Added a new SonyModelID
|
|
67
|
+
- Decode a number of Sony tags for the ILCE-1 (thanks Jos Roost)
|
|
68
|
+
- Decode a couple of new Canon tags (thanks LibRaw)
|
|
69
|
+
- Patched to read differently formatted UserData:Keywords as written by iPhone
|
|
70
|
+
- Patched to tolerate out-of-order Nikon MakerNote IFD entries when obtaining
|
|
71
|
+
tags necessary for decryption
|
|
72
|
+
- Fixed a few possible Condition warnings for some NikonSettings tags
|
|
73
|
+
|
|
74
|
+
Feb. 3, 2021 - Version 12.17
|
|
75
|
+
|
|
76
|
+
- Added a new Canon FocusMode value
|
|
77
|
+
- Added a new FujiFilm FilmMode value
|
|
78
|
+
- Added a number of new XMP-crs tags (thanks Herb)
|
|
79
|
+
- Decode a new H264 MDPM tag
|
|
80
|
+
- Allow non-conforming lower-case XMP boolean "true" and "false" values to be
|
|
81
|
+
written, but only when print conversion is disabled
|
|
82
|
+
- Improved Validate option to warn about non-capitalized boolean XMP values
|
|
83
|
+
- Improved logic for setting GPSLatitude/LongitudeRef values when writing
|
|
84
|
+
- Changed -json and -php options so the -a option is implied even without the
|
|
85
|
+
-g option
|
|
86
|
+
- Avoid extracting audio/video data from AVI videos when -ee -u is used
|
|
87
|
+
- Patched decoding of Canon ContinuousShootingSpeed for newer firmware
|
|
88
|
+
versions of the EOS-1DXmkIII
|
|
89
|
+
- Re-worked LensID patch of version 12.00 (github issue #51)
|
|
90
|
+
- Fixed a few typos in newly-added NikonSettings tags (thanks Herb)
|
|
91
|
+
- Fixed problem where group could not be specified for PNG-pHYs tags when
|
|
92
|
+
writing
|
|
93
|
+
|
|
94
|
+
Jan. 21, 2021 - Version 12.16 (production release)
|
|
95
|
+
|
|
96
|
+
- Extract another form of video subtitle text
|
|
97
|
+
- Enhanced -ee option with -ee2 and -ee3 to allow parsing of the H264 video
|
|
98
|
+
stream in MP4 files
|
|
99
|
+
- Changed a Nikon FlashMode value
|
|
100
|
+
- Fixed problem that caused a failed DPX test on Strawberry Perl
|
|
101
|
+
- API Changes:
|
|
102
|
+
- Enhanced ExtractEmbedded option
|
|
103
|
+
|
|
10
104
|
Jan. 18, 2021 - Version 12.15 (production release)
|
|
11
105
|
|
|
12
106
|
- Added a couple of new Sony LensType values (thanks LibRaw and Jos Roost)
|
|
@@ -212,7 +306,7 @@ July 27, 2020 - Version 12.02
|
|
|
212
306
|
- Improved decoding of some Canon EOS 1DXmkIII custom functions
|
|
213
307
|
- Allow integer QuickTime TrackNumber and DiskNumber values
|
|
214
308
|
- Relax validity check of QuickTime:ContentCreateDate when writing with -n
|
|
215
|
-
- Removed "Com" from the start of some unknown ItemList tag names
|
|
309
|
+
- Removed "Com" from the start of some unknown QuickTime ItemList tag names
|
|
216
310
|
- Patched CanonCustom decoding for bug in Canon EOS-1DX firmware
|
|
217
311
|
- Changed QuickTime CleanAperture tags decode as signed rationals
|
|
218
312
|
|
data/bin/MANIFEST
CHANGED
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
|
@@ -106,8 +106,8 @@ your home directory, then you would type the following commands in a
|
|
|
106
106
|
terminal window to extract and run ExifTool:
|
|
107
107
|
|
|
108
108
|
cd ~/Desktop
|
|
109
|
-
gzip -dc Image-ExifTool-12.
|
|
110
|
-
cd Image-ExifTool-12.
|
|
109
|
+
gzip -dc Image-ExifTool-12.22.tar.gz | tar -xf -
|
|
110
|
+
cd Image-ExifTool-12.22
|
|
111
111
|
./exiftool t/images/ExifTool.jpg
|
|
112
112
|
|
|
113
113
|
Note: These commands extract meta information from one of the test images.
|
|
@@ -165,14 +165,7 @@
|
|
|
165
165
|
# specified, then at least one of the Desire'd tags must exist. See
|
|
166
166
|
# the Composite table in Image::ExifTool::Exif for more examples,
|
|
167
167
|
# and lib/Image/ExifTool/README for all of the details.
|
|
168
|
-
|
|
169
|
-
Require => {
|
|
170
|
-
0 => 'FileName',
|
|
171
|
-
},
|
|
172
|
-
# remove the extension from FileName
|
|
173
|
-
ValueConv => '$val[0] =~ /(.*)\./ ? $1 : $val[0]',
|
|
174
|
-
},
|
|
175
|
-
# the next few examples demonstrate simplifications which may be
|
|
168
|
+
# The first few examples demonstrate simplifications which may be
|
|
176
169
|
# used if only one tag is Require'd or Desire'd:
|
|
177
170
|
# 1) the Require lookup may be replaced with a simple tag name
|
|
178
171
|
# 2) "$val" may be used to represent "$val[0]" in the expression
|
data/bin/exiftool
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
use strict;
|
|
11
11
|
require 5.004;
|
|
12
12
|
|
|
13
|
-
my $version = '12.
|
|
13
|
+
my $version = '12.22';
|
|
14
14
|
|
|
15
15
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
16
16
|
my $exeDir;
|
|
@@ -159,14 +159,17 @@ my $forcePrint; # string to use for missing tag values (undef to not print t
|
|
|
159
159
|
my $helped; # flag to avoid printing help if no tags specified
|
|
160
160
|
my $html; # flag for html-formatted output (2=html dump)
|
|
161
161
|
my $interrupted; # flag set if CTRL-C is pressed during a critical process
|
|
162
|
+
my $isBinary; # true if value is a SCALAR ref
|
|
162
163
|
my $isWriting; # flag set if we are writing tags
|
|
163
164
|
my $joinLists; # flag set to join list values into a single string
|
|
164
165
|
my $json; # flag for JSON/PHP output format (1=JSON, 2=PHP)
|
|
165
166
|
my $langOpt; # language option
|
|
167
|
+
my $listDir; # treat a directory as a regular file
|
|
166
168
|
my $listItem; # item number for extracting single item from a list
|
|
167
169
|
my $listSep; # list item separator (', ' by default)
|
|
168
170
|
my $mt; # main ExifTool object
|
|
169
171
|
my $multiFile; # non-zero if we are scanning multiple files
|
|
172
|
+
my $noBinary; # flag set to ignore binary tags
|
|
170
173
|
my $outFormat; # -1=Canon format, 0=same-line, 1=tag names, 2=values only
|
|
171
174
|
my $outOpt; # output file or directory name
|
|
172
175
|
my $overwriteOrig; # flag to overwrite original file (1=overwrite, 2=in place)
|
|
@@ -203,7 +206,6 @@ my $validFile; # flag indicating we processed a valid file
|
|
|
203
206
|
my $verbose; # verbose setting
|
|
204
207
|
my $vout; # verbose output file reference (\*STDOUT or \*STDERR)
|
|
205
208
|
my $windowTitle; # title for console window
|
|
206
|
-
my $isBinary; # true if value is a SCALAR ref
|
|
207
209
|
my $xml; # flag for XML-formatted output
|
|
208
210
|
|
|
209
211
|
# flag to keep the input -@ argfile open:
|
|
@@ -474,6 +476,7 @@ undef $joinLists;
|
|
|
474
476
|
undef $langOpt;
|
|
475
477
|
undef $listItem;
|
|
476
478
|
undef $multiFile;
|
|
479
|
+
undef $noBinary;
|
|
477
480
|
undef $outOpt;
|
|
478
481
|
undef $preserveTime;
|
|
479
482
|
undef $progress;
|
|
@@ -691,7 +694,7 @@ for (;;) {
|
|
|
691
694
|
} else { # 'g(\d*)'
|
|
692
695
|
# list all groups in specified family
|
|
693
696
|
my $family = $2 || 0;
|
|
694
|
-
PrintTagList("Groups in family $family", GetAllGroups($family));
|
|
697
|
+
PrintTagList("Groups in family $family", $mt->GetAllGroups($family));
|
|
695
698
|
}
|
|
696
699
|
next;
|
|
697
700
|
}
|
|
@@ -792,7 +795,11 @@ for (;;) {
|
|
|
792
795
|
next;
|
|
793
796
|
}
|
|
794
797
|
/^arg(s|format)$/i and $argFormat = 1, next;
|
|
795
|
-
/^b(inary)?$/i
|
|
798
|
+
if (/^(-?)b(inary)?$/i) {
|
|
799
|
+
($binaryOutput, $noBinary) = $1 ? (undef, 1) : (1, undef);
|
|
800
|
+
$mt->Options(Binary => $binaryOutput, NoPDFList => $binaryOutput);
|
|
801
|
+
next;
|
|
802
|
+
}
|
|
796
803
|
if (/^c(oordFormat)?$/i) {
|
|
797
804
|
my $fmt = shift;
|
|
798
805
|
$fmt or Error("Expecting coordinate format for -c option\n"), $badCmd=1, next;
|
|
@@ -876,6 +883,7 @@ for (;;) {
|
|
|
876
883
|
}
|
|
877
884
|
(/^D$/ or $a eq 'decimal') and $showTagID = 'D', next;
|
|
878
885
|
/^delete_original(!?)$/i and $deleteOrig = ($1 ? 2 : 1), next;
|
|
886
|
+
/^list_dir$/i and $listDir = 1, next;
|
|
879
887
|
(/^e$/ or $a eq '-composite') and $mt->Options(Composite => 0), next;
|
|
880
888
|
(/^-e$/ or $a eq 'composite') and $mt->Options(Composite => 1), next;
|
|
881
889
|
(/^E$/ or $a eq 'escapehtml') and require Image::ExifTool::HTML and $escapeHTML = 1, next;
|
|
@@ -894,8 +902,8 @@ for (;;) {
|
|
|
894
902
|
$helped = 1;
|
|
895
903
|
next;
|
|
896
904
|
}
|
|
897
|
-
if (/^(ee|extractembedded)$/i) {
|
|
898
|
-
$mt->Options(ExtractEmbedded => 1);
|
|
905
|
+
if (/^(ee|extractembedded)(\d*)$/i) {
|
|
906
|
+
$mt->Options(ExtractEmbedded => $2 || 1);
|
|
899
907
|
$mt->Options(Duplicates => 1);
|
|
900
908
|
next;
|
|
901
909
|
}
|
|
@@ -1264,7 +1272,7 @@ for (;;) {
|
|
|
1264
1272
|
if (/^php$/i) {
|
|
1265
1273
|
$json = 2;
|
|
1266
1274
|
$html = $xml = 0;
|
|
1267
|
-
$mt->Options(Duplicates=>1);
|
|
1275
|
+
$mt->Options(Duplicates => 1);
|
|
1268
1276
|
next;
|
|
1269
1277
|
}
|
|
1270
1278
|
if (/^z(ip)?$/i) {
|
|
@@ -1505,7 +1513,6 @@ if ($xml) {
|
|
|
1505
1513
|
require Image::ExifTool::XMP if $json == 1; # (for EncodeBase64)
|
|
1506
1514
|
}
|
|
1507
1515
|
$mt->Options(List => 1) unless $joinLists;
|
|
1508
|
-
$mt->Options(Duplicates => 0) unless defined $showGroup;
|
|
1509
1516
|
$showTagID = 'D' if $tabFormat and not $showTagID;
|
|
1510
1517
|
} elsif ($structOpt) {
|
|
1511
1518
|
$mt->Options(List => 1);
|
|
@@ -2271,6 +2278,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2271
2278
|
next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
|
|
2272
2279
|
}
|
|
2273
2280
|
$val = ConvertBinary($val); # convert SCALAR references
|
|
2281
|
+
next unless defined $val;
|
|
2274
2282
|
if ($structOpt) {
|
|
2275
2283
|
# serialize structure if necessary
|
|
2276
2284
|
$val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
|
|
@@ -2304,7 +2312,7 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2304
2312
|
$group = $et->GetGroup($tag, $showGroup);
|
|
2305
2313
|
# look ahead to see if this tag may suppress a priority tag in
|
|
2306
2314
|
# the same group, and if so suppress this tag instead
|
|
2307
|
-
next if $noDups and $tag =~ /^(.*?)
|
|
2315
|
+
next if $noDups and $tag =~ /^(.*?) \(/ and defined $$info{$1} and
|
|
2308
2316
|
$group eq $et->GetGroup($1, $showGroup);
|
|
2309
2317
|
$group = 'Unknown' if not $group and ($xml or $json or $csv);
|
|
2310
2318
|
if ($fp and not ($allGroup or $csv)) {
|
|
@@ -2327,6 +2335,9 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2327
2335
|
}
|
|
2328
2336
|
undef $group; # undefine so we don't print it below
|
|
2329
2337
|
}
|
|
2338
|
+
} elsif ($noDups) {
|
|
2339
|
+
# don't allow duplicates, but avoid suppressing the priority tag
|
|
2340
|
+
next if $tag =~ /^(.*?) \(/ and defined $$info{$1};
|
|
2330
2341
|
}
|
|
2331
2342
|
|
|
2332
2343
|
++$lineCount; # we are printing something meaningful
|
|
@@ -2706,7 +2717,7 @@ sub SetImageInfo($$$)
|
|
|
2706
2717
|
return 0;
|
|
2707
2718
|
}
|
|
2708
2719
|
}
|
|
2709
|
-
if (not $isStdout and ($et->IsDirectory($outfile) or $outfile =~ /\/$/)) {
|
|
2720
|
+
if (not $isStdout and (($et->IsDirectory($outfile) and not $listDir) or $outfile =~ /\/$/)) {
|
|
2710
2721
|
$outfile .= '/' unless $outfile =~ /\/$/;
|
|
2711
2722
|
my $name = $file;
|
|
2712
2723
|
$name =~ s/^.*\///s; # remove directory name
|
|
@@ -2909,6 +2920,10 @@ sub SetImageInfo($$$)
|
|
|
2909
2920
|
unless (defined $tmpFile) {
|
|
2910
2921
|
# count the number of tags and pseudo-tags we are writing
|
|
2911
2922
|
my ($numSet, $numPseudo) = $et->CountNewValues();
|
|
2923
|
+
if ($numSet != $numPseudo and $et->IsDirectory($file)) {
|
|
2924
|
+
print $vout "Can't write real tags to a directory - $infile\n" if defined $verbose;
|
|
2925
|
+
$numSet = $numPseudo;
|
|
2926
|
+
}
|
|
2912
2927
|
if ($et->Exists($file)) {
|
|
2913
2928
|
unless ($numSet) {
|
|
2914
2929
|
# no need to write if no tags set
|
|
@@ -3393,20 +3408,25 @@ sub AddGroups($$$$)
|
|
|
3393
3408
|
#------------------------------------------------------------------------------
|
|
3394
3409
|
# Convert binary data (SCALAR references) for printing
|
|
3395
3410
|
# Inputs: 0) object reference
|
|
3396
|
-
# Returns: converted object
|
|
3411
|
+
# Returns: converted object, or undef if we don't want binary objects
|
|
3397
3412
|
sub ConvertBinary($)
|
|
3398
3413
|
{
|
|
3399
3414
|
my $obj = shift;
|
|
3400
3415
|
my ($key, $val);
|
|
3401
3416
|
if (ref $obj eq 'HASH') {
|
|
3402
3417
|
foreach $key (keys %$obj) {
|
|
3403
|
-
|
|
3418
|
+
next unless ref $$obj{$key};
|
|
3419
|
+
$$obj{$key} = ConvertBinary($$obj{$key});
|
|
3420
|
+
return undef unless defined $$obj{$key};
|
|
3404
3421
|
}
|
|
3405
3422
|
} elsif (ref $obj eq 'ARRAY') {
|
|
3406
3423
|
foreach $val (@$obj) {
|
|
3407
|
-
|
|
3424
|
+
next unless ref $val;
|
|
3425
|
+
$val = ConvertBinary($val);
|
|
3426
|
+
return undef unless defined $val;
|
|
3408
3427
|
}
|
|
3409
3428
|
} elsif (ref $obj eq 'SCALAR') {
|
|
3429
|
+
return undef if $noBinary;
|
|
3410
3430
|
# (binaryOutput flag is set to 0 for binary mode of XML/PHP/JSON output formats)
|
|
3411
3431
|
if (defined $binaryOutput) {
|
|
3412
3432
|
$obj = $$obj;
|
|
@@ -3583,7 +3603,7 @@ sub ProcessFiles($;$)
|
|
|
3583
3603
|
++$progressCount;
|
|
3584
3604
|
$progStr = " [$progressCount/$progressMax]" if $progress;
|
|
3585
3605
|
}
|
|
3586
|
-
if ($et->IsDirectory($file)) {
|
|
3606
|
+
if ($et->IsDirectory($file) and not $listDir) {
|
|
3587
3607
|
$multiFile = $validFile = 1;
|
|
3588
3608
|
ScanDir($et, $file, $list);
|
|
3589
3609
|
} elsif ($filterFlag and not AcceptFile($file)) {
|
|
@@ -4573,7 +4593,7 @@ L<Processing control|/Processing control>
|
|
|
4573
4593
|
|
|
4574
4594
|
-a (-duplicates) Allow duplicate tags to be extracted
|
|
4575
4595
|
-e (--composite) Do not generate composite tags
|
|
4576
|
-
-ee
|
|
4596
|
+
-ee[NUM] (-extractEmbedded) Extract information from embedded files
|
|
4577
4597
|
-ext[+] EXT (-extension) Process files with specified extension
|
|
4578
4598
|
-F[OFFSET] (-fixBase) Fix the base for maker notes offsets
|
|
4579
4599
|
-fast[NUM] Increase speed when extracting metadata
|
|
@@ -4622,6 +4642,7 @@ L<Advanced options|/Advanced options>
|
|
|
4622
4642
|
-echo[NUM] TEXT Echo text to stdout or stderr
|
|
4623
4643
|
-efile[NUM][!] ERRFILE Save names of files with errors
|
|
4624
4644
|
-execute[NUM] Execute multiple commands on one line
|
|
4645
|
+
-list_dir List directories, not their contents
|
|
4625
4646
|
-srcfile FMT Process a different source file
|
|
4626
4647
|
-stay_open FLAG Keep reading -@ argfile even after EOF
|
|
4627
4648
|
-userParam PARAM[[^]=[VAL]] Set user parameter (API UserParam opt)
|
|
@@ -4917,7 +4938,7 @@ and the value is written to all possible groups/tags. For example, the
|
|
|
4917
4938
|
string form must be used in the following command since the intent is to set
|
|
4918
4939
|
the value of all existing date/time tags from C<CreateDate>:
|
|
4919
4940
|
|
|
4920
|
-
exiftool
|
|
4941
|
+
exiftool '-time:all<$createdate' -wm w FILE
|
|
4921
4942
|
|
|
4922
4943
|
=item B<-x> I<TAG> (B<-exclude>)
|
|
4923
4944
|
|
|
@@ -4930,7 +4951,7 @@ documentation above for a complete description.
|
|
|
4930
4951
|
=head3 Input-output text formatting
|
|
4931
4952
|
|
|
4932
4953
|
Note that trailing spaces are removed from extracted values for most output
|
|
4933
|
-
text formats. The exceptions are
|
|
4954
|
+
text formats. The exceptions are B<-b>, B<-csv>, B<-j> and B<-X>.
|
|
4934
4955
|
|
|
4935
4956
|
=over 5
|
|
4936
4957
|
|
|
@@ -4943,7 +4964,7 @@ between images, but allows the metadata to be altered by editing the
|
|
|
4943
4964
|
intermediate file (C<out.args> in this example):
|
|
4944
4965
|
|
|
4945
4966
|
exiftool -args -G1 --filename --directory src.jpg > out.args
|
|
4946
|
-
exiftool -@ out.args -sep
|
|
4967
|
+
exiftool -@ out.args -sep ', ' dst.jpg
|
|
4947
4968
|
|
|
4948
4969
|
Note: Be careful when copying information with this technique since it is
|
|
4949
4970
|
easy to write tags which are normally considered "unsafe". For instance,
|
|
@@ -4956,17 +4977,21 @@ maintain separate list items when writing metadata back to image files, and
|
|
|
4956
4977
|
the B<-struct> option may be used when extracting to preserve structured XMP
|
|
4957
4978
|
information.
|
|
4958
4979
|
|
|
4959
|
-
=item B<-b> (B<-binary>)
|
|
4980
|
+
=item B<-b>, B<--b> (B<-binary>, B<--binary>)
|
|
4960
4981
|
|
|
4961
|
-
Output requested metadata in binary format without tag names or
|
|
4962
|
-
|
|
4963
|
-
other binary data, but it may also be useful for some text strings
|
|
4964
|
-
control characters (such as newlines) are not replaced by '.' as they
|
|
4965
|
-
the default output. By default, list items are separated by a
|
|
4966
|
-
extracted with the B<-b> option, but this may be changed (see
|
|
4967
|
-
option for details). May be combined with
|
|
4968
|
-
extract binary data in JSON, PHP or XML format, but note that
|
|
4969
|
-
must be specified explicitly to be extracted as binary in
|
|
4982
|
+
Output requested metadata in binary format without tag names or descriptions
|
|
4983
|
+
(B<-b> or B<-binary>). This option is mainly used for extracting embedded
|
|
4984
|
+
images or other binary data, but it may also be useful for some text strings
|
|
4985
|
+
since control characters (such as newlines) are not replaced by '.' as they
|
|
4986
|
+
are in the default output. By default, list items are separated by a
|
|
4987
|
+
newline when extracted with the B<-b> option, but this may be changed (see
|
|
4988
|
+
the B<-sep> option for details). May be combined with B<-j>, B<-php> or
|
|
4989
|
+
B<-X> to extract binary data in JSON, PHP or XML format, but note that
|
|
4990
|
+
"unsafe" tags must be specified explicitly to be extracted as binary in
|
|
4991
|
+
these formats.
|
|
4992
|
+
|
|
4993
|
+
With a leading double dash (B<--b> or B<--binary>), tags which contain
|
|
4994
|
+
binary data are suppressed in the output when reading.
|
|
4970
4995
|
|
|
4971
4996
|
=item B<-c> I<FMT> (B<-coordFormat>)
|
|
4972
4997
|
|
|
@@ -5207,18 +5232,18 @@ JSON arrays unless B<-sep> is used. By default XMP structures are flattened
|
|
|
5207
5232
|
into individual tags in the JSON output, but the original structure may be
|
|
5208
5233
|
preserved with the B<-struct> option (this also causes all list-type XMP
|
|
5209
5234
|
tags to be output as JSON arrays, otherwise single-item lists would be
|
|
5210
|
-
output as simple strings). The B<-a> option is implied
|
|
5211
|
-
|
|
5212
|
-
|
|
5213
|
-
|
|
5214
|
-
|
|
5215
|
-
|
|
5216
|
-
|
|
5217
|
-
|
|
5218
|
-
|
|
5219
|
-
|
|
5220
|
-
|
|
5221
|
-
|
|
5235
|
+
output as simple strings). The B<-a> option is implied when B<-json> is
|
|
5236
|
+
used, but entries with identical JSON names are suppressed in the output.
|
|
5237
|
+
(B<-G4> may be used to ensure that all tags have unique JSON names.) Adding
|
|
5238
|
+
the B<-D> or B<-H> option changes tag values to JSON objects with "val" and
|
|
5239
|
+
"id" fields, and adding B<-l> adds a "desc" field, and a "num" field if the
|
|
5240
|
+
numerical value is different from the converted "val". The B<-b> option may
|
|
5241
|
+
be added to output binary data, encoded in base64 if necessary (indicated by
|
|
5242
|
+
ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
|
|
5243
|
+
to include tag table information (see B<-t> for details). The JSON output
|
|
5244
|
+
is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
|
|
5245
|
+
UTF-8 validation is disabled if a character set other than UTF-8 is
|
|
5246
|
+
specified.
|
|
5222
5247
|
|
|
5223
5248
|
If I<JSONFILE> is specified, the file is imported and the tag definitions
|
|
5224
5249
|
from the file are used to set tag values on a per-file basis. The special
|
|
@@ -5367,7 +5392,7 @@ with this command:
|
|
|
5367
5392
|
|
|
5368
5393
|
produces output like this:
|
|
5369
5394
|
|
|
5370
|
-
-- Generated by ExifTool 12.
|
|
5395
|
+
-- Generated by ExifTool 12.22 --
|
|
5371
5396
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5372
5397
|
(f/5.6, 1/60s, ISO 100)
|
|
5373
5398
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5527,18 +5552,18 @@ Notes:
|
|
|
5527
5552
|
argument like C<%d%f.txt> is written as C<%%d%%f.txt>.
|
|
5528
5553
|
|
|
5529
5554
|
2) If the argument for B<-w> does not contain a valid format code (eg. %f),
|
|
5530
|
-
then it is interpreted as a file extension
|
|
5531
|
-
|
|
5532
|
-
multiple source files is typically done by shell redirection, ie)
|
|
5555
|
+
then it is interpreted as a file extension, but there are three different
|
|
5556
|
+
ways to create a single output file from multiple source files:
|
|
5533
5557
|
|
|
5558
|
+
# 1. Shell redirection
|
|
5534
5559
|
exiftool FILE1 FILE2 ... > out.txt
|
|
5535
5560
|
|
|
5536
|
-
|
|
5537
|
-
be interpreted as a format string, and the same result may be obtained
|
|
5538
|
-
without the use of shell redirection:
|
|
5539
|
-
|
|
5561
|
+
# 2. With the -w option and a zero-width format code
|
|
5540
5562
|
exiftool -w+! %0fout.txt FILE1 FILE2 ...
|
|
5541
5563
|
|
|
5564
|
+
# 3. With the -W option (see the -W option below)
|
|
5565
|
+
exiftool -W+! out.txt FILE1 FILE2 ...
|
|
5566
|
+
|
|
5542
5567
|
Advanced features:
|
|
5543
5568
|
|
|
5544
5569
|
A substring of the original file name, directory or extension may be taken
|
|
@@ -5706,7 +5731,7 @@ when copying.
|
|
|
5706
5731
|
|
|
5707
5732
|
Extract existing tags only -- don't generate composite tags.
|
|
5708
5733
|
|
|
5709
|
-
=item B<-ee> (B<-extractEmbedded>)
|
|
5734
|
+
=item B<-ee>[I<NUM>] (B<-extractEmbedded>)
|
|
5710
5735
|
|
|
5711
5736
|
Extract information from embedded documents in EPS files, embedded EPS
|
|
5712
5737
|
information and JPEG and Jpeg2000 images in PDF files, embedded MPF images
|
|
@@ -5724,6 +5749,12 @@ document as if it were a separate input file. This allows, for example,
|
|
|
5724
5749
|
generation of GPS track logs from timed metadata in videos. See
|
|
5725
5750
|
L<https://exiftool.org/geotag.html#Inverse> for examples.
|
|
5726
5751
|
|
|
5752
|
+
Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
|
|
5753
|
+
until the first Supplemental Enhancement Information (SEI) message is
|
|
5754
|
+
decoded, or 3 to parse the entire H624 stream and decode all SEI
|
|
5755
|
+
information. For M2TS videos, a setting of 3 causes the entire file to be
|
|
5756
|
+
parsed in search of unlisted programs which may contain timed GPS.
|
|
5757
|
+
|
|
5727
5758
|
=item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
|
|
5728
5759
|
|
|
5729
5760
|
Process only files with (B<-ext>) or without (B<--ext>) a specified
|
|
@@ -5811,10 +5842,10 @@ Ignore specified directory name. I<DIR> may be either an individual folder
|
|
|
5811
5842
|
name, or a full path. If a full path is specified, it must match the
|
|
5812
5843
|
Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
|
|
5813
5844
|
more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
|
|
5814
|
-
sensitive) may be specified to
|
|
5815
|
-
is used. As well, a value of C<HIDDEN>
|
|
5816
|
-
ignore files with names that start with a
|
|
5817
|
-
systems) when scanning a directory.
|
|
5845
|
+
sensitive) may be specified to avoid recursing into directories which are
|
|
5846
|
+
symbolic links when the B<-r> option is used. As well, a value of C<HIDDEN>
|
|
5847
|
+
(case sensitive) may be used to ignore files with names that start with a
|
|
5848
|
+
"." (ie. hidden files on Unix systems) when scanning a directory.
|
|
5818
5849
|
|
|
5819
5850
|
=item B<-if>[I<NUM>] I<EXPR>
|
|
5820
5851
|
|
|
@@ -6240,7 +6271,7 @@ As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
|
|
|
6240
6271
|
for any tag on the command line. See the L<MWG Tags
|
|
6241
6272
|
documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
|
|
6242
6273
|
that this option is not reversible, and remains in effect until the
|
|
6243
|
-
application terminates, even across the
|
|
6274
|
+
application terminates, even across the B<-execute> option.
|
|
6244
6275
|
|
|
6245
6276
|
=back
|
|
6246
6277
|
|
|
@@ -6344,6 +6375,20 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
|
|
|
6344
6375
|
when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
|
|
6345
6376
|
option no longer suppresses the output "{readyNUM}" message.
|
|
6346
6377
|
|
|
6378
|
+
=item B<-list_dir>
|
|
6379
|
+
|
|
6380
|
+
List directories themselves instead of their contents. This option
|
|
6381
|
+
effectively causes directories to be treated as normal files when reading
|
|
6382
|
+
and writing. For example, with this option the output of the C<ls -la>
|
|
6383
|
+
command on Mac/Linux may be approximated by this exiftool command:
|
|
6384
|
+
|
|
6385
|
+
exiftool -list_dir -T -ls-l -api systemtags -fast5 .* *
|
|
6386
|
+
|
|
6387
|
+
(The B<-T> option formats the output in tab-separated columns, B<-ls-l> is a
|
|
6388
|
+
L<shortcut tag|Image::ExifTool::Shortcuts>, the API SystemTags option is
|
|
6389
|
+
required to extract some necessary tags, and the B<-fast5> option is added
|
|
6390
|
+
for speed since only system tags are being extracted.)
|
|
6391
|
+
|
|
6347
6392
|
=item B<-srcfile> I<FMT>
|
|
6348
6393
|
|
|
6349
6394
|
Specify a different source file to be processed based on the name of the
|
|
@@ -6391,7 +6436,7 @@ buffered output.) ExifTool will then execute the command with the arguments
|
|
|
6391
6436
|
received up to this point, send a "{ready}" message to stdout when done
|
|
6392
6437
|
(unless the B<-q> or B<-T> option is used), and continue trying to read
|
|
6393
6438
|
arguments for the next command from I<ARGFILE>. To aid in command/response
|
|
6394
|
-
synchronization, any number appended to the
|
|
6439
|
+
synchronization, any number appended to the B<-execute> option is echoed in
|
|
6395
6440
|
the "{ready}" message. For example, C<-execute613> results in "{ready613}".
|
|
6396
6441
|
When this number is added, B<-q> no longer suppresses the "{ready}" message.
|
|
6397
6442
|
(Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
|
|
@@ -6526,8 +6571,8 @@ complete list). Setting this triggers the use of Windows wide-character i/o
|
|
|
6526
6571
|
routines, thus providing support for most Unicode file names (see note 4).
|
|
6527
6572
|
But note that it is not trivial to pass properly encoded file names on the
|
|
6528
6573
|
Windows command line (see L<https://exiftool.org/faq.html#Q18> for details),
|
|
6529
|
-
so placing them in a UTF-8 encoded B<-@> argfile and using
|
|
6530
|
-
filename=utf8> is recommended if possible.
|
|
6574
|
+
so placing them in a UTF-8 encoded B<-@> argfile and using
|
|
6575
|
+
C<-charset filename=utf8> is recommended if possible.
|
|
6531
6576
|
|
|
6532
6577
|
A warning is issued if a specified filename contains special characters and
|
|
6533
6578
|
the filename character set was not provided. However, the warning may be
|
|
@@ -6601,7 +6646,7 @@ Print all meta information in an image, including duplicate and unknown
|
|
|
6601
6646
|
tags, sorted by group (for family 1). For performance reasons, this command
|
|
6602
6647
|
may not extract all available metadata. (Metadata in embedded documents,
|
|
6603
6648
|
metadata extracted by external utilities, and metadata requiring excessive
|
|
6604
|
-
processing time may not be extracted). Add C<-
|
|
6649
|
+
processing time may not be extracted). Add C<-ee3> and C<-api RequestAll=3>
|
|
6605
6650
|
to the command to extract absolutely everything available.
|
|
6606
6651
|
|
|
6607
6652
|
=item exiftool -common dir
|
|
@@ -6670,7 +6715,7 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>).
|
|
|
6670
6715
|
Print one line of output containing the file name and DateTimeOriginal for
|
|
6671
6716
|
each image in directory C<dir>.
|
|
6672
6717
|
|
|
6673
|
-
=item exiftool -
|
|
6718
|
+
=item exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
|
|
6674
6719
|
|
|
6675
6720
|
Extract all GPS positions from an AVCHD video.
|
|
6676
6721
|
|