exiftool_vendored 10.58.0 → 10.65.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of exiftool_vendored might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/bin/Changes +100 -1
- data/bin/MANIFEST +2 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +39 -38
- data/bin/arg_files/exif2iptc.args +3 -0
- data/bin/arg_files/iptc2exif.args +3 -0
- data/bin/config_files/example.config +16 -14
- data/bin/config_files/photoshop_paths.config +10 -0
- data/bin/exiftool +71 -65
- data/bin/lib/Image/ExifTool/APE.pm +5 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +31 -15
- data/bin/lib/Image/ExifTool/Canon.pm +18 -4
- data/bin/lib/Image/ExifTool/CanonCustom.pm +3 -0
- data/bin/lib/Image/ExifTool/Charset/DOSLatin1.pm +49 -0
- data/bin/lib/Image/ExifTool/Charset/DOSLatinUS.pm +49 -0
- data/bin/lib/Image/ExifTool/Charset.pm +8 -5
- data/bin/lib/Image/ExifTool/Exif.pm +37 -18
- data/bin/lib/Image/ExifTool/FLAC.pm +47 -37
- data/bin/lib/Image/ExifTool/FLIR.pm +3 -3
- data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -2
- data/bin/lib/Image/ExifTool/GPS.pm +6 -6
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/H264.pm +2 -0
- data/bin/lib/Image/ExifTool/ID3.pm +8 -3
- data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +4 -1
- data/bin/lib/Image/ExifTool/InDesign.pm +11 -7
- data/bin/lib/Image/ExifTool/Kodak.pm +4 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +31 -31
- data/bin/lib/Image/ExifTool/MWG.pm +12 -4
- data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
- data/bin/lib/Image/ExifTool/Matroska.pm +2 -1
- data/bin/lib/Image/ExifTool/Microsoft.pm +3 -3
- data/bin/lib/Image/ExifTool/Minolta.pm +71 -61
- data/bin/lib/Image/ExifTool/Nikon.pm +286 -43
- data/bin/lib/Image/ExifTool/NikonCustom.pm +1049 -0
- data/bin/lib/Image/ExifTool/Olympus.pm +4 -1
- data/bin/lib/Image/ExifTool/PNG.pm +4 -7
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +24 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +20 -6
- data/bin/lib/Image/ExifTool/Photoshop.pm +24 -3
- data/bin/lib/Image/ExifTool/QuickTime.pm +545 -14
- data/bin/lib/Image/ExifTool/README +16 -9
- data/bin/lib/Image/ExifTool/RIFF.pm +8 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +5 -4
- data/bin/lib/Image/ExifTool/Sigma.pm +9 -1
- data/bin/lib/Image/ExifTool/Sony.pm +327 -153
- data/bin/lib/Image/ExifTool/TagLookup.pm +3273 -3220
- data/bin/lib/Image/ExifTool/TagNames.pod +317 -38
- data/bin/lib/Image/ExifTool/Validate.pm +15 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +5 -0
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +23 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +8 -2
- data/bin/lib/Image/ExifTool/WriteXMP.pl +7 -0
- data/bin/lib/Image/ExifTool/Writer.pl +96 -18
- data/bin/lib/Image/ExifTool/XMP.pm +20 -11
- data/bin/lib/Image/ExifTool/XMP2.pl +634 -583
- data/bin/lib/Image/ExifTool.pm +124 -17
- data/bin/lib/Image/ExifTool.pod +86 -82
- data/bin/perl-Image-ExifTool.spec +38 -37
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +4 -2
@@ -23,360 +23,6 @@ use strict;
|
|
23
23
|
use Image::ExifTool qw(:Utils);
|
24
24
|
use Image::ExifTool::XMP;
|
25
25
|
|
26
|
-
#------------------------------------------------------------------------------
|
27
|
-
# IPTC Extensions version 1.3 (+ proposed video extensions)
|
28
|
-
|
29
|
-
# IPTC Extension 1.0 structures
|
30
|
-
my %sLocationDetails = (
|
31
|
-
STRUCT_NAME => 'LocationDetails',
|
32
|
-
NAMESPACE => 'Iptc4xmpExt',
|
33
|
-
GROUPS => { 2 => 'Location' },
|
34
|
-
Identifier => { List => 'Bag', Namespace => 'xmp' },
|
35
|
-
City => { },
|
36
|
-
CountryCode => { },
|
37
|
-
CountryName => { },
|
38
|
-
ProvinceState => { },
|
39
|
-
Sublocation => { },
|
40
|
-
WorldRegion => { },
|
41
|
-
LocationId => { List => 'Bag' },
|
42
|
-
LocationName => { Writable => 'lang-alt' },
|
43
|
-
GPSLatitude => { Namespace => 'exif', %latConv },
|
44
|
-
GPSLongitude => { Namespace => 'exif', %longConv },
|
45
|
-
GPSAltitude => {
|
46
|
-
Namespace => 'exif',
|
47
|
-
Writable => 'rational',
|
48
|
-
PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"',
|
49
|
-
PrintConvInv => '$val=~s/\s*m$//;$val',
|
50
|
-
},
|
51
|
-
);
|
52
|
-
my %sCVTermDetails = (
|
53
|
-
STRUCT_NAME => 'CVTermDetails',
|
54
|
-
NAMESPACE => 'Iptc4xmpExt',
|
55
|
-
CvTermId => { },
|
56
|
-
CvTermName => { Writable => 'lang-alt' },
|
57
|
-
CvId => { },
|
58
|
-
CvTermRefinedAbout => { },
|
59
|
-
);
|
60
|
-
|
61
|
-
# IPTC video extensions
|
62
|
-
my %sPublicationEvent = (
|
63
|
-
STRUCT_NAME => 'PublicationEvent',
|
64
|
-
NAMESPACE => 'Iptc4xmpExt',
|
65
|
-
Date => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
66
|
-
Name => { },
|
67
|
-
Identifier => { },
|
68
|
-
);
|
69
|
-
my %sEntity = (
|
70
|
-
STRUCT_NAME => 'Entity',
|
71
|
-
NAMESPACE => 'Iptc4xmpExt',
|
72
|
-
Identifier => { List => 'Bag', Namespace => 'xmp' },
|
73
|
-
Name => { Writable => 'lang-alt' },
|
74
|
-
);
|
75
|
-
my %sEntityWithRole = (
|
76
|
-
STRUCT_NAME => 'EntityWithRole',
|
77
|
-
NAMESPACE => 'Iptc4xmpExt',
|
78
|
-
Identifier => { List => 'Bag', Namespace => 'xmp' },
|
79
|
-
Name => { Writable => 'lang-alt' },
|
80
|
-
Role => { List => 'Bag' },
|
81
|
-
);
|
82
|
-
my %sFrameSize = (
|
83
|
-
STRUCT_NAME => 'FrameSize',
|
84
|
-
NAMESPACE => 'Iptc4xmpExt',
|
85
|
-
WidthPixels => { Writable => 'integer' },
|
86
|
-
HeightPixels => { Writable => 'integer' },
|
87
|
-
);
|
88
|
-
my %sRating = (
|
89
|
-
STRUCT_NAME => 'Rating',
|
90
|
-
NAMESPACE => 'Iptc4xmpExt',
|
91
|
-
RatingValue => { FlatName => 'Value' },
|
92
|
-
RatingSourceLink => { FlatName => 'SourceLink' },
|
93
|
-
RatingScaleMinValue => { FlatName => 'ScaleMinValue' },
|
94
|
-
RatingScaleMaxValue => { FlatName => 'ScaleMaxValue' },
|
95
|
-
RatingValueLogoLink => { FlatName => 'ValueLogoLink' },
|
96
|
-
RatingRegion => {
|
97
|
-
FlatName => 'RatingRegion',
|
98
|
-
Struct => \%sLocationDetails,
|
99
|
-
List => 'Bag',
|
100
|
-
},
|
101
|
-
);
|
102
|
-
my %sEpisode = (
|
103
|
-
STRUCT_NAME => 'EpisodeOrSeason',
|
104
|
-
NAMESPACE => 'Iptc4xmpExt',
|
105
|
-
Name => { },
|
106
|
-
Number => { },
|
107
|
-
Identifier => { },
|
108
|
-
);
|
109
|
-
my %sSeries = (
|
110
|
-
STRUCT_NAME => 'Series',
|
111
|
-
NAMESPACE => 'Iptc4xmpExt',
|
112
|
-
Name => { },
|
113
|
-
Identifier => { },
|
114
|
-
);
|
115
|
-
my %sTemporalCoverage = (
|
116
|
-
STRUCT_NAME => 'TemporalCoverage',
|
117
|
-
NAMESPACE => 'Iptc4xmpExt',
|
118
|
-
tempCoverageFrom => { FlatName => 'From', %dateTimeInfo, Groups => { 2 => 'Time' } },
|
119
|
-
tempCoverageTo => { FlatName => 'To', %dateTimeInfo, Groups => { 2 => 'Time' } },
|
120
|
-
);
|
121
|
-
my %sQualifiedLink = (
|
122
|
-
STRUCT_NAME => 'QualifiedLink',
|
123
|
-
NAMESPACE => 'Iptc4xmpExt',
|
124
|
-
Link => { },
|
125
|
-
LinkQualifier => { },
|
126
|
-
);
|
127
|
-
my %sTextRegion = (
|
128
|
-
STRUCT_NAME => 'TextRegion',
|
129
|
-
NAMESPACE => 'Iptc4xmpExt',
|
130
|
-
RegionText => { },
|
131
|
-
Region => { Struct => \%Image::ExifTool::XMP::sArea },
|
132
|
-
);
|
133
|
-
|
134
|
-
# IPTC Extension namespace properties (Iptc4xmpExt) (ref 4)
|
135
|
-
%Image::ExifTool::XMP::iptcExt = (
|
136
|
-
%xmpTableDefaults,
|
137
|
-
GROUPS => { 1 => 'XMP-iptcExt', 2 => 'Author' },
|
138
|
-
NAMESPACE => 'Iptc4xmpExt',
|
139
|
-
TABLE_DESC => 'XMP IPTC Extension',
|
140
|
-
NOTES => q{
|
141
|
-
IPTC Extension namespace tags. The actual namespace prefix is
|
142
|
-
"Iptc4xmpExt", but ExifTool shortens this for the family 1 group name. (see
|
143
|
-
L<http://www.iptc.org/IPTC4XMP/>)
|
144
|
-
},
|
145
|
-
AboutCvTerm => {
|
146
|
-
Struct => \%sCVTermDetails,
|
147
|
-
List => 'Bag',
|
148
|
-
},
|
149
|
-
AboutCvTermCvId => { Flat => 1, Name => 'AboutCvTermCvId' },
|
150
|
-
AboutCvTermCvTermId => { Flat => 1, Name => 'AboutCvTermId' },
|
151
|
-
AboutCvTermCvTermName => { Flat => 1, Name => 'AboutCvTermName' },
|
152
|
-
AboutCvTermCvTermRefinedAbout => { Flat => 1, Name => 'AboutCvTermRefinedAbout' },
|
153
|
-
AddlModelInfo => { Name => 'AdditionalModelInformation' },
|
154
|
-
ArtworkOrObject => {
|
155
|
-
Struct => {
|
156
|
-
STRUCT_NAME => 'ArtworkOrObjectDetails',
|
157
|
-
NAMESPACE => 'Iptc4xmpExt',
|
158
|
-
AOCopyrightNotice => { },
|
159
|
-
AOCreator => { List => 'Seq' },
|
160
|
-
AODateCreated=> { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
161
|
-
AOSource => { },
|
162
|
-
AOSourceInvNo=> { },
|
163
|
-
AOTitle => { Writable => 'lang-alt' },
|
164
|
-
AOCurrentCopyrightOwnerName => { },
|
165
|
-
AOCurrentCopyrightOwnerId => { },
|
166
|
-
AOCurrentLicensorName => { },
|
167
|
-
AOCurrentLicensorId => { },
|
168
|
-
AOCreatorId => { List => 'Seq' },
|
169
|
-
AOCircaDateCreated => { Groups => { 2 => 'Time' } },
|
170
|
-
AOStylePeriod => { List => 'Bag' },
|
171
|
-
AOSourceInvURL => { },
|
172
|
-
AOContentDescription => { Writable => 'lang-alt' },
|
173
|
-
AOContributionDescription => { Writable => 'lang-alt' },
|
174
|
-
AOPhysicalDescription => { Writable => 'lang-alt' },
|
175
|
-
},
|
176
|
-
List => 'Bag',
|
177
|
-
},
|
178
|
-
ArtworkOrObjectAOCopyrightNotice => { Flat => 1, Name => 'ArtworkCopyrightNotice' },
|
179
|
-
ArtworkOrObjectAOCreator => { Flat => 1, Name => 'ArtworkCreator' },
|
180
|
-
ArtworkOrObjectAODateCreated => { Flat => 1, Name => 'ArtworkDateCreated' },
|
181
|
-
ArtworkOrObjectAOSource => { Flat => 1, Name => 'ArtworkSource' },
|
182
|
-
ArtworkOrObjectAOSourceInvNo => { Flat => 1, Name => 'ArtworkSourceInventoryNo' },
|
183
|
-
ArtworkOrObjectAOTitle => { Flat => 1, Name => 'ArtworkTitle' },
|
184
|
-
ArtworkOrObjectAOCurrentCopyrightOwnerName => { Flat => 1, Name => 'ArtworkCopyrightOwnerName' },
|
185
|
-
ArtworkOrObjectAOCurrentCopyrightOwnerId => { Flat => 1, Name => 'ArtworkCopyrightOwnerID' },
|
186
|
-
ArtworkOrObjectAOCurrentLicensorName => { Flat => 1, Name => 'ArtworkLicensorName' },
|
187
|
-
ArtworkOrObjectAOCurrentLicensorId => { Flat => 1, Name => 'ArtworkLicensorID' },
|
188
|
-
ArtworkOrObjectAOCreatorId => { Flat => 1, Name => 'ArtworkCreatorID' },
|
189
|
-
ArtworkOrObjectAOCircaDateCreated => { Flat => 1, Name => 'ArtworkCircaDateCreated' },
|
190
|
-
ArtworkOrObjectAOStylePeriod => { Flat => 1, Name => 'ArtworkStylePeriod' },
|
191
|
-
ArtworkOrObjectAOSourceInvURL => { Flat => 1, Name => 'ArtworkSourceInvURL' },
|
192
|
-
ArtworkOrObjectAOContentDescription => { Flat => 1, Name => 'ArtworkContentDescription' },
|
193
|
-
ArtworkOrObjectAOContributionDescription => { Flat => 1, Name => 'ArtworkContributionDescription' },
|
194
|
-
ArtworkOrObjectAOPhysicalDescription => { Flat => 1, Name => 'ArtworkPhysicalDescription' },
|
195
|
-
CVterm => {
|
196
|
-
Name => 'ControlledVocabularyTerm',
|
197
|
-
List => 'Bag',
|
198
|
-
Notes => 'deprecated by version 1.2',
|
199
|
-
},
|
200
|
-
DigImageGUID => { Name => 'DigitalImageGUID' },
|
201
|
-
DigitalSourcefileType => {
|
202
|
-
Name => 'DigitalSourceFileType',
|
203
|
-
Notes => 'now deprecated -- replaced by DigitalSourceType',
|
204
|
-
},
|
205
|
-
DigitalSourceType => { Name => 'DigitalSourceType' },
|
206
|
-
EmbdEncRightsExpr => {
|
207
|
-
Struct => {
|
208
|
-
STRUCT_NAME => 'EEREDetails',
|
209
|
-
NAMESPACE => 'Iptc4xmpExt',
|
210
|
-
EncRightsExpr => { },
|
211
|
-
RightsExprEncType => { },
|
212
|
-
RightsExprLangId => { },
|
213
|
-
},
|
214
|
-
List => 'Bag',
|
215
|
-
},
|
216
|
-
EmbdEncRightsExprEncRightsExpr => { Flat => 1, Name => 'EmbeddedEncodedRightsExpr' },
|
217
|
-
EmbdEncRightsExprRightsExprEncType => { Flat => 1, Name => 'EmbeddedEncodedRightsExprType' },
|
218
|
-
EmbdEncRightsExprRightsExprLangId => { Flat => 1, Name => 'EmbeddedEncodedRightsExprLangID' },
|
219
|
-
Event => { Writable => 'lang-alt' },
|
220
|
-
IptcLastEdited => {
|
221
|
-
Name => 'IPTCLastEdited',
|
222
|
-
Groups => { 2 => 'Time' },
|
223
|
-
%dateTimeInfo,
|
224
|
-
},
|
225
|
-
LinkedEncRightsExpr => {
|
226
|
-
Struct => {
|
227
|
-
STRUCT_NAME => 'LEREDetails',
|
228
|
-
NAMESPACE => 'Iptc4xmpExt',
|
229
|
-
LinkedRightsExpr => { },
|
230
|
-
RightsExprEncType => { },
|
231
|
-
RightsExprLangId => { },
|
232
|
-
},
|
233
|
-
List => 'Bag',
|
234
|
-
},
|
235
|
-
LinkedEncRightsExprLinkedRightsExpr => { Flat => 1, Name => 'LinkedEncodedRightsExpr' },
|
236
|
-
LinkedEncRightsExprRightsExprEncType => { Flat => 1, Name => 'LinkedEncodedRightsExprType' },
|
237
|
-
LinkedEncRightsExprRightsExprLangId => { Flat => 1, Name => 'LinkedEncodedRightsExprLangID' },
|
238
|
-
LocationCreated => {
|
239
|
-
Struct => \%sLocationDetails,
|
240
|
-
Groups => { 2 => 'Location' },
|
241
|
-
List => 'Bag',
|
242
|
-
},
|
243
|
-
LocationShown => {
|
244
|
-
Struct => \%sLocationDetails,
|
245
|
-
Groups => { 2 => 'Location' },
|
246
|
-
List => 'Bag',
|
247
|
-
},
|
248
|
-
MaxAvailHeight => { Writable => 'integer' },
|
249
|
-
MaxAvailWidth => { Writable => 'integer' },
|
250
|
-
ModelAge => { List => 'Bag', Writable => 'integer' },
|
251
|
-
OrganisationInImageCode => { List => 'Bag' },
|
252
|
-
OrganisationInImageName => { List => 'Bag' },
|
253
|
-
PersonInImage => { List => 'Bag' },
|
254
|
-
PersonInImageWDetails => {
|
255
|
-
Struct => {
|
256
|
-
STRUCT_NAME => 'PersonDetails',
|
257
|
-
NAMESPACE => 'Iptc4xmpExt',
|
258
|
-
PersonId => { List => 'Bag' },
|
259
|
-
PersonName => { Writable => 'lang-alt' },
|
260
|
-
PersonCharacteristic => {
|
261
|
-
Struct => \%sCVTermDetails,
|
262
|
-
List => 'Bag',
|
263
|
-
},
|
264
|
-
PersonDescription => { Writable => 'lang-alt' },
|
265
|
-
},
|
266
|
-
List => 'Bag',
|
267
|
-
},
|
268
|
-
PersonInImageWDetailsPersonId => { Flat => 1, Name => 'PersonInImageId' },
|
269
|
-
PersonInImageWDetailsPersonName => { Flat => 1, Name => 'PersonInImageName' },
|
270
|
-
PersonInImageWDetailsPersonCharacteristic => { Flat => 1, Name => 'PersonInImageCharacteristic' },
|
271
|
-
PersonInImageWDetailsPersonCharacteristicCvId => { Flat => 1, Name => 'PersonInImageCvTermCvId' },
|
272
|
-
PersonInImageWDetailsPersonCharacteristicCvTermId => { Flat => 1, Name => 'PersonInImageCvTermId' },
|
273
|
-
PersonInImageWDetailsPersonCharacteristicCvTermName => { Flat => 1, Name => 'PersonInImageCvTermName' },
|
274
|
-
PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout => { Flat => 1, Name => 'PersonInImageCvTermRefinedAbout' },
|
275
|
-
PersonInImageWDetailsPersonDescription => { Flat => 1, Name => 'PersonInImageDescription' },
|
276
|
-
ProductInImage => {
|
277
|
-
Struct => {
|
278
|
-
STRUCT_NAME => 'ProductDetails',
|
279
|
-
NAMESPACE => 'Iptc4xmpExt',
|
280
|
-
ProductName => { Writable => 'lang-alt' },
|
281
|
-
ProductGTIN => { },
|
282
|
-
ProductDescription => { Writable => 'lang-alt' },
|
283
|
-
},
|
284
|
-
List => 'Bag',
|
285
|
-
},
|
286
|
-
ProductInImageProductName => { Flat => 1, Name => 'ProductInImageName' },
|
287
|
-
ProductInImageProductGTIN => { Flat => 1, Name => 'ProductInImageGTIN' },
|
288
|
-
ProductInImageProductDescription => { Flat => 1, Name => 'ProductInImageDescription' },
|
289
|
-
RegistryId => {
|
290
|
-
Name => 'RegistryID',
|
291
|
-
Struct => {
|
292
|
-
STRUCT_NAME => 'RegistryEntryDetails',
|
293
|
-
NAMESPACE => 'Iptc4xmpExt',
|
294
|
-
RegItemId => { },
|
295
|
-
RegOrgId => { },
|
296
|
-
RegEntryRole=> { }, # (new in 1.3)
|
297
|
-
},
|
298
|
-
List => 'Bag',
|
299
|
-
},
|
300
|
-
RegistryIdRegItemId => { Flat => 1, Name => 'RegistryItemID' },
|
301
|
-
RegistryIdRegOrgId => { Flat => 1, Name => 'RegistryOrganisationID' },
|
302
|
-
RegistryIdRegEntryRole => { Flat => 1, Name => 'RegistryEntryRole' },
|
303
|
-
|
304
|
-
# new Extension 1.3 properties
|
305
|
-
Genre => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sCVTermDetails },
|
306
|
-
|
307
|
-
# new video properties (Oct 2016, ref Michael Steidl)
|
308
|
-
# (see http://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.0.html)
|
309
|
-
CircaDateCreated=> { Groups => { 2 => 'Time' } },
|
310
|
-
Episode => { Groups => { 2 => 'Video' }, Struct => \%sEpisode },
|
311
|
-
ExternalMetadataLink => { Groups => { 2 => 'Other' }, List => 'Bag' },
|
312
|
-
FeedIdentifier => { Groups => { 2 => 'Video' } },
|
313
|
-
PublicationEvent=> { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sPublicationEvent },
|
314
|
-
Rating => {
|
315
|
-
Groups => { 2 => 'Other' },
|
316
|
-
Struct => \%sRating,
|
317
|
-
List => 'Bag',
|
318
|
-
},
|
319
|
-
ReleaseReady => { Groups => { 2 => 'Other' }, Writable => 'boolean' },
|
320
|
-
Season => { Groups => { 2 => 'Video' }, Struct => \%sEpisode },
|
321
|
-
Series => { Groups => { 2 => 'Video' }, Struct => \%sSeries },
|
322
|
-
StorylineIdentifier => { Groups => { 2 => 'Video' }, List => 'Bag' },
|
323
|
-
StylePeriod => { Groups => { 2 => 'Video' } },
|
324
|
-
TemporalCoverage=> { Groups => { 2 => 'Video' }, Struct => \%sTemporalCoverage },
|
325
|
-
WorkflowTag => { Groups => { 2 => 'Video' }, Struct => \%sCVTermDetails },
|
326
|
-
DataOnScreen => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sTextRegion },
|
327
|
-
Dopesheet => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' },
|
328
|
-
DopesheetLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink },
|
329
|
-
Headline => { Groups => { 2 => 'Video' }, Writable => 'lang-alt', Avoid => 1 },
|
330
|
-
PersonHeard => { Groups => { 2 => 'Audio' }, List => 'Bag', Struct => \%sEntity },
|
331
|
-
VideoShotType => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity },
|
332
|
-
EventExt => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity, Name => 'ShownEvent' },
|
333
|
-
Transcript => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' },
|
334
|
-
TranscriptLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink },
|
335
|
-
VisualColour => {
|
336
|
-
Name => 'VisualColor',
|
337
|
-
Groups => { 2 => 'Video' },
|
338
|
-
PrintConv => {
|
339
|
-
'bw-monochrome' => 'Monochrome',
|
340
|
-
'colour' => 'Color',
|
341
|
-
},
|
342
|
-
},
|
343
|
-
Contributor => { List => 'Bag', Struct => \%sEntityWithRole },
|
344
|
-
CopyrightYear => { Groups => { 2 => 'Time' }, Writable => 'integer' },
|
345
|
-
Creator => { List => 'Bag', Struct => \%sEntityWithRole },
|
346
|
-
SupplyChainSource => { Groups => { 2 => 'Other' }, List => 'Bag', Struct => \%sEntity },
|
347
|
-
audioBitRate => { Groups => { 2 => 'Audio' }, Writable => 'integer', Name => 'AudioBitrate' },
|
348
|
-
audioBitRateMode=> {
|
349
|
-
Name => 'AudioBitrateMode',
|
350
|
-
Groups => { 2 => 'Audio' },
|
351
|
-
PrintConv => {
|
352
|
-
fixed => 'Fixed',
|
353
|
-
variable => 'Variable',
|
354
|
-
},
|
355
|
-
},
|
356
|
-
audioChannelCount => { Groups => { 2 => 'Audio' }, Writable => 'integer' },
|
357
|
-
videoDisplayAspectRatio => { Groups => { 2 => 'Audio' }, Writable => 'rational' },
|
358
|
-
ContainerFormat => { Groups => { 2 => 'Video' }, Struct => \%sEntity },
|
359
|
-
StreamReady => {
|
360
|
-
Groups => { 2 => 'Video' },
|
361
|
-
PrintConv => {
|
362
|
-
true => 'True',
|
363
|
-
false => 'False',
|
364
|
-
unknown => 'Unknown',
|
365
|
-
},
|
366
|
-
},
|
367
|
-
videoBitRate => { Groups => { 2 => 'Video' }, Writable => 'integer', Name => 'VideoBitrate' },
|
368
|
-
videoBitRateMode => {
|
369
|
-
Name => 'VideoBitrateMode',
|
370
|
-
Groups => { 2 => 'Video' },
|
371
|
-
PrintConv => {
|
372
|
-
fixed => 'Fixed',
|
373
|
-
variable => 'Variable',
|
374
|
-
},
|
375
|
-
},
|
376
|
-
videoEncodingProfile => { Groups => { 2 => 'Video' } },
|
377
|
-
videoStreamsCount => { Groups => { 2 => 'Video' }, Writable => 'integer' },
|
378
|
-
);
|
379
|
-
|
380
26
|
#------------------------------------------------------------------------------
|
381
27
|
|
382
28
|
# xmpDM structure definitions
|
@@ -426,7 +72,7 @@ my %sTimecode = (
|
|
426
72
|
},
|
427
73
|
},
|
428
74
|
timeValue => { },
|
429
|
-
value => { Writable => 'integer' },
|
75
|
+
value => { Writable => 'integer', Notes => 'only in XMP 2008 spec; an error?' },
|
430
76
|
);
|
431
77
|
|
432
78
|
# XMP Dynamic Media namespace properties (xmpDM)
|
@@ -449,218 +95,586 @@ my %sTimecode = (
|
|
449
95
|
'24Int' => '24-bit integer',
|
450
96
|
'32Int' => '32-bit integer',
|
451
97
|
'32Float' => '32-bit float',
|
452
|
-
'Compressed' => 'Compressed',
|
453
|
-
'Packed' => 'Packed',
|
98
|
+
'Compressed' => 'Compressed',
|
99
|
+
'Packed' => 'Packed',
|
100
|
+
'Other' => 'Other',
|
101
|
+
},
|
102
|
+
},
|
103
|
+
audioChannelType => {
|
104
|
+
PrintConv => {
|
105
|
+
'Mono' => 'Mono',
|
106
|
+
'Stereo' => 'Stereo',
|
107
|
+
'5.1' => '5.1',
|
108
|
+
'7.1' => '7.1',
|
109
|
+
'16 Channel' => '16 Channel',
|
110
|
+
'Other' => 'Other',
|
111
|
+
},
|
112
|
+
},
|
113
|
+
audioCompressor => { },
|
114
|
+
beatSpliceParams => {
|
115
|
+
Struct => {
|
116
|
+
STRUCT_NAME => 'BeatSpliceStretch',
|
117
|
+
NAMESPACE => 'xmpDM',
|
118
|
+
riseInDecibel => { Writable => 'real' },
|
119
|
+
riseInTimeDuration => { Struct => \%sTime },
|
120
|
+
useFileBeatsMarker => { Writable => 'boolean' },
|
121
|
+
},
|
122
|
+
},
|
123
|
+
cameraAngle => { },
|
124
|
+
cameraLabel => { },
|
125
|
+
cameraModel => { },
|
126
|
+
cameraMove => { },
|
127
|
+
client => { },
|
128
|
+
comment => { Name => 'DMComment' },
|
129
|
+
composer => { Groups => { 2 => 'Author' } },
|
130
|
+
contributedMedia => {
|
131
|
+
Struct => {
|
132
|
+
STRUCT_NAME => 'Media',
|
133
|
+
NAMESPACE => 'xmpDM',
|
134
|
+
duration => { Struct => \%sTime },
|
135
|
+
managed => { Writable => 'boolean' },
|
136
|
+
path => { },
|
137
|
+
startTime => { Struct => \%sTime },
|
138
|
+
track => { },
|
139
|
+
webStatement=> { },
|
140
|
+
},
|
141
|
+
List => 'Bag',
|
142
|
+
},
|
143
|
+
copyright => { Avoid => 1, Groups => { 2 => 'Author' } }, # (deprecated)
|
144
|
+
director => { },
|
145
|
+
directorPhotography => { },
|
146
|
+
discNumber => { }, #12
|
147
|
+
duration => { Struct => \%sTime },
|
148
|
+
engineer => { },
|
149
|
+
fileDataRate => { Writable => 'rational' },
|
150
|
+
genre => { },
|
151
|
+
good => { Writable => 'boolean' },
|
152
|
+
instrument => { },
|
153
|
+
introTime => { Struct => \%sTime },
|
154
|
+
key => {
|
155
|
+
PrintConvColumns => 3,
|
156
|
+
PrintConv => {
|
157
|
+
'C' => 'C', 'C#' => 'C#', 'D' => 'D', 'D#' => 'D#',
|
158
|
+
'E' => 'E', 'F' => 'F', 'F#' => 'F#', 'G' => 'G',
|
159
|
+
'G#' => 'G#', 'A' => 'A', 'A#' => 'A#', 'B' => 'B',
|
160
|
+
},
|
161
|
+
},
|
162
|
+
logComment => { },
|
163
|
+
loop => { Writable => 'boolean' },
|
164
|
+
lyrics => { }, #12
|
165
|
+
numberOfBeats => { Writable => 'real' },
|
166
|
+
markers => { Struct => \%sMarker, List => 'Seq' },
|
167
|
+
metadataModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
168
|
+
outCue => { Struct => \%sTime },
|
169
|
+
partOfCompilation=>{ Writable => 'boolean' }, #12
|
170
|
+
projectName => { },
|
171
|
+
projectRef => {
|
172
|
+
Struct => {
|
173
|
+
STRUCT_NAME => 'ProjectLink',
|
174
|
+
NAMESPACE => 'xmpDM',
|
175
|
+
path => { },
|
176
|
+
type => {
|
177
|
+
PrintConv => {
|
178
|
+
movie => 'Movie',
|
179
|
+
still => 'Still Image',
|
180
|
+
audio => 'Audio',
|
181
|
+
custom => 'Custom',
|
182
|
+
},
|
183
|
+
},
|
184
|
+
},
|
185
|
+
},
|
186
|
+
pullDown => {
|
187
|
+
PrintConvColumns => 2,
|
188
|
+
PrintConv => {
|
189
|
+
'WSSWW' => 'WSSWW', 'SSWWW' => 'SSWWW',
|
190
|
+
'SWWWS' => 'SWWWS', 'WWWSS' => 'WWWSS',
|
191
|
+
'WWSSW' => 'WWSSW', 'WWWSW' => 'WWWSW',
|
192
|
+
'WWSWW' => 'WWSWW', 'WSWWW' => 'WSWWW',
|
193
|
+
'SWWWW' => 'SWWWW', 'WWWWS' => 'WWWWS',
|
194
|
+
},
|
195
|
+
},
|
196
|
+
relativePeakAudioFilePath => { },
|
197
|
+
relativeTimestamp => { Struct => \%sTime },
|
198
|
+
releaseDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
199
|
+
resampleParams => {
|
200
|
+
Struct => {
|
201
|
+
STRUCT_NAME => 'ResampleStretch',
|
202
|
+
NAMESPACE => 'xmpDM',
|
203
|
+
quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
|
204
|
+
},
|
205
|
+
},
|
206
|
+
scaleType => {
|
207
|
+
PrintConv => {
|
208
|
+
Major => 'Major',
|
209
|
+
Minor => 'Minor',
|
210
|
+
Both => 'Both',
|
211
|
+
Neither => 'Neither',
|
212
|
+
},
|
213
|
+
},
|
214
|
+
scene => { Avoid => 1 },
|
215
|
+
shotDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
216
|
+
shotDay => { },
|
217
|
+
shotLocation => { },
|
218
|
+
shotName => { },
|
219
|
+
shotNumber => { },
|
220
|
+
shotSize => { },
|
221
|
+
speakerPlacement=> { },
|
222
|
+
startTimecode => { Struct => \%sTimecode },
|
223
|
+
startTimeSampleSize => { Writable => 'integer' }, #PH
|
224
|
+
startTimeScale => { }, #PH (real?)
|
225
|
+
stretchMode => {
|
226
|
+
PrintConv => {
|
227
|
+
'Fixed length' => 'Fixed length',
|
228
|
+
'Time-Scale' => 'Time-Scale',
|
229
|
+
'Resample' => 'Resample',
|
230
|
+
'Beat Splice' => 'Beat Splice',
|
231
|
+
'Hybrid' => 'Hybrid',
|
232
|
+
},
|
233
|
+
},
|
234
|
+
takeNumber => { Writable => 'integer' },
|
235
|
+
tapeName => { },
|
236
|
+
tempo => { Writable => 'real' },
|
237
|
+
timeScaleParams => {
|
238
|
+
Struct => {
|
239
|
+
STRUCT_NAME => 'TimeScaleStretch',
|
240
|
+
NAMESPACE => 'xmpDM',
|
241
|
+
frameOverlappingPercentage => { Writable => 'real' },
|
242
|
+
frameSize => { Writable => 'real' },
|
243
|
+
quality => { PrintConv => { Low => 'Low', Medium => 'Medium', High => 'High' } },
|
244
|
+
},
|
245
|
+
},
|
246
|
+
timeSignature => {
|
247
|
+
PrintConvColumns => 3,
|
248
|
+
PrintConv => {
|
249
|
+
'2/4' => '2/4', '3/4' => '3/4', '4/4' => '4/4',
|
250
|
+
'5/4' => '5/4', '7/4' => '7/4', '6/8' => '6/8',
|
251
|
+
'9/8' => '9/8', '12/8'=> '12/8', 'other' => 'other',
|
252
|
+
},
|
253
|
+
},
|
254
|
+
trackNumber => { Writable => 'integer' },
|
255
|
+
Tracks => {
|
256
|
+
Struct => {
|
257
|
+
STRUCT_NAME => 'Track',
|
258
|
+
NAMESPACE => 'xmpDM',
|
259
|
+
frameRate => { },
|
260
|
+
markers => { Struct => \%sMarker, List => 'Seq' },
|
261
|
+
trackName => { },
|
262
|
+
trackType => { },
|
263
|
+
},
|
264
|
+
List => 'Bag',
|
265
|
+
},
|
266
|
+
videoAlphaMode => {
|
267
|
+
PrintConv => {
|
268
|
+
'straight' => 'Straight',
|
269
|
+
'pre-multiplied', => 'Pre-multiplied',
|
270
|
+
'none' => 'None',
|
271
|
+
},
|
272
|
+
},
|
273
|
+
videoAlphaPremultipleColor => { Struct => \%sColorant },
|
274
|
+
videoAlphaUnityIsTransparent => { Writable => 'boolean' },
|
275
|
+
videoColorSpace => {
|
276
|
+
PrintConv => {
|
277
|
+
'sRGB' => 'sRGB',
|
278
|
+
'CCIR-601' => 'CCIR-601',
|
279
|
+
'CCIR-709' => 'CCIR-709',
|
280
|
+
},
|
281
|
+
},
|
282
|
+
videoCompressor => { },
|
283
|
+
videoFieldOrder => {
|
284
|
+
PrintConv => {
|
285
|
+
Upper => 'Upper',
|
286
|
+
Lower => 'Lower',
|
287
|
+
Progressive => 'Progressive',
|
288
|
+
},
|
289
|
+
},
|
290
|
+
videoFrameRate => { Writable => 'real' },
|
291
|
+
videoFrameSize => { Struct => \%sDimensions },
|
292
|
+
videoModDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
293
|
+
videoPixelAspectRatio => { Writable => 'rational' },
|
294
|
+
videoPixelDepth => {
|
295
|
+
PrintConv => {
|
296
|
+
'8Int' => '8-bit integer',
|
297
|
+
'16Int' => '16-bit integer',
|
298
|
+
'24Int' => '24-bit integer',
|
299
|
+
'32Int' => '32-bit integer',
|
300
|
+
'32Float' => '32-bit float',
|
454
301
|
'Other' => 'Other',
|
455
302
|
},
|
456
303
|
},
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
304
|
+
);
|
305
|
+
|
306
|
+
#------------------------------------------------------------------------------
|
307
|
+
# IPTC Extensions version 1.3 (+ proposed video extensions)
|
308
|
+
|
309
|
+
# IPTC Extension 1.0 structures
|
310
|
+
my %sLocationDetails = (
|
311
|
+
STRUCT_NAME => 'LocationDetails',
|
312
|
+
NAMESPACE => 'Iptc4xmpExt',
|
313
|
+
GROUPS => { 2 => 'Location' },
|
314
|
+
Identifier => { List => 'Bag', Namespace => 'xmp' },
|
315
|
+
City => { },
|
316
|
+
CountryCode => { },
|
317
|
+
CountryName => { },
|
318
|
+
ProvinceState => { },
|
319
|
+
Sublocation => { },
|
320
|
+
WorldRegion => { },
|
321
|
+
LocationId => { List => 'Bag' },
|
322
|
+
LocationName => { Writable => 'lang-alt' },
|
323
|
+
GPSLatitude => { Namespace => 'exif', %latConv },
|
324
|
+
GPSLongitude => { Namespace => 'exif', %longConv },
|
325
|
+
GPSAltitude => {
|
326
|
+
Namespace => 'exif',
|
327
|
+
Writable => 'rational',
|
328
|
+
PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"',
|
329
|
+
PrintConvInv => '$val=~s/\s*m$//;$val',
|
466
330
|
},
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
331
|
+
);
|
332
|
+
my %sCVTermDetails = (
|
333
|
+
STRUCT_NAME => 'CVTermDetails',
|
334
|
+
NAMESPACE => 'Iptc4xmpExt',
|
335
|
+
CvTermId => { },
|
336
|
+
CvTermName => { Writable => 'lang-alt' },
|
337
|
+
CvId => { },
|
338
|
+
CvTermRefinedAbout => { },
|
339
|
+
);
|
340
|
+
|
341
|
+
# IPTC video extensions
|
342
|
+
my %sPublicationEvent = (
|
343
|
+
STRUCT_NAME => 'PublicationEvent',
|
344
|
+
NAMESPACE => 'Iptc4xmpExt',
|
345
|
+
Date => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
346
|
+
Name => { },
|
347
|
+
Identifier => { },
|
348
|
+
);
|
349
|
+
my %sEntity = (
|
350
|
+
STRUCT_NAME => 'Entity',
|
351
|
+
NAMESPACE => 'Iptc4xmpExt',
|
352
|
+
Identifier => { List => 'Bag', Namespace => 'xmp' },
|
353
|
+
Name => { Writable => 'lang-alt' },
|
354
|
+
);
|
355
|
+
my %sEntityWithRole = (
|
356
|
+
STRUCT_NAME => 'EntityWithRole',
|
357
|
+
NAMESPACE => 'Iptc4xmpExt',
|
358
|
+
Identifier => { List => 'Bag', Namespace => 'xmp' },
|
359
|
+
Name => { Writable => 'lang-alt' },
|
360
|
+
Role => { List => 'Bag' },
|
361
|
+
);
|
362
|
+
my %sFrameSize = (
|
363
|
+
STRUCT_NAME => 'FrameSize',
|
364
|
+
NAMESPACE => 'Iptc4xmpExt',
|
365
|
+
WidthPixels => { Writable => 'integer' },
|
366
|
+
HeightPixels => { Writable => 'integer' },
|
367
|
+
);
|
368
|
+
my %sRating = (
|
369
|
+
STRUCT_NAME => 'Rating',
|
370
|
+
NAMESPACE => 'Iptc4xmpExt',
|
371
|
+
RatingValue => { FlatName => 'Value' },
|
372
|
+
RatingSourceLink => { FlatName => 'SourceLink' },
|
373
|
+
RatingScaleMinValue => { FlatName => 'ScaleMinValue' },
|
374
|
+
RatingScaleMaxValue => { FlatName => 'ScaleMaxValue' },
|
375
|
+
RatingValueLogoLink => { FlatName => 'ValueLogoLink' },
|
376
|
+
RatingRegion => {
|
377
|
+
FlatName => 'RatingRegion',
|
378
|
+
Struct => \%sLocationDetails,
|
379
|
+
List => 'Bag',
|
476
380
|
},
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
381
|
+
);
|
382
|
+
my %sEpisode = (
|
383
|
+
STRUCT_NAME => 'EpisodeOrSeason',
|
384
|
+
NAMESPACE => 'Iptc4xmpExt',
|
385
|
+
Name => { },
|
386
|
+
Number => { },
|
387
|
+
Identifier => { },
|
388
|
+
);
|
389
|
+
my %sSeries = (
|
390
|
+
STRUCT_NAME => 'Series',
|
391
|
+
NAMESPACE => 'Iptc4xmpExt',
|
392
|
+
Name => { },
|
393
|
+
Identifier => { },
|
394
|
+
);
|
395
|
+
my %sTemporalCoverage = (
|
396
|
+
STRUCT_NAME => 'TemporalCoverage',
|
397
|
+
NAMESPACE => 'Iptc4xmpExt',
|
398
|
+
tempCoverageFrom => { FlatName => 'From', %dateTimeInfo, Groups => { 2 => 'Time' } },
|
399
|
+
tempCoverageTo => { FlatName => 'To', %dateTimeInfo, Groups => { 2 => 'Time' } },
|
400
|
+
);
|
401
|
+
my %sQualifiedLink = (
|
402
|
+
STRUCT_NAME => 'QualifiedLink',
|
403
|
+
NAMESPACE => 'Iptc4xmpExt',
|
404
|
+
Link => { },
|
405
|
+
LinkQualifier => { },
|
406
|
+
);
|
407
|
+
my %sTextRegion = (
|
408
|
+
STRUCT_NAME => 'TextRegion',
|
409
|
+
NAMESPACE => 'Iptc4xmpExt',
|
410
|
+
RegionText => { },
|
411
|
+
Region => { Struct => \%Image::ExifTool::XMP::sArea },
|
412
|
+
);
|
413
|
+
my %sLinkedImage = (
|
414
|
+
STRUCT_NAME => 'LinkedImage',
|
415
|
+
NAMESPACE => 'Iptc4xmpExt',
|
416
|
+
Link => { },
|
417
|
+
LinkQualifier => { List => 'Bag' },
|
418
|
+
ImageRole => { },
|
419
|
+
'format' => { Namespace => 'dc' },
|
420
|
+
WidthPixels => { Writable => 'integer' },
|
421
|
+
HeightPixels=> { Writable => 'integer' },
|
422
|
+
UsedVideoFrame => { Struct => \%sTimecode },
|
423
|
+
);
|
424
|
+
|
425
|
+
# IPTC Extension namespace properties (Iptc4xmpExt) (ref 4)
|
426
|
+
%Image::ExifTool::XMP::iptcExt = (
|
427
|
+
%xmpTableDefaults,
|
428
|
+
GROUPS => { 1 => 'XMP-iptcExt', 2 => 'Author' },
|
429
|
+
NAMESPACE => 'Iptc4xmpExt',
|
430
|
+
TABLE_DESC => 'XMP IPTC Extension',
|
431
|
+
NOTES => q{
|
432
|
+
IPTC Extension namespace tags. The actual namespace prefix is
|
433
|
+
"Iptc4xmpExt", but ExifTool shortens this for the family 1 group name. (see
|
434
|
+
L<http://www.iptc.org/IPTC4XMP/>)
|
435
|
+
},
|
436
|
+
AboutCvTerm => {
|
437
|
+
Struct => \%sCVTermDetails,
|
438
|
+
List => 'Bag',
|
439
|
+
},
|
440
|
+
AboutCvTermCvId => { Flat => 1, Name => 'AboutCvTermCvId' },
|
441
|
+
AboutCvTermCvTermId => { Flat => 1, Name => 'AboutCvTermId' },
|
442
|
+
AboutCvTermCvTermName => { Flat => 1, Name => 'AboutCvTermName' },
|
443
|
+
AboutCvTermCvTermRefinedAbout => { Flat => 1, Name => 'AboutCvTermRefinedAbout' },
|
444
|
+
AddlModelInfo => { Name => 'AdditionalModelInformation' },
|
445
|
+
ArtworkOrObject => {
|
485
446
|
Struct => {
|
486
|
-
STRUCT_NAME => '
|
487
|
-
NAMESPACE => '
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
447
|
+
STRUCT_NAME => 'ArtworkOrObjectDetails',
|
448
|
+
NAMESPACE => 'Iptc4xmpExt',
|
449
|
+
AOCopyrightNotice => { },
|
450
|
+
AOCreator => { List => 'Seq' },
|
451
|
+
AODateCreated=> { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
452
|
+
AOSource => { },
|
453
|
+
AOSourceInvNo=> { },
|
454
|
+
AOTitle => { Writable => 'lang-alt' },
|
455
|
+
AOCurrentCopyrightOwnerName => { },
|
456
|
+
AOCurrentCopyrightOwnerId => { },
|
457
|
+
AOCurrentLicensorName => { },
|
458
|
+
AOCurrentLicensorId => { },
|
459
|
+
AOCreatorId => { List => 'Seq' },
|
460
|
+
AOCircaDateCreated => { Groups => { 2 => 'Time' } },
|
461
|
+
AOStylePeriod => { List => 'Bag' },
|
462
|
+
AOSourceInvURL => { },
|
463
|
+
AOContentDescription => { Writable => 'lang-alt' },
|
464
|
+
AOContributionDescription => { Writable => 'lang-alt' },
|
465
|
+
AOPhysicalDescription => { Writable => 'lang-alt' },
|
494
466
|
},
|
495
467
|
List => 'Bag',
|
496
468
|
},
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
469
|
+
ArtworkOrObjectAOCopyrightNotice => { Flat => 1, Name => 'ArtworkCopyrightNotice' },
|
470
|
+
ArtworkOrObjectAOCreator => { Flat => 1, Name => 'ArtworkCreator' },
|
471
|
+
ArtworkOrObjectAODateCreated => { Flat => 1, Name => 'ArtworkDateCreated' },
|
472
|
+
ArtworkOrObjectAOSource => { Flat => 1, Name => 'ArtworkSource' },
|
473
|
+
ArtworkOrObjectAOSourceInvNo => { Flat => 1, Name => 'ArtworkSourceInventoryNo' },
|
474
|
+
ArtworkOrObjectAOTitle => { Flat => 1, Name => 'ArtworkTitle' },
|
475
|
+
ArtworkOrObjectAOCurrentCopyrightOwnerName => { Flat => 1, Name => 'ArtworkCopyrightOwnerName' },
|
476
|
+
ArtworkOrObjectAOCurrentCopyrightOwnerId => { Flat => 1, Name => 'ArtworkCopyrightOwnerID' },
|
477
|
+
ArtworkOrObjectAOCurrentLicensorName => { Flat => 1, Name => 'ArtworkLicensorName' },
|
478
|
+
ArtworkOrObjectAOCurrentLicensorId => { Flat => 1, Name => 'ArtworkLicensorID' },
|
479
|
+
ArtworkOrObjectAOCreatorId => { Flat => 1, Name => 'ArtworkCreatorID' },
|
480
|
+
ArtworkOrObjectAOCircaDateCreated => { Flat => 1, Name => 'ArtworkCircaDateCreated' },
|
481
|
+
ArtworkOrObjectAOStylePeriod => { Flat => 1, Name => 'ArtworkStylePeriod' },
|
482
|
+
ArtworkOrObjectAOSourceInvURL => { Flat => 1, Name => 'ArtworkSourceInvURL' },
|
483
|
+
ArtworkOrObjectAOContentDescription => { Flat => 1, Name => 'ArtworkContentDescription' },
|
484
|
+
ArtworkOrObjectAOContributionDescription => { Flat => 1, Name => 'ArtworkContributionDescription' },
|
485
|
+
ArtworkOrObjectAOPhysicalDescription => { Flat => 1, Name => 'ArtworkPhysicalDescription' },
|
486
|
+
CVterm => {
|
487
|
+
Name => 'ControlledVocabularyTerm',
|
488
|
+
List => 'Bag',
|
489
|
+
Notes => 'deprecated by version 1.2',
|
515
490
|
},
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
path => { },
|
530
|
-
type => {
|
531
|
-
PrintConv => {
|
532
|
-
movie => 'Movie',
|
533
|
-
still => 'Still Image',
|
534
|
-
audio => 'Audio',
|
535
|
-
custom => 'Custom',
|
536
|
-
},
|
537
|
-
},
|
491
|
+
DigImageGUID => { Name => 'DigitalImageGUID' },
|
492
|
+
DigitalSourcefileType => {
|
493
|
+
Name => 'DigitalSourceFileType',
|
494
|
+
Notes => 'now deprecated -- replaced by DigitalSourceType',
|
495
|
+
},
|
496
|
+
DigitalSourceType => { Name => 'DigitalSourceType' },
|
497
|
+
EmbdEncRightsExpr => {
|
498
|
+
Struct => {
|
499
|
+
STRUCT_NAME => 'EEREDetails',
|
500
|
+
NAMESPACE => 'Iptc4xmpExt',
|
501
|
+
EncRightsExpr => { },
|
502
|
+
RightsExprEncType => { },
|
503
|
+
RightsExprLangId => { },
|
538
504
|
},
|
505
|
+
List => 'Bag',
|
539
506
|
},
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
},
|
507
|
+
EmbdEncRightsExprEncRightsExpr => { Flat => 1, Name => 'EmbeddedEncodedRightsExpr' },
|
508
|
+
EmbdEncRightsExprRightsExprEncType => { Flat => 1, Name => 'EmbeddedEncodedRightsExprType' },
|
509
|
+
EmbdEncRightsExprRightsExprLangId => { Flat => 1, Name => 'EmbeddedEncodedRightsExprLangID' },
|
510
|
+
Event => { Writable => 'lang-alt' },
|
511
|
+
IptcLastEdited => {
|
512
|
+
Name => 'IPTCLastEdited',
|
513
|
+
Groups => { 2 => 'Time' },
|
514
|
+
%dateTimeInfo,
|
549
515
|
},
|
550
|
-
|
551
|
-
relativeTimestamp => { Struct => \%sTime },
|
552
|
-
releaseDate => { Groups => { 2 => 'Time' }, %dateTimeInfo },
|
553
|
-
resampleParams => {
|
516
|
+
LinkedEncRightsExpr => {
|
554
517
|
Struct => {
|
555
|
-
STRUCT_NAME => '
|
556
|
-
NAMESPACE => '
|
557
|
-
|
518
|
+
STRUCT_NAME => 'LEREDetails',
|
519
|
+
NAMESPACE => 'Iptc4xmpExt',
|
520
|
+
LinkedRightsExpr => { },
|
521
|
+
RightsExprEncType => { },
|
522
|
+
RightsExprLangId => { },
|
558
523
|
},
|
524
|
+
List => 'Bag',
|
559
525
|
},
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
526
|
+
LinkedEncRightsExprLinkedRightsExpr => { Flat => 1, Name => 'LinkedEncodedRightsExpr' },
|
527
|
+
LinkedEncRightsExprRightsExprEncType => { Flat => 1, Name => 'LinkedEncodedRightsExprType' },
|
528
|
+
LinkedEncRightsExprRightsExprLangId => { Flat => 1, Name => 'LinkedEncodedRightsExprLangID' },
|
529
|
+
LocationCreated => {
|
530
|
+
Struct => \%sLocationDetails,
|
531
|
+
Groups => { 2 => 'Location' },
|
532
|
+
List => 'Bag',
|
567
533
|
},
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
shotName => { },
|
573
|
-
shotNumber => { },
|
574
|
-
shotSize => { },
|
575
|
-
speakerPlacement=> { },
|
576
|
-
startTimecode => { Struct => \%sTimecode },
|
577
|
-
startTimeSampleSize => { Writable => 'integer' }, #PH
|
578
|
-
startTimeScale => { }, #PH (real?)
|
579
|
-
stretchMode => {
|
580
|
-
PrintConv => {
|
581
|
-
'Fixed length' => 'Fixed length',
|
582
|
-
'Time-Scale' => 'Time-Scale',
|
583
|
-
'Resample' => 'Resample',
|
584
|
-
'Beat Splice' => 'Beat Splice',
|
585
|
-
'Hybrid' => 'Hybrid',
|
586
|
-
},
|
534
|
+
LocationShown => {
|
535
|
+
Struct => \%sLocationDetails,
|
536
|
+
Groups => { 2 => 'Location' },
|
537
|
+
List => 'Bag',
|
587
538
|
},
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
539
|
+
MaxAvailHeight => { Writable => 'integer' },
|
540
|
+
MaxAvailWidth => { Writable => 'integer' },
|
541
|
+
ModelAge => { List => 'Bag', Writable => 'integer' },
|
542
|
+
OrganisationInImageCode => { List => 'Bag' },
|
543
|
+
OrganisationInImageName => { List => 'Bag' },
|
544
|
+
PersonInImage => { List => 'Bag' },
|
545
|
+
PersonInImageWDetails => {
|
592
546
|
Struct => {
|
593
|
-
STRUCT_NAME => '
|
594
|
-
NAMESPACE => '
|
595
|
-
|
596
|
-
|
597
|
-
|
547
|
+
STRUCT_NAME => 'PersonDetails',
|
548
|
+
NAMESPACE => 'Iptc4xmpExt',
|
549
|
+
PersonId => { List => 'Bag' },
|
550
|
+
PersonName => { Writable => 'lang-alt' },
|
551
|
+
PersonCharacteristic => {
|
552
|
+
Struct => \%sCVTermDetails,
|
553
|
+
List => 'Bag',
|
554
|
+
},
|
555
|
+
PersonDescription => { Writable => 'lang-alt' },
|
598
556
|
},
|
557
|
+
List => 'Bag',
|
599
558
|
},
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
559
|
+
PersonInImageWDetailsPersonId => { Flat => 1, Name => 'PersonInImageId' },
|
560
|
+
PersonInImageWDetailsPersonName => { Flat => 1, Name => 'PersonInImageName' },
|
561
|
+
PersonInImageWDetailsPersonCharacteristic => { Flat => 1, Name => 'PersonInImageCharacteristic' },
|
562
|
+
PersonInImageWDetailsPersonCharacteristicCvId => { Flat => 1, Name => 'PersonInImageCvTermCvId' },
|
563
|
+
PersonInImageWDetailsPersonCharacteristicCvTermId => { Flat => 1, Name => 'PersonInImageCvTermId' },
|
564
|
+
PersonInImageWDetailsPersonCharacteristicCvTermName => { Flat => 1, Name => 'PersonInImageCvTermName' },
|
565
|
+
PersonInImageWDetailsPersonCharacteristicCvTermRefinedAbout => { Flat => 1, Name => 'PersonInImageCvTermRefinedAbout' },
|
566
|
+
PersonInImageWDetailsPersonDescription => { Flat => 1, Name => 'PersonInImageDescription' },
|
567
|
+
ProductInImage => {
|
568
|
+
Struct => {
|
569
|
+
STRUCT_NAME => 'ProductDetails',
|
570
|
+
NAMESPACE => 'Iptc4xmpExt',
|
571
|
+
ProductName => { Writable => 'lang-alt' },
|
572
|
+
ProductGTIN => { },
|
573
|
+
ProductDescription => { Writable => 'lang-alt' },
|
606
574
|
},
|
575
|
+
List => 'Bag',
|
607
576
|
},
|
608
|
-
|
609
|
-
|
577
|
+
ProductInImageProductName => { Flat => 1, Name => 'ProductInImageName' },
|
578
|
+
ProductInImageProductGTIN => { Flat => 1, Name => 'ProductInImageGTIN' },
|
579
|
+
ProductInImageProductDescription => { Flat => 1, Name => 'ProductInImageDescription' },
|
580
|
+
RegistryId => {
|
581
|
+
Name => 'RegistryID',
|
610
582
|
Struct => {
|
611
|
-
STRUCT_NAME => '
|
612
|
-
NAMESPACE => '
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
trackType => { },
|
583
|
+
STRUCT_NAME => 'RegistryEntryDetails',
|
584
|
+
NAMESPACE => 'Iptc4xmpExt',
|
585
|
+
RegItemId => { },
|
586
|
+
RegOrgId => { },
|
587
|
+
RegEntryRole=> { }, # (new in 1.3)
|
617
588
|
},
|
618
589
|
List => 'Bag',
|
619
590
|
},
|
620
|
-
|
591
|
+
RegistryIdRegItemId => { Flat => 1, Name => 'RegistryItemID' },
|
592
|
+
RegistryIdRegOrgId => { Flat => 1, Name => 'RegistryOrganisationID' },
|
593
|
+
RegistryIdRegEntryRole => { Flat => 1, Name => 'RegistryEntryRole' },
|
594
|
+
|
595
|
+
# new Extension 1.3 properties
|
596
|
+
Genre => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sCVTermDetails },
|
597
|
+
|
598
|
+
# new video properties (Oct 2016, ref Michael Steidl)
|
599
|
+
# (see http://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.0.html)
|
600
|
+
CircaDateCreated=> { Groups => { 2 => 'Time' } },
|
601
|
+
Episode => { Groups => { 2 => 'Video' }, Struct => \%sEpisode },
|
602
|
+
ExternalMetadataLink => { Groups => { 2 => 'Other' }, List => 'Bag' },
|
603
|
+
FeedIdentifier => { Groups => { 2 => 'Video' } },
|
604
|
+
PublicationEvent=> { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sPublicationEvent },
|
605
|
+
Rating => {
|
606
|
+
Groups => { 2 => 'Other' },
|
607
|
+
Struct => \%sRating,
|
608
|
+
List => 'Bag',
|
609
|
+
},
|
610
|
+
ReleaseReady => { Groups => { 2 => 'Other' }, Writable => 'boolean' },
|
611
|
+
Season => { Groups => { 2 => 'Video' }, Struct => \%sEpisode },
|
612
|
+
Series => { Groups => { 2 => 'Video' }, Struct => \%sSeries },
|
613
|
+
StorylineIdentifier => { Groups => { 2 => 'Video' }, List => 'Bag' },
|
614
|
+
StylePeriod => { Groups => { 2 => 'Video' } },
|
615
|
+
TemporalCoverage=> { Groups => { 2 => 'Video' }, Struct => \%sTemporalCoverage },
|
616
|
+
WorkflowTag => { Groups => { 2 => 'Video' }, Struct => \%sCVTermDetails },
|
617
|
+
DataOnScreen => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sTextRegion },
|
618
|
+
Dopesheet => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' },
|
619
|
+
DopesheetLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink },
|
620
|
+
Headline => { Groups => { 2 => 'Video' }, Writable => 'lang-alt', Avoid => 1 },
|
621
|
+
PersonHeard => { Groups => { 2 => 'Audio' }, List => 'Bag', Struct => \%sEntity },
|
622
|
+
VideoShotType => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity },
|
623
|
+
EventExt => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sEntity, Name => 'ShownEvent' },
|
624
|
+
Transcript => { Groups => { 2 => 'Video' }, Writable => 'lang-alt' },
|
625
|
+
TranscriptLink => { Groups => { 2 => 'Video' }, List => 'Bag', Struct => \%sQualifiedLink },
|
626
|
+
VisualColour => {
|
627
|
+
Name => 'VisualColor',
|
628
|
+
Groups => { 2 => 'Video' },
|
621
629
|
PrintConv => {
|
622
|
-
'
|
623
|
-
'
|
624
|
-
'none' => 'None',
|
630
|
+
'bw-monochrome' => 'Monochrome',
|
631
|
+
'colour' => 'Color',
|
625
632
|
},
|
626
633
|
},
|
627
|
-
|
628
|
-
|
629
|
-
|
634
|
+
Contributor => { List => 'Bag', Struct => \%sEntityWithRole },
|
635
|
+
CopyrightYear => { Groups => { 2 => 'Time' }, Writable => 'integer' },
|
636
|
+
Creator => { List => 'Bag', Struct => \%sEntityWithRole },
|
637
|
+
SupplyChainSource => { Groups => { 2 => 'Other' }, List => 'Bag', Struct => \%sEntity },
|
638
|
+
audioBitRate => { Groups => { 2 => 'Audio' }, Writable => 'integer', Name => 'AudioBitrate' },
|
639
|
+
audioBitRateMode=> {
|
640
|
+
Name => 'AudioBitrateMode',
|
641
|
+
Groups => { 2 => 'Audio' },
|
630
642
|
PrintConv => {
|
631
|
-
|
632
|
-
|
633
|
-
'CCIR-709' => 'CCIR-709',
|
643
|
+
fixed => 'Fixed',
|
644
|
+
variable => 'Variable',
|
634
645
|
},
|
635
646
|
},
|
636
|
-
|
637
|
-
|
647
|
+
audioChannelCount => { Groups => { 2 => 'Audio' }, Writable => 'integer' },
|
648
|
+
videoDisplayAspectRatio => { Groups => { 2 => 'Audio' }, Writable => 'rational' },
|
649
|
+
ContainerFormat => { Groups => { 2 => 'Video' }, Struct => \%sEntity },
|
650
|
+
StreamReady => {
|
651
|
+
Groups => { 2 => 'Video' },
|
638
652
|
PrintConv => {
|
639
|
-
|
640
|
-
|
641
|
-
|
653
|
+
true => 'True',
|
654
|
+
false => 'False',
|
655
|
+
unknown => 'Unknown',
|
642
656
|
},
|
643
657
|
},
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
videoPixelDepth => {
|
658
|
+
videoBitRate => { Groups => { 2 => 'Video' }, Writable => 'integer', Name => 'VideoBitrate' },
|
659
|
+
videoBitRateMode => {
|
660
|
+
Name => 'VideoBitrateMode',
|
661
|
+
Groups => { 2 => 'Video' },
|
649
662
|
PrintConv => {
|
650
|
-
|
651
|
-
|
652
|
-
'24Int' => '24-bit integer',
|
653
|
-
'32Int' => '32-bit integer',
|
654
|
-
'32Float' => '32-bit float',
|
655
|
-
'Other' => 'Other',
|
663
|
+
fixed => 'Fixed',
|
664
|
+
variable => 'Variable',
|
656
665
|
},
|
657
666
|
},
|
667
|
+
videoEncodingProfile => { Groups => { 2 => 'Video' } },
|
668
|
+
videoStreamsCount => { Groups => { 2 => 'Video' }, Writable => 'integer' },
|
669
|
+
# new IPTC video metadata 1.1 properties
|
670
|
+
# (ref https://www.iptc.org/std/videometadatahub/recommendation/IPTC-VideoMetadataHub-props-Rec_1.1.html)
|
671
|
+
SnapshotLink => { Groups => { 2 => 'Image' }, List => 'Bag', Struct => \%sLinkedImage, Name => 'Snapshot' },
|
658
672
|
);
|
659
673
|
|
660
674
|
#------------------------------------------------------------------------------
|
661
675
|
# PRISM
|
662
676
|
#
|
663
|
-
# NOTE: The "Avoid" flag is set for all PRISM tags
|
677
|
+
# NOTE: The "Avoid" flag is set for all PRISM tags (via tag table AVOID flag)
|
664
678
|
|
665
679
|
# my %obsolete = (
|
666
680
|
# Notes => 'obsolete in 2.0',
|
@@ -687,6 +701,7 @@ my %prismPublicationDate = (
|
|
687
701
|
%xmpTableDefaults,
|
688
702
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-prism', 2 => 'Document' },
|
689
703
|
NAMESPACE => 'prism',
|
704
|
+
AVOID => 1,
|
690
705
|
NOTES => q{
|
691
706
|
Publishing Requirements for Industry Standard Metadata 3.0 namespace
|
692
707
|
tags. (see L<http://www.prismstandard.org/>)
|
@@ -904,6 +919,7 @@ my %prismPublicationDate = (
|
|
904
919
|
%xmpTableDefaults,
|
905
920
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-prl', 2 => 'Document' },
|
906
921
|
NAMESPACE => 'prl',
|
922
|
+
AVOID => 1,
|
907
923
|
NOTES => q{
|
908
924
|
PRISM Rights Language 2.1 namespace tags. These tags have been deprecated
|
909
925
|
since the release of the PRISM Usage Rights 3.0. (see
|
@@ -919,6 +935,7 @@ my %prismPublicationDate = (
|
|
919
935
|
%xmpTableDefaults,
|
920
936
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-pur', 2 => 'Document' },
|
921
937
|
NAMESPACE => 'pur',
|
938
|
+
AVOID => 1,
|
922
939
|
NOTES => q{
|
923
940
|
PRISM Usage Rights 3.0 namespace tags. (see
|
924
941
|
L<http://www.prismstandard.org/>)
|
@@ -950,6 +967,7 @@ my %prismPublicationDate = (
|
|
950
967
|
%xmpTableDefaults,
|
951
968
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-pmi', 2 => 'Image' },
|
952
969
|
NAMESPACE => 'pmi',
|
970
|
+
AVOID => 1,
|
953
971
|
NOTES => q{
|
954
972
|
PRISM Metadata for Images 3.0 namespace tags. (see
|
955
973
|
L<http://www.prismstandard.org/>)
|
@@ -1016,6 +1034,7 @@ my %prismPublicationDate = (
|
|
1016
1034
|
%xmpTableDefaults,
|
1017
1035
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-prm', 2 => 'Document' },
|
1018
1036
|
NAMESPACE => 'prm',
|
1037
|
+
AVOID => 1,
|
1019
1038
|
NOTES => q{
|
1020
1039
|
PRISM Recipe Metadata 3.0 namespace tags. (see
|
1021
1040
|
L<http://www.prismstandard.org/>)
|
@@ -1079,17 +1098,18 @@ my %prismPublicationDate = (
|
|
1079
1098
|
%Image::ExifTool::XMP::PixelLive = (
|
1080
1099
|
GROUPS => { 1 => 'XMP-PixelLive', 2 => 'Image' },
|
1081
1100
|
NAMESPACE => 'PixelLive',
|
1101
|
+
AVOID => 1,
|
1082
1102
|
NOTES => q{
|
1083
1103
|
PixelLive namespace tags. These tags are not writable becase they are very
|
1084
1104
|
uncommon and I haven't been able to locate a reference which gives the
|
1085
1105
|
namespace URI.
|
1086
1106
|
},
|
1087
|
-
AUTHOR => { Name => 'Author',
|
1088
|
-
COMMENTS => { Name => 'Comments'
|
1089
|
-
COPYRIGHT => { Name => 'Copyright',
|
1090
|
-
DATE => { Name => 'Date',
|
1091
|
-
GENRE => { Name => 'Genre'
|
1092
|
-
TITLE => { Name => 'Title'
|
1107
|
+
AUTHOR => { Name => 'Author', Groups => { 2 => 'Author' } },
|
1108
|
+
COMMENTS => { Name => 'Comments' },
|
1109
|
+
COPYRIGHT => { Name => 'Copyright', Groups => { 2 => 'Author' } },
|
1110
|
+
DATE => { Name => 'Date', Groups => { 2 => 'Time' } },
|
1111
|
+
GENRE => { Name => 'Genre' },
|
1112
|
+
TITLE => { Name => 'Title' },
|
1093
1113
|
);
|
1094
1114
|
|
1095
1115
|
# Extensis Portfolio tags (extensis) (ref 11)
|
@@ -1171,6 +1191,7 @@ my %sSubVersion = (
|
|
1171
1191
|
%xmpTableDefaults,
|
1172
1192
|
GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee', 2 => 'Image' },
|
1173
1193
|
NAMESPACE => 'acdsee',
|
1194
|
+
AVOID => 1,
|
1174
1195
|
NOTES => q{
|
1175
1196
|
ACD Systems ACDSee namespace tags.
|
1176
1197
|
|
@@ -1180,15 +1201,15 @@ my %sSubVersion = (
|
|
1180
1201
|
mumble to themselves instead of speaking out for the rest of the world to
|
1181
1202
|
hear.)
|
1182
1203
|
},
|
1183
|
-
author => {
|
1184
|
-
caption => {
|
1185
|
-
categories => {
|
1186
|
-
collections=> {
|
1187
|
-
datetime => { Name => 'DateTime',
|
1188
|
-
keywords => {
|
1189
|
-
notes => {
|
1190
|
-
rating => {
|
1191
|
-
tagged => {
|
1204
|
+
author => { Groups => { 2 => 'Author' } },
|
1205
|
+
caption => { },
|
1206
|
+
categories => { },
|
1207
|
+
collections=> { },
|
1208
|
+
datetime => { Name => 'DateTime', Groups => { 2 => 'Time' }, %dateTimeInfo },
|
1209
|
+
keywords => { List => 'Bag' },
|
1210
|
+
notes => { },
|
1211
|
+
rating => { Writable => 'real' }, # integer?
|
1212
|
+
tagged => { Writable => 'boolean' },
|
1192
1213
|
rawrppused => { Writable => 'boolean' },
|
1193
1214
|
rpp => {
|
1194
1215
|
Name => 'RPP',
|
@@ -1203,13 +1224,13 @@ my %sSubVersion = (
|
|
1203
1224
|
Binary => 1,
|
1204
1225
|
},
|
1205
1226
|
# more tags (ref forum6840)
|
1206
|
-
FixtureIdentifier => {
|
1207
|
-
EditStatus => {
|
1208
|
-
ReleaseDate => {
|
1209
|
-
ReleaseTime => {
|
1210
|
-
OriginatingProgram => {
|
1211
|
-
ObjectCycle => {
|
1212
|
-
Snapshots => {
|
1227
|
+
FixtureIdentifier => { },
|
1228
|
+
EditStatus => { },
|
1229
|
+
ReleaseDate => { },
|
1230
|
+
ReleaseTime => { },
|
1231
|
+
OriginatingProgram => { },
|
1232
|
+
ObjectCycle => { },
|
1233
|
+
Snapshots => { List => 'Bag', Binary => 1 },
|
1213
1234
|
);
|
1214
1235
|
|
1215
1236
|
# Picture Licensing Universal System namespace properties (xmpPLUS)
|
@@ -1217,13 +1238,14 @@ my %sSubVersion = (
|
|
1217
1238
|
%xmpTableDefaults,
|
1218
1239
|
GROUPS => { 1 => 'XMP-xmpPLUS', 2 => 'Author' },
|
1219
1240
|
NAMESPACE => 'xmpPLUS',
|
1241
|
+
AVOID => 1,
|
1220
1242
|
NOTES => q{
|
1221
1243
|
XMP Picture Licensing Universal System (PLUS) tags as written by some older
|
1222
1244
|
Adobe applications. See L<PLUS XMP Tags|Image::ExifTool::TagNames/PLUS XMP Tags>
|
1223
1245
|
for the current PLUS tags.
|
1224
1246
|
},
|
1225
|
-
CreditLineReq => { Writable => 'boolean'
|
1226
|
-
ReuseAllowed => { Writable => 'boolean'
|
1247
|
+
CreditLineReq => { Writable => 'boolean' },
|
1248
|
+
ReuseAllowed => { Writable => 'boolean' },
|
1227
1249
|
);
|
1228
1250
|
|
1229
1251
|
# Creative Commons namespace properties (cc) (ref 5)
|
@@ -1340,14 +1362,15 @@ my %sSubVersion = (
|
|
1340
1362
|
%xmpTableDefaults,
|
1341
1363
|
GROUPS => { 1 => 'XMP-expressionmedia', 2 => 'Image' },
|
1342
1364
|
NAMESPACE => 'expressionmedia',
|
1365
|
+
AVOID => 1,
|
1343
1366
|
NOTES => q{
|
1344
1367
|
Microsoft Expression Media namespace tags. These tags are avoided when
|
1345
1368
|
writing due to name conflicts with tags in other schemas.
|
1346
1369
|
},
|
1347
|
-
Event => {
|
1348
|
-
Status => {
|
1349
|
-
People => {
|
1350
|
-
CatalogSets => {
|
1370
|
+
Event => { },
|
1371
|
+
Status => { },
|
1372
|
+
People => { List => 'Bag' },
|
1373
|
+
CatalogSets => { List => 'Bag' },
|
1351
1374
|
);
|
1352
1375
|
|
1353
1376
|
# DigiKam namespace tags (ref PH)
|
@@ -1570,6 +1593,7 @@ my %sSubVersion = (
|
|
1570
1593
|
%xmpTableDefaults,
|
1571
1594
|
GROUPS => { 1 => 'XMP-GSpherical', 2 => 'Image' },
|
1572
1595
|
NAMESPACE => 'GSpherical',
|
1596
|
+
AVOID => 1,
|
1573
1597
|
NOTES => q{
|
1574
1598
|
Not actually XMP. These RDF/XML tags are used in Google spherical MP4
|
1575
1599
|
videos. See
|
@@ -1577,32 +1601,74 @@ my %sSubVersion = (
|
|
1577
1601
|
for the specification.
|
1578
1602
|
},
|
1579
1603
|
# (avoid due to conflicts with XMP-GPano tags)
|
1580
|
-
Spherical => {
|
1581
|
-
Stitched => {
|
1582
|
-
StitchingSoftware => {
|
1583
|
-
ProjectionType => {
|
1584
|
-
StereoMode => {
|
1585
|
-
SourceCount => {
|
1586
|
-
InitialViewHeadingDegrees => {
|
1587
|
-
InitialViewPitchDegrees => {
|
1588
|
-
InitialViewRollDegrees => {
|
1604
|
+
Spherical => { Writable => 'boolean' },
|
1605
|
+
Stitched => { Writable => 'boolean' },
|
1606
|
+
StitchingSoftware => { },
|
1607
|
+
ProjectionType => { },
|
1608
|
+
StereoMode => { },
|
1609
|
+
SourceCount => { Writable => 'integer' },
|
1610
|
+
InitialViewHeadingDegrees => { Writable => 'real' },
|
1611
|
+
InitialViewPitchDegrees => { Writable => 'real' },
|
1612
|
+
InitialViewRollDegrees => { Writable => 'real' },
|
1589
1613
|
Timestamp => {
|
1590
1614
|
Name => 'TimeStamp',
|
1591
1615
|
Groups => { 2 => 'Time' },
|
1592
|
-
|
1593
|
-
Writable => 'date',
|
1616
|
+
Writable => 'integer',
|
1594
1617
|
Shift => 'Time',
|
1595
1618
|
ValueConv => 'ConvertUnixTime($val)', #(NC)
|
1596
1619
|
ValueConvInv => 'GetUnixTime($val)',
|
1597
1620
|
PrintConv => '$self->ConvertDateTime($val)',
|
1598
1621
|
PrintConvInv => '$self->InverseDateTime($val)',
|
1599
1622
|
},
|
1600
|
-
FullPanoWidthPixels => {
|
1601
|
-
FullPanoHeightPixels => {
|
1602
|
-
CroppedAreaImageWidthPixels => {
|
1603
|
-
CroppedAreaImageHeightPixels=> {
|
1604
|
-
CroppedAreaLeftPixels => {
|
1605
|
-
CroppedAreaTopPixels => {
|
1623
|
+
FullPanoWidthPixels => { Writable => 'integer' },
|
1624
|
+
FullPanoHeightPixels => { Writable => 'integer' },
|
1625
|
+
CroppedAreaImageWidthPixels => { Writable => 'integer' },
|
1626
|
+
CroppedAreaImageHeightPixels=> { Writable => 'integer' },
|
1627
|
+
CroppedAreaLeftPixels => { Writable => 'integer' },
|
1628
|
+
CroppedAreaTopPixels => { Writable => 'integer' },
|
1629
|
+
);
|
1630
|
+
|
1631
|
+
# Google depthmap information (ref https://developers.google.com/depthmap-metadata/reference)
|
1632
|
+
%Image::ExifTool::XMP::GDepth = (
|
1633
|
+
GROUPS => { 0 => 'XMP', 1 => 'XMP-GDepth', 2 => 'Image' },
|
1634
|
+
NAMESPACE => { 'GDepth' => 'http://ns.google.com/photos/1.0/depthmap/' },
|
1635
|
+
AVOID => 1, # (too potential tag name conflicts)
|
1636
|
+
NOTES => q{
|
1637
|
+
Google depthmap information. See
|
1638
|
+
L<https://developers.google.com/depthmap-metadata/> for the specification.
|
1639
|
+
},
|
1640
|
+
WRITABLE => 'string', # (default to string-type tags)
|
1641
|
+
PRIORITY => 0,
|
1642
|
+
Format => {
|
1643
|
+
PrintConv => {
|
1644
|
+
RangeInverse => 'RangeInverse',
|
1645
|
+
RangeLinear => 'RangeLinear',
|
1646
|
+
},
|
1647
|
+
},
|
1648
|
+
Near => { Writable => 'real' },
|
1649
|
+
Far => { Writable => 'real' },
|
1650
|
+
Mime => { },
|
1651
|
+
Data => {
|
1652
|
+
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1653
|
+
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1654
|
+
},
|
1655
|
+
Units => { },
|
1656
|
+
MeasureType => {
|
1657
|
+
PrintConv => {
|
1658
|
+
OpticalAxis => 'OpticalAxis',
|
1659
|
+
OpticalRay => 'OpticalRay',
|
1660
|
+
},
|
1661
|
+
},
|
1662
|
+
ConfidenceMime => { },
|
1663
|
+
Confidence => {
|
1664
|
+
ValueConv => 'Image::ExifTool::XMP::DecodeBase64($val)',
|
1665
|
+
ValueConvInv => 'Image::ExifTool::XMP::EncodeBase64($val)',
|
1666
|
+
},
|
1667
|
+
Manufacturer=> { },
|
1668
|
+
Model => { },
|
1669
|
+
Software => { },
|
1670
|
+
ImageWidth => { Writable => 'real' },
|
1671
|
+
ImageHeight => { Writable => 'real' },
|
1606
1672
|
);
|
1607
1673
|
|
1608
1674
|
# Getty Images namespace (ref PH)
|
@@ -1670,21 +1736,6 @@ my %sSubVersion = (
|
|
1670
1736
|
NAMESPACE => undef, # variable namespace
|
1671
1737
|
);
|
1672
1738
|
|
1673
|
-
# set "Avoid" flag for all PRISM tags
|
1674
|
-
my ($table, $key);
|
1675
|
-
foreach $table (
|
1676
|
-
\%Image::ExifTool::XMP::prism,
|
1677
|
-
\%Image::ExifTool::XMP::prl,
|
1678
|
-
\%Image::ExifTool::XMP::pur,
|
1679
|
-
\%Image::ExifTool::XMP::pmi,
|
1680
|
-
\%Image::ExifTool::XMP::prm)
|
1681
|
-
{
|
1682
|
-
foreach $key (TagTableKeys($table)) {
|
1683
|
-
$$table{$key}{Avoid} = 1;
|
1684
|
-
}
|
1685
|
-
}
|
1686
|
-
|
1687
|
-
|
1688
1739
|
1; #end
|
1689
1740
|
|
1690
1741
|
__END__
|