1 | #------------------------------------------------------------------------------
|
---|
2 | # File: Microsoft.pm
|
---|
3 | #
|
---|
4 | # Description: Definitions for custom Microsoft tags
|
---|
5 | #
|
---|
6 | # Revisions: 2010/10/01 - P. Harvey Created
|
---|
7 | # 2011/10/05 - PH Added ProcessXtra()
|
---|
8 | #
|
---|
9 | # References: 1) http://research.microsoft.com/en-us/um/redmond/groups/ivm/hdview/hdmetadataspec.htm
|
---|
10 | #------------------------------------------------------------------------------
|
---|
11 |
|
---|
12 | package Image::ExifTool::Microsoft;
|
---|
13 |
|
---|
14 | use strict;
|
---|
15 | use vars qw($VERSION);
|
---|
16 | use Image::ExifTool qw(:DataAccess :Utils);
|
---|
17 | use Image::ExifTool::XMP;
|
---|
18 |
|
---|
19 | $VERSION = '1.20';
|
---|
20 |
|
---|
21 | sub ProcessXtra($$$);
|
---|
22 |
|
---|
23 | # tags written by Microsoft HDView (ref 1)
|
---|
24 | %Image::ExifTool::Microsoft::Stitch = (
|
---|
25 | PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
---|
26 | WRITE_PROC => \&Image::ExifTool::WriteBinaryData,
|
---|
27 | CHECK_PROC => \&Image::ExifTool::CheckBinaryData,
|
---|
28 | WRITABLE => 1,
|
---|
29 | FORMAT => 'float',
|
---|
30 | FIRST_ENTRY => 0,
|
---|
31 | GROUPS => { 0 => 'MakerNotes', 2 => 'Image' },
|
---|
32 | NOTES => q{
|
---|
33 | Information found in the Microsoft custom EXIF tag 0x4748, as written by
|
---|
34 | Windows Live Photo Gallery.
|
---|
35 | },
|
---|
36 | 0 => {
|
---|
37 | Name => 'PanoramicStitchVersion',
|
---|
38 | Format => 'int32u',
|
---|
39 | },
|
---|
40 | 1 => {
|
---|
41 | Name => 'PanoramicStitchCameraMotion',
|
---|
42 | Format => 'int32u',
|
---|
43 | PrintConv => {
|
---|
44 | 2 => 'Rigid Scale',
|
---|
45 | 3 => 'Affine',
|
---|
46 | 4 => '3D Rotation',
|
---|
47 | 5 => 'Homography',
|
---|
48 | },
|
---|
49 | },
|
---|
50 | 2 => {
|
---|
51 | Name => 'PanoramicStitchMapType',
|
---|
52 | Format => 'int32u',
|
---|
53 | PrintConv => {
|
---|
54 | 0 => 'Perspective',
|
---|
55 | 1 => 'Horizontal Cylindrical',
|
---|
56 | 2 => 'Horizontal Spherical',
|
---|
57 | 257 => 'Vertical Cylindrical',
|
---|
58 | 258 => 'Vertical Spherical',
|
---|
59 | },
|
---|
60 | },
|
---|
61 | 3 => 'PanoramicStitchTheta0',
|
---|
62 | 4 => 'PanoramicStitchTheta1',
|
---|
63 | 5 => 'PanoramicStitchPhi0',
|
---|
64 | 6 => 'PanoramicStitchPhi1',
|
---|
65 | );
|
---|
66 |
|
---|
67 | # Microsoft Photo schema properties (MicrosoftPhoto) (ref PH)
|
---|
68 | %Image::ExifTool::Microsoft::XMP = (
|
---|
69 | %Image::ExifTool::XMP::xmpTableDefaults,
|
---|
70 | GROUPS => { 0 => 'XMP', 1 => 'XMP-microsoft', 2 => 'Image' },
|
---|
71 | NAMESPACE => 'MicrosoftPhoto',
|
---|
72 | TABLE_DESC => 'XMP Microsoft',
|
---|
73 | VARS => { NO_ID => 1 },
|
---|
74 | NOTES => q{
|
---|
75 | Microsoft Photo 1.0 schema XMP tags. This is likely not a complete list,
|
---|
76 | but represents tags which have been observed in sample images. The actual
|
---|
77 | namespace prefix is "MicrosoftPhoto", but ExifTool shortens this in the
|
---|
78 | family 1 group name.
|
---|
79 | },
|
---|
80 | CameraSerialNumber => { },
|
---|
81 | DateAcquired => { Groups => { 2 => 'Time' }, %Image::ExifTool::XMP::dateTimeInfo },
|
---|
82 | FlashManufacturer => { },
|
---|
83 | FlashModel => { },
|
---|
84 | LastKeywordIPTC => { List => 'Bag' },
|
---|
85 | LastKeywordXMP => { List => 'Bag' },
|
---|
86 | LensManufacturer => { },
|
---|
87 | LensModel => { Avoid => 1 },
|
---|
88 | Rating => {
|
---|
89 | Name => 'RatingPercent',
|
---|
90 | Notes => q{
|
---|
91 | XMP-xmp:Rating values of 1,2,3,4 and 5 stars correspond to RatingPercent
|
---|
92 | values of 1,25,50,75 and 99 respectively
|
---|
93 | },
|
---|
94 | },
|
---|
95 | CreatorAppId => { Name => 'CreatorAppID' },
|
---|
96 | CreatorOpenWithUIOptions => { },
|
---|
97 | ItemSubType => { },
|
---|
98 | );
|
---|
99 |
|
---|
100 | # Microsoft Photo 1.1 schema properties (MP1 - written as 'prefix0' by MSPhoto) (ref PH)
|
---|
101 | %Image::ExifTool::Microsoft::MP1 = (
|
---|
102 | %Image::ExifTool::XMP::xmpTableDefaults,
|
---|
103 | GROUPS => { 0 => 'XMP', 1 => 'XMP-MP1', 2 => 'Image' },
|
---|
104 | NAMESPACE => 'MP1',
|
---|
105 | TABLE_DESC => 'XMP Microsoft Photo',
|
---|
106 | VARS => { NO_ID => 1 },
|
---|
107 | NOTES => q{
|
---|
108 | Microsoft Photo 1.1 schema XMP tags which have been observed.
|
---|
109 | },
|
---|
110 | PanoramicStitchCameraMotion => {
|
---|
111 | PrintConv => {
|
---|
112 | 'RigidScale' => 'Rigid Scale',
|
---|
113 | 'Affine' => 'Affine',
|
---|
114 | '3DRotation' => '3D Rotation',
|
---|
115 | 'Homography' => 'Homography',
|
---|
116 | },
|
---|
117 | },
|
---|
118 | PanoramicStitchMapType => {
|
---|
119 | PrintConv => {
|
---|
120 | 'Perspective' => 'Perspective',
|
---|
121 | 'Horizontal-Cylindrical' => 'Horizontal Cylindrical',
|
---|
122 | 'Horizontal-Spherical' => 'Horizontal Spherical',
|
---|
123 | 'Vertical-Cylindrical' => 'Vertical Cylindrical',
|
---|
124 | 'Vertical-Spherical' => 'Vertical Spherical',
|
---|
125 | },
|
---|
126 | },
|
---|
127 | PanoramicStitchPhi0 => { Writable => 'real' },
|
---|
128 | PanoramicStitchPhi1 => { Writable => 'real' },
|
---|
129 | PanoramicStitchTheta0 => { Writable => 'real' },
|
---|
130 | PanoramicStitchTheta1 => { Writable => 'real' },
|
---|
131 | WhiteBalance0 => { Writable => 'real' },
|
---|
132 | WhiteBalance1 => { Writable => 'real' },
|
---|
133 | WhiteBalance2 => { Writable => 'real' },
|
---|
134 | Brightness => { Avoid => 1 },
|
---|
135 | Contrast => { Avoid => 1 },
|
---|
136 | CameraModelID => { Avoid => 1 },
|
---|
137 | ExposureCompensation => { Avoid => 1 },
|
---|
138 | PipelineVersion => { },
|
---|
139 | StreamType => { },
|
---|
140 | );
|
---|
141 |
|
---|
142 | # Microsoft Photo 1.2 schema properties (MP) (ref PH)
|
---|
143 | # (also ref http://msdn.microsoft.com/en-us/library/windows/desktop/ee719905(v=vs.85).aspx)
|
---|
144 | my %sRegions = (
|
---|
145 | STRUCT_NAME => 'Microsoft Regions',
|
---|
146 | NAMESPACE => 'MPReg',
|
---|
147 | NOTES => q{
|
---|
148 | Note that PersonLiveIdCID element is called PersonLiveCID according to the
|
---|
149 | Microsoft specification, but in practice their software actually writes
|
---|
150 | PersonLiveIdCID, so ExifTool uses this too.
|
---|
151 | },
|
---|
152 | Rectangle => { },
|
---|
153 | PersonDisplayName => { },
|
---|
154 | PersonEmailDigest => { },
|
---|
155 | PersonLiveIdCID => { }, # (see https://exiftool.org/forum/index.php?topic=4274.msg20368#msg20368)
|
---|
156 | PersonSourceID => { },
|
---|
157 | );
|
---|
158 | %Image::ExifTool::Microsoft::MP = (
|
---|
159 | %Image::ExifTool::XMP::xmpTableDefaults,
|
---|
160 | GROUPS => { 0 => 'XMP', 1 => 'XMP-MP', 2 => 'Image' },
|
---|
161 | NAMESPACE => 'MP',
|
---|
162 | TABLE_DESC => 'XMP Microsoft Photo',
|
---|
163 | VARS => { NO_ID => 1 },
|
---|
164 | NOTES => q{
|
---|
165 | Microsoft Photo 1.2 schema XMP tags which have been observed.
|
---|
166 | },
|
---|
167 | RegionInfo => {
|
---|
168 | Name => 'RegionInfoMP',
|
---|
169 | Struct => {
|
---|
170 | STRUCT_NAME => 'Microsoft RegionInfo',
|
---|
171 | NAMESPACE => 'MPRI',
|
---|
172 | Regions => { Struct => \%sRegions, List => 'Bag' },
|
---|
173 | DateRegionsValid => {
|
---|
174 | Writable => 'date',
|
---|
175 | Shift => 'Time',
|
---|
176 | Groups => { 2 => 'Time'},
|
---|
177 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
178 | PrintConvInv => '$self->InverseDateTime($val,undef,1)',
|
---|
179 | },
|
---|
180 | },
|
---|
181 | },
|
---|
182 | # remove "MP" from tag name (was added only to avoid conflict with XMP-mwg-rs:RegionInfo)
|
---|
183 | RegionInfoRegions => { Flat => 1, Name => 'RegionInfoRegions' },
|
---|
184 | RegionInfoDateRegionsValid => { Flat => 1, Name => 'RegionInfoDateRegionsValid' },
|
---|
185 | # shorten flattened Regions tag names to make them easier to use
|
---|
186 | RegionInfoRegionsRectangle => { Flat => 1, Name => 'RegionRectangle' },
|
---|
187 | RegionInfoRegionsPersonDisplayName => { Flat => 1, Name => 'RegionPersonDisplayName' },
|
---|
188 | RegionInfoRegionsPersonEmailDigest => { Flat => 1, Name => 'RegionPersonEmailDigest' },
|
---|
189 | RegionInfoRegionsPersonLiveIdCID => { Flat => 1, Name => 'RegionPersonLiveIdCID' },
|
---|
190 | RegionInfoRegionsPersonSourceID => { Flat => 1, Name => 'RegionPersonSourceID' },
|
---|
191 | );
|
---|
192 |
|
---|
193 | # Xtra tags written in MP4 files written by Microsoft Windows Media Player
|
---|
194 | # (ref http://msdn.microsoft.com/en-us/library/windows/desktop/dd562330(v=VS.85).aspx)
|
---|
195 | # Note: These tags are closely related to tags in Image::ExifTool::ASF::ExtendedDescr
|
---|
196 | # and Image::ExifTool::WTV::Metadata
|
---|
197 | %Image::ExifTool::Microsoft::Xtra = (
|
---|
198 | PROCESS_PROC => \&ProcessXtra,
|
---|
199 | GROUPS => { 0 => 'QuickTime', 2 => 'Video' },
|
---|
200 | VARS => { NO_ID => 1 },
|
---|
201 | NOTES => q{
|
---|
202 | Tags extracted from the Microsoft "Xtra" atom of QuickTime videos. Tag ID's
|
---|
203 | are not shown because some are unruly GUID's.
|
---|
204 | },
|
---|
205 | Abstract => { },
|
---|
206 | AcquisitionTime => { Groups => { 2 => 'Time' } },
|
---|
207 | AcquisitionTimeDay => { Groups => { 2 => 'Time' } },
|
---|
208 | AcquisitionTimeMonth => { Groups => { 2 => 'Time' } },
|
---|
209 | AcquisitionTimeYear => { Groups => { 2 => 'Time' } },
|
---|
210 | AcquisitionTimeYearMonth => { Groups => { 2 => 'Time' } },
|
---|
211 | AcquisitionTimeYearMonthDay => { Groups => { 2 => 'Time' } },
|
---|
212 | AlbumArtistSortOrder => { },
|
---|
213 | AlbumID => { },
|
---|
214 | AlbumIDAlbumArtist => { },
|
---|
215 | AlbumTitleSortOrder => { },
|
---|
216 | AlternateSourceURL => { },
|
---|
217 | AudioBitrate => { },
|
---|
218 | AudioFormat => { },
|
---|
219 | Author => { Groups => { 2 => 'Author' } },
|
---|
220 | AuthorSortOrder => { },
|
---|
221 | AverageLevel => { },
|
---|
222 | Bitrate => { },
|
---|
223 | BuyNow => { },
|
---|
224 | BuyTickets => { },
|
---|
225 | CallLetters => { },
|
---|
226 | CameraManufacturer => { },
|
---|
227 | CameraModel => { },
|
---|
228 | CDTrackEnabled => { },
|
---|
229 | Channels => { },
|
---|
230 | chapterNum => { },
|
---|
231 | Comment => { },
|
---|
232 | ContentDistributorDuration => { },
|
---|
233 | Copyright => { Groups => { 2 => 'Author' } },
|
---|
234 | Count => { },
|
---|
235 | CurrentBitrate => { },
|
---|
236 | Description => { },
|
---|
237 | DisplayArtist => { },
|
---|
238 | DLNAServerUDN => { },
|
---|
239 | DLNASourceURI => { },
|
---|
240 | DRMKeyID => { },
|
---|
241 | DRMIndividualizedVersion => { },
|
---|
242 | DTCPIPHost => { },
|
---|
243 | DTCPIPPort => { },
|
---|
244 | Duration => { },
|
---|
245 | DVDID => { },
|
---|
246 | Event => { },
|
---|
247 | FileSize => { },
|
---|
248 | FileType => { },
|
---|
249 | FourCC => { },
|
---|
250 | FormatTag => { },
|
---|
251 | FrameRate => { },
|
---|
252 | Frequency => { },
|
---|
253 | IsNetworkFeed => { },
|
---|
254 | Is_Protected => 'IsProtected',
|
---|
255 | IsVBR => { },
|
---|
256 | LeadPerformer => { },
|
---|
257 | LibraryID => { },
|
---|
258 | LibraryName => { },
|
---|
259 | Location => { },
|
---|
260 | MediaContentTypes => { },
|
---|
261 | MediaType => { },
|
---|
262 | ModifiedBy => { },
|
---|
263 | MoreInfo => { },
|
---|
264 | PartOfSet => { },
|
---|
265 | PeakValue => { },
|
---|
266 | PixelAspectRatioX => { },
|
---|
267 | PixelAspectRatioY => { },
|
---|
268 | PlaylistIndex => { },
|
---|
269 | Provider => { },
|
---|
270 | ProviderLogoURL => { },
|
---|
271 | ProviderURL => { },
|
---|
272 | RadioBand => { },
|
---|
273 | RadioFormat => { },
|
---|
274 | RatingOrg => { },
|
---|
275 | RecordingTime => { Groups => { 2 => 'Time' } },
|
---|
276 | RecordingTimeDay => { Groups => { 2 => 'Time' } },
|
---|
277 | RecordingTimeMonth => { Groups => { 2 => 'Time' } },
|
---|
278 | RecordingTimeYear => { Groups => { 2 => 'Time' } },
|
---|
279 | RecordingTimeYearMonth => { Groups => { 2 => 'Time' } },
|
---|
280 | RecordingTimeYearMonthDay => { Groups => { 2 => 'Time' } },
|
---|
281 | ReleaseDate => { Groups => { 2 => 'Time' } },
|
---|
282 | ReleaseDateDay => { Groups => { 2 => 'Time' } },
|
---|
283 | ReleaseDateMonth => { Groups => { 2 => 'Time' } },
|
---|
284 | ReleaseDateYear => { Groups => { 2 => 'Time' } },
|
---|
285 | ReleaseDateYearMonth => { Groups => { 2 => 'Time' } },
|
---|
286 | ReleaseDateYearMonthDay => { Groups => { 2 => 'Time' } },
|
---|
287 | RequestState => { },
|
---|
288 | ShadowFilePath => { },
|
---|
289 | SourceURL => { },
|
---|
290 | Subject => { },
|
---|
291 | SyncState => { },
|
---|
292 | Sync01 => { },
|
---|
293 | Sync02 => { },
|
---|
294 | Sync03 => { },
|
---|
295 | Sync04 => { },
|
---|
296 | Sync05 => { },
|
---|
297 | Sync06 => { },
|
---|
298 | Sync07 => { },
|
---|
299 | Sync08 => { },
|
---|
300 | Sync09 => { },
|
---|
301 | Sync10 => { },
|
---|
302 | Sync11 => { },
|
---|
303 | Sync12 => { },
|
---|
304 | Sync13 => { },
|
---|
305 | Sync14 => { },
|
---|
306 | Sync15 => { },
|
---|
307 | Sync16 => { },
|
---|
308 | SyncOnly => { },
|
---|
309 | Temporary => { },
|
---|
310 | Title => { },
|
---|
311 | titleNum => { },
|
---|
312 | TitleSortOrder => { },
|
---|
313 | TotalDuration => { },
|
---|
314 | TrackingID => { },
|
---|
315 | UserCustom1 => { },
|
---|
316 | UserCustom2 => { },
|
---|
317 | UserEffectiveRating => { },
|
---|
318 | UserLastPlayedTime => { },
|
---|
319 | UserPlayCount => { },
|
---|
320 | UserPlaycountAfternoon => { },
|
---|
321 | UserPlaycountEvening => { },
|
---|
322 | UserPlaycountMorning => { },
|
---|
323 | UserPlaycountNight => { },
|
---|
324 | UserPlaycountWeekday => { },
|
---|
325 | UserPlaycountWeekend => { },
|
---|
326 | UserRating => { },
|
---|
327 | UserServiceRating => { },
|
---|
328 | VideoBitrate => { },
|
---|
329 | VideoFormat => { },
|
---|
330 | 'WM/AlbumArtist' => 'AlbumArtist',
|
---|
331 | 'WM/AlbumCoverURL' => 'AlbumCoverURL',
|
---|
332 | 'WM/AlbumTitle' => 'AlbumTitle',
|
---|
333 | 'WM/BeatsPerMinute' => 'BeatsPerMinute',
|
---|
334 | 'WM/Category' => 'Category',
|
---|
335 | 'WM/Composer' => 'Composer',
|
---|
336 | 'WM/Conductor' => 'Conductor',
|
---|
337 | 'WM/ContentDistributor' => 'ContentDistributor',
|
---|
338 | 'WM/ContentDistributorType' => 'ContentDistributorType',
|
---|
339 | 'WM/ContentGroupDescription'=> 'ContentGroupDescription',
|
---|
340 | 'WM/Director' => 'Director',
|
---|
341 | 'WM/EncodingTime' => {
|
---|
342 | Name => 'EncodingTime',
|
---|
343 | Groups => { 2 => 'Time' },
|
---|
344 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
345 | },
|
---|
346 | 'WM/Genre' => 'Genre',
|
---|
347 | 'WM/GenreID' => 'GenreID',
|
---|
348 | 'WM/InitialKey' => 'InitialKey',
|
---|
349 | 'WM/Language' => 'Language',
|
---|
350 | 'WM/Lyrics' => 'Lyrics',
|
---|
351 | 'WM/MCDI' => 'MCDI',
|
---|
352 | 'WM/MediaClassPrimaryID' => {
|
---|
353 | Name => 'MediaClassPrimaryID',
|
---|
354 | PrintConv => { #http://msdn.microsoft.com/en-us/library/windows/desktop/dd757960(v=vs.85).aspx
|
---|
355 | 'D1607DBC-E323-4BE2-86A1-48A42A28441E' => 'Music',
|
---|
356 | 'DB9830BD-3AB3-4FAB-8A37-1A995F7FF74B' => 'Video',
|
---|
357 | '01CD0F29-DA4E-4157-897B-6275D50C4F11' => 'Audio (not music)',
|
---|
358 | 'FCF24A76-9A57-4036-990D-E35DD8B244E1' => 'Other (not audio or video)',
|
---|
359 | },
|
---|
360 | },
|
---|
361 | 'WM/MediaClassSecondaryID' => {
|
---|
362 | Name => 'MediaClassSecondaryID',
|
---|
363 | PrintConv => { #http://msdn.microsoft.com/en-us/library/windows/desktop/dd757960(v=vs.85).aspx
|
---|
364 | 'E0236BEB-C281-4EDE-A36D-7AF76A3D45B5' => 'Audio Book',
|
---|
365 | '3A172A13-2BD9-4831-835B-114F6A95943F' => 'Spoken Word',
|
---|
366 | '6677DB9B-E5A0-4063-A1AD-ACEB52840CF1' => 'Audio News',
|
---|
367 | '1B824A67-3F80-4E3E-9CDE-F7361B0F5F1B' => 'Talk Show',
|
---|
368 | '1FE2E091-4E1E-40CE-B22D-348C732E0B10' => 'Video News',
|
---|
369 | 'D6DE1D88-C77C-4593-BFBC-9C61E8C373E3' => 'Web-based Video',
|
---|
370 | '00033368-5009-4AC3-A820-5D2D09A4E7C1' => 'Sound Clip from Game',
|
---|
371 | 'F24FF731-96FC-4D0F-A2F5-5A3483682B1A' => 'Song from Game',
|
---|
372 | 'E3E689E2-BA8C-4330-96DF-A0EEEFFA6876' => 'Music Video',
|
---|
373 | 'B76628F4-300D-443D-9CB5-01C285109DAF' => 'Home Movie',
|
---|
374 | 'A9B87FC9-BD47-4BF0-AC4F-655B89F7D868' => 'Feature Film',
|
---|
375 | 'BA7F258A-62F7-47A9-B21F-4651C42A000E' => 'TV Show',
|
---|
376 | '44051B5B-B103-4B5C-92AB-93060A9463F0' => 'Corporate Video',
|
---|
377 | '0B710218-8C0C-475E-AF73-4C41C0C8F8CE' => 'Home Video from Pictures',
|
---|
378 | '00000000-0000-0000-0000-000000000000' => 'Unknown Content', #PH
|
---|
379 | },
|
---|
380 | },
|
---|
381 | 'WM/MediaOriginalBroadcastDateTime' => {
|
---|
382 | Name => 'MediaOriginalBroadcastDateTime',
|
---|
383 | Groups => { 2 => 'Time' },
|
---|
384 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
385 | },
|
---|
386 | 'WM/MediaOriginalChannel' => 'MediaOriginalChannel',
|
---|
387 | 'WM/MediaStationName' => 'MediaStationName',
|
---|
388 | 'WM/Mood' => 'Mood',
|
---|
389 | 'WM/OriginalAlbumTitle' => 'OriginalAlbumTitle',
|
---|
390 | 'WM/OriginalArtist' => 'OriginalArtist',
|
---|
391 | 'WM/OriginalLyricist' => 'OriginalLyricist',
|
---|
392 | 'WM/ParentalRating' => 'ParentalRating',
|
---|
393 | 'WM/PartOfSet' => 'PartOfSet',
|
---|
394 | 'WM/Period' => 'Period',
|
---|
395 | 'WM/Producer' => 'Producer',
|
---|
396 | 'WM/ProtectionType' => 'ProtectionType',
|
---|
397 | 'WM/Provider' => 'Provider',
|
---|
398 | 'WM/ProviderRating' => 'ProviderRating',
|
---|
399 | 'WM/ProviderStyle' => 'ProviderStyle',
|
---|
400 | 'WM/Publisher' => 'Publisher',
|
---|
401 | 'WM/SharedUserRating' => 'SharedUserRating',
|
---|
402 | 'WM/SubscriptionContentID' => 'SubscriptionContentID',
|
---|
403 | 'WM/SubTitle' => 'Subtitle',
|
---|
404 | 'WM/SubTitleDescription' => 'SubtitleDescription',
|
---|
405 | 'WM/TrackNumber' => 'TrackNumber',
|
---|
406 | 'WM/UniqueFileIdentifier' => 'UniqueFileIdentifier',
|
---|
407 | 'WM/VideoFrameRate' => 'VideoFrameRate',
|
---|
408 | 'WM/VideoHeight' => 'VideoHeight',
|
---|
409 | 'WM/VideoWidth' => 'VideoWidth',
|
---|
410 | 'WM/WMCollectionGroupID' => 'WMCollectionGroupID',
|
---|
411 | 'WM/WMCollectionID' => 'WMCollectionID',
|
---|
412 | 'WM/WMContentID' => 'WMContentID',
|
---|
413 | 'WM/WMShadowFileSourceDRMType' => 'WMShadowFileSourceDRMType',
|
---|
414 | 'WM/WMShadowFileSourceFileType' => 'WMShadowFileSourceFileType',
|
---|
415 | 'WM/Writer' => 'Writer',
|
---|
416 | 'WM/Year' => { Name => 'Year', Groups => { 2 => 'Time' } },
|
---|
417 |
|
---|
418 | # I can't find documentation for the following tags in videos,
|
---|
419 | # but the tag ID's correspond to Microsoft property GUID+ID's
|
---|
420 | # References:
|
---|
421 | # http://msdn.microsoft.com/en-us/library/cc251929%28v=prot.10%29.aspx
|
---|
422 | # http://multi-rename-script.googlecode.com/svn-history/r4/trunk/plugins/ShellDetails/ShellDetails.ini
|
---|
423 | # I have observed only 1 so far:
|
---|
424 | '{2CBAA8F5-D81F-47CA-B17A-F8D822300131} 100' => {
|
---|
425 | Name => 'DateAcquired',
|
---|
426 | Groups => { 2 => 'Time' },
|
---|
427 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
428 | },
|
---|
429 | # the following have not yet been observed...
|
---|
430 | '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 10' => 'Name',
|
---|
431 | '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 12' => 'Size',
|
---|
432 | '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 4' => 'Type',
|
---|
433 | '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 14' => {
|
---|
434 | Name => 'DateModified',
|
---|
435 | Groups => { 2 => 'Time' },
|
---|
436 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
437 | },
|
---|
438 | '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 15' => {
|
---|
439 | Name => 'DateCreated',
|
---|
440 | Groups => { 2 => 'Time' },
|
---|
441 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
442 | },
|
---|
443 | '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 16' => {
|
---|
444 | Name => 'DateAccessed',
|
---|
445 | Groups => { 2 => 'Time' },
|
---|
446 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
447 | },
|
---|
448 | '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 13' => 'Attributes',
|
---|
449 | '{D8C3986F-813B-449C-845D-87B95D674ADE} 2' => 'Status',
|
---|
450 | '{9B174B34-40FF-11D2-A27E-00C04FC30871} 4' => 'Owner',
|
---|
451 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 4' => {
|
---|
452 | Name => 'Author',
|
---|
453 | Groups => { 2 => 'Author' },
|
---|
454 | },
|
---|
455 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 2' => 'Title',
|
---|
456 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 3' => 'Subject',
|
---|
457 | '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 2' => 'Category',
|
---|
458 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 14' => 'Pages',
|
---|
459 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 6' => 'Comments',
|
---|
460 | '{64440492-4C8B-11D1-8B70-080036B11A03} 11' => {
|
---|
461 | Name => 'Copyright',
|
---|
462 | Groups => { 2 => 'Author' },
|
---|
463 | },
|
---|
464 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 2' => 'Artist',
|
---|
465 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 4' => 'AlbumTitle',
|
---|
466 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 5' => {
|
---|
467 | Name => 'Year',
|
---|
468 | Groups => { 2 => 'Time' },
|
---|
469 | },
|
---|
470 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 7' => 'TrackNumber',
|
---|
471 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 11' => 'Genre',
|
---|
472 | '{64440490-4C8B-11D1-8B70-080036B11A03} 3' => 'Duration',
|
---|
473 | '{64440490-4C8B-11D1-8B70-080036B11A03} 4' => 'Bitrate',
|
---|
474 | '{AEAC19E4-89AE-4508-B9B7-BB867ABEE2ED} 2' => 'Protected',
|
---|
475 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 272' => 'CameraModel',
|
---|
476 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 36867' => {
|
---|
477 | Name => 'DatePictureTaken',
|
---|
478 | Groups => { 2 => 'Time' },
|
---|
479 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
480 | },
|
---|
481 | '{6444048F-4C8B-11D1-8B70-080036B11A03} 13' => 'Dimensions',
|
---|
482 | '{6444048F-4C8B-11D1-8B70-080036B11A03} 3' => 'Untitled0',
|
---|
483 | '{6444048F-4C8B-11D1-8B70-080036B11A03} 4' => 'Untitled1',
|
---|
484 | '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 2' => 'EpisodeName',
|
---|
485 | '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 3' => 'ProgramDescription',
|
---|
486 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 12' => 'Untitled2',
|
---|
487 | '{64440490-4C8B-11D1-8B70-080036B11A03} 6' => 'AudioSampleSize',
|
---|
488 | '{64440490-4C8B-11D1-8B70-080036B11A03} 5' => 'AudioSampleRate',
|
---|
489 | '{64440490-4C8B-11D1-8B70-080036B11A03} 7' => 'Channels',
|
---|
490 | '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 15' => 'Company',
|
---|
491 | '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 3' => 'Description',
|
---|
492 | '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 4' => 'FileVersion',
|
---|
493 | '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 7' => 'ProductName',
|
---|
494 | '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 8' => 'ProductVersion',
|
---|
495 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 5' => 'Keywords',
|
---|
496 | '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 11' => 'Type',
|
---|
497 | '{6D24888F-4718-4BDA-AFED-EA0FB4386CD8} 100' => 'OfflineStatus',
|
---|
498 | '{A94688B6-7D9F-4570-A648-E3DFC0AB2B3F} 100' => 'OfflineAvailability',
|
---|
499 | '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 9' => 'PerceivedType',
|
---|
500 | '{1E3EE840-BC2B-476C-8237-2ACD1A839B22} 3' => 'Kinds',
|
---|
501 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 36' => 'Conductors',
|
---|
502 | '{64440492-4C8B-11D1-8B70-080036B11A03} 9' => 'Rating',
|
---|
503 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 271' => 'CameraMaker',
|
---|
504 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 18' => 'ProgramName',
|
---|
505 | '{293CA35A-09AA-4DD2-B180-1FE245728A52} 100' => 'Duration',
|
---|
506 | '{BFEE9149-E3E2-49A7-A862-C05988145CEC} 100' => 'IsOnline',
|
---|
507 | '{315B9C8D-80A9-4EF9-AE16-8E746DA51D70} 100' => 'IsRecurring',
|
---|
508 | '{F6272D18-CECC-40B1-B26A-3911717AA7BD} 100' => 'Location',
|
---|
509 | '{D55BAE5A-3892-417A-A649-C6AC5AAAEAB3} 100' => 'OptionalAttendeeAddresses',
|
---|
510 | '{09429607-582D-437F-84C3-DE93A2B24C3C} 100' => 'OptionalAttendees',
|
---|
511 | '{744C8242-4DF5-456C-AB9E-014EFB9021E3} 100' => 'OrganizerAddress',
|
---|
512 | '{AAA660F9-9865-458E-B484-01BC7FE3973E} 100' => 'OrganizerName',
|
---|
513 | '{72FC5BA4-24F9-4011-9F3F-ADD27AFAD818} 100' => 'ReminderTime',
|
---|
514 | '{0BA7D6C3-568D-4159-AB91-781A91FB71E5} 100' => 'RequiredAttendeeAddresses',
|
---|
515 | '{B33AF30B-F552-4584-936C-CB93E5CDA29F} 100' => 'RequiredAttendees',
|
---|
516 | '{00F58A38-C54B-4C40-8696-97235980EAE1} 100' => 'Resources',
|
---|
517 | '{5BF396D4-5EB2-466F-BDE9-2FB3F2361D6E} 100' => 'Free-busyStatus',
|
---|
518 | '{9B174B35-40FF-11D2-A27E-00C04FC30871} 3' => 'TotalSize',
|
---|
519 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 9' => 'AccountName',
|
---|
520 | '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 5' => 'Computer',
|
---|
521 | '{9AD5BADB-CEA7-4470-A03D-B84E51B9949E} 100' => 'Anniversary',
|
---|
522 | '{CD102C9C-5540-4A88-A6F6-64E4981C8CD1} 100' => 'AssistantsName',
|
---|
523 | '{9A93244D-A7AD-4FF8-9B99-45EE4CC09AF6} 100' => 'AssistantsPhone',
|
---|
524 | '{176DC63C-2688-4E89-8143-A347800F25E9} 47' => 'Birthday',
|
---|
525 | '{730FB6DD-CF7C-426B-A03F-BD166CC9EE24} 100' => 'BusinessAddress',
|
---|
526 | '{402B5934-EC5A-48C3-93E6-85E86A2D934E} 100' => 'BusinessCity',
|
---|
527 | '{B0B87314-FCF6-4FEB-8DFF-A50DA6AF561C} 100' => 'BusinessCountry-Region',
|
---|
528 | '{BC4E71CE-17F9-48D5-BEE9-021DF0EA5409} 100' => 'BusinessPOBox',
|
---|
529 | '{E1D4A09E-D758-4CD1-B6EC-34A8B5A73F80} 100' => 'BusinessPostalCode',
|
---|
530 | '{446F787F-10C4-41CB-A6C4-4D0343551597} 100' => 'BusinessStateOrProvince',
|
---|
531 | '{DDD1460F-C0BF-4553-8CE4-10433C908FB0} 100' => 'BusinessStreet',
|
---|
532 | '{91EFF6F3-2E27-42CA-933E-7C999FBE310B} 100' => 'BusinessFax',
|
---|
533 | '{56310920-2491-4919-99CE-EADB06FAFDB2} 100' => 'BusinessHomePage',
|
---|
534 | '{6A15E5A0-0A1E-4CD7-BB8C-D2F1B0C929BC} 100' => 'BusinessPhone',
|
---|
535 | '{BF53D1C3-49E0-4F7F-8567-5A821D8AC542} 100' => 'CallbackNumber',
|
---|
536 | '{8FDC6DEA-B929-412B-BA90-397A257465FE} 100' => 'CarPhone',
|
---|
537 | '{D4729704-8EF1-43EF-9024-2BD381187FD5} 100' => 'Children',
|
---|
538 | '{8589E481-6040-473D-B171-7FA89C2708ED} 100' => 'CompanyMainPhone',
|
---|
539 | '{FC9F7306-FF8F-4D49-9FB6-3FFE5C0951EC} 100' => 'Department',
|
---|
540 | '{F8FA7FA3-D12B-4785-8A4E-691A94F7A3E7} 100' => 'E-mailAddress',
|
---|
541 | '{38965063-EDC8-4268-8491-B7723172CF29} 100' => 'E-mail2',
|
---|
542 | '{644D37B4-E1B3-4BAD-B099-7E7C04966ACA} 100' => 'E-mail3',
|
---|
543 | '{84D8F337-981D-44B3-9615-C7596DBA17E3} 100' => 'E-mailList',
|
---|
544 | '{CC6F4F24-6083-4BD4-8754-674D0DE87AB8} 100' => 'E-mailDisplayName',
|
---|
545 | '{F1A24AA7-9CA7-40F6-89EC-97DEF9FFE8DB} 100' => 'FileAs',
|
---|
546 | '{14977844-6B49-4AAD-A714-A4513BF60460} 100' => 'FirstName',
|
---|
547 | '{635E9051-50A5-4BA2-B9DB-4ED056C77296} 100' => 'FullName',
|
---|
548 | '{3C8CEE58-D4F0-4CF9-B756-4E5D24447BCD} 100' => 'Gender',
|
---|
549 | '{176DC63C-2688-4E89-8143-A347800F25E9} 70' => 'GivenName',
|
---|
550 | '{5DC2253F-5E11-4ADF-9CFE-910DD01E3E70} 100' => 'Hobbies',
|
---|
551 | '{98F98354-617A-46B8-8560-5B1B64BF1F89} 100' => 'HomeAddress',
|
---|
552 | '{176DC63C-2688-4E89-8143-A347800F25E9} 65' => 'HomeCity',
|
---|
553 | '{08A65AA1-F4C9-43DD-9DDF-A33D8E7EAD85} 100' => 'HomeCountry-Region',
|
---|
554 | '{7B9F6399-0A3F-4B12-89BD-4ADC51C918AF} 100' => 'HomePOBox',
|
---|
555 | '{8AFCC170-8A46-4B53-9EEE-90BAE7151E62} 100' => 'HomePostalCode',
|
---|
556 | '{C89A23D0-7D6D-4EB8-87D4-776A82D493E5} 100' => 'HomeStateOrProvince',
|
---|
557 | '{0ADEF160-DB3F-4308-9A21-06237B16FA2A} 100' => 'HomeStreet',
|
---|
558 | '{660E04D6-81AB-4977-A09F-82313113AB26} 100' => 'HomeFax',
|
---|
559 | '{176DC63C-2688-4E89-8143-A347800F25E9} 20' => 'HomePhone',
|
---|
560 | '{D68DBD8A-3374-4B81-9972-3EC30682DB3D} 100' => 'IMAddresses',
|
---|
561 | '{F3D8F40D-50CB-44A2-9718-40CB9119495D} 100' => 'Initials',
|
---|
562 | '{176DC63C-2688-4E89-8143-A347800F25E9} 6' => 'JobTitle',
|
---|
563 | '{97B0AD89-DF49-49CC-834E-660974FD755B} 100' => 'Label',
|
---|
564 | '{8F367200-C270-457C-B1D4-E07C5BCD90C7} 100' => 'LastName',
|
---|
565 | '{C0AC206A-827E-4650-95AE-77E2BB74FCC9} 100' => 'MailingAddress',
|
---|
566 | '{176DC63C-2688-4E89-8143-A347800F25E9} 71' => 'MiddleName',
|
---|
567 | '{176DC63C-2688-4E89-8143-A347800F25E9} 35' => 'CellPhone',
|
---|
568 | '{176DC63C-2688-4E89-8143-A347800F25E9} 74' => 'Nickname',
|
---|
569 | '{176DC63C-2688-4E89-8143-A347800F25E9} 7' => 'OfficeLocation',
|
---|
570 | '{508161FA-313B-43D5-83A1-C1ACCF68622C} 100' => 'OtherAddress',
|
---|
571 | '{6E682923-7F7B-4F0C-A337-CFCA296687BF} 100' => 'OtherCity',
|
---|
572 | '{8F167568-0AAE-4322-8ED9-6055B7B0E398} 100' => 'OtherCountry-Region',
|
---|
573 | '{8B26EA41-058F-43F6-AECC-4035681CE977} 100' => 'OtherPOBox',
|
---|
574 | '{95C656C1-2ABF-4148-9ED3-9EC602E3B7CD} 100' => 'OtherPostalCode',
|
---|
575 | '{71B377D6-E570-425F-A170-809FAE73E54E} 100' => 'OtherStateOrProvince',
|
---|
576 | '{FF962609-B7D6-4999-862D-95180D529AEA} 100' => 'OtherStreet',
|
---|
577 | '{D6304E01-F8F5-4F45-8B15-D024A6296789} 100' => 'Pager',
|
---|
578 | '{176DC63C-2688-4E89-8143-A347800F25E9} 69' => 'PersonalTitle',
|
---|
579 | '{C8EA94F0-A9E3-4969-A94B-9C62A95324E0} 100' => 'City',
|
---|
580 | '{E53D799D-0F3F-466E-B2FF-74634A3CB7A4} 100' => 'Country-Region',
|
---|
581 | '{DE5EF3C7-46E1-484E-9999-62C5308394C1} 100' => 'POBox',
|
---|
582 | '{18BBD425-ECFD-46EF-B612-7B4A6034EDA0} 100' => 'PostalCode',
|
---|
583 | '{F1176DFE-7138-4640-8B4C-AE375DC70A6D} 100' => 'StateOrProvince',
|
---|
584 | '{63C25B20-96BE-488F-8788-C09C407AD812} 100' => 'Street',
|
---|
585 | '{176DC63C-2688-4E89-8143-A347800F25E9} 48' => 'PrimaryE-mail',
|
---|
586 | '{176DC63C-2688-4E89-8143-A347800F25E9} 25' => 'PrimaryPhone',
|
---|
587 | '{7268AF55-1CE4-4F6E-A41F-B6E4EF10E4A9} 100' => 'Profession',
|
---|
588 | '{9D2408B6-3167-422B-82B0-F583B7A7CFE3} 100' => 'Spouse',
|
---|
589 | '{176DC63C-2688-4E89-8143-A347800F25E9} 73' => 'Suffix',
|
---|
590 | '{AAF16BAC-2B55-45E6-9F6D-415EB94910DF} 100' => 'TTY-TTDPhone',
|
---|
591 | '{C554493C-C1F7-40C1-A76C-EF8C0614003E} 100' => 'Telex',
|
---|
592 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 18' => 'Webpage',
|
---|
593 | '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 27' => 'Status',
|
---|
594 | '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 26' => 'ContentType',
|
---|
595 | '{43F8D7B7-A444-4F87-9383-52271C9B915C} 100' => {
|
---|
596 | Name => 'DateArchived',
|
---|
597 | Groups => { 2 => 'Time' },
|
---|
598 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
599 | },
|
---|
600 | '{72FAB781-ACDA-43E5-B155-B2434F85E678} 100' => {
|
---|
601 | Name => 'DateCompleted',
|
---|
602 | Groups => { 2 => 'Time' },
|
---|
603 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
604 | },
|
---|
605 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 18258' => {
|
---|
606 | Name => 'DateImported',
|
---|
607 | Groups => { 2 => 'Time' },
|
---|
608 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
609 | },
|
---|
610 | '{276D7BB0-5B34-4FB0-AA4B-158ED12A1809} 100' => 'ClientID',
|
---|
611 | '{F334115E-DA1B-4509-9B3D-119504DC7ABB} 100' => 'Contributors',
|
---|
612 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 11' => 'LastPrinted',
|
---|
613 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 13' => {
|
---|
614 | Name => 'DateLastSaved',
|
---|
615 | Groups => { 2 => 'Time' },
|
---|
616 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
617 | },
|
---|
618 | '{1E005EE6-BF27-428B-B01C-79676ACD2870} 100' => 'Division',
|
---|
619 | '{E08805C8-E395-40DF-80D2-54F0D6C43154} 100' => 'DocumentID',
|
---|
620 | '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 7' => 'Slides',
|
---|
621 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 10' => 'TotalEditingTime',
|
---|
622 | '{F29F85E0-4FF9-1068-AB91-08002B27B3D9} 15' => 'WordCount',
|
---|
623 | '{3F8472B5-E0AF-4DB2-8071-C53FE76AE7CE} 100' => 'DueDate',
|
---|
624 | '{C75FAA05-96FD-49E7-9CB4-9F601082D553} 100' => 'EndDate',
|
---|
625 | '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 12' => 'FileCount',
|
---|
626 | '{41CF5AE0-F75A-4806-BD87-59C7D9248EB9} 100' => 'WindowsFileName',
|
---|
627 | '{67DF94DE-0CA7-4D6F-B792-053A3E4F03CF} 100' => 'FlagColor',
|
---|
628 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 12' => 'FlagStatus',
|
---|
629 | '{9B174B35-40FF-11D2-A27E-00C04FC30871} 2' => 'SpaceFree',
|
---|
630 | '{6444048F-4C8B-11D1-8B70-080036B11A03} 7' => 'BitDepth',
|
---|
631 | '{6444048F-4C8B-11D1-8B70-080036B11A03} 5' => 'HorizontalResolution',
|
---|
632 | '{6444048F-4C8B-11D1-8B70-080036B11A03} 6' => 'VerticalResolution',
|
---|
633 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 11' => 'Importance',
|
---|
634 | '{F23F425C-71A1-4FA8-922F-678EA4A60408} 100' => 'IsAttachment',
|
---|
635 | '{5CDA5FC8-33EE-4FF3-9094-AE7BD8868C4D} 100' => 'IsDeleted',
|
---|
636 | '{5DA84765-E3FF-4278-86B0-A27967FBDD03} 100' => 'HasFlag',
|
---|
637 | '{A6F360D2-55F9-48DE-B909-620E090A647C} 100' => 'IsCompleted',
|
---|
638 | '{346C8BD1-2E6A-4C45-89A4-61B78E8E700F} 100' => 'Incomplete',
|
---|
639 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 10' => 'ReadStatus',
|
---|
640 | '{EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902} 100' => 'Shared',
|
---|
641 | '{D0A04F0A-462A-48A4-BB2F-3706E88DBD7D} 100' => {
|
---|
642 | Name => 'Creator',
|
---|
643 | Groups => { 2 => 'Author' },
|
---|
644 | },
|
---|
645 | '{F7DB74B4-4287-4103-AFBA-F1B13DCD75CF} 100' => {
|
---|
646 | Name => 'Date',
|
---|
647 | Groups => { 2 => 'Time' },
|
---|
648 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
649 | },
|
---|
650 | '{B725F130-47EF-101A-A5F1-02608C9EEBAC} 2' => 'FolderName',
|
---|
651 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 6' => 'FolderPath',
|
---|
652 | '{DABD30ED-0043-4789-A7F8-D013A4736622} 100' => 'Folder',
|
---|
653 | '{D4D0AA16-9948-41A4-AA85-D97FF9646993} 100' => 'Participants',
|
---|
654 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 7' => 'Path',
|
---|
655 | '{DEA7C82C-1D89-4A66-9427-A4E3DEBABCB1} 100' => 'ContactNames',
|
---|
656 | '{95BEB1FC-326D-4644-B396-CD3ED90E6DDF} 100' => 'EntryType',
|
---|
657 | '{D5CDD502-2E9C-101B-9397-08002B2CF9AE} 28' => 'Language',
|
---|
658 | '{5CBF2787-48CF-4208-B90E-EE5E5D420294} 23' => {
|
---|
659 | Name => 'DateVisited',
|
---|
660 | Groups => { 2 => 'Time' },
|
---|
661 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
662 | },
|
---|
663 | '{5CBF2787-48CF-4208-B90E-EE5E5D420294} 21' => 'Description',
|
---|
664 | '{B9B4B3FC-2B51-4A42-B5D8-324146AFCF25} 3' => 'LinkStatus',
|
---|
665 | '{B9B4B3FC-2B51-4A42-B5D8-324146AFCF25} 2' => 'LinkTarget',
|
---|
666 | '{5CBF2787-48CF-4208-B90E-EE5E5D420294} 2' => 'URL',
|
---|
667 | '{2E4B640D-5019-46D8-8881-55414CC5CAA0} 100' => 'MediaCreated',
|
---|
668 | '{DE41CC29-6971-4290-B472-F59F2E2F31E2} 100' => {
|
---|
669 | Name => 'DateReleased',
|
---|
670 | Groups => { 2 => 'Time' },
|
---|
671 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
672 | },
|
---|
673 | '{64440492-4C8B-11D1-8B70-080036B11A03} 36' => 'EncodedBy',
|
---|
674 | '{64440492-4C8B-11D1-8B70-080036B11A03} 22' => 'Producers',
|
---|
675 | '{64440492-4C8B-11D1-8B70-080036B11A03} 30' => 'Publisher',
|
---|
676 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 38' => 'Subtitle',
|
---|
677 | '{64440492-4C8B-11D1-8B70-080036B11A03} 34' => 'UserWebURL',
|
---|
678 | '{64440492-4C8B-11D1-8B70-080036B11A03} 23' => 'Writers',
|
---|
679 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 21' => 'Attachments',
|
---|
680 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 2' => 'BccAddresses',
|
---|
681 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 3' => 'BccNames',
|
---|
682 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 4' => 'CcAddresses',
|
---|
683 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 5' => 'CcNames',
|
---|
684 | '{DC8F80BD-AF1E-4289-85B6-3DFC1B493992} 100' => 'ConversationID',
|
---|
685 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 20' => {
|
---|
686 | Name => 'DateReceived',
|
---|
687 | Groups => { 2 => 'Time' },
|
---|
688 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
689 | },
|
---|
690 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 19' => {
|
---|
691 | Name => 'DateSent',
|
---|
692 | Groups => { 2 => 'Time' },
|
---|
693 | PrintConv => '$self->ConvertDateTime($val)',
|
---|
694 | },
|
---|
695 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 13' => 'FromAddresses',
|
---|
696 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 14' => 'FromNames',
|
---|
697 | '{9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4} 8' => 'HasAttachments',
|
---|
698 | '{0BE1C8E7-1981-4676-AE14-FDD78F05A6E7} 100' => 'SenderAddress',
|
---|
699 | '{0DA41CFA-D224-4A18-AE2F-596158DB4B3A} 100' => 'SenderName',
|
---|
700 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 15' => 'Store',
|
---|
701 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 16' => 'ToAddresses',
|
---|
702 | '{BCCC8A3C-8CEF-42E5-9B1C-C69079398BC7} 100' => 'ToDoTitle',
|
---|
703 | '{E3E0584C-B788-4A5A-BB20-7F5A44C9ACDD} 17' => 'ToNames',
|
---|
704 | '{FDF84370-031A-4ADD-9E91-0D775F1C6605} 100' => 'Mileage',
|
---|
705 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 13' => 'AlbumArtist',
|
---|
706 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 35' => 'Beats-per-minute',
|
---|
707 | '{64440492-4C8B-11D1-8B70-080036B11A03} 19' => 'Composers',
|
---|
708 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 34' => 'InitialKey',
|
---|
709 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 39' => 'Mood',
|
---|
710 | '{56A3372E-CE9C-11D2-9F0E-006097C686F6} 37' => 'PartOfSet',
|
---|
711 | '{64440492-4C8B-11D1-8B70-080036B11A03} 31' => 'Period',
|
---|
712 | '{4776CAFA-BCE4-4CB1-A23E-265E76D8EB11} 100' => 'Color',
|
---|
713 | '{64440492-4C8B-11D1-8B70-080036B11A03} 21' => 'ParentalRating',
|
---|
714 | '{10984E0A-F9F2-4321-B7EF-BAF195AF4319} 100' => 'ParentalRatingReason',
|
---|
715 | '{9B174B35-40FF-11D2-A27E-00C04FC30871} 5' => 'SpaceUsed',
|
---|
716 | '{D35F743A-EB2E-47F2-A286-844132CB1427} 100' => 'ExifVersion',
|
---|
717 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 18248' => 'Event',
|
---|
718 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37380' => 'ExposureBias',
|
---|
719 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 34850' => 'ExposureProgram',
|
---|
720 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 33434' => 'ExposureTime',
|
---|
721 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 33437' => 'F-stop',
|
---|
722 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37385' => 'FlashMode',
|
---|
723 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37386' => 'FocalLength',
|
---|
724 | '{A0E74609-B84D-4F49-B860-462BD9971F98} 100' => 'FocalLength35mm',
|
---|
725 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 34855' => 'ISOSpeed',
|
---|
726 | '{E6DDCAF7-29C5-4F0A-9A68-D19412EC7090} 100' => 'LensMaker',
|
---|
727 | '{E1277516-2B5F-4869-89B1-2E585BD38B7A} 100' => 'LensModel',
|
---|
728 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37384' => 'LightSource',
|
---|
729 | '{08F6D7C2-E3F2-44FC-AF1E-5AA5C81A2D3E} 100' => 'MaxAperture',
|
---|
730 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37383' => 'MeteringMode',
|
---|
731 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 274' => 'Orientation',
|
---|
732 | '{6D217F6D-3F6A-4825-B470-5F03CA2FBE9B} 100' => 'ProgramMode',
|
---|
733 | '{49237325-A95A-4F67-B211-816B2D45D2E0} 100' => 'Saturation',
|
---|
734 | '{14B81DA1-0135-4D31-96D9-6CBFC9671A99} 37382' => 'SubjectDistance',
|
---|
735 | '{EE3D3D8A-5381-4CFA-B13B-AAF66B5F4EC9} 100' => 'WhiteBalance',
|
---|
736 | '{9C1FCF74-2D97-41BA-B4AE-CB2E3661A6E4} 5' => 'Priority',
|
---|
737 | '{39A7F922-477C-48DE-8BC8-B28441E342E3} 100' => 'Project',
|
---|
738 | '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 7' => 'ChannelNumber',
|
---|
739 | '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 12' => 'ClosedCaptioning',
|
---|
740 | '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 13' => 'Rerun',
|
---|
741 | '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 14' => 'SAP',
|
---|
742 | '{4684FE97-8765-4842-9C13-F006447B178C} 100' => 'BroadcastDate',
|
---|
743 | '{A5477F61-7A82-4ECA-9DDE-98B69B2479B3} 100' => 'RecordingTime',
|
---|
744 | '{6D748DE2-8D38-4CC3-AC60-F009B057C557} 5' => 'StationCallSign',
|
---|
745 | '{1B5439E7-EBA1-4AF8-BDD7-7AF1D4549493} 100' => 'StationName',
|
---|
746 | '{560C36C0-503A-11CF-BAA1-00004C752A9A} 2' => 'AutoSummary',
|
---|
747 | '{560C36C0-503A-11CF-BAA1-00004C752A9A} 3' => 'Summary',
|
---|
748 | '{49691C90-7E17-101A-A91C-08002B2ECDA9} 3' => 'SearchRanking',
|
---|
749 | '{F8D3F6AC-4874-42CB-BE59-AB454B30716A} 100' => 'Sensitivity',
|
---|
750 | '{EF884C5B-2BFE-41BB-AAE5-76EEDF4F9902} 200' => 'SharedWith',
|
---|
751 | '{668CDFA5-7A1B-4323-AE4B-E527393A1D81} 100' => 'Source',
|
---|
752 | '{48FD6EC8-8A12-4CDF-A03E-4EC5A511EDDE} 100' => 'StartDate',
|
---|
753 | '{D37D52C6-261C-4303-82B3-08B926AC6F12} 100' => 'BillingInformation',
|
---|
754 | '{084D8A0A-E6D5-40DE-BF1F-C8820E7C877C} 100' => 'Complete',
|
---|
755 | '{08C7CC5F-60F2-4494-AD75-55E3E0B5ADD0} 100' => 'TaskOwner',
|
---|
756 | '{28636AA6-953D-11D2-B5D6-00C04FD918D0} 14' => 'TotalFileSize',
|
---|
757 | '{0CEF7D53-FA64-11D1-A203-0000F81FEDEE} 9' => 'LegalTrademarks',
|
---|
758 | '{64440491-4C8B-11D1-8B70-080036B11A03} 10' => 'VideoCompression',
|
---|
759 | '{64440492-4C8B-11D1-8B70-080036B11A03} 20' => 'Directors',
|
---|
760 | '{64440491-4C8B-11D1-8B70-080036B11A03} 8' => 'DataRate',
|
---|
761 | '{64440491-4C8B-11D1-8B70-080036B11A03} 4' => 'FrameHeight',
|
---|
762 | '{64440491-4C8B-11D1-8B70-080036B11A03} 6' => 'FrameRate',
|
---|
763 | '{64440491-4C8B-11D1-8B70-080036B11A03} 3' => 'FrameWidth',
|
---|
764 | '{64440491-4C8B-11D1-8B70-080036B11A03} 43' => 'TotalBitrate',
|
---|
765 | );
|
---|
766 |
|
---|
767 | #------------------------------------------------------------------------------
|
---|
768 | # Extract information from Xtra MP4 atom
|
---|
769 | # Inputs: 0) ExifTool object ref, 1) dirInfo ref, 2) tag table ref
|
---|
770 | # Returns: 1 on success
|
---|
771 | # Reference: http://code.google.com/p/mp4v2/ [since removed from trunk]
|
---|
772 | sub ProcessXtra($$$)
|
---|
773 | {
|
---|
774 | my ($et, $dirInfo, $tagTablePtr) = @_;
|
---|
775 | my $dataPt = $$dirInfo{DataPt};
|
---|
776 | my $dataPos = $$dirInfo{Base} || 0;
|
---|
777 | my $dataLen = $$dirInfo{DataLen};
|
---|
778 | my $pos = 0;
|
---|
779 | $et->VerboseDir('Xtra', 0, $dataLen);
|
---|
780 | for (;;) {
|
---|
781 | last if $pos + 4 > $dataLen;
|
---|
782 | my $size = Get32u($dataPt, $pos); # (includes $size word)
|
---|
783 | last if $size < 8 or $pos + $size > $dataLen;
|
---|
784 | my $tagLen = Get32u($dataPt, $pos + 4);
|
---|
785 | last if $tagLen + 18 > $size;
|
---|
786 | my $tag = substr($$dataPt, $pos + 8, $tagLen);
|
---|
787 | # (version flags according to the reference, but looks more like a count - PH)
|
---|
788 | my $count = Get32u($dataPt, $pos + $tagLen + 8);
|
---|
789 | my ($i, $valPos, $valLen, $valType, $val, $format, @vals);
|
---|
790 | # point to start of first value (after 4-byte length and 2-byte type)
|
---|
791 | $valPos = $pos + $tagLen + 18;
|
---|
792 | for ($i=0; ;) {
|
---|
793 | # (stored value includes size of $valLen and $valType, so subtract 6)
|
---|
794 | $valLen = Get32u($dataPt, $valPos - 6) - 6;
|
---|
795 | my $more = $pos + $size - $valPos - $valLen;
|
---|
796 | last if $more < 0;
|
---|
797 | $valType = Get16u($dataPt, $valPos - 2);
|
---|
798 | $val = substr($$dataPt, $valPos, $valLen);
|
---|
799 | # Note: all dumb Microsoft values are little-endian inside a big-endian-format file
|
---|
800 | SetByteOrder('II');
|
---|
801 | if ($valType == 8) {
|
---|
802 | $format = 'Unicode';
|
---|
803 | $val = $et->Decode($val, 'UCS2');
|
---|
804 | } elsif ($valType == 19 and $valLen == 8) {
|
---|
805 | $format = 'int64u';
|
---|
806 | $val = Get64u(\$val, 0);
|
---|
807 | } elsif ($valType == 21 and $valLen == 8) {
|
---|
808 | $format = 'date';
|
---|
809 | $val = Get64u(\$val, 0);
|
---|
810 | # convert time from 100 ns intervals since Jan 1, 1601
|
---|
811 | $val = $val * 1e-7 - 11644473600 if $val;
|
---|
812 | # (the Nikon S100 uses UTC timezone, same as ASF - PH)
|
---|
813 | $val = Image::ExifTool::ConvertUnixTime($val) . 'Z';
|
---|
814 | } elsif ($valType == 72 and $valLen == 16) {
|
---|
815 | $format = 'GUID';
|
---|
816 | $val = uc unpack('H*',pack('NnnNN',unpack('VvvNN',$val)));
|
---|
817 | $val =~ s/(.{8})(.{4})(.{4})(.{4})/$1-$2-$3-$4-/;
|
---|
818 | } elsif ($valType == 65 && $valLen > 4) { #PH (empirical)
|
---|
819 | $format = 'variant';
|
---|
820 | require Image::ExifTool::FlashPix;
|
---|
821 | my $vPos = $valPos; # (necessary because ReadFPXValue updates this)
|
---|
822 | # read entry as a VT_VARIANT (use FlashPix module for this)
|
---|
823 | $val = Image::ExifTool::FlashPix::ReadFPXValue($et, $dataPt, $vPos,
|
---|
824 | Image::ExifTool::FlashPix::VT_VARIANT(), $valPos+$valLen, 1);
|
---|
825 | } else {
|
---|
826 | $format = "Unknown($valType)";
|
---|
827 | }
|
---|
828 | SetByteOrder('MM'); # back to native QuickTime byte ordering
|
---|
829 | last if ++$i >= $count or $more < 6;
|
---|
830 | push @vals, $val;
|
---|
831 | undef $val;
|
---|
832 | $valPos += $valLen + 6; # step to next value
|
---|
833 | }
|
---|
834 | if (@vals) {
|
---|
835 | push @vals, $val if defined $val;
|
---|
836 | $val = \@vals;
|
---|
837 | $valPos = $pos + $tagLen + 18;
|
---|
838 | $valLen = $size - 18 - $tagLen;
|
---|
839 | }
|
---|
840 | if ($tagLen > 0 and $valLen > 0) {
|
---|
841 | my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
|
---|
842 | unless ($tagInfo) {
|
---|
843 | # generate tag information for unrecognized tags
|
---|
844 | my $name = $tag;
|
---|
845 | $name =~ s{^WM/}{};
|
---|
846 | # $name =~ tr/-_A-Za-z0-9//dc;
|
---|
847 | if ($name =~ /^[-\w]+$/) {
|
---|
848 | $tagInfo = { Name => ucfirst($name) };
|
---|
849 | AddTagToTable($tagTablePtr, $tag, $tagInfo);
|
---|
850 | $et->VPrint(0, $$et{INDENT}, "[adding Microsoft:$tag]\n");
|
---|
851 | }
|
---|
852 | }
|
---|
853 | $et->HandleTag($tagTablePtr, $tag, $val,
|
---|
854 | TagInfo => $tagInfo,
|
---|
855 | DataPt => $dataPt,
|
---|
856 | DataPos => $dataPos,
|
---|
857 | Start => $valPos,
|
---|
858 | Size => $valLen,
|
---|
859 | Format => $format,
|
---|
860 | Extra => " count=$count type=$valType",
|
---|
861 | );
|
---|
862 | }
|
---|
863 | $pos += $size; # step to next entry
|
---|
864 | }
|
---|
865 | return 1;
|
---|
866 | }
|
---|
867 |
|
---|
868 | 1; # end
|
---|
869 |
|
---|
870 | __END__
|
---|
871 |
|
---|
872 | =head1 NAME
|
---|
873 |
|
---|
874 | Image::ExifTool::Microsoft - Definitions for custom Microsoft tags
|
---|
875 |
|
---|
876 | =head1 SYNOPSIS
|
---|
877 |
|
---|
878 | This module is used by Image::ExifTool
|
---|
879 |
|
---|
880 | =head1 DESCRIPTION
|
---|
881 |
|
---|
882 | This module contains definitions required by Image::ExifTool to interpret
|
---|
883 | Microsoft-specific EXIF and XMP tags.
|
---|
884 |
|
---|
885 | =head1 AUTHOR
|
---|
886 |
|
---|
887 | Copyright 2003-2021, Phil Harvey (philharvey66 at gmail.com)
|
---|
888 |
|
---|
889 | This library is free software; you can redistribute it and/or modify it
|
---|
890 | under the same terms as Perl itself.
|
---|
891 |
|
---|
892 | =head1 REFERENCES
|
---|
893 |
|
---|
894 | =over 4
|
---|
895 |
|
---|
896 | =item L<http://research.microsoft.com/en-us/um/redmond/groups/ivm/hdview/hdmetadataspec.htm>
|
---|
897 |
|
---|
898 | =back
|
---|
899 |
|
---|
900 | =head1 SEE ALSO
|
---|
901 |
|
---|
902 | L<Image::ExifTool::TagNames/Microsoft Tags>,
|
---|
903 | L<Image::ExifTool(3pm)|Image::ExifTool>
|
---|
904 |
|
---|
905 | =cut
|
---|
906 |
|
---|