exiftool_vendored 12.18.0 → 12.33.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 +236 -4
- data/bin/MANIFEST +23 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +45 -43
- data/bin/arg_files/xmp2exif.args +2 -1
- data/bin/config_files/acdsee.config +193 -6
- data/bin/config_files/convert_regions.config +25 -14
- data/bin/config_files/cuepointlist.config +70 -0
- data/bin/config_files/example.config +2 -9
- data/bin/exiftool +152 -97
- data/bin/fmt_files/gpx.fmt +2 -2
- data/bin/fmt_files/gpx_wpt.fmt +2 -2
- data/bin/fmt_files/kml.fmt +1 -1
- data/bin/fmt_files/kml_track.fmt +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +3 -2
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -13
- data/bin/lib/Image/ExifTool/CBOR.pm +331 -0
- data/bin/lib/Image/ExifTool/Canon.pm +44 -19
- data/bin/lib/Image/ExifTool/DJI.pm +6 -6
- data/bin/lib/Image/ExifTool/DPX.pm +13 -2
- data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
- data/bin/lib/Image/ExifTool/Exif.pm +124 -13
- data/bin/lib/Image/ExifTool/FITS.pm +13 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
- data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
- data/bin/lib/Image/ExifTool/GPS.pm +22 -11
- data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
- data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
- data/bin/lib/Image/ExifTool/ID3.pm +15 -3
- data/bin/lib/Image/ExifTool/JPEG.pm +74 -4
- data/bin/lib/Image/ExifTool/JSON.pm +30 -5
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +395 -16
- data/bin/lib/Image/ExifTool/LIF.pm +153 -0
- data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
- data/bin/lib/Image/ExifTool/M2TS.pm +137 -5
- data/bin/lib/Image/ExifTool/MIE.pm +4 -3
- data/bin/lib/Image/ExifTool/MRC.pm +341 -0
- data/bin/lib/Image/ExifTool/MWG.pm +3 -3
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +3 -3
- data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
- data/bin/lib/Image/ExifTool/Nikon.pm +18 -5
- data/bin/lib/Image/ExifTool/NikonSettings.pm +19 -2
- data/bin/lib/Image/ExifTool/Olympus.pm +10 -3
- data/bin/lib/Image/ExifTool/Other.pm +93 -0
- data/bin/lib/Image/ExifTool/PDF.pm +9 -12
- data/bin/lib/Image/ExifTool/PNG.pm +8 -7
- data/bin/lib/Image/ExifTool/Panasonic.pm +28 -3
- data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
- data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
- data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +234 -75
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +283 -141
- data/bin/lib/Image/ExifTool/README +5 -2
- data/bin/lib/Image/ExifTool/RIFF.pm +89 -12
- data/bin/lib/Image/ExifTool/Samsung.pm +48 -10
- data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
- data/bin/lib/Image/ExifTool/Sony.pm +230 -69
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
- data/bin/lib/Image/ExifTool/TagLookup.pm +4145 -4029
- data/bin/lib/Image/ExifTool/TagNames.pod +671 -287
- data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
- data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +55 -21
- data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -3
- data/bin/lib/Image/ExifTool/Writer.pl +47 -10
- data/bin/lib/Image/ExifTool/XMP.pm +45 -15
- data/bin/lib/Image/ExifTool/XMP2.pl +3 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
- data/bin/lib/Image/ExifTool.pm +233 -81
- data/bin/lib/Image/ExifTool.pod +114 -93
- data/bin/perl-Image-ExifTool.spec +43 -42
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +28 -13
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.33';
|
|
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:
|
|
@@ -284,6 +286,7 @@ my @recommends = qw(
|
|
|
284
286
|
Digest::SHA
|
|
285
287
|
IO::Compress::Bzip2
|
|
286
288
|
POSIX::strptime
|
|
289
|
+
Time::Local
|
|
287
290
|
Unicode::LineBreak
|
|
288
291
|
IO::Compress::RawDeflate
|
|
289
292
|
IO::Uncompress::RawInflate
|
|
@@ -474,6 +477,7 @@ undef $joinLists;
|
|
|
474
477
|
undef $langOpt;
|
|
475
478
|
undef $listItem;
|
|
476
479
|
undef $multiFile;
|
|
480
|
+
undef $noBinary;
|
|
477
481
|
undef $outOpt;
|
|
478
482
|
undef $preserveTime;
|
|
479
483
|
undef $progress;
|
|
@@ -691,7 +695,7 @@ for (;;) {
|
|
|
691
695
|
} else { # 'g(\d*)'
|
|
692
696
|
# list all groups in specified family
|
|
693
697
|
my $family = $2 || 0;
|
|
694
|
-
PrintTagList("Groups in family $family", GetAllGroups($family));
|
|
698
|
+
PrintTagList("Groups in family $family", $mt->GetAllGroups($family));
|
|
695
699
|
}
|
|
696
700
|
next;
|
|
697
701
|
}
|
|
@@ -792,7 +796,11 @@ for (;;) {
|
|
|
792
796
|
next;
|
|
793
797
|
}
|
|
794
798
|
/^arg(s|format)$/i and $argFormat = 1, next;
|
|
795
|
-
/^b(inary)?$/i
|
|
799
|
+
if (/^(-?)b(inary)?$/i) {
|
|
800
|
+
($binaryOutput, $noBinary) = $1 ? (undef, 1) : (1, undef);
|
|
801
|
+
$mt->Options(Binary => $binaryOutput, NoPDFList => $binaryOutput);
|
|
802
|
+
next;
|
|
803
|
+
}
|
|
796
804
|
if (/^c(oordFormat)?$/i) {
|
|
797
805
|
my $fmt = shift;
|
|
798
806
|
$fmt or Error("Expecting coordinate format for -c option\n"), $badCmd=1, next;
|
|
@@ -876,6 +884,7 @@ for (;;) {
|
|
|
876
884
|
}
|
|
877
885
|
(/^D$/ or $a eq 'decimal') and $showTagID = 'D', next;
|
|
878
886
|
/^delete_original(!?)$/i and $deleteOrig = ($1 ? 2 : 1), next;
|
|
887
|
+
/^list_dir$/i and $listDir = 1, next;
|
|
879
888
|
(/^e$/ or $a eq '-composite') and $mt->Options(Composite => 0), next;
|
|
880
889
|
(/^-e$/ or $a eq 'composite') and $mt->Options(Composite => 1), next;
|
|
881
890
|
(/^E$/ or $a eq 'escapehtml') and require Image::ExifTool::HTML and $escapeHTML = 1, next;
|
|
@@ -1610,7 +1619,7 @@ if (@newValues) {
|
|
|
1610
1619
|
next;
|
|
1611
1620
|
}
|
|
1612
1621
|
my %opts = ( Shift => 0 ); # shift values if possible instead of adding/deleting
|
|
1613
|
-
# allow writing of '
|
|
1622
|
+
# allow writing of 'Unsafe' tags unless specified by wildcard
|
|
1614
1623
|
$opts{Protected} = 1 unless $tag =~ /[?*]/;
|
|
1615
1624
|
|
|
1616
1625
|
if ($tag =~ s/<// and defined $newVal) {
|
|
@@ -1945,10 +1954,19 @@ sub GetImageInfo($$)
|
|
|
1945
1954
|
my $pipe = $file;
|
|
1946
1955
|
if ($doUnzip) {
|
|
1947
1956
|
# pipe through gzip or bzip2 if necessary
|
|
1948
|
-
if ($file =~ /\.gz$/i) {
|
|
1949
|
-
$
|
|
1950
|
-
|
|
1951
|
-
|
|
1957
|
+
if ($file =~ /\.(gz|bz2)$/i) {
|
|
1958
|
+
my $type = lc $1;
|
|
1959
|
+
if ($file =~ /[^-_.'A-Za-z0-9\/\\]/) {
|
|
1960
|
+
Warn "Error: Insecure zip file name. Skipped\n";
|
|
1961
|
+
EFile($file);
|
|
1962
|
+
++$countBad;
|
|
1963
|
+
return;
|
|
1964
|
+
}
|
|
1965
|
+
if ($type eq 'gz') {
|
|
1966
|
+
$pipe = qq{gzip -dc "$file" |};
|
|
1967
|
+
} else {
|
|
1968
|
+
$pipe = qq{bzip2 -dc "$file" |};
|
|
1969
|
+
}
|
|
1952
1970
|
}
|
|
1953
1971
|
}
|
|
1954
1972
|
# evaluate -if expression for conditional processing
|
|
@@ -2209,7 +2227,7 @@ sub GetImageInfo($$)
|
|
|
2209
2227
|
my $f = $file;
|
|
2210
2228
|
CleanXML(\$f);
|
|
2211
2229
|
print $fp "\n<rdf:Description rdf:about='${f}'";
|
|
2212
|
-
print $fp "\n xmlns:et='http://ns.exiftool.
|
|
2230
|
+
print $fp "\n xmlns:et='http://ns.exiftool.org/1.0/'";
|
|
2213
2231
|
print $fp " et:toolkit='Image::ExifTool $Image::ExifTool::VERSION'";
|
|
2214
2232
|
# define namespaces for all tag groups
|
|
2215
2233
|
my (%groups, @groups, $grp0, $grp1);
|
|
@@ -2231,7 +2249,7 @@ sub GetImageInfo($$)
|
|
|
2231
2249
|
unless ($grp eq $grp1 and $grp =~ /^(ExifTool|File|Composite|Unknown)$/) {
|
|
2232
2250
|
$grp .= "/$grp1";
|
|
2233
2251
|
}
|
|
2234
|
-
print $fp "\n xmlns:$grp1='http://ns.exiftool.
|
|
2252
|
+
print $fp "\n xmlns:$grp1='http://ns.exiftool.org/$grp/1.0/'";
|
|
2235
2253
|
}
|
|
2236
2254
|
print $fp '>' if $outFormat < 1; # finish rdf:Description token unless short format
|
|
2237
2255
|
$ind = $outFormat >= 0 ? ' ' : ' ';
|
|
@@ -2267,10 +2285,11 @@ TAG: foreach $tag (@foundTags) {
|
|
|
2267
2285
|
# avoid extracting Protected binary tags (eg. data blocks) [insider information]
|
|
2268
2286
|
my $lcTag = lc $tag;
|
|
2269
2287
|
$lcTag =~ s/ .*//;
|
|
2270
|
-
next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
|
|
2288
|
+
next unless $$et{REQ_TAG_LOOKUP}{$lcTag} or ($$et{OPTIONS}{RequestAll} || 0) > 2;
|
|
2271
2289
|
}
|
|
2272
2290
|
$val = ConvertBinary($val); # convert SCALAR references
|
|
2273
|
-
|
|
2291
|
+
next unless defined $val;
|
|
2292
|
+
if ($structOpt and ref $val) {
|
|
2274
2293
|
# serialize structure if necessary
|
|
2275
2294
|
$val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
|
|
2276
2295
|
} elsif (ref $val eq 'ARRAY') {
|
|
@@ -2708,7 +2727,7 @@ sub SetImageInfo($$$)
|
|
|
2708
2727
|
return 0;
|
|
2709
2728
|
}
|
|
2710
2729
|
}
|
|
2711
|
-
if (not $isStdout and ($et->IsDirectory($outfile) or $outfile =~ /\/$/)) {
|
|
2730
|
+
if (not $isStdout and (($et->IsDirectory($outfile) and not $listDir) or $outfile =~ /\/$/)) {
|
|
2712
2731
|
$outfile .= '/' unless $outfile =~ /\/$/;
|
|
2713
2732
|
my $name = $file;
|
|
2714
2733
|
$name =~ s/^.*\///s; # remove directory name
|
|
@@ -2911,6 +2930,10 @@ sub SetImageInfo($$$)
|
|
|
2911
2930
|
unless (defined $tmpFile) {
|
|
2912
2931
|
# count the number of tags and pseudo-tags we are writing
|
|
2913
2932
|
my ($numSet, $numPseudo) = $et->CountNewValues();
|
|
2933
|
+
if ($numSet != $numPseudo and $et->IsDirectory($file)) {
|
|
2934
|
+
print $vout "Can't write real tags to a directory - $infile\n" if defined $verbose;
|
|
2935
|
+
$numSet = $numPseudo;
|
|
2936
|
+
}
|
|
2914
2937
|
if ($et->Exists($file)) {
|
|
2915
2938
|
unless ($numSet) {
|
|
2916
2939
|
# no need to write if no tags set
|
|
@@ -3227,7 +3250,8 @@ sub FormatXML($$$)
|
|
|
3227
3250
|
} elsif (ref $val eq 'HASH') {
|
|
3228
3251
|
$gt = " rdf:parseType='Resource'>";
|
|
3229
3252
|
my $val2 = '';
|
|
3230
|
-
|
|
3253
|
+
my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
|
|
3254
|
+
foreach (@keys) {
|
|
3231
3255
|
# (some variable-namespace XML structure fields may have a different group)
|
|
3232
3256
|
my $tok = /:/ ? $_ : ($grp . ':' . $_);
|
|
3233
3257
|
$val2 .= "\n$ind <$tok" . FormatXML($$val{$_}, "$ind ", $grp) . "</$tok>";
|
|
@@ -3304,7 +3328,8 @@ sub FormatJSON($$$)
|
|
|
3304
3328
|
} elsif (ref $val eq 'HASH') {
|
|
3305
3329
|
my ($bra, $ket, $sep) = $json == 1 ? ('{','}',':') : ('Array(',')',' =>');
|
|
3306
3330
|
print $fp $bra;
|
|
3307
|
-
|
|
3331
|
+
my @keys = $$val{_ordered_keys_} ? @{$$val{_ordered_keys_}} : sort keys %$val;
|
|
3332
|
+
foreach (@keys) {
|
|
3308
3333
|
print $fp ',' if $comma;
|
|
3309
3334
|
my $key = EscapeJSON($_, 1);
|
|
3310
3335
|
print $fp qq(\n$ind $key$sep );
|
|
@@ -3395,20 +3420,25 @@ sub AddGroups($$$$)
|
|
|
3395
3420
|
#------------------------------------------------------------------------------
|
|
3396
3421
|
# Convert binary data (SCALAR references) for printing
|
|
3397
3422
|
# Inputs: 0) object reference
|
|
3398
|
-
# Returns: converted object
|
|
3423
|
+
# Returns: converted object, or undef if we don't want binary objects
|
|
3399
3424
|
sub ConvertBinary($)
|
|
3400
3425
|
{
|
|
3401
3426
|
my $obj = shift;
|
|
3402
3427
|
my ($key, $val);
|
|
3403
3428
|
if (ref $obj eq 'HASH') {
|
|
3404
3429
|
foreach $key (keys %$obj) {
|
|
3405
|
-
|
|
3430
|
+
next unless ref $$obj{$key};
|
|
3431
|
+
$$obj{$key} = ConvertBinary($$obj{$key});
|
|
3432
|
+
return undef unless defined $$obj{$key};
|
|
3406
3433
|
}
|
|
3407
3434
|
} elsif (ref $obj eq 'ARRAY') {
|
|
3408
3435
|
foreach $val (@$obj) {
|
|
3409
|
-
|
|
3436
|
+
next unless ref $val;
|
|
3437
|
+
$val = ConvertBinary($val);
|
|
3438
|
+
return undef unless defined $val;
|
|
3410
3439
|
}
|
|
3411
3440
|
} elsif (ref $obj eq 'SCALAR') {
|
|
3441
|
+
return undef if $noBinary;
|
|
3412
3442
|
# (binaryOutput flag is set to 0 for binary mode of XML/PHP/JSON output formats)
|
|
3413
3443
|
if (defined $binaryOutput) {
|
|
3414
3444
|
$obj = $$obj;
|
|
@@ -3585,7 +3615,7 @@ sub ProcessFiles($;$)
|
|
|
3585
3615
|
++$progressCount;
|
|
3586
3616
|
$progStr = " [$progressCount/$progressMax]" if $progress;
|
|
3587
3617
|
}
|
|
3588
|
-
if ($et->IsDirectory($file)) {
|
|
3618
|
+
if ($et->IsDirectory($file) and not $listDir) {
|
|
3589
3619
|
$multiFile = $validFile = 1;
|
|
3590
3620
|
ScanDir($et, $file, $list);
|
|
3591
3621
|
} elsif ($filterFlag and not AcceptFile($file)) {
|
|
@@ -4244,7 +4274,10 @@ sub FilterArgfileLine($)
|
|
|
4244
4274
|
# escaped by an odd number of backslashes, and escape a single backslash
|
|
4245
4275
|
# if it occurs at the end of the string
|
|
4246
4276
|
$arg =~ s{\\(.)|(["\$\@]|\\$)}{'\\'.($2 || $1)}sge;
|
|
4247
|
-
|
|
4277
|
+
# un-escape characters in C string
|
|
4278
|
+
my %esc = ( a => "\a", b => "\b", f => "\f", n => "\n",
|
|
4279
|
+
r => "\r", t => "\t", '"' => '"', '\\' => '\\' );
|
|
4280
|
+
$arg =~ s/\\(.)/$esc{$1}||'\\'.$1/egs;
|
|
4248
4281
|
} else {
|
|
4249
4282
|
$arg =~ s/^\s+//; # remove leading white space
|
|
4250
4283
|
$arg =~ s/[\x0d\x0a]+$//s; # remove trailing newline
|
|
@@ -4450,47 +4483,48 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4450
4483
|
|
|
4451
4484
|
File Types
|
|
4452
4485
|
------------+-------------+-------------+-------------+------------
|
|
4453
|
-
360 r/w |
|
|
4454
|
-
3FR r |
|
|
4455
|
-
3G2 r/w |
|
|
4456
|
-
3GP r/w |
|
|
4457
|
-
A r |
|
|
4458
|
-
AA r |
|
|
4459
|
-
AAE r |
|
|
4460
|
-
AAX r/w |
|
|
4461
|
-
ACR r |
|
|
4462
|
-
AFM r |
|
|
4463
|
-
AI r/w |
|
|
4464
|
-
AIFF r |
|
|
4465
|
-
APE r |
|
|
4466
|
-
ARQ r/w |
|
|
4467
|
-
ARW r/w |
|
|
4468
|
-
ASF r |
|
|
4469
|
-
AVI r |
|
|
4470
|
-
AVIF r/w |
|
|
4471
|
-
AZW r |
|
|
4472
|
-
BMP r |
|
|
4473
|
-
BPG r |
|
|
4474
|
-
BTF r |
|
|
4475
|
-
CHM r |
|
|
4476
|
-
COS r |
|
|
4477
|
-
CR2 r/w |
|
|
4478
|
-
CR3 r/w |
|
|
4479
|
-
CRM r/w |
|
|
4480
|
-
CRW r/w |
|
|
4481
|
-
CS1 r/w |
|
|
4482
|
-
CSV r |
|
|
4483
|
-
CZI r |
|
|
4484
|
-
DCM r |
|
|
4485
|
-
DCP r/w |
|
|
4486
|
-
DCR r |
|
|
4487
|
-
DFONT r |
|
|
4488
|
-
DIVX r |
|
|
4489
|
-
DJVU r |
|
|
4490
|
-
DLL r |
|
|
4491
|
-
DNG r/w |
|
|
4492
|
-
DOC r |
|
|
4493
|
-
DOCX r |
|
|
4486
|
+
360 r/w | DR4 r/w/c | JNG r/w | ODP r | RIFF r
|
|
4487
|
+
3FR r | DSS r | JP2 r/w | ODS r | RSRC r
|
|
4488
|
+
3G2 r/w | DV r | JPEG r/w | ODT r | RTF r
|
|
4489
|
+
3GP r/w | DVB r/w | JSON r | OFR r | RW2 r/w
|
|
4490
|
+
A r | DVR-MS r | JXL r | OGG r | RWL r/w
|
|
4491
|
+
AA r | DYLIB r | K25 r | OGV r | RWZ r
|
|
4492
|
+
AAE r | EIP r | KDC r | ONP r | RM r
|
|
4493
|
+
AAX r/w | EPS r/w | KEY r | OPUS r | SEQ r
|
|
4494
|
+
ACR r | EPUB r | LA r | ORF r/w | SKETCH r
|
|
4495
|
+
AFM r | ERF r/w | LFP r | ORI r/w | SO r
|
|
4496
|
+
AI r/w | EXE r | LIF r | OTF r | SR2 r/w
|
|
4497
|
+
AIFF r | EXIF r/w/c | LNK r | PAC r | SRF r
|
|
4498
|
+
APE r | EXR r | LRV r/w | PAGES r | SRW r/w
|
|
4499
|
+
ARQ r/w | EXV r/w/c | M2TS r | PBM r/w | SVG r
|
|
4500
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PCD r | SWF r
|
|
4501
|
+
ASF r | FFF r/w | MACOS r | PCX r | THM r/w
|
|
4502
|
+
AVI r | FITS r | MAX r | PDB r | TIFF r/w
|
|
4503
|
+
AVIF r/w | FLA r | MEF r/w | PDF r/w | TORRENT r
|
|
4504
|
+
AZW r | FLAC r | MIE r/w/ | PEF r/w | TTC r
|
|
4505
|
+
BMP r | FLIF r/w | MIFF r c | PFA r | TTF r
|
|
4506
|
+
BPG r | FLV r | MKA r | PFB r | TXT r
|
|
4507
|
+
BTF r | FPF r | MKS r | PFM r | VCF r
|
|
4508
|
+
CHM r | FPX r | MKV r | PGF r | VRD r/w/c
|
|
4509
|
+
COS r | GIF r/w | MNG r/w | PGM r/w | VSD r
|
|
4510
|
+
CR2 r/w | GPR r/w | MOBI r | PLIST r | WAV r
|
|
4511
|
+
CR3 r/w | GZ r | MODD r | PICT r | WDP r/w
|
|
4512
|
+
CRM r/w | HDP r/w | MOI r | PMP r | WEBP r
|
|
4513
|
+
CRW r/w | HDR r | MOS r/w | PNG r/w | WEBM r
|
|
4514
|
+
CS1 r/w | HEIC r/w | MOV r/w | PPM r/w | WMA r
|
|
4515
|
+
CSV r | HEIF r/w | MP3 r | PPT r | WMV r
|
|
4516
|
+
CZI r | HTML r | MP4 r/w | PPTX r | WTV r
|
|
4517
|
+
DCM r | ICC r/w/c | MPC r | PS r/w | WV r
|
|
4518
|
+
DCP r/w | ICS r | MPG r | PSB r/w | X3F r/w
|
|
4519
|
+
DCR r | IDML r | MPO r/w | PSD r/w | XCF r
|
|
4520
|
+
DFONT r | IIQ r/w | MQV r/w | PSP r | XLS r
|
|
4521
|
+
DIVX r | IND r/w | MRC r | QTIF r/w | XLSX r
|
|
4522
|
+
DJVU r | INSP r/w | MRW r/w | R3D r | XMP r/w/c
|
|
4523
|
+
DLL r | INSV r | MXF r | RA r | ZIP r
|
|
4524
|
+
DNG r/w | INX r | NEF r/w | RAF r/w |
|
|
4525
|
+
DOC r | ISO r | NRW r/w | RAM r |
|
|
4526
|
+
DOCX r | ITC r | NUMBERS r | RAR r |
|
|
4527
|
+
DPX r | J2C r | O r | RAW r/w |
|
|
4494
4528
|
|
|
4495
4529
|
Meta Information
|
|
4496
4530
|
----------------------+----------------------+---------------------
|
|
@@ -4624,6 +4658,7 @@ L<Advanced options|/Advanced options>
|
|
|
4624
4658
|
-echo[NUM] TEXT Echo text to stdout or stderr
|
|
4625
4659
|
-efile[NUM][!] ERRFILE Save names of files with errors
|
|
4626
4660
|
-execute[NUM] Execute multiple commands on one line
|
|
4661
|
+
-list_dir List directories, not their contents
|
|
4627
4662
|
-srcfile FMT Process a different source file
|
|
4628
4663
|
-stay_open FLAG Keep reading -@ argfile even after EOF
|
|
4629
4664
|
-userParam PARAM[[^]=[VAL]] Set user parameter (API UserParam opt)
|
|
@@ -4697,11 +4732,11 @@ I<TAG> may contain one or more leading family 0, 1, 2 or 7 group names,
|
|
|
4697
4732
|
prefixed by optional family numbers, and separated colons. If no group name
|
|
4698
4733
|
is specified, the tag is created in the preferred group, and updated in any
|
|
4699
4734
|
other location where a same-named tag already exists. The preferred group
|
|
4700
|
-
is the first group in the following list
|
|
4701
|
-
IPTC, 3) XMP.
|
|
4735
|
+
in JPEG and TIFF-format images is the first group in the following list
|
|
4736
|
+
where I<TAG> is valid: 1) EXIF, 2) IPTC, 3) XMP.
|
|
4702
4737
|
|
|
4703
4738
|
The wildcards C<*> and C<?> may be used in tag names to assign the same
|
|
4704
|
-
value to multiple tags. When specified with wildcards, "
|
|
4739
|
+
value to multiple tags. When specified with wildcards, "Unsafe" tags are
|
|
4705
4740
|
not written. A tag name of C<All> is equivalent to C<*> (except that it
|
|
4706
4741
|
doesn't require quoting, while arguments with wildcards do on systems with
|
|
4707
4742
|
shell globbing), and is often used when deleting all metadata (ie. C<-All=>)
|
|
@@ -4847,10 +4882,10 @@ See L</COPYING EXAMPLES> for examples using B<-tagsFromFile>.
|
|
|
4847
4882
|
Notes:
|
|
4848
4883
|
|
|
4849
4884
|
1) Some tags (generally tags which may affect the appearance of the image)
|
|
4850
|
-
are considered "
|
|
4885
|
+
are considered "Unsafe" to write, and are only copied if specified
|
|
4851
4886
|
explicitly (ie. no wildcards). See the
|
|
4852
4887
|
L<tag name documentation|Image::ExifTool::TagNames> for more details about
|
|
4853
|
-
"
|
|
4888
|
+
"Unsafe" tags.
|
|
4854
4889
|
|
|
4855
4890
|
2) Be aware of the difference between excluding a tag from being copied
|
|
4856
4891
|
(--I<TAG>), and deleting a tag (-I<TAG>=). Excluding a tag prevents it from
|
|
@@ -4932,7 +4967,7 @@ documentation above for a complete description.
|
|
|
4932
4967
|
=head3 Input-output text formatting
|
|
4933
4968
|
|
|
4934
4969
|
Note that trailing spaces are removed from extracted values for most output
|
|
4935
|
-
text formats. The exceptions are
|
|
4970
|
+
text formats. The exceptions are B<-b>, B<-csv>, B<-j> and B<-X>.
|
|
4936
4971
|
|
|
4937
4972
|
=over 5
|
|
4938
4973
|
|
|
@@ -4948,7 +4983,7 @@ intermediate file (C<out.args> in this example):
|
|
|
4948
4983
|
exiftool -@ out.args -sep ', ' dst.jpg
|
|
4949
4984
|
|
|
4950
4985
|
Note: Be careful when copying information with this technique since it is
|
|
4951
|
-
easy to write tags which are normally considered "
|
|
4986
|
+
easy to write tags which are normally considered "Unsafe". For instance,
|
|
4952
4987
|
the FileName and Directory tags are excluded in the example above to avoid
|
|
4953
4988
|
renaming and moving the destination file. Also note that the second command
|
|
4954
4989
|
above will produce warning messages for any tags which are not writable.
|
|
@@ -4958,17 +4993,21 @@ maintain separate list items when writing metadata back to image files, and
|
|
|
4958
4993
|
the B<-struct> option may be used when extracting to preserve structured XMP
|
|
4959
4994
|
information.
|
|
4960
4995
|
|
|
4961
|
-
=item B<-b> (B<-binary>)
|
|
4996
|
+
=item B<-b>, B<--b> (B<-binary>, B<--binary>)
|
|
4997
|
+
|
|
4998
|
+
Output requested metadata in binary format without tag names or descriptions
|
|
4999
|
+
(B<-b> or B<-binary>). This option is mainly used for extracting embedded
|
|
5000
|
+
images or other binary data, but it may also be useful for some text strings
|
|
5001
|
+
since control characters (such as newlines) are not replaced by '.' as they
|
|
5002
|
+
are in the default output. By default, list items are separated by a
|
|
5003
|
+
newline when extracted with the B<-b> option, but this may be changed (see
|
|
5004
|
+
the B<-sep> option for details). May be combined with B<-j>, B<-php> or
|
|
5005
|
+
B<-X> to extract binary data in JSON, PHP or XML format, but note that
|
|
5006
|
+
"Unsafe" tags are not extracted as binary unless they are specified explicitly or
|
|
5007
|
+
the API RequestAll option is set to 3 or higher.
|
|
4962
5008
|
|
|
4963
|
-
|
|
4964
|
-
|
|
4965
|
-
other binary data, but it may also be useful for some text strings since
|
|
4966
|
-
control characters (such as newlines) are not replaced by '.' as they are in
|
|
4967
|
-
the default output. By default, list items are separated by a newline when
|
|
4968
|
-
extracted with the B<-b> option, but this may be changed (see the B<-sep>
|
|
4969
|
-
option for details). May be combined with C<-j>, C<-php> or C<-X> to
|
|
4970
|
-
extract binary data in JSON, PHP or XML format, but note that "unsafe" tags
|
|
4971
|
-
must be specified explicitly to be extracted as binary in these formats.
|
|
5009
|
+
With a leading double dash (B<--b> or B<--binary>), tags which contain
|
|
5010
|
+
binary data are suppressed in the output when reading.
|
|
4972
5011
|
|
|
4973
5012
|
=item B<-c> I<FMT> (B<-coordFormat>)
|
|
4974
5013
|
|
|
@@ -5166,7 +5205,7 @@ By default the resulting group name is simplified by removing any leading
|
|
|
5166
5205
|
C<Main:> and collapsing adjacent identical group names, but this can be
|
|
5167
5206
|
avoided by placing a colon before the first family number (eg. B<-g:3:1>).
|
|
5168
5207
|
Use the B<-listg> option to list group names for a specified family. The
|
|
5169
|
-
SavePath and SaveFormat
|
|
5208
|
+
API SavePath and SaveFormat options are automatically enabled if the
|
|
5170
5209
|
respective family 5 or 6 group names are requested. See the
|
|
5171
5210
|
L<API GetGroup documentation|Image::ExifTool/GetGroup> for more information.
|
|
5172
5211
|
|
|
@@ -5369,7 +5408,7 @@ with this command:
|
|
|
5369
5408
|
|
|
5370
5409
|
produces output like this:
|
|
5371
5410
|
|
|
5372
|
-
-- Generated by ExifTool 12.
|
|
5411
|
+
-- Generated by ExifTool 12.33 --
|
|
5373
5412
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5374
5413
|
(f/5.6, 1/60s, ISO 100)
|
|
5375
5414
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5386,7 +5425,7 @@ are effectively processed as separate input files.
|
|
|
5386
5425
|
If a specified tag does not exist, a minor warning is issued and the line
|
|
5387
5426
|
with the missing tag is not printed. However, the B<-f> option may be used
|
|
5388
5427
|
to set the value of missing tags to '-' (but this may be configured via the
|
|
5389
|
-
MissingTagValue
|
|
5428
|
+
API MissingTagValue option), or the B<-m> option may be used to ignore minor
|
|
5390
5429
|
warnings and leave the missing values empty. Alternatively, B<-q -q> may be
|
|
5391
5430
|
used to simply suppress the warning messages.
|
|
5392
5431
|
|
|
@@ -5685,9 +5724,10 @@ The B<-t> option adds tag table information to the output (see B<-t> for
|
|
|
5685
5724
|
details).
|
|
5686
5725
|
|
|
5687
5726
|
Note: This output is NOT the same as XMP because it uses
|
|
5688
|
-
dynamically-generated property names corresponding to the ExifTool tag
|
|
5689
|
-
names, and not the standard XMP
|
|
5690
|
-
|
|
5727
|
+
dynamically-generated property names corresponding to the ExifTool tag names
|
|
5728
|
+
with ExifTool family 1 group names as namespaces, and not the standard XMP
|
|
5729
|
+
properties and namespaces. To write XMP instead, use the B<-o> option with
|
|
5730
|
+
an XMP extension for the output file.
|
|
5691
5731
|
|
|
5692
5732
|
=back
|
|
5693
5733
|
|
|
@@ -5729,7 +5769,8 @@ L<https://exiftool.org/geotag.html#Inverse> for examples.
|
|
|
5729
5769
|
Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
|
|
5730
5770
|
until the first Supplemental Enhancement Information (SEI) message is
|
|
5731
5771
|
decoded, or 3 to parse the entire H624 stream and decode all SEI
|
|
5732
|
-
information.
|
|
5772
|
+
information. For M2TS videos, a setting of 3 causes the entire file to be
|
|
5773
|
+
parsed in search of unlisted programs which may contain timed GPS.
|
|
5733
5774
|
|
|
5734
5775
|
=item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
|
|
5735
5776
|
|
|
@@ -5818,10 +5859,10 @@ Ignore specified directory name. I<DIR> may be either an individual folder
|
|
|
5818
5859
|
name, or a full path. If a full path is specified, it must match the
|
|
5819
5860
|
Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
|
|
5820
5861
|
more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
|
|
5821
|
-
sensitive) may be specified to
|
|
5822
|
-
is used. As well, a value of C<HIDDEN>
|
|
5823
|
-
ignore files with names that start with a
|
|
5824
|
-
systems) when scanning a directory.
|
|
5862
|
+
sensitive) may be specified to avoid recursing into directories which are
|
|
5863
|
+
symbolic links when the B<-r> option is used. As well, a value of C<HIDDEN>
|
|
5864
|
+
(case sensitive) may be used to ignore files with names that start with a
|
|
5865
|
+
"." (ie. hidden files on Unix systems) when scanning a directory.
|
|
5825
5866
|
|
|
5826
5867
|
=item B<-if>[I<NUM>] I<EXPR>
|
|
5827
5868
|
|
|
@@ -6247,7 +6288,7 @@ As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
|
|
|
6247
6288
|
for any tag on the command line. See the L<MWG Tags
|
|
6248
6289
|
documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
|
|
6249
6290
|
that this option is not reversible, and remains in effect until the
|
|
6250
|
-
application terminates, even across the
|
|
6291
|
+
application terminates, even across the B<-execute> option.
|
|
6251
6292
|
|
|
6252
6293
|
=back
|
|
6253
6294
|
|
|
@@ -6333,7 +6374,7 @@ exit status of the command (see L</EXIT STATUS>).
|
|
|
6333
6374
|
|
|
6334
6375
|
Save the names of files giving errors (I<NUM> missing or 1), files that were
|
|
6335
6376
|
unchanged (I<NUM> is 2), files that fail the B<-if> condition (I<NUM> is 4),
|
|
6336
|
-
or any combination thereof
|
|
6377
|
+
or any combination thereof by summing I<NUM> (eg. B<-efile3> is the same
|
|
6337
6378
|
has having both B<-efile> and B<-efile2> options with the same I<ERRFILE>).
|
|
6338
6379
|
By default, file names are appended to any existing I<ERRFILE>, but
|
|
6339
6380
|
I<ERRFILE> is overwritten if an exclamation point is added to the option
|
|
@@ -6351,6 +6392,20 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
|
|
|
6351
6392
|
when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
|
|
6352
6393
|
option no longer suppresses the output "{readyNUM}" message.
|
|
6353
6394
|
|
|
6395
|
+
=item B<-list_dir>
|
|
6396
|
+
|
|
6397
|
+
List directories themselves instead of their contents. This option
|
|
6398
|
+
effectively causes directories to be treated as normal files when reading
|
|
6399
|
+
and writing. For example, with this option the output of the C<ls -la>
|
|
6400
|
+
command on Mac/Linux may be approximated by this exiftool command:
|
|
6401
|
+
|
|
6402
|
+
exiftool -list_dir -T -ls-l -api systemtags -fast5 .* *
|
|
6403
|
+
|
|
6404
|
+
(The B<-T> option formats the output in tab-separated columns, B<-ls-l> is a
|
|
6405
|
+
L<shortcut tag|Image::ExifTool::Shortcuts>, the API SystemTags option is
|
|
6406
|
+
required to extract some necessary tags, and the B<-fast5> option is added
|
|
6407
|
+
for speed since only system tags are being extracted.)
|
|
6408
|
+
|
|
6354
6409
|
=item B<-srcfile> I<FMT>
|
|
6355
6410
|
|
|
6356
6411
|
Specify a different source file to be processed based on the name of the
|
|
@@ -6398,7 +6453,7 @@ buffered output.) ExifTool will then execute the command with the arguments
|
|
|
6398
6453
|
received up to this point, send a "{ready}" message to stdout when done
|
|
6399
6454
|
(unless the B<-q> or B<-T> option is used), and continue trying to read
|
|
6400
6455
|
arguments for the next command from I<ARGFILE>. To aid in command/response
|
|
6401
|
-
synchronization, any number appended to the
|
|
6456
|
+
synchronization, any number appended to the B<-execute> option is echoed in
|
|
6402
6457
|
the "{ready}" message. For example, C<-execute613> results in "{ready613}".
|
|
6403
6458
|
When this number is added, B<-q> no longer suppresses the "{ready}" message.
|
|
6404
6459
|
(Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
|
|
@@ -6533,8 +6588,8 @@ complete list). Setting this triggers the use of Windows wide-character i/o
|
|
|
6533
6588
|
routines, thus providing support for most Unicode file names (see note 4).
|
|
6534
6589
|
But note that it is not trivial to pass properly encoded file names on the
|
|
6535
6590
|
Windows command line (see L<https://exiftool.org/faq.html#Q18> for details),
|
|
6536
|
-
so placing them in a UTF-8 encoded B<-@> argfile and using
|
|
6537
|
-
filename=utf8> is recommended if possible.
|
|
6591
|
+
so placing them in a UTF-8 encoded B<-@> argfile and using
|
|
6592
|
+
C<-charset filename=utf8> is recommended if possible.
|
|
6538
6593
|
|
|
6539
6594
|
A warning is issued if a specified filename contains special characters and
|
|
6540
6595
|
the filename character set was not provided. However, the warning may be
|
|
@@ -6608,7 +6663,7 @@ Print all meta information in an image, including duplicate and unknown
|
|
|
6608
6663
|
tags, sorted by group (for family 1). For performance reasons, this command
|
|
6609
6664
|
may not extract all available metadata. (Metadata in embedded documents,
|
|
6610
6665
|
metadata extracted by external utilities, and metadata requiring excessive
|
|
6611
|
-
processing time may not be extracted). Add C<-
|
|
6666
|
+
processing time may not be extracted). Add C<-ee3> and C<-api RequestAll=3>
|
|
6612
6667
|
to the command to extract absolutely everything available.
|
|
6613
6668
|
|
|
6614
6669
|
=item exiftool -common dir
|
|
@@ -6677,7 +6732,7 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>).
|
|
|
6677
6732
|
Print one line of output containing the file name and DateTimeOriginal for
|
|
6678
6733
|
each image in directory C<dir>.
|
|
6679
6734
|
|
|
6680
|
-
=item exiftool -
|
|
6735
|
+
=item exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
|
|
6681
6736
|
|
|
6682
6737
|
Extract all GPS positions from an AVCHD video.
|
|
6683
6738
|
|
data/bin/fmt_files/gpx.fmt
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
#
|
|
4
4
|
# Description: Example ExifTool print format file to generate a GPX track log
|
|
5
5
|
#
|
|
6
|
-
# Usage: exiftool -p gpx.fmt -
|
|
6
|
+
# Usage: exiftool -p gpx.fmt -ee3 FILE [...] > out.gpx
|
|
7
7
|
#
|
|
8
8
|
# Requires: ExifTool version 10.49 or later
|
|
9
9
|
#
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
# 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
|
|
14
14
|
#
|
|
15
15
|
# Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
|
|
16
|
-
# 2) The -
|
|
16
|
+
# 2) The -ee3 option is to extract the full track from video files.
|
|
17
17
|
# 3) The -fileOrder option may be used to control the order of the
|
|
18
18
|
# generated track points when processing multiple files.
|
|
19
19
|
#------------------------------------------------------------------------------
|
data/bin/fmt_files/gpx_wpt.fmt
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# Description: Example ExifTool print format file to generate GPX waypoints
|
|
5
5
|
# with pictures
|
|
6
6
|
#
|
|
7
|
-
# Usage: exiftool -p gpx_wpt.fmt -
|
|
7
|
+
# Usage: exiftool -p gpx_wpt.fmt -ee3 FILE [...] > out.gpx
|
|
8
8
|
#
|
|
9
9
|
# Requires: ExifTool version 10.49 or later
|
|
10
10
|
#
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
# 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
|
|
15
15
|
#
|
|
16
16
|
# Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
|
|
17
|
-
# 2) The -
|
|
17
|
+
# 2) The -ee3 option is to extract the full track from video files.
|
|
18
18
|
# 3) The -fileOrder option may be used to control the order of the
|
|
19
19
|
# generated track points when processing multiple files.
|
|
20
20
|
#------------------------------------------------------------------------------
|
data/bin/fmt_files/kml.fmt
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# 2020/01/11 - F. Kotov Limited image preview size to 500px
|
|
16
16
|
#
|
|
17
17
|
# Notes: 1) Input files must contain GPSLatitude and GPSLongitude.
|
|
18
|
-
# 2) Add the -
|
|
18
|
+
# 2) Add the -ee3 option to extract the full track from video files.
|
|
19
19
|
# 3) For Google Earth to be able to find the images, the input
|
|
20
20
|
# images must be specified using relative paths, and "out.kml"
|
|
21
21
|
# must stay in the same directory as where the command was run.
|
data/bin/fmt_files/kml_track.fmt
CHANGED
|
@@ -15,7 +15,7 @@ use vars qw($VERSION);
|
|
|
15
15
|
use Image::ExifTool::Exif;
|
|
16
16
|
use Image::ExifTool::PLIST;
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.05';
|
|
19
19
|
|
|
20
20
|
# Apple iPhone metadata (ref PH)
|
|
21
21
|
%Image::ExifTool::Apple::Main = (
|
|
@@ -72,7 +72,8 @@ $VERSION = '1.04';
|
|
|
72
72
|
# 0x000f - int32s: 2,3
|
|
73
73
|
# 0x0010 - int32s: 1
|
|
74
74
|
0x0011 => {
|
|
75
|
-
Name => '
|
|
75
|
+
Name => 'MediaGroupUUID', #NealKrawetz private communication
|
|
76
|
+
# (changed in 12.19 from Name => 'ContentIdentifier', #forum8750)
|
|
76
77
|
Writable => 'string',
|
|
77
78
|
},
|
|
78
79
|
# 0x0014 - int32s: 1,2,3,4,5 (iPhone 6s, iOS 6.1)
|