exiftool-vendored.pl 12.84.0 → 12.89.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 +94 -3
- package/bin/MANIFEST +1 -0
- package/bin/META.json +1 -1
- package/bin/META.yml +16 -16
- package/bin/README +47 -46
- package/bin/build_geolocation +96 -20
- package/bin/config_files/example.config +5 -0
- package/bin/config_files/onone.config +28 -0
- package/bin/exiftool +67 -57
- package/bin/lib/Image/ExifTool/AIFF.pm +8 -4
- package/bin/lib/Image/ExifTool/ASF.pm +4 -1
- package/bin/lib/Image/ExifTool/Apple.pm +2 -1
- package/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -8
- package/bin/lib/Image/ExifTool/Canon.pm +100 -7
- package/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- package/bin/lib/Image/ExifTool/CanonVRD.pm +5 -2
- package/bin/lib/Image/ExifTool/DPX.pm +3 -3
- package/bin/lib/Image/ExifTool/FujiFilm.pm +46 -4
- package/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
- package/bin/lib/Image/ExifTool/Geolocation.pm +18 -8
- package/bin/lib/Image/ExifTool/ID3.pm +36 -8
- package/bin/lib/Image/ExifTool/InDesign.pm +8 -4
- package/bin/lib/Image/ExifTool/Jpeg2000.pm +0 -1
- package/bin/lib/Image/ExifTool/Lang/de.pm +2 -2
- package/bin/lib/Image/ExifTool/Matroska.pm +66 -10
- package/bin/lib/Image/ExifTool/MinoltaRaw.pm +2 -2
- package/bin/lib/Image/ExifTool/Nikon.pm +21 -2
- package/bin/lib/Image/ExifTool/Olympus.pm +27 -17
- package/bin/lib/Image/ExifTool/Panasonic.pm +1 -0
- package/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -0
- package/bin/lib/Image/ExifTool/Pentax.pm +139 -22
- package/bin/lib/Image/ExifTool/QuickTime.pm +70 -16
- package/bin/lib/Image/ExifTool/QuickTimeStream.pl +24 -2
- package/bin/lib/Image/ExifTool/RIFF.pm +20 -10
- package/bin/lib/Image/ExifTool/Samsung.pm +29 -1
- package/bin/lib/Image/ExifTool/Sony.pm +21 -11
- package/bin/lib/Image/ExifTool/TagLookup.pm +6806 -6782
- package/bin/lib/Image/ExifTool/TagNames.pod +124 -34
- package/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- package/bin/lib/Image/ExifTool/WriteQuickTime.pl +86 -16
- package/bin/lib/Image/ExifTool/Writer.pl +8 -6
- package/bin/lib/Image/ExifTool/XMP.pm +10 -8
- package/bin/lib/Image/ExifTool/XMP2.pl +51 -30
- package/bin/lib/Image/ExifTool/ZIP.pm +8 -4
- package/bin/lib/Image/ExifTool.pm +78 -45
- package/bin/lib/Image/ExifTool.pod +66 -50
- package/bin/perl-Image-ExifTool.spec +45 -45
- package/bin/pp_build_exe.args +4 -4
- package/package.json +3 -3
|
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
|
|
|
12
12
|
=head1 TAG TABLES
|
|
13
13
|
|
|
14
14
|
The tables listed below give the names of all tags recognized by ExifTool.
|
|
15
|
-
They contain a total of
|
|
15
|
+
They contain a total of 27892 tags, with 17459 unique tag names.
|
|
16
16
|
|
|
17
17
|
B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
|
|
18
18
|
table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
|
|
@@ -1390,6 +1390,7 @@ L<http://www.adobe.com/devnet/xmp/> for the official XMP specification.
|
|
|
1390
1390
|
fpv XMP fpv
|
|
1391
1391
|
GAudio XMP GAudio
|
|
1392
1392
|
GCamera XMP GCamera
|
|
1393
|
+
GContainer XMP GContainer
|
|
1393
1394
|
GCreations XMP GCreations
|
|
1394
1395
|
GDepth XMP GDepth
|
|
1395
1396
|
getty XMP GettyImages
|
|
@@ -4794,6 +4795,7 @@ These tags belong to the ExifTool XMP-GCamera family 1 group.
|
|
|
4794
4795
|
BurstID string
|
|
4795
4796
|
BurstPrimary string
|
|
4796
4797
|
DisableAutoCreation string+
|
|
4798
|
+
DisableSuggestedAction string+
|
|
4797
4799
|
HDRPMakerNote string
|
|
4798
4800
|
HdrPlusMakernote string
|
|
4799
4801
|
MicroVideo integer
|
|
@@ -4809,6 +4811,42 @@ These tags belong to the ExifTool XMP-GCamera family 1 group.
|
|
|
4809
4811
|
ShotLogData string
|
|
4810
4812
|
SpecialTypeID string+
|
|
4811
4813
|
|
|
4814
|
+
=head3 XMP GContainer Tags
|
|
4815
|
+
|
|
4816
|
+
Google Container namespace. ExifTool uses the prefix 'GContainer' instead
|
|
4817
|
+
of 'Container' to avoid a conflict with the Google Device Container
|
|
4818
|
+
namespace.
|
|
4819
|
+
|
|
4820
|
+
These tags belong to the ExifTool XMP-GContainer family 1 group.
|
|
4821
|
+
|
|
4822
|
+
Tag Name Writable
|
|
4823
|
+
-------- --------
|
|
4824
|
+
ContainerDirectory Directory Struct+
|
|
4825
|
+
DirectoryItem Item Struct_+
|
|
4826
|
+
DirectoryItemLabel string_+
|
|
4827
|
+
DirectoryItemLength integer_+
|
|
4828
|
+
DirectoryItemMime string_+
|
|
4829
|
+
DirectoryItemPadding integer_+
|
|
4830
|
+
DirectoryItemSemantic string_+
|
|
4831
|
+
DirectoryItemURI string_+
|
|
4832
|
+
|
|
4833
|
+
=head3 XMP Directory Struct
|
|
4834
|
+
|
|
4835
|
+
Field Name Writable
|
|
4836
|
+
---------- --------
|
|
4837
|
+
Item Item Struct
|
|
4838
|
+
|
|
4839
|
+
=head3 XMP Item Struct
|
|
4840
|
+
|
|
4841
|
+
Field Name Writable
|
|
4842
|
+
---------- --------
|
|
4843
|
+
Label string
|
|
4844
|
+
Length integer
|
|
4845
|
+
Mime string
|
|
4846
|
+
Padding integer
|
|
4847
|
+
Semantic string
|
|
4848
|
+
URI string
|
|
4849
|
+
|
|
4812
4850
|
=head3 XMP GCreations Tags
|
|
4813
4851
|
|
|
4814
4852
|
Google creations tags.
|
|
@@ -7746,7 +7784,8 @@ These tags are used in Pentax/Asahi cameras.
|
|
|
7746
7784
|
0x0229 SerialNumber string
|
|
7747
7785
|
0x022a FilterInfo Pentax FilterInfo
|
|
7748
7786
|
Pentax FilterInfo
|
|
7749
|
-
0x022b
|
|
7787
|
+
0x022b LevelInfoK3III Pentax LevelInfoK3III
|
|
7788
|
+
LevelInfo Pentax LevelInfo
|
|
7750
7789
|
0x022d WBLevels Pentax WBLevels
|
|
7751
7790
|
0x022e Artist string
|
|
7752
7791
|
0x022f Copyright string
|
|
@@ -7919,7 +7958,8 @@ Auto-exposure information for the K-01.
|
|
|
7919
7958
|
|
|
7920
7959
|
=head3 Pentax AEInfo3 Tags
|
|
7921
7960
|
|
|
7922
|
-
Auto-exposure information for the K-3, K-30, K-50
|
|
7961
|
+
Auto-exposure information for the K-1mkII, K-3, K-30, K-50, K-70, K-500 and
|
|
7962
|
+
KP.
|
|
7923
7963
|
|
|
7924
7964
|
Index1 Tag Name Writable
|
|
7925
7965
|
------ -------- --------
|
|
@@ -8050,17 +8090,23 @@ Flash information tags for the K10D, K20D and K200D.
|
|
|
8050
8090
|
Index1 Tag Name Writable
|
|
8051
8091
|
------ -------- --------
|
|
8052
8092
|
0.1 PowerSource int8u & 0x0f
|
|
8093
|
+
0.2 PowerAvailable int8u & 0xf0
|
|
8053
8094
|
1.1 BodyBatteryState int8u & 0xf0
|
|
8054
8095
|
1.2 GripBatteryState int8u & 0x0f
|
|
8055
|
-
GripBatteryState? int8u & 0x0f
|
|
8056
8096
|
2 BodyBatteryADNoLoad int8u
|
|
8057
8097
|
BodyBatteryVoltage1 int16u
|
|
8098
|
+
BodyBatteryState int8u
|
|
8058
8099
|
3 BodyBatteryADLoad int8u
|
|
8100
|
+
BodyBatteryPercent int8u
|
|
8059
8101
|
4 GripBatteryADNoLoad int8u
|
|
8060
8102
|
BodyBatteryVoltage2 int16u
|
|
8103
|
+
BodyBatteryVoltage int32u
|
|
8061
8104
|
5 GripBatteryADLoad int8u
|
|
8062
8105
|
6 BodyBatteryVoltage3 int16u
|
|
8063
8106
|
8 BodyBatteryVoltage4 int16u
|
|
8107
|
+
16 GripBatteryState int8u
|
|
8108
|
+
17 GripBatteryPercent int8u
|
|
8109
|
+
18 GripBatteryVoltage int32u
|
|
8064
8110
|
|
|
8065
8111
|
=head3 Pentax AFInfo Tags
|
|
8066
8112
|
|
|
@@ -8072,6 +8118,7 @@ Flash information tags for the K10D, K20D and K200D.
|
|
|
8072
8118
|
6 AFDefocus int8u
|
|
8073
8119
|
7 AFIntegrationTime int8u
|
|
8074
8120
|
11 AFPointsInFocus int8u
|
|
8121
|
+
506 LiveView int8u
|
|
8075
8122
|
509 AFHold int8u
|
|
8076
8123
|
|
|
8077
8124
|
=head3 Pentax KelvinWB Tags
|
|
@@ -8111,6 +8158,7 @@ White balance Blue/Red gains as a function of color temperature.
|
|
|
8111
8158
|
------ -------- --------
|
|
8112
8159
|
0 EVSteps int8u
|
|
8113
8160
|
1 SensitivitySteps int8u
|
|
8161
|
+
3 LiveView int8u
|
|
8114
8162
|
|
|
8115
8163
|
=head3 Pentax ShotInfo Tags
|
|
8116
8164
|
|
|
@@ -8224,6 +8272,16 @@ used.
|
|
|
8224
8272
|
311 DigitalFilter19 undef[17]
|
|
8225
8273
|
328 DigitalFilter20 undef[17]
|
|
8226
8274
|
|
|
8275
|
+
=head3 Pentax LevelInfoK3III Tags
|
|
8276
|
+
|
|
8277
|
+
Tags decoded from the electronic level information for the K-3 III.
|
|
8278
|
+
|
|
8279
|
+
Index1 Tag Name Writable
|
|
8280
|
+
------ -------- --------
|
|
8281
|
+
1 CameraOrientation int8s
|
|
8282
|
+
3 RollAngle int16s
|
|
8283
|
+
5 PitchAngle int16s
|
|
8284
|
+
|
|
8227
8285
|
=head3 Pentax LevelInfo Tags
|
|
8228
8286
|
|
|
8229
8287
|
Tags decoded from the electronic level information for the K-5. May not be
|
|
@@ -9296,6 +9354,7 @@ Unknown only to reduce the volume of the normal output.
|
|
|
9296
9354
|
0x4026 LogInfo Canon LogInfo
|
|
9297
9355
|
0x4028 AFConfig Canon AFConfig
|
|
9298
9356
|
0x403f RawBurstModeRoll Canon RawBurstInfo
|
|
9357
|
+
0x4059 LevelInfo Canon LevelInfo
|
|
9299
9358
|
|
|
9300
9359
|
=head3 Canon CameraSettings Tags
|
|
9301
9360
|
|
|
@@ -9338,6 +9397,7 @@ Unknown only to reduce the volume of the normal output.
|
|
|
9338
9397
|
41 ManualFlashOutput int16s
|
|
9339
9398
|
42 ColorTone int16s
|
|
9340
9399
|
46 SRAWQuality int16s
|
|
9400
|
+
51 Clarity int16s
|
|
9341
9401
|
|
|
9342
9402
|
=head3 Canon FocalLength Tags
|
|
9343
9403
|
|
|
@@ -10181,7 +10241,7 @@ CameraInfo tags for the EOS 1000D.
|
|
|
10181
10241
|
|
|
10182
10242
|
=head3 Canon CameraInfoR6 Tags
|
|
10183
10243
|
|
|
10184
|
-
CameraInfo tags for the EOS R6.
|
|
10244
|
+
CameraInfo tags for the EOS R5 and R6.
|
|
10185
10245
|
|
|
10186
10246
|
Index1 Tag Name Writable
|
|
10187
10247
|
------ -------- --------
|
|
@@ -10460,6 +10520,8 @@ WB tags for the Canon G9.
|
|
|
10460
10520
|
11 DigitalGain int16s
|
|
10461
10521
|
12 WBShiftAB int16s
|
|
10462
10522
|
13 WBShiftGM int16s
|
|
10523
|
+
14 UnsharpMaskFineness int16s
|
|
10524
|
+
15 UnsharpMaskThreshold int16s
|
|
10463
10525
|
|
|
10464
10526
|
=head3 Canon ColorBalance Tags
|
|
10465
10527
|
|
|
@@ -11521,6 +11583,8 @@ Information about creative filter settings.
|
|
|
11521
11583
|
17 VFDisplayIllumination int32s
|
|
11522
11584
|
18 AFStatusViewfinder int32s
|
|
11523
11585
|
19 InitialAFPointInServo int32s
|
|
11586
|
+
20 SubjectToDetect int32s
|
|
11587
|
+
24 EyeDetection int32s
|
|
11524
11588
|
|
|
11525
11589
|
=head3 Canon RawBurstInfo Tags
|
|
11526
11590
|
|
|
@@ -11529,6 +11593,16 @@ Information about creative filter settings.
|
|
|
11529
11593
|
1 RawBurstImageNum int32u
|
|
11530
11594
|
2 RawBurstImageCount int32u
|
|
11531
11595
|
|
|
11596
|
+
=head3 Canon LevelInfo Tags
|
|
11597
|
+
|
|
11598
|
+
Index4 Tag Name Writable
|
|
11599
|
+
------ -------- --------
|
|
11600
|
+
4 RollAngle int32s
|
|
11601
|
+
5 PitchAngle int32s
|
|
11602
|
+
7 FocalLength int32s
|
|
11603
|
+
8 MinFocalLength int32s
|
|
11604
|
+
9 MaxFocalLength int32s
|
|
11605
|
+
|
|
11532
11606
|
=head3 Canon CTMD Tags
|
|
11533
11607
|
|
|
11534
11608
|
Canon Timed MetaData tags found in CR3 images. The ExtractEmbedded option
|
|
@@ -13298,6 +13372,15 @@ Face recognition information.
|
|
|
13298
13372
|
Face8Category no
|
|
13299
13373
|
Face8Name no
|
|
13300
13374
|
|
|
13375
|
+
=head3 FujiFilm RAFHeader Tags
|
|
13376
|
+
|
|
13377
|
+
Tags extracted from the header of RAF images.
|
|
13378
|
+
|
|
13379
|
+
Index1 Tag Name Writable
|
|
13380
|
+
------ -------- --------
|
|
13381
|
+
60 RAFVersion no
|
|
13382
|
+
108 RAFCompression no
|
|
13383
|
+
|
|
13301
13384
|
=head3 FujiFilm RAF Tags
|
|
13302
13385
|
|
|
13303
13386
|
FujiFilm RAF images contain meta information stored in a proprietary
|
|
@@ -15930,7 +16013,7 @@ Tags written by some Nikon GPS-equipped cameras like the AW100.
|
|
|
15930
16013
|
Index1 Tag Name Writable
|
|
15931
16014
|
------ -------- --------
|
|
15932
16015
|
0 FirmwareVersion51 no
|
|
15933
|
-
10 NEFCompression int16u
|
|
16016
|
+
10 NEFCompression int16u
|
|
15934
16017
|
|
|
15935
16018
|
=head3 Nikon MakerNotes0x56 Tags
|
|
15936
16019
|
|
|
@@ -19821,23 +19904,23 @@ any information found here will be extracted, even if the tag is not listed.
|
|
|
19821
19904
|
Tag ID Tag Name Writable
|
|
19822
19905
|
------ -------- --------
|
|
19823
19906
|
0x0000 ImageProcessingVersion undef[4]
|
|
19824
|
-
0x0100 WB_RBLevels int16u[
|
|
19825
|
-
0x0102 WB_RBLevels3000K int16u[
|
|
19826
|
-
0x0103 WB_RBLevels3300K int16u[
|
|
19827
|
-
0x0104 WB_RBLevels3600K int16u[
|
|
19828
|
-
0x0105 WB_RBLevels3900K int16u[
|
|
19829
|
-
0x0106 WB_RBLevels4000K int16u[
|
|
19830
|
-
0x0107 WB_RBLevels4300K int16u[
|
|
19831
|
-
0x0108 WB_RBLevels4500K int16u[
|
|
19832
|
-
0x0109 WB_RBLevels4800K int16u[
|
|
19833
|
-
0x010a WB_RBLevels5300K int16u[
|
|
19834
|
-
0x010b WB_RBLevels6000K int16u[
|
|
19835
|
-
0x010c WB_RBLevels6600K int16u[
|
|
19836
|
-
0x010d WB_RBLevels7500K int16u[
|
|
19837
|
-
0x010e WB_RBLevelsCWB1 int16u[
|
|
19838
|
-
0x010f WB_RBLevelsCWB2 int16u[
|
|
19839
|
-
0x0110 WB_RBLevelsCWB3 int16u[
|
|
19840
|
-
0x0111 WB_RBLevelsCWB4 int16u[
|
|
19907
|
+
0x0100 WB_RBLevels int16u[n]
|
|
19908
|
+
0x0102 WB_RBLevels3000K int16u[n]
|
|
19909
|
+
0x0103 WB_RBLevels3300K int16u[n]
|
|
19910
|
+
0x0104 WB_RBLevels3600K int16u[n]
|
|
19911
|
+
0x0105 WB_RBLevels3900K int16u[n]
|
|
19912
|
+
0x0106 WB_RBLevels4000K int16u[n]
|
|
19913
|
+
0x0107 WB_RBLevels4300K int16u[n]
|
|
19914
|
+
0x0108 WB_RBLevels4500K int16u[n]
|
|
19915
|
+
0x0109 WB_RBLevels4800K int16u[n]
|
|
19916
|
+
0x010a WB_RBLevels5300K int16u[n]
|
|
19917
|
+
0x010b WB_RBLevels6000K int16u[n]
|
|
19918
|
+
0x010c WB_RBLevels6600K int16u[n]
|
|
19919
|
+
0x010d WB_RBLevels7500K int16u[n]
|
|
19920
|
+
0x010e WB_RBLevelsCWB1 int16u[n]
|
|
19921
|
+
0x010f WB_RBLevelsCWB2 int16u[n]
|
|
19922
|
+
0x0110 WB_RBLevelsCWB3 int16u[n]
|
|
19923
|
+
0x0111 WB_RBLevelsCWB4 int16u[n]
|
|
19841
19924
|
0x0113 WB_GLevel3000K int16u
|
|
19842
19925
|
0x0114 WB_GLevel3300K int16u
|
|
19843
19926
|
0x0115 WB_GLevel3600K int16u
|
|
@@ -20210,6 +20293,7 @@ These tags are found in IFD0 of Panasonic/Leica RAW, RW2 and RWL images.
|
|
|
20210
20293
|
0x0030 CropLeft int16u
|
|
20211
20294
|
0x0031 CropBottom int16u
|
|
20212
20295
|
0x0032 CropRight int16u
|
|
20296
|
+
0x0037 ISO int32u
|
|
20213
20297
|
0x010f Make string
|
|
20214
20298
|
0x0110 Model string
|
|
20215
20299
|
0x0111 StripOffsets no
|
|
@@ -22872,7 +22956,7 @@ E-mount models.
|
|
|
22872
22956
|
|
|
22873
22957
|
=head3 Sony Tag9416 Tags
|
|
22874
22958
|
|
|
22875
|
-
Valid for the ILCE-1/6700/7CM2/7CR/7M4/7RM5/7SM3/9M3, ILME-FX3/FX30, ZV-E1.
|
|
22959
|
+
Valid for the ILCE-1/6700/7CM2/7CR/7M4/7RM5/7SM3/9M3, ILME-FX3/FX30, ZV-E1/E10M2.
|
|
22876
22960
|
|
|
22877
22961
|
Index1 Tag Name Writable
|
|
22878
22962
|
------ -------- --------
|
|
@@ -23170,7 +23254,8 @@ The following tags are decoded in unsupported maker notes. Use the Unknown
|
|
|
23170
23254
|
|
|
23171
23255
|
The main DNG tags are found in the EXIF table. The tables below define only
|
|
23172
23256
|
information found within structures of these main DNG tag values. See
|
|
23173
|
-
L<
|
|
23257
|
+
L<https://helpx.adobe.com/camera-raw/digital-negative.html> for the official
|
|
23258
|
+
DNG specification.
|
|
23174
23259
|
|
|
23175
23260
|
=head3 DNG AdobeData Tags
|
|
23176
23261
|
|
|
@@ -23591,7 +23676,7 @@ These tags are used in Minolta RAW format (MRW) images.
|
|
|
23591
23676
|
4 WBMode int8u~
|
|
23592
23677
|
5 ProgramMode int8u
|
|
23593
23678
|
6 ISOSetting int8u
|
|
23594
|
-
7 ColorMode
|
|
23679
|
+
7 ColorMode int8u
|
|
23595
23680
|
8 WB_RBLevelsTungsten int16u[2]
|
|
23596
23681
|
12 WB_RBLevelsDaylight int16u[2]
|
|
23597
23682
|
16 WB_RBLevelsCloudy int16u[2]
|
|
@@ -25732,7 +25817,7 @@ the image undisplayable.
|
|
|
25732
25817
|
2 ColorSpecApproximation int8s!
|
|
25733
25818
|
3 ICC_Profile ICC_Profile
|
|
25734
25819
|
ColorSpace int32u!
|
|
25735
|
-
ColorSpecData undef!
|
|
25820
|
+
ColorSpecData undef[$size-3]!
|
|
25736
25821
|
|
|
25737
25822
|
=head3 Jpeg2000 FileType Tags
|
|
25738
25823
|
|
|
@@ -29414,11 +29499,11 @@ parameters, as well as proprietary information written by many camera
|
|
|
29414
29499
|
models. Tags with a question mark after their name are not extracted unless
|
|
29415
29500
|
the Unknown option is set.
|
|
29416
29501
|
|
|
29417
|
-
When writing, ExifTool creates both QuickTime and XMP tags by
|
|
29418
|
-
the group may be specified to write one or the other
|
|
29419
|
-
location is specified, newly created QuickTime tags are
|
|
29420
|
-
L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags>
|
|
29421
|
-
possible, otherwise in
|
|
29502
|
+
When writing video files, ExifTool creates both QuickTime and XMP tags by
|
|
29503
|
+
default, but the group may be specified to write one or the other
|
|
29504
|
+
separately. If no location is specified, newly created QuickTime tags are
|
|
29505
|
+
added in the L<ItemList|Image::ExifTool::TagNames/QuickTime ItemList Tags>
|
|
29506
|
+
location if possible, otherwise in
|
|
29422
29507
|
L<UserData|Image::ExifTool::TagNames/QuickTime UserData Tags>, and
|
|
29423
29508
|
finally in L<Keys|Image::ExifTool::TagNames/QuickTime Keys Tags>,
|
|
29424
29509
|
but this order may be changed by setting the PREFERRED level of the
|
|
@@ -29469,7 +29554,7 @@ the original size by padding with nulls if necessary.
|
|
|
29469
29554
|
|
|
29470
29555
|
See
|
|
29471
29556
|
L<https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/>
|
|
29472
|
-
for the official specification.
|
|
29557
|
+
for the official QuickTime specification.
|
|
29473
29558
|
|
|
29474
29559
|
Tag ID Tag Name Writable
|
|
29475
29560
|
------ -------- --------
|
|
@@ -29541,6 +29626,7 @@ currently reads 74 different formats of timed GPS metadata from video files.
|
|
|
29541
29626
|
CameraModel no
|
|
29542
29627
|
Car no
|
|
29543
29628
|
DateTimeOriginal no
|
|
29629
|
+
DateTimeStamp no
|
|
29544
29630
|
Distance no
|
|
29545
29631
|
ExposureCompensation no
|
|
29546
29632
|
ExposureTime no
|
|
@@ -30738,6 +30824,7 @@ the config file.
|
|
|
30738
30824
|
'RDTC' RicohRDTC Ricoh RDTC
|
|
30739
30825
|
'RDTG' RicohRDTG Ricoh RDTG
|
|
30740
30826
|
'RDTL' RicohRDTL Ricoh RDTL
|
|
30827
|
+
'RICO' RicohInfo JPEG
|
|
30741
30828
|
'RMKN' RicohRMKN EXIF
|
|
30742
30829
|
'RTHU' PreviewImage no
|
|
30743
30830
|
'SDLN' PlayMode string
|
|
@@ -32650,7 +32737,8 @@ Other tags are extracted with the Unknown option.
|
|
|
32650
32737
|
|
|
32651
32738
|
The following tags are extracted from Matroska multimedia container files.
|
|
32652
32739
|
This container format is used by file types such as MKA, MKV, MKS and WEBM.
|
|
32653
|
-
For speed, by default ExifTool extracts tags only up to the first Cluster
|
|
32740
|
+
For speed, by default ExifTool extracts tags only up to the first Cluster
|
|
32741
|
+
unless a Seek element specifies the position of a Tags element after this.
|
|
32654
32742
|
However, the Verbose (-v) and Unknown = 2 (-U) options force processing of
|
|
32655
32743
|
Cluster data, and the ExtractEmbedded (-ee) option skips over Clusters to
|
|
32656
32744
|
read subsequent tags. See
|
|
@@ -40063,6 +40151,7 @@ FileName.
|
|
|
40063
40151
|
GeolocationCountryCode ExifTool no
|
|
40064
40152
|
GeolocationDistance ExifTool no
|
|
40065
40153
|
GeolocationFeatureCode ExifTool no
|
|
40154
|
+
GeolocationFeatureType ExifTool no
|
|
40066
40155
|
GeolocationPopulation ExifTool no
|
|
40067
40156
|
GeolocationPosition ExifTool no
|
|
40068
40157
|
GeolocationRegion ExifTool no
|
|
@@ -40097,6 +40186,7 @@ FileName.
|
|
|
40097
40186
|
PreviewTIFF File no
|
|
40098
40187
|
PreviewWMF File no
|
|
40099
40188
|
ProcessingTime ExifTool no
|
|
40189
|
+
RAFCompression File no
|
|
40100
40190
|
RAFVersion File no
|
|
40101
40191
|
ResourceForkSize System no
|
|
40102
40192
|
SphericalVideoXML GSpherical yes!
|
|
@@ -215,7 +215,7 @@ sub FormatIPTC($$$$$;$)
|
|
|
215
215
|
sub IptcDate($)
|
|
216
216
|
{
|
|
217
217
|
my $val = shift;
|
|
218
|
-
unless ($val =~ s{
|
|
218
|
+
unless ($val =~ s{^.*?(\d{4})[-:/.]?(\d{2})[-:/.]?(\d{2}).*}{$1$2$3}s) {
|
|
219
219
|
warn "Invalid date format (use YYYY:mm:dd)\n";
|
|
220
220
|
undef $val;
|
|
221
221
|
}
|
|
@@ -507,10 +507,16 @@ sub WriteItemInfo($$$)
|
|
|
507
507
|
my ($warn, $extent, $buff, @edit);
|
|
508
508
|
$warn = 'Missing iloc box' unless $$boxPos{iloc};
|
|
509
509
|
$warn = "No Extents for $type item" unless $$item{Extents} and @{$$item{Extents}};
|
|
510
|
-
|
|
510
|
+
if ($$item{ContentEncoding}) {
|
|
511
|
+
if ($$item{ContentEncoding} ne 'deflate') {
|
|
512
|
+
$warn = "Can't currently decode $$item{ContentEncoding} encoded $type metadata";
|
|
513
|
+
} elsif (not eval { require Compress::Zlib }) {
|
|
514
|
+
$warn = "Install Compress::Zlib to decode deflated $type metadata";
|
|
515
|
+
}
|
|
516
|
+
}
|
|
511
517
|
$warn = "Can't currently decode protected $type metadata" if $$item{ProtectionIndex};
|
|
512
518
|
$warn = "Can't currently extract $type with construction method $$item{ConstructionMethod}" if $$item{ConstructionMethod};
|
|
513
|
-
$warn = "$type metadata is not this file" if $$item{DataReferenceIndex};
|
|
519
|
+
$warn = "$type metadata is not in this file" if $$item{DataReferenceIndex};
|
|
514
520
|
$warn and $et->Warn($warn), next;
|
|
515
521
|
my $base = $$item{BaseOffset} || 0;
|
|
516
522
|
my $val = '';
|
|
@@ -527,6 +533,25 @@ sub WriteItemInfo($$$)
|
|
|
527
533
|
}
|
|
528
534
|
next unless defined $buff;
|
|
529
535
|
$buff = $val . $buff if length $val;
|
|
536
|
+
my $comp = $et->Options('Compress');
|
|
537
|
+
if (defined $comp and ($comp xor $$item{ContentEncoding})) {
|
|
538
|
+
#TODO: add ability to edit infe entry in iinf to change encoding according to Compress option if set
|
|
539
|
+
$et->Warn("Can't currently change compression when rewriting $name in HEIC");
|
|
540
|
+
}
|
|
541
|
+
my $wasDeflated;
|
|
542
|
+
if ($$item{ContentEncoding}) {
|
|
543
|
+
my ($v2, $stat);
|
|
544
|
+
my $inflate = Compress::Zlib::inflateInit();
|
|
545
|
+
$inflate and ($v2, $stat) = $inflate->inflate($buff);
|
|
546
|
+
$et->VPrint(0, " (Inflating stored $name metadata)\n");
|
|
547
|
+
if ($inflate and $stat == Compress::Zlib::Z_STREAM_END()) {
|
|
548
|
+
$buff = $v2;
|
|
549
|
+
$wasDeflated = 1;
|
|
550
|
+
} else {
|
|
551
|
+
$et->WarnOnce("Error inflating $name metadata");
|
|
552
|
+
next;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
530
555
|
my ($hdr, $subTable, $proc);
|
|
531
556
|
if ($name eq 'EXIF') {
|
|
532
557
|
if (not length $buff) {
|
|
@@ -560,6 +585,17 @@ sub WriteItemInfo($$$)
|
|
|
560
585
|
($dirInfo{DirLen} or length $newVal))
|
|
561
586
|
{
|
|
562
587
|
$newVal = $hdr . $newVal if length $hdr and length $newVal;
|
|
588
|
+
if ($wasDeflated) {
|
|
589
|
+
my $deflate = Compress::Zlib::deflateInit();
|
|
590
|
+
if ($deflate) {
|
|
591
|
+
$et->VPrint(0, " (Re-deflating new $name metadata)\n");
|
|
592
|
+
$buff = $deflate->deflate($newVal);
|
|
593
|
+
if (defined $buff) {
|
|
594
|
+
$buff .= $deflate->flush();
|
|
595
|
+
$newVal = $buff;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
}
|
|
563
599
|
$edit[0][2] = \$newVal; # replace the old chunk with the new data
|
|
564
600
|
$edit[0][3] = $id; # mark this chunk with the item ID
|
|
565
601
|
push @mdatEdit, @edit;
|
|
@@ -640,21 +676,38 @@ sub WriteItemInfo($$$)
|
|
|
640
676
|
# add new infe to iinf
|
|
641
677
|
$add{iinf} = $add{iref} = $add{iloc} = '' unless defined $add{iinf};
|
|
642
678
|
my ($type, $mime);
|
|
679
|
+
my $enc = '';
|
|
643
680
|
if ($name eq 'XMP') {
|
|
644
681
|
$type = "mime\0";
|
|
645
682
|
$mime = "application/rdf+xml\0";
|
|
683
|
+
# write compressed XMP if Compress option is set
|
|
684
|
+
if ($et->Options('Compress') and length $newVal) {
|
|
685
|
+
if (not eval { require Compress::Zlib }) {
|
|
686
|
+
$et->WarnOnce('Install Compress::Zlib to write compressed metadata');
|
|
687
|
+
} else {
|
|
688
|
+
my $deflate = Compress::Zlib::deflateInit();
|
|
689
|
+
if ($deflate) {
|
|
690
|
+
$et->VPrint(0, " (Deflating new $name metadata)\n");
|
|
691
|
+
my $buff = $deflate->deflate($newVal);
|
|
692
|
+
if (defined $buff) {
|
|
693
|
+
$newVal = $buff . $deflate->flush();
|
|
694
|
+
$enc = "deflate\0";
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
}
|
|
646
699
|
} else {
|
|
647
700
|
$type = "Exif\0";
|
|
648
701
|
$mime = '';
|
|
649
702
|
}
|
|
650
703
|
my $id = 1;
|
|
651
704
|
++$id while $$items{$id} or $usedID{$id}; # find next unused item ID
|
|
652
|
-
my $n = length($type) + length($mime) + 16;
|
|
705
|
+
my $n = length($type) + length($mime) + length($enc) + 16;
|
|
653
706
|
if ($id < 0x10000) {
|
|
654
|
-
$add{iinf} .= pack('Na4CCCCnn', $n, 'infe', 2, 0, 0, 1, $id, 0) . $type . $mime;
|
|
707
|
+
$add{iinf} .= pack('Na4CCCCnn', $n, 'infe', 2, 0, 0, 1, $id, 0) . $type . $mime . $enc;
|
|
655
708
|
} else {
|
|
656
709
|
$n += 2;
|
|
657
|
-
$add{iinf} .= pack('Na4CCCCNn', $n, 'infe', 3, 0, 0, 1, $id, 0) . $type . $mime;
|
|
710
|
+
$add{iinf} .= pack('Na4CCCCNn', $n, 'infe', 3, 0, 0, 1, $id, 0) . $type . $mime . $enc;
|
|
658
711
|
}
|
|
659
712
|
# add new cdsc to iref
|
|
660
713
|
if ($irefVer) {
|
|
@@ -733,28 +786,36 @@ sub WriteItemInfo($$$)
|
|
|
733
786
|
$add{$tag} = Set32u(12 + length $add{$tag}) . $tag .
|
|
734
787
|
Set8u($$boxPos{$tag}[2]) . "\0\0\0" . $add{$tag};
|
|
735
788
|
} elsif ($tag ne 'hdlr') {
|
|
736
|
-
my $n = Get32u($outfile, $pos);
|
|
737
|
-
Set32u($n
|
|
789
|
+
my $n = Get32u($outfile, $pos) + length($add{$tag});
|
|
790
|
+
Set32u($n, $outfile, $pos); # increase box size
|
|
738
791
|
}
|
|
739
792
|
if ($tag eq 'iinf') {
|
|
740
793
|
my $iinfVer = Get8u($outfile, $pos + 8);
|
|
741
794
|
if ($iinfVer == 0) {
|
|
742
|
-
my $n = Get16u($outfile, $pos + 12);
|
|
743
|
-
|
|
795
|
+
my $n = Get16u($outfile, $pos + 12) + $countNew;
|
|
796
|
+
if ($n > 0xffff) {
|
|
797
|
+
$et->Error("Can't currently handle rollover to long item count");
|
|
798
|
+
return undef;
|
|
799
|
+
}
|
|
800
|
+
Set16u($n, $outfile, $pos + 12); # incr count
|
|
744
801
|
} else {
|
|
745
|
-
my $n = Get32u($outfile, $pos + 12);
|
|
746
|
-
Set32u($n
|
|
802
|
+
my $n = Get32u($outfile, $pos + 12) + $countNew;
|
|
803
|
+
Set32u($n, $outfile, $pos + 12); # incr count
|
|
747
804
|
}
|
|
748
805
|
} elsif ($tag eq 'iref') {
|
|
749
806
|
# nothing more to do
|
|
750
807
|
} elsif ($tag eq 'iloc') {
|
|
751
808
|
my $ilocVer = Get8u($outfile, $pos + 8);
|
|
752
809
|
if ($ilocVer < 2) {
|
|
753
|
-
my $n = Get16u($outfile, $pos + 14);
|
|
754
|
-
Set16u($n
|
|
810
|
+
my $n = Get16u($outfile, $pos + 14) + $countNew;
|
|
811
|
+
Set16u($n, $outfile, $pos + 14); # incr count
|
|
812
|
+
if ($n > 0xffff) {
|
|
813
|
+
$et->Error("Can't currently handle rollover to long item count");
|
|
814
|
+
return undef;
|
|
815
|
+
}
|
|
755
816
|
} else {
|
|
756
|
-
my $n = Get32u($outfile, $pos + 14);
|
|
757
|
-
Set32u($n
|
|
817
|
+
my $n = Get32u($outfile, $pos + 14) + $countNew;
|
|
818
|
+
Set32u($n, $outfile, $pos + 14); # incr count
|
|
758
819
|
}
|
|
759
820
|
# must also update pointer locations in this box
|
|
760
821
|
if ($added) {
|
|
@@ -876,7 +937,8 @@ sub WriteQuickTime($$$)
|
|
|
876
937
|
# --> hold this terminator to the end
|
|
877
938
|
$term = $hdr;
|
|
878
939
|
} elsif ($n != 0) {
|
|
879
|
-
|
|
940
|
+
# warn unless this is 1-3 pad bytes
|
|
941
|
+
$et->Error("Unknown $n bytes at end of file", 1) if $n > 3 or $hdr ne "\0" x $n;
|
|
880
942
|
}
|
|
881
943
|
last;
|
|
882
944
|
}
|
|
@@ -894,6 +956,8 @@ sub WriteQuickTime($$$)
|
|
|
894
956
|
} elsif (not $et->Options('LargeFileSupport')) {
|
|
895
957
|
$et->Error('End of processing at large atom (LargeFileSupport not enabled)');
|
|
896
958
|
last;
|
|
959
|
+
} elsif ($et->Options('LargeFileSupport') eq '2') {
|
|
960
|
+
$et->WarnOnce('Processing large atom (LargeFileSupport is 2)');
|
|
897
961
|
}
|
|
898
962
|
}
|
|
899
963
|
$size = $hi * 4294967296 + $lo - 16;
|
|
@@ -1446,7 +1510,13 @@ sub WriteQuickTime($$$)
|
|
|
1446
1510
|
$writeLast = ($writeLast || '') . $hdr . $buff;
|
|
1447
1511
|
} else {
|
|
1448
1512
|
# save position of this box in the output buffer
|
|
1513
|
+
#TODO do this:
|
|
1514
|
+
#TODO my $bp = $boxPos{$tag} || ($boxPos{$tag} = [ ]);
|
|
1515
|
+
#TODO push @$bp, length($$outfile), length($hdr) + length($buff);
|
|
1516
|
+
#TODO instead of this:
|
|
1449
1517
|
$boxPos{$tag} = [ length($$outfile), length($hdr) + length($buff) ];
|
|
1518
|
+
#TODO then we have the positions of all the infe boxes -- we then only need
|
|
1519
|
+
#TODO to know the index of the box to edit if the encoding changes for one of them
|
|
1450
1520
|
# copy the existing atom
|
|
1451
1521
|
Write($outfile, $hdr, $buff) or $rtnVal=$rtnErr, $err=1, last;
|
|
1452
1522
|
}
|
|
@@ -29,7 +29,6 @@ sub ConvInv($$$$$;$$);
|
|
|
29
29
|
sub PushValue($$$;$);
|
|
30
30
|
|
|
31
31
|
my $loadedAllTables; # flag indicating we loaded all tables
|
|
32
|
-
my $advFmtSelf; # ExifTool object during evaluation of advanced formatting expr
|
|
33
32
|
|
|
34
33
|
# the following is a road map of where we write each directory
|
|
35
34
|
# in the different types of files.
|
|
@@ -3380,7 +3379,7 @@ sub InsertTagValues($$;$$$$)
|
|
|
3380
3379
|
if (defined $expr and defined $val) {
|
|
3381
3380
|
local $SIG{'__WARN__'} = \&SetWarning;
|
|
3382
3381
|
undef $evalWarning;
|
|
3383
|
-
$advFmtSelf = $self;
|
|
3382
|
+
$advFmtSelf = $self; # set variable for access to $self in helper functions
|
|
3384
3383
|
if ($asList) {
|
|
3385
3384
|
foreach (@val) {
|
|
3386
3385
|
#### eval advanced formatting expression ($_, $self, @val, $tag, $advFmtSelf)
|
|
@@ -3845,7 +3844,6 @@ sub GetGeolocateTags($$;$)
|
|
|
3845
3844
|
'iptc' => [ qw(City Province-State Country-PrimaryLocationCode Country-PrimaryLocationName) ],
|
|
3846
3845
|
'gps' => [ qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef) ],
|
|
3847
3846
|
'xmp-exif' => [ qw(GPSLatitude GPSLongitude) ],
|
|
3848
|
-
'keys' => [ 'GPSCoordinates', 'LocationName' ],
|
|
3849
3847
|
'itemlist' => [ 'GPSCoordinates' ],
|
|
3850
3848
|
'userdata' => [ 'GPSCoordinates' ],
|
|
3851
3849
|
# more general groups not in this lookup: XMP and QuickTime
|
|
@@ -3856,12 +3854,16 @@ sub GetGeolocateTags($$;$)
|
|
|
3856
3854
|
$tagGroups{$grp} and push @tags, map("$grp:$_", @{$tagGroups{$grp}});
|
|
3857
3855
|
}
|
|
3858
3856
|
# set default XMP City tags if necessary
|
|
3859
|
-
if (not $writeGPS
|
|
3860
|
-
push @tags,
|
|
3857
|
+
if (not $writeGPS) {
|
|
3858
|
+
push @tags, 'Keys:LocationName' if $grps{'keys'};
|
|
3859
|
+
if ($grps{xmp} or (not @tags and not $grps{quicktime})) {
|
|
3860
|
+
push @tags, qw(XMP:City XMP:State XMP:CountryCode XMP:Country Keys:LocationName);
|
|
3861
|
+
}
|
|
3861
3862
|
}
|
|
3862
3863
|
$writeGPS = 1 unless defined $writeGPS; # (delete both City and GPS)
|
|
3864
|
+
push @tags, 'Keys:GPSCoordinates' if $writeGPS and $grps{'keys'};
|
|
3863
3865
|
# set default QuickTime tag if necessary
|
|
3864
|
-
my $didQT = grep /
|
|
3866
|
+
my $didQT = grep /GPSCoordinates$/, @tags;
|
|
3865
3867
|
if (($grps{quicktime} and not $didQT) or ($writeGPS and not @tags and not $grps{xmp})) {
|
|
3866
3868
|
push @tags, 'QuickTime:GPSCoordinates';
|
|
3867
3869
|
}
|
|
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
|
|
|
50
50
|
use Image::ExifTool::GPS;
|
|
51
51
|
require Exporter;
|
|
52
52
|
|
|
53
|
-
$VERSION = '3.
|
|
53
|
+
$VERSION = '3.66';
|
|
54
54
|
@ISA = qw(Exporter);
|
|
55
55
|
@EXPORT_OK = qw(EscapeXML UnescapeXML);
|
|
56
56
|
|
|
@@ -203,8 +203,9 @@ my %xmpNS = (
|
|
|
203
203
|
hdr_metadata => 'http://ns.adobe.com/hdr-metadata/1.0/',
|
|
204
204
|
hdrgm => 'http://ns.adobe.com/hdr-gain-map/1.0/',
|
|
205
205
|
xmpDSA => 'http://leica-camera.com/digital-shift-assistant/1.0/',
|
|
206
|
-
|
|
207
|
-
|
|
206
|
+
# Note: Google uses a prefix of 'Container', but this conflicts with the
|
|
207
|
+
# Device Container namespace, also by Google. So call this one GContainer
|
|
208
|
+
GContainer=> 'http://ns.google.com/photos/1.0/container/',
|
|
208
209
|
);
|
|
209
210
|
|
|
210
211
|
# build reverse namespace lookup
|
|
@@ -932,11 +933,10 @@ my %sRangeMask = (
|
|
|
932
933
|
Name => 'xmpDSA',
|
|
933
934
|
SubDirectory => { TagTable => 'Image::ExifTool::Panasonic::DSA' },
|
|
934
935
|
},
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
# },
|
|
936
|
+
GContainer => {
|
|
937
|
+
Name => 'GContainer',
|
|
938
|
+
SubDirectory => { TagTable => 'Image::ExifTool::XMP::GContainer' },
|
|
939
|
+
},
|
|
940
940
|
);
|
|
941
941
|
|
|
942
942
|
# hack to allow XML containing Dublin Core metadata to be handled like XMP (eg. EPUB - see ZIP.pm)
|
|
@@ -3794,6 +3794,8 @@ sub ParseXMPElement($$$;$$$$)
|
|
|
3794
3794
|
if ($stdNS) {
|
|
3795
3795
|
$val = $try;
|
|
3796
3796
|
$et->WarnOnce("Fixed incorrect URI for xmlns:$ns", 1);
|
|
3797
|
+
} elsif ($val =~ m(^http://ns.nikon.com/BASIC_PARAM)) {
|
|
3798
|
+
$et->OverrideFileType('NXD','application/x-nikon-nxd');
|
|
3797
3799
|
} else {
|
|
3798
3800
|
# look for same namespace with different version number
|
|
3799
3801
|
$try = quotemeta $val; # (note: escapes slashes too)
|