exiftool-vendored.pl 12.82.0 → 12.85.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/Changes +59 -0
- package/bin/MANIFEST +2 -18
- package/bin/META.json +1 -1
- package/bin/META.yml +1 -1
- package/bin/README +47 -46
- package/bin/build_geolocation +945 -0
- package/bin/config_files/example.config +2 -2
- package/bin/exiftool +75 -51
- package/bin/fmt_files/gpx.fmt +2 -1
- package/bin/fmt_files/gpx_wpt.fmt +2 -1
- package/bin/lib/Image/ExifTool/Apple.pm +52 -7
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +5 -2
- package/bin/lib/Image/ExifTool/Canon.pm +11 -2
- package/bin/lib/Image/ExifTool/CanonVRD.pm +18 -5
- package/bin/lib/Image/ExifTool/DJI.pm +29 -0
- package/bin/lib/Image/ExifTool/DPX.pm +3 -3
- package/bin/lib/Image/ExifTool/Exif.pm +19 -2
- package/bin/lib/Image/ExifTool/GM.pm +17 -8
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +170 -104
- package/bin/lib/Image/ExifTool/Geotag.pm +18 -10
- package/bin/lib/Image/ExifTool/ID3.pm +28 -6
- package/bin/lib/Image/ExifTool/Nikon.pm +25 -6
- package/bin/lib/Image/ExifTool/Pentax.pm +64 -13
- package/bin/lib/Image/ExifTool/QuickTime.pm +26 -7
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +5 -0
- package/bin/lib/Image/ExifTool/Sony.pm +15 -6
- package/bin/lib/Image/ExifTool/TagLookup.pm +3557 -3540
- package/bin/lib/Image/ExifTool/TagNames.pod +61 -13
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +4 -2
- package/bin/lib/Image/ExifTool/Writer.pl +166 -134
- package/bin/lib/Image/ExifTool/XMP.pm +2 -0
- package/bin/lib/Image/ExifTool/XMP2.pl +3 -0
- package/bin/lib/Image/ExifTool.pm +59 -27
- package/bin/lib/Image/ExifTool.pod +88 -71
- package/bin/perl-Image-ExifTool.spec +45 -45
- package/bin/pp_build_exe.args +4 -4
- package/package.json +2 -2
- package/bin/lib/Image/ExifTool/GeoLang/cs.pm +0 -978
- package/bin/lib/Image/ExifTool/GeoLang/de.pm +0 -1975
- package/bin/lib/Image/ExifTool/GeoLang/en_ca.pm +0 -44
- package/bin/lib/Image/ExifTool/GeoLang/en_gb.pm +0 -124
- package/bin/lib/Image/ExifTool/GeoLang/es.pm +0 -2921
- package/bin/lib/Image/ExifTool/GeoLang/fi.pm +0 -1116
- package/bin/lib/Image/ExifTool/GeoLang/fr.pm +0 -3171
- package/bin/lib/Image/ExifTool/GeoLang/it.pm +0 -2750
- package/bin/lib/Image/ExifTool/GeoLang/ja.pm +0 -10256
- package/bin/lib/Image/ExifTool/GeoLang/ko.pm +0 -4499
- package/bin/lib/Image/ExifTool/GeoLang/nl.pm +0 -1270
- package/bin/lib/Image/ExifTool/GeoLang/pl.pm +0 -3019
- package/bin/lib/Image/ExifTool/GeoLang/ru.pm +0 -18220
- package/bin/lib/Image/ExifTool/GeoLang/sk.pm +0 -441
- package/bin/lib/Image/ExifTool/GeoLang/sv.pm +0 -714
- package/bin/lib/Image/ExifTool/GeoLang/tr.pm +0 -452
- package/bin/lib/Image/ExifTool/GeoLang/zh_cn.pm +0 -2225
- package/bin/lib/Image/ExifTool/GeoLang/zh_tw.pm +0 -72
|
@@ -364,8 +364,8 @@ $Image::ExifTool::QuickTime::Keys{PREFERRED} = 3;
|
|
|
364
364
|
|
|
365
365
|
# Add user-defined cities to the Geolocation lookup
|
|
366
366
|
@Image::ExifTool::UserDefined::Geolocation = (
|
|
367
|
-
# (city,region,
|
|
368
|
-
['Sinemorets','
|
|
367
|
+
# (city,region,subregion,country_code,country,timezone,feature_code,population,lat,lon)
|
|
368
|
+
['Sinemorets','burgas','Obshtina Tsarevo','BG','','Europe/Sofia','PPL',400,42.06115,27.97833],
|
|
369
369
|
);
|
|
370
370
|
|
|
371
371
|
#------------------------------------------------------------------------------
|
package/bin/exiftool
CHANGED
|
@@ -11,7 +11,7 @@ use strict;
|
|
|
11
11
|
use warnings;
|
|
12
12
|
require 5.004;
|
|
13
13
|
|
|
14
|
-
my $version = '12.
|
|
14
|
+
my $version = '12.85';
|
|
15
15
|
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
|
17
17
|
my $exePath;
|
|
@@ -735,6 +735,7 @@ for (;;) {
|
|
|
735
735
|
push @isUTF8, 10 if $isAlt;
|
|
736
736
|
for ($i=0; ; ++$i) {
|
|
737
737
|
my @entry = Image::ExifTool::Geolocation::GetEntry($i,$langOpt,1) or last;
|
|
738
|
+
$#entry = 9; # remove everything after latitude (eg. feature type)
|
|
738
739
|
next if $minPop and $entry[7] < $minPop;
|
|
739
740
|
next if %fcodes and $neg ? $fcodes{lc $entry[6]} : not $fcodes{lc $entry[6]};
|
|
740
741
|
push @entry, Image::ExifTool::Geolocation::GetAltNames($i,1) if $isAlt;
|
|
@@ -1166,7 +1167,7 @@ for (;;) {
|
|
|
1166
1167
|
if (/^p(-?)$/ or /^printformat(-?)$/i) {
|
|
1167
1168
|
my $fmt = shift;
|
|
1168
1169
|
if ($pass) {
|
|
1169
|
-
LoadPrintFormat($fmt, $1);
|
|
1170
|
+
LoadPrintFormat($fmt, $1 || $binaryOutput);
|
|
1170
1171
|
# load MWG module now if necessary
|
|
1171
1172
|
if (not $useMWG and grep /^mwg:/i, @requestTags) {
|
|
1172
1173
|
$useMWG = 1;
|
|
@@ -2244,6 +2245,14 @@ sub GetImageInfo($$)
|
|
|
2244
2245
|
if (%printFmt) {
|
|
2245
2246
|
$et->Options(Duplicates => 1);
|
|
2246
2247
|
$et->Options(RequestTags => \@requestTags);
|
|
2248
|
+
if ($printFmt{SetTags}) {
|
|
2249
|
+
# initialize options so we can set any tags we want
|
|
2250
|
+
$$et{TAGS_FROM_FILE} = 1;
|
|
2251
|
+
$et->Options(MakerNotes => 1);
|
|
2252
|
+
$et->Options(Struct => 2);
|
|
2253
|
+
$et->Options(List => 1);
|
|
2254
|
+
$et->Options(CoordFormat => '%d %d %.8f') unless $et->Options('CoordFormat');
|
|
2255
|
+
}
|
|
2247
2256
|
} else {
|
|
2248
2257
|
@foundTags = @tags;
|
|
2249
2258
|
}
|
|
@@ -2296,8 +2305,8 @@ sub GetImageInfo($$)
|
|
|
2296
2305
|
# output using print format file (-p) option
|
|
2297
2306
|
my ($type, $doc, $grp, $lastDoc, $cache);
|
|
2298
2307
|
$fileTrailer = '';
|
|
2299
|
-
# repeat for each
|
|
2300
|
-
if (
|
|
2308
|
+
# repeat for each sub-document if necessary
|
|
2309
|
+
if ($$et{DOC_COUNT}) {
|
|
2301
2310
|
# (cache tag keys if there are sub-documents)
|
|
2302
2311
|
$lastDoc = $$et{DOC_COUNT} and $cache = { };
|
|
2303
2312
|
} else {
|
|
@@ -4121,6 +4130,7 @@ sub AddPrintFormat($)
|
|
|
4121
4130
|
push @{$printFmt{$type}}, $expr;
|
|
4122
4131
|
# add to list of requested tags
|
|
4123
4132
|
push @requestTags, $expr =~ /\$\{?((?:[-\w]+:)*[-\w?*]+)/g;
|
|
4133
|
+
$printFmt{SetTags} = 1 if $expr =~ /\bSetTags\b/;
|
|
4124
4134
|
}
|
|
4125
4135
|
|
|
4126
4136
|
#------------------------------------------------------------------------------
|
|
@@ -4711,50 +4721,50 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
|
4711
4721
|
|
|
4712
4722
|
File Types
|
|
4713
4723
|
------------+-------------+-------------+-------------+------------
|
|
4714
|
-
360 r/w | DOCX r | ITC r |
|
|
4715
|
-
3FR r | DPX r | J2C r |
|
|
4716
|
-
3G2 r/w | DR4 r/w/c | JNG r/w |
|
|
4717
|
-
3GP r/w | DSS r | JP2 r/w |
|
|
4718
|
-
7Z r | DV r | JPEG r/w |
|
|
4719
|
-
A r | DVB r/w | JSON r |
|
|
4720
|
-
AA r | DVR-MS r | JXL r/w |
|
|
4721
|
-
AAC r | DYLIB r | K25 r |
|
|
4722
|
-
AAE r | EIP r | KDC r |
|
|
4723
|
-
AAX r/w | EPS r/w | KEY r |
|
|
4724
|
-
ACR r | EPUB r | LA r |
|
|
4725
|
-
AFM r | ERF r/w | LFP r |
|
|
4726
|
-
AI r/w | EXE r | LIF r |
|
|
4727
|
-
AIFF r | EXIF r/w/c | LNK r |
|
|
4728
|
-
APE r | EXR r | LRV r/w |
|
|
4729
|
-
ARQ r/w | EXV r/w/c | M2TS r |
|
|
4730
|
-
ARW r/w | F4A/V r/w | M4A/V r/w |
|
|
4731
|
-
ASF r | FFF r/w | MACOS r |
|
|
4732
|
-
AVI r | FITS r | MAX r |
|
|
4733
|
-
AVIF r/w | FLA r | MEF r/w |
|
|
4734
|
-
AZW r | FLAC r | MIE r/w/c |
|
|
4735
|
-
BMP r | FLIF r/w | MIFF r |
|
|
4736
|
-
BPG r | FLV r | MKA r |
|
|
4737
|
-
BTF r | FPF r | MKS r |
|
|
4738
|
-
C2PA r | FPX r | MKV r |
|
|
4739
|
-
CHM r | GIF r/w | MNG r/w |
|
|
4740
|
-
COS r | GLV r/w | MOBI r |
|
|
4741
|
-
CR2 r/w | GPR r/w | MODD r |
|
|
4742
|
-
CR3 r/w | GZ r | MOI r |
|
|
4743
|
-
CRM r/w | HDP r/w | MOS r/w |
|
|
4744
|
-
CRW r/w | HDR r | MOV r/w |
|
|
4745
|
-
CS1 r/w | HEIC r/w | MP3 r |
|
|
4746
|
-
CSV r | HEIF r/w | MP4 r/w |
|
|
4747
|
-
CUR r | HTML r | MPC r |
|
|
4748
|
-
CZI r | ICC r/w/c | MPG r |
|
|
4749
|
-
DCM r | ICO r | MPO r/w |
|
|
4750
|
-
DCP r/w | ICS r | MQV r/w |
|
|
4751
|
-
DCR r | IDML r | MRC r |
|
|
4752
|
-
DFONT r | IIQ r/w | MRW r/w |
|
|
4753
|
-
DIVX r | IND r/w | MXF r |
|
|
4754
|
-
DJVU r | INSP r/w | NEF r/w |
|
|
4755
|
-
DLL r | INSV r |
|
|
4756
|
-
DNG r/w | INX r |
|
|
4757
|
-
DOC r | ISO r |
|
|
4724
|
+
360 r/w | DOCX r | ITC r | NUMBERS r | RAW r/w
|
|
4725
|
+
3FR r | DPX r | J2C r | NXD r | RIFF r
|
|
4726
|
+
3G2 r/w | DR4 r/w/c | JNG r/w | O r | RSRC r
|
|
4727
|
+
3GP r/w | DSS r | JP2 r/w | ODP r | RTF r
|
|
4728
|
+
7Z r | DV r | JPEG r/w | ODS r | RW2 r/w
|
|
4729
|
+
A r | DVB r/w | JSON r | ODT r | RWL r/w
|
|
4730
|
+
AA r | DVR-MS r | JXL r/w | OFR r | RWZ r
|
|
4731
|
+
AAC r | DYLIB r | K25 r | OGG r | RM r
|
|
4732
|
+
AAE r | EIP r | KDC r | OGV r | SEQ r
|
|
4733
|
+
AAX r/w | EPS r/w | KEY r | ONP r | SKETCH r
|
|
4734
|
+
ACR r | EPUB r | LA r | OPUS r | SO r
|
|
4735
|
+
AFM r | ERF r/w | LFP r | ORF r/w | SR2 r/w
|
|
4736
|
+
AI r/w | EXE r | LIF r | ORI r/w | SRF r
|
|
4737
|
+
AIFF r | EXIF r/w/c | LNK r | OTF r | SRW r/w
|
|
4738
|
+
APE r | EXR r | LRV r/w | PAC r | SVG r
|
|
4739
|
+
ARQ r/w | EXV r/w/c | M2TS r | PAGES r | SWF r
|
|
4740
|
+
ARW r/w | F4A/V r/w | M4A/V r/w | PBM r/w | THM r/w
|
|
4741
|
+
ASF r | FFF r/w | MACOS r | PCD r | TIFF r/w
|
|
4742
|
+
AVI r | FITS r | MAX r | PCX r | TORRENT r
|
|
4743
|
+
AVIF r/w | FLA r | MEF r/w | PDB r | TTC r
|
|
4744
|
+
AZW r | FLAC r | MIE r/w/c | PDF r/w | TTF r
|
|
4745
|
+
BMP r | FLIF r/w | MIFF r | PEF r/w | TXT r
|
|
4746
|
+
BPG r | FLV r | MKA r | PFA r | VCF r
|
|
4747
|
+
BTF r | FPF r | MKS r | PFB r | VNT r
|
|
4748
|
+
C2PA r | FPX r | MKV r | PFM r | VRD r/w/c
|
|
4749
|
+
CHM r | GIF r/w | MNG r/w | PGF r | VSD r
|
|
4750
|
+
COS r | GLV r/w | MOBI r | PGM r/w | WAV r
|
|
4751
|
+
CR2 r/w | GPR r/w | MODD r | PLIST r | WDP r/w
|
|
4752
|
+
CR3 r/w | GZ r | MOI r | PICT r | WEBP r/w
|
|
4753
|
+
CRM r/w | HDP r/w | MOS r/w | PMP r | WEBM r
|
|
4754
|
+
CRW r/w | HDR r | MOV r/w | PNG r/w | WMA r
|
|
4755
|
+
CS1 r/w | HEIC r/w | MP3 r | PPM r/w | WMV r
|
|
4756
|
+
CSV r | HEIF r/w | MP4 r/w | PPT r | WPG r
|
|
4757
|
+
CUR r | HTML r | MPC r | PPTX r | WTV r
|
|
4758
|
+
CZI r | ICC r/w/c | MPG r | PS r/w | WV r
|
|
4759
|
+
DCM r | ICO r | MPO r/w | PSB r/w | X3F r/w
|
|
4760
|
+
DCP r/w | ICS r | MQV r/w | PSD r/w | XCF r
|
|
4761
|
+
DCR r | IDML r | MRC r | PSP r | XISF r
|
|
4762
|
+
DFONT r | IIQ r/w | MRW r/w | QTIF r/w | XLS r
|
|
4763
|
+
DIVX r | IND r/w | MXF r | R3D r | XLSX r
|
|
4764
|
+
DJVU r | INSP r/w | NEF r/w | RA r | XMP r/w/c
|
|
4765
|
+
DLL r | INSV r | NKA r | RAF r/w | ZIP r
|
|
4766
|
+
DNG r/w | INX r | NKSC r/w | RAM r |
|
|
4767
|
+
DOC r | ISO r | NRW r/w | RAR r |
|
|
4758
4768
|
|
|
4759
4769
|
Meta Information
|
|
4760
4770
|
----------------------+----------------------+---------------------
|
|
@@ -5642,7 +5652,7 @@ it from subsequent text (and must be used if subsequent text begins with an
|
|
|
5642
5652
|
alphanumeric character, hyphen, underline, colon or number sign). Use C<$$>
|
|
5643
5653
|
to represent a C<$> symbol, and C<$/> for a newline. When the string
|
|
5644
5654
|
argument is used (ie. I<STR>), a newline is added to the end of the string
|
|
5645
|
-
unless B<-p-> is specified.
|
|
5655
|
+
unless B<-p-> is specified or the B<-b> option is used.
|
|
5646
5656
|
|
|
5647
5657
|
Multiple B<-p> options may be used. Lines beginning with C<#[HEAD]> and
|
|
5648
5658
|
C<#[TAIL]> are output before the first processed file and after the last
|
|
@@ -5668,7 +5678,7 @@ with this command:
|
|
|
5668
5678
|
|
|
5669
5679
|
produces output like this:
|
|
5670
5680
|
|
|
5671
|
-
-- Generated by ExifTool 12.
|
|
5681
|
+
-- Generated by ExifTool 12.85 --
|
|
5672
5682
|
File: a.jpg - 2003:10:31 15:44:19
|
|
5673
5683
|
(f/5.6, 1/60s, ISO 100)
|
|
5674
5684
|
File: b.jpg - 2006:05:23 11:57:38
|
|
@@ -5907,7 +5917,8 @@ processed file by using %C (upper case) instead of %c. This allows a
|
|
|
5907
5917
|
sequential number to be added to output file names, even if the names are
|
|
5908
5918
|
different. For %C, a copy number of zero is not omitted as it is with %c.
|
|
5909
5919
|
A leading '-' causes the number to be reset at the start of each new
|
|
5910
|
-
directory
|
|
5920
|
+
directory (in the original directory structure if the files are being
|
|
5921
|
+
moved), and '+' has no effect. The number before the decimal place gives
|
|
5911
5922
|
the starting index, the number after the decimal place gives the field
|
|
5912
5923
|
width. The following examples show the output filenames when used with the
|
|
5913
5924
|
command C<exiftool rose.jpg star.jpg jet.jpg ...>:
|
|
@@ -6902,6 +6913,19 @@ sources. An equivalent to the above commands using this feature would be:
|
|
|
6902
6913
|
|
|
6903
6914
|
exiftool -tagsfromfile @ -keywords -api nodups a.jpg
|
|
6904
6915
|
|
|
6916
|
+
C<SetTags>
|
|
6917
|
+
|
|
6918
|
+
Used to set tags in extracted images. With no arguments, copies all tags
|
|
6919
|
+
from the source file to the embedded image:
|
|
6920
|
+
|
|
6921
|
+
exiftool -p '${previewimage;SetTags}' -b a.arw > preview.jpg
|
|
6922
|
+
|
|
6923
|
+
Arguments may be added to copy or set specific tags. Arguments take exactly
|
|
6924
|
+
the same form as those on the command line when copying or writing tags,
|
|
6925
|
+
but without the leading dash. For example:
|
|
6926
|
+
|
|
6927
|
+
exiftool -p '${previewimage;SetTags("comment=test","title<filename")}' ...
|
|
6928
|
+
|
|
6905
6929
|
=head1 WINDOWS UNICODE FILE NAMES
|
|
6906
6930
|
|
|
6907
6931
|
In Windows, command-line arguments are specified using the current code page
|
package/bin/fmt_files/gpx.fmt
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
# 2018/01/04 - PH Added IF to be sure position exists
|
|
12
12
|
# 2018/01/06 - PH Use DateFmt function instead of -d option
|
|
13
13
|
# 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
|
|
14
|
+
# 2024/04/11 - PH Use %f feature in GPSDateTime formatting
|
|
14
15
|
#
|
|
15
16
|
# Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
|
|
16
17
|
# 2) The -ee3 option is to extract the full track from video files.
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
#[IF] $gpslatitude $gpslongitude
|
|
33
34
|
#[BODY]<trkpt lat="$gpslatitude#" lon="$gpslongitude#">
|
|
34
35
|
#[BODY] <ele>$gpsaltitude#</ele>
|
|
35
|
-
#[BODY] <time>${gpsdatetime#;
|
|
36
|
+
#[BODY] <time>${gpsdatetime#;DateFmt("%Y-%m-%dT%H:%M:%S%fZ")}</time>
|
|
36
37
|
#[BODY]</trkpt>
|
|
37
38
|
#[TAIL]</trkseg>
|
|
38
39
|
#[TAIL]</trk>
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
# 2018/01/04 - PH Added IF to be sure position exists
|
|
13
13
|
# 2018/01/06 - PH Use DateFmt function instead of -d option
|
|
14
14
|
# 2019/10/24 - PH Preserve sub-seconds in GPSDateTime value
|
|
15
|
+
# 2024/04/11 - PH Use %f feature in GPSDateTime formatting
|
|
15
16
|
#
|
|
16
17
|
# Notes: 1) Input file(s) must contain GPSLatitude and GPSLongitude.
|
|
17
18
|
# 2) The -ee3 option is to extract the full track from video files.
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
#[IF] $gpslatitude $gpslongitude
|
|
31
32
|
#[BODY]<wpt lat="$gpslatitude#" lon="$gpslongitude#">
|
|
32
33
|
#[BODY] <ele>$gpsaltitude#</ele>
|
|
33
|
-
#[BODY] <time>${gpsdatetime#;
|
|
34
|
+
#[BODY] <time>${gpsdatetime#;DateFmt("%Y-%m-%dT%H:%M:%S%fZ")}</time>
|
|
34
35
|
#[BODY] <name>$filename</name>
|
|
35
36
|
#[BODY] <link href="$directory/$filename"/>
|
|
36
37
|
#[BODY] <sym>Scenic Area</sym>
|
|
@@ -16,7 +16,7 @@ use vars qw($VERSION);
|
|
|
16
16
|
use Image::ExifTool::Exif;
|
|
17
17
|
use Image::ExifTool::PLIST;
|
|
18
18
|
|
|
19
|
-
$VERSION = '1.
|
|
19
|
+
$VERSION = '1.12';
|
|
20
20
|
|
|
21
21
|
sub ConvertPLIST($$);
|
|
22
22
|
|
|
@@ -128,6 +128,8 @@ sub ConvertPLIST($$);
|
|
|
128
128
|
1 => 'ProRAW',
|
|
129
129
|
2 => 'Portrait',
|
|
130
130
|
10 => 'Photo',
|
|
131
|
+
11 => 'Manual Focus', #forum16044
|
|
132
|
+
12 => 'Scene', #forum16044
|
|
131
133
|
},
|
|
132
134
|
},
|
|
133
135
|
0x0015 => { # (ImageGroupIdentifier, ref 2)
|
|
@@ -154,12 +156,17 @@ sub ConvertPLIST($$);
|
|
|
154
156
|
},
|
|
155
157
|
# 0x001b - (PhotosRenderEffect, ref 2)
|
|
156
158
|
# 0x001c - (BracketedCaptureSequenceNumber, ref 2)
|
|
159
|
+
# 0x001c - Flash, 2="On" (ref PH)
|
|
157
160
|
0x001d => { #2
|
|
158
161
|
Name => 'LuminanceNoiseAmplitude',
|
|
159
162
|
Writable => 'rational64s',
|
|
160
163
|
},
|
|
161
164
|
# 0x001e - (OriginatingAppID, ref 2)
|
|
162
|
-
|
|
165
|
+
0x001f => {
|
|
166
|
+
Name => 'PhotosAppFeatureFlags', #2
|
|
167
|
+
Notes => 'set if person or pet detected in image', #PH
|
|
168
|
+
Writable => 'int32s',
|
|
169
|
+
},
|
|
163
170
|
0x0020 => { # (ImageCaptureRequestIdentifier, ref 2)
|
|
164
171
|
Name => 'ImageCaptureRequestID',
|
|
165
172
|
Writable => 'string',
|
|
@@ -170,6 +177,17 @@ sub ConvertPLIST($$);
|
|
|
170
177
|
Writable => 'rational64s',
|
|
171
178
|
},
|
|
172
179
|
# 0x0022 - (ARKitPhoto, ref 2)
|
|
180
|
+
0x0023 => {
|
|
181
|
+
Name => 'AFPerformance', #2
|
|
182
|
+
Writable => 'int32s',
|
|
183
|
+
Count => 2,
|
|
184
|
+
Notes => q{
|
|
185
|
+
first number maybe related to focus distance, last number maybe related to
|
|
186
|
+
focus accuracy
|
|
187
|
+
},
|
|
188
|
+
PrintConv => 'my @a=split " ",$val; sprintf("%d %d %d",$a[0],$a[1]>>28,$a[1]&0xfffffff)',
|
|
189
|
+
PrintConvInv => 'my @a=split " ",$val; sprintf("%d %d",$a[0],($a[1]<<28)+$a[2])',
|
|
190
|
+
},
|
|
173
191
|
# 0x0023 - int32s[2] (AFPerformance, ref 2)
|
|
174
192
|
# 0x0024 - (AFExternalOffset, ref 2)
|
|
175
193
|
0x0025 => { # (StillImageSceneFlags, ref 2)
|
|
@@ -196,7 +214,21 @@ sub ConvertPLIST($$);
|
|
|
196
214
|
},
|
|
197
215
|
# 0x002C - (SpatialOverCaptureImageType, ref 2)
|
|
198
216
|
# 0x002D - (CCT, ref 2)
|
|
217
|
+
0x002d => { #PH
|
|
218
|
+
Name => 'ColorTemperature',
|
|
219
|
+
Writable => 'int32s',
|
|
220
|
+
},
|
|
199
221
|
# 0x002E - (ApsMode, ref 2)
|
|
222
|
+
0x002e => { #PH
|
|
223
|
+
Name => 'CameraType',
|
|
224
|
+
Writable => 'int32s',
|
|
225
|
+
PrintConv => {
|
|
226
|
+
0 => 'Back Wide Angle',
|
|
227
|
+
1 => 'Back Normal',
|
|
228
|
+
6 => 'Front',
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
# 0x002e - set to 0 for 0.5x (crop?) (ref PH)
|
|
200
232
|
0x002F => { #2
|
|
201
233
|
Name => 'FocusPosition',
|
|
202
234
|
Writable => 'int32s',
|
|
@@ -209,7 +241,9 @@ sub ConvertPLIST($$);
|
|
|
209
241
|
# 0x0032 - (IntelligentDistortionCorrection, ref 2)
|
|
210
242
|
# 0x0033 - (NRFStatus, ref 2)
|
|
211
243
|
# 0x0034 - (NRFInputBracketCount, ref 2)
|
|
244
|
+
# 0x0034 - 1 for flash on, otherwise doesn't exist (ref PH)
|
|
212
245
|
# 0x0035 - (NRFRegisteredBracketCount, ref 2)
|
|
246
|
+
# 0x0035 - 0 for flash on, otherwise doesn't exist (ref PH)
|
|
213
247
|
# 0x0036 - (LuxLevel, ref 2)
|
|
214
248
|
# 0x0037 - (LastFocusingMethod, ref 2)
|
|
215
249
|
0x0038 => { # (TimeOfFlightAssistedAutoFocusEstimatorMeasuredDepth, ref 2)
|
|
@@ -219,8 +253,10 @@ sub ConvertPLIST($$);
|
|
|
219
253
|
},
|
|
220
254
|
# 0x0039 - (TimeOfFlightAssistedAutoFocusEstimatorROIType, ref 2)
|
|
221
255
|
# 0x003A - (NRFSRLStatus, ref 2)
|
|
256
|
+
# 0x003a - non-zero if a person was in the image? (ref PH)
|
|
222
257
|
# 0x003B - (SystemPressureLevel, ref 2)
|
|
223
258
|
# 0x003C - (CameraControlsStatisticsMaster, ref 2)
|
|
259
|
+
# 0x003c - 4=rear cam, 1=front cam? (ref PH)
|
|
224
260
|
0x003D => { # (TimeOfFlightAssistedAutoFocusEstimatorSensorConfidence, ref 2)
|
|
225
261
|
Name => 'AFConfidence',
|
|
226
262
|
Writable => 'int32s',
|
|
@@ -237,6 +273,7 @@ sub ConvertPLIST($$);
|
|
|
237
273
|
},
|
|
238
274
|
0x0040 => { #2
|
|
239
275
|
Name => 'SemanticStyle',
|
|
276
|
+
Notes => '_1=Tone, _2=Warm, _3=1.Std,2.Vibrant,3.Rich Contrast,4.Warm,5.Cool', #PH
|
|
240
277
|
ValueConv => \&ConvertPLIST,
|
|
241
278
|
},
|
|
242
279
|
0x0041 => { # (SemanticStyleKey_RenderingVersion, ref 2)
|
|
@@ -249,20 +286,28 @@ sub ConvertPLIST($$);
|
|
|
249
286
|
},
|
|
250
287
|
# 0x0043 - (SemanticStyleKey_ToneBias, ref 2)
|
|
251
288
|
# 0x0044 - (SemanticStyleKey_WarmthBias, ref 2)
|
|
252
|
-
0x0045
|
|
253
|
-
Name => 'FrontFacingCamera',
|
|
254
|
-
Writable => 'int32s',
|
|
255
|
-
PrintConv => { 0 => 'No', 1 => 'Yes' }, #PH (NC)
|
|
256
|
-
},
|
|
289
|
+
# 0x0045 - (FrontFacing, ref 2) (not for iPhone15, ref PH)
|
|
257
290
|
# 0x0046 - (TimeOfFlightAssistedAutoFocusEstimatorContainsBlindSpot, ref 2)
|
|
258
291
|
# 0x0047 - (LeaderFollowerAutoFocusLeaderDepth, ref 2)
|
|
259
292
|
# 0x0048 - (LeaderFollowerAutoFocusLeaderFocusMethod, ref 2)
|
|
260
293
|
# 0x0049 - (LeaderFollowerAutoFocusLeaderConfidence, ref 2)
|
|
261
294
|
# 0x004A - (LeaderFollowerAutoFocusLeaderROIType, ref 2)
|
|
295
|
+
# 0x004a - 2=back normal, 4=back wide angle, 5=front (ref PH)
|
|
262
296
|
# 0x004B - (ZeroShutterLagFailureReason, ref 2)
|
|
263
297
|
# 0x004C - (TimeOfFlightAssistedAutoFocusEstimatorMSPMeasuredDepth, ref 2)
|
|
264
298
|
# 0x004D - (TimeOfFlightAssistedAutoFocusEstimatorMSPSensorConfidence, ref 2)
|
|
265
299
|
# 0x004E - (Camera, ref 2)
|
|
300
|
+
0x004e => {
|
|
301
|
+
Name => 'Apple_0x004e',
|
|
302
|
+
Unknown => 1,
|
|
303
|
+
# first number is 0 for front cam, 1 for either back cam (ref PH)
|
|
304
|
+
ValueConv => \&ConvertPLIST,
|
|
305
|
+
},
|
|
306
|
+
0x004f => {
|
|
307
|
+
Name => 'Apple_0x004f',
|
|
308
|
+
Unknown => 1,
|
|
309
|
+
ValueConv => \&ConvertPLIST,
|
|
310
|
+
}
|
|
266
311
|
);
|
|
267
312
|
|
|
268
313
|
# PLIST-format CMTime structure (ref PH)
|
|
@@ -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.56';
|
|
39
39
|
@ISA = qw(Exporter);
|
|
40
40
|
|
|
41
41
|
sub NumbersFirst($$);
|
|
@@ -672,7 +672,10 @@ Camero.
|
|
|
672
672
|
|
|
673
673
|
Use the API L<PrintCSV|../ExifTool.html#PrintCSV> option to output all timed
|
|
674
674
|
PDR data in CSV format at greatly increased speed and with much lower memory
|
|
675
|
-
usage.
|
|
675
|
+
usage. This option prints the numerical values for each channel in CSV
|
|
676
|
+
format, suitable for import into RaceRender. In this output, the gear
|
|
677
|
+
numbers for Neutral and Reverse are changed to -1 and -100 respectively for
|
|
678
|
+
compatibility with RaceRender.
|
|
676
679
|
},
|
|
677
680
|
PodTrailer => q{
|
|
678
681
|
~head1 NOTES
|
|
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
|
|
|
88
88
|
sub ProcessExifInfo($$$);
|
|
89
89
|
sub SwapWords($);
|
|
90
90
|
|
|
91
|
-
$VERSION = '4.
|
|
91
|
+
$VERSION = '4.75';
|
|
92
92
|
|
|
93
93
|
# Note: Removed 'USM' from 'L' lenses since it is redundant - PH
|
|
94
94
|
# (or is it? Ref 32 shows 5 non-USM L-type lenses)
|
|
@@ -2590,6 +2590,13 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
|
|
|
2590
2590
|
},
|
|
2591
2591
|
# 47 - related to aspect ratio: 100=4:3,70=1:1/16:9,90=3:2,60=4:5 (PH G12)
|
|
2592
2592
|
# (roughly image area in percent - 4:3=100%,1:1/16:9=75%,3:2=89%,4:5=60%)
|
|
2593
|
+
51 => { #forum16036 (EOS R models)
|
|
2594
|
+
Name => 'Clarity',
|
|
2595
|
+
PrintConv => {
|
|
2596
|
+
OTHER => sub { shift },
|
|
2597
|
+
0x7fff => 'n/a',
|
|
2598
|
+
},
|
|
2599
|
+
},
|
|
2593
2600
|
);
|
|
2594
2601
|
|
|
2595
2602
|
# focal length information (MakerNotes tag 0x02)
|
|
@@ -7031,7 +7038,7 @@ my %ciMaxFocal = (
|
|
|
7031
7038
|
},
|
|
7032
7039
|
},
|
|
7033
7040
|
2 => { #12
|
|
7034
|
-
Name => 'Sharpness',
|
|
7041
|
+
Name => 'Sharpness', # (unsharp mask strength for the EOS R5)
|
|
7035
7042
|
Notes => 'all models except the 20D and 350D',
|
|
7036
7043
|
Condition => '$$self{Model} !~ /\b(20D|350D|REBEL XT|Kiss Digital N)\b/',
|
|
7037
7044
|
Priority => 0, # (maybe not as reliable as other sharpness values)
|
|
@@ -7077,6 +7084,8 @@ my %ciMaxFocal = (
|
|
|
7077
7084
|
Name => 'WBShiftGM',
|
|
7078
7085
|
Notes => 'positive is a shift toward green',
|
|
7079
7086
|
},
|
|
7087
|
+
14 => 'UnsharpMaskFineness', #forum16036
|
|
7088
|
+
15 => 'UnsharpMaskThreshold', #forum16036
|
|
7080
7089
|
);
|
|
7081
7090
|
|
|
7082
7091
|
# Color balance information (MakerNotes tag 0xa9) (ref PH)
|
|
@@ -23,7 +23,7 @@ use vars qw($VERSION);
|
|
|
23
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
24
24
|
use Image::ExifTool::Canon;
|
|
25
25
|
|
|
26
|
-
$VERSION = '1.
|
|
26
|
+
$VERSION = '1.41';
|
|
27
27
|
|
|
28
28
|
sub ProcessCanonVRD($$;$);
|
|
29
29
|
sub WriteCanonVRD($$;$);
|
|
@@ -1020,6 +1020,18 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1020
1020
|
# 0x10018 - fmt=8: 0
|
|
1021
1021
|
# 0x10020 - fmt=2: ''
|
|
1022
1022
|
0x10021 => 'CustomPictureStyle', # (string)
|
|
1023
|
+
0x10100 => { #forum15965
|
|
1024
|
+
Name => 'Rating',
|
|
1025
|
+
PrintConv => {
|
|
1026
|
+
0 => 'Unrated',
|
|
1027
|
+
1 => 1,
|
|
1028
|
+
2 => 2,
|
|
1029
|
+
3 => 3,
|
|
1030
|
+
4 => 4,
|
|
1031
|
+
5 => 5,
|
|
1032
|
+
4294967295 => 'Rejected',
|
|
1033
|
+
},
|
|
1034
|
+
},
|
|
1023
1035
|
0x10101 => {
|
|
1024
1036
|
Name => 'CheckMark',
|
|
1025
1037
|
PrintConv => {
|
|
@@ -1427,15 +1439,16 @@ my $blankFooter = "CANON OPTIONAL DATA\0" . ("\0" x 42) . "\xff\xd9";
|
|
|
1427
1439
|
4 => 'CropY',
|
|
1428
1440
|
5 => 'CropWidth',
|
|
1429
1441
|
6 => 'CropHeight',
|
|
1442
|
+
7 => 'CropRotation',
|
|
1430
1443
|
8 => {
|
|
1431
|
-
Name => '
|
|
1444
|
+
Name => 'CropAngle',
|
|
1432
1445
|
Format => 'double',
|
|
1433
1446
|
PrintConv => 'sprintf("%.7g",$val)',
|
|
1434
1447
|
PrintConvInv => '$val',
|
|
1435
1448
|
},
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
#
|
|
1449
|
+
10 => 'CropOriginalWidth',
|
|
1450
|
+
11 => 'CropOriginalHeight',
|
|
1451
|
+
# 12 double - value: 100
|
|
1439
1452
|
);
|
|
1440
1453
|
|
|
1441
1454
|
# DR4 Stamp Tool tags (ref PH)
|
|
@@ -19,6 +19,7 @@ use Image::ExifTool::GPS;
|
|
|
19
19
|
$VERSION = '1.09';
|
|
20
20
|
|
|
21
21
|
sub ProcessDJIInfo($$$);
|
|
22
|
+
sub Process_djmd($$$);
|
|
22
23
|
|
|
23
24
|
my %convFloat2 = (
|
|
24
25
|
PrintConv => 'sprintf("%+.2f", $val)',
|
|
@@ -186,6 +187,34 @@ my %convFloat2 = (
|
|
|
186
187
|
},
|
|
187
188
|
);
|
|
188
189
|
|
|
190
|
+
# TODO - eventually add ability to decode this?
|
|
191
|
+
%Image::ExifTool::DJI::djmd = (
|
|
192
|
+
PROCESS_PROC => \&Process_djmd,
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
#------------------------------------------------------------------------------
|
|
196
|
+
# Process DJI djmd timed data from Action4 videos (ref PH)
|
|
197
|
+
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
198
|
+
# Returns: 1 on success
|
|
199
|
+
# TODO: work in progress
|
|
200
|
+
sub Process_djmd($$$)
|
|
201
|
+
{
|
|
202
|
+
my ($et, $dirInfo, $tagTbl) = @_;
|
|
203
|
+
my $dataPt = $$dirInfo{DataPt};
|
|
204
|
+
my ($pos, $bit, $val) = (6, 0, 0);
|
|
205
|
+
for (;;) {
|
|
206
|
+
my $v = Get8u($dataPt, $pos);
|
|
207
|
+
$val += ($v & 0x7f) << $bit;
|
|
208
|
+
last unless $v & 0x80;
|
|
209
|
+
++$pos;
|
|
210
|
+
$bit += 7;
|
|
211
|
+
}
|
|
212
|
+
$pos += 49;
|
|
213
|
+
my @a = unpack("x${pos}fxfxfxfx3fxfxf", $$dataPt);
|
|
214
|
+
print "$val @a\n";
|
|
215
|
+
return 1;
|
|
216
|
+
}
|
|
217
|
+
|
|
189
218
|
#------------------------------------------------------------------------------
|
|
190
219
|
# Process DJI info (ref PH)
|
|
191
220
|
# Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.07';
|
|
19
19
|
|
|
20
20
|
# DPX tags
|
|
21
21
|
%Image::ExifTool::DPX::Main = (
|
|
@@ -97,7 +97,7 @@ $VERSION = '1.06';
|
|
|
97
97
|
3 => 'Logarithmic',
|
|
98
98
|
4 => 'Unspecified video',
|
|
99
99
|
5 => 'SMPTE 274M',
|
|
100
|
-
6 => 'ITU-R
|
|
100
|
+
6 => 'ITU-R 709-4',
|
|
101
101
|
7 => 'ITU-R 601-5 system B or G (625)',
|
|
102
102
|
8 => 'ITU-R 601-5 system M (525)',
|
|
103
103
|
9 => 'Composite video (NTSC)',
|
|
@@ -124,7 +124,7 @@ $VERSION = '1.06';
|
|
|
124
124
|
1 => 'Printing density',
|
|
125
125
|
4 => 'Unspecified video',
|
|
126
126
|
5 => 'SMPTE 274M',
|
|
127
|
-
6 => 'ITU-R
|
|
127
|
+
6 => 'ITU-R 709-4',
|
|
128
128
|
7 => 'ITU-R 601-5 system B or G (625)',
|
|
129
129
|
8 => 'ITU-R 601-5 system M (525)',
|
|
130
130
|
9 => 'Composite video (NTSC)',
|
|
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
|
|
|
57
57
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
58
58
|
use Image::ExifTool::MakerNotes;
|
|
59
59
|
|
|
60
|
-
$VERSION = '4.
|
|
60
|
+
$VERSION = '4.52';
|
|
61
61
|
|
|
62
62
|
sub ProcessExif($$$);
|
|
63
63
|
sub WriteExif($$$);
|
|
@@ -4342,7 +4342,7 @@ my %opcodeInfo = (
|
|
|
4342
4342
|
Count => -1,
|
|
4343
4343
|
Protected => 1,
|
|
4344
4344
|
},
|
|
4345
|
-
|
|
4345
|
+
0xcd3f => { # DNG 1.6
|
|
4346
4346
|
Name => 'RGBTables',
|
|
4347
4347
|
Writable => 'undef',
|
|
4348
4348
|
WriteGroup => 'IFD0',
|
|
@@ -4404,6 +4404,23 @@ my %opcodeInfo = (
|
|
|
4404
4404
|
WriteGroup => 'IFD0',
|
|
4405
4405
|
Protected => 1,
|
|
4406
4406
|
},
|
|
4407
|
+
0xcd49 => { # DNG 1.7.1
|
|
4408
|
+
Name => 'JXLDistance',
|
|
4409
|
+
Writable => 'float',
|
|
4410
|
+
WriteGroup => 'IFD0',
|
|
4411
|
+
},
|
|
4412
|
+
0xcd4a => { # DNG 1.7.1
|
|
4413
|
+
Name => 'JXLEffort',
|
|
4414
|
+
Notes => 'values range from 1=low to 9=high',
|
|
4415
|
+
Writable => 'int32u',
|
|
4416
|
+
WriteGroup => 'IFD0',
|
|
4417
|
+
},
|
|
4418
|
+
0xcd4b => { # DNG 1.7.1
|
|
4419
|
+
Name => 'JXLDecodeSpeed',
|
|
4420
|
+
Notes => 'values range from 1=slow to 4=fast',
|
|
4421
|
+
Writable => 'int32u',
|
|
4422
|
+
WriteGroup => 'IFD0',
|
|
4423
|
+
},
|
|
4407
4424
|
0xea1c => { #13
|
|
4408
4425
|
Name => 'Padding',
|
|
4409
4426
|
Binary => 1,
|