exiftool_vendored 13.24.0 → 13.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,7 +30,7 @@ use strict;
30
30
  use vars qw($VERSION $AUTOLOAD);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
 
33
- $VERSION = '1.70';
33
+ $VERSION = '1.71';
34
34
 
35
35
  sub ConvertTimecode($);
36
36
  sub ProcessSGLT($$$);
@@ -547,6 +547,10 @@ my %code2charset = (
547
547
  Name => 'ID3',
548
548
  SubDirectory => { TagTable => 'Image::ExifTool::ID3::Main' },
549
549
  },
550
+ 'ID3 ' => { # (NC)
551
+ Name => 'ID3-2',
552
+ SubDirectory => { TagTable => 'Image::ExifTool::ID3::Main' },
553
+ },
550
554
  #
551
555
  # WebP-specific tags
552
556
  #
@@ -668,6 +672,9 @@ my %code2charset = (
668
672
  Name => 'SEAL',
669
673
  SubDirectory => { TagTable => 'Image::ExifTool::XMP::SEAL' },
670
674
  },
675
+ # LGWV - written by Logic Pro
676
+ # minf, elm1, regn, umid, DGDA - written by Pro Tools
677
+ # MXrt, muma, chrp - written by Sequoia Pro
671
678
  );
672
679
 
673
680
  # the maker notes used by some digital cameras
@@ -1554,9 +1561,9 @@ my %code2charset = (
1554
1561
  Name => 'Duration',
1555
1562
  Require => {
1556
1563
  0 => 'RIFF:AvgBytesPerSec',
1557
- 1 => 'FileSize',
1558
1564
  },
1559
1565
  Desire => {
1566
+ 1 => 'FileSize', # (only used if 'data' length isn't available)
1560
1567
  # check FrameCount because this calculation only applies
1561
1568
  # to audio-only files (eg. WAV)
1562
1569
  2 => 'FrameCount',
@@ -1564,8 +1571,9 @@ my %code2charset = (
1564
1571
  },
1565
1572
  # (can't calculate duration like this for compressed audio types)
1566
1573
  RawConv => q{
1567
- return undef if $$self{FileType} =~ /^(LA|OFR|PAC|WV)$/;
1568
- return(($val[0] and not ($val[2] or $val[3])) ? $val[1] / $val[0] : undef);
1574
+ return undef if $$self{FileType} =~ /^(LA|OFR|PAC|WV)$/ or $val[2] or $val[3];
1575
+ return undef unless $val[0] and ($$self{RIFFDataLen} or $val[1]);
1576
+ return(($$self{RIFFDataLen} || $val[1]) / $val[0]);
1569
1577
  },
1570
1578
  PrintConv => 'ConvertDuration($val)',
1571
1579
  },
@@ -2098,8 +2106,9 @@ sub ProcessRIFF($$)
2098
2106
  $pos += 4;
2099
2107
  $tag .= "_$buff";
2100
2108
  $len -= 4; # already read 4 bytes (the LIST type)
2101
- } elsif ($tag eq 'data' and $len == 0xffffffff and $$et{DataSize64}) {
2102
- $len = $$et{DataSize64};
2109
+ } elsif ($tag eq 'data') {
2110
+ $len = $$et{DataSize64} if $len == 0xffffffff and $$et{DataSize64};
2111
+ $$et{RIFFDataLen} = ($$et{RIFFDataLen} || 0) + $len;
2103
2112
  }
2104
2113
  $et->VPrint(0, "RIFF '${tag}' chunk ($len bytes of data):\n");
2105
2114
  if ($len <= 0) {
@@ -1029,6 +1029,8 @@ my %tagLookup = (
1029
1029
  'appinfoversion' => { 503 => [\'AppInfo','AppInfoVersion'] },
1030
1030
  'apple_0x004e' => { 1 => 0x4e },
1031
1031
  'apple_0x004f' => { 1 => 0x4f },
1032
+ 'apple_0x0054' => { 1 => 0x54 },
1033
+ 'apple_0x005a' => { 1 => 0x5a },
1032
1034
  'applekeywords' => { 343 => 'AAPL:Keywords' },
1033
1035
  'applephotosvariationidentifier' => { 414 => 'apple.photos.variation-identifier' },
1034
1036
  'applestoreaccount' => { 412 => 'apID' },
@@ -2764,6 +2766,7 @@ my %tagLookup = (
2764
2766
  'eventearliestdate' => { 124 => [\'Event','EventEarliestDate'] },
2765
2767
  'eventend' => { 546 => 'eventEnd' },
2766
2768
  'eventenddayofyear' => { 124 => [\'Event','EventEndDayOfYear'] },
2769
+ 'eventeventtype' => { 124 => [\'Event','EventEventType'] },
2767
2770
  'eventfieldnotes' => { 124 => [\'Event','EventFieldNotes'] },
2768
2771
  'eventfieldnumber' => { 124 => [\'Event','EventFieldNumber'] },
2769
2772
  'eventhabitat' => { 124 => [\'Event','EventHabitat'] },
@@ -3686,6 +3689,7 @@ my %tagLookup = (
3686
3689
  'humanobservationeventid' => { 124 => [\'HumanObservation','HumanObservationEventID'] },
3687
3690
  'humanobservationeventremarks' => { 124 => [\'HumanObservation','HumanObservationEventRemarks'] },
3688
3691
  'humanobservationeventtime' => { 124 => [\'HumanObservation','HumanObservationEventTime'] },
3692
+ 'humanobservationeventtype' => { 124 => [\'HumanObservation','HumanObservationEventType'] },
3689
3693
  'humanobservationfieldnotes' => { 124 => [\'HumanObservation','HumanObservationFieldNotes'] },
3690
3694
  'humanobservationfieldnumber' => { 124 => [\'HumanObservation','HumanObservationFieldNumber'] },
3691
3695
  'humanobservationhabitat' => { 124 => [\'HumanObservation','HumanObservationHabitat'] },
@@ -4375,6 +4379,7 @@ my %tagLookup = (
4375
4379
  'machineobservationeventid' => { 124 => [\'MachineObservation','MachineObservationEventID'] },
4376
4380
  'machineobservationeventremarks' => { 124 => [\'MachineObservation','MachineObservationEventRemarks'] },
4377
4381
  'machineobservationeventtime' => { 124 => [\'MachineObservation','MachineObservationEventTime'] },
4382
+ 'machineobservationeventtype' => { 124 => [\'MachineObservation','MachineObservationEventType'] },
4378
4383
  'machineobservationfieldnotes' => { 124 => [\'MachineObservation','MachineObservationFieldNotes'] },
4379
4384
  'machineobservationfieldnumber' => { 124 => [\'MachineObservation','MachineObservationFieldNumber'] },
4380
4385
  'machineobservationhabitat' => { 124 => [\'MachineObservation','MachineObservationHabitat'] },
@@ -5152,6 +5157,7 @@ my %tagLookup = (
5152
5157
  'occurrenceassociatedsequences' => { 124 => [\'Occurrence','OccurrenceAssociatedSequences'] },
5153
5158
  'occurrenceassociatedtaxa' => { 124 => [\'Occurrence','OccurrenceAssociatedTaxa'] },
5154
5159
  'occurrencebehavior' => { 124 => [\'Occurrence','OccurrenceBehavior'] },
5160
+ 'occurrencecaste' => { 124 => [\'Occurrence','OccurrenceCaste'] },
5155
5161
  'occurrencecatalognumber' => { 124 => [\'Occurrence','OccurrenceCatalogNumber'] },
5156
5162
  'occurrencedegreeofestablishment' => { 124 => [\'Occurrence','OccurrenceDegreeOfEstablishment'] },
5157
5163
  'occurrencedetails' => { 124 => [\'Occurrence','OccurrenceOccurrenceDetails'] },
@@ -5175,6 +5181,7 @@ my %tagLookup = (
5175
5181
  'occurrencereproductivecondition' => { 124 => [\'Occurrence','OccurrenceReproductiveCondition'] },
5176
5182
  'occurrencesex' => { 124 => [\'Occurrence','OccurrenceSex'] },
5177
5183
  'occurrencestatus' => { 124 => [\'Occurrence','OccurrenceOccurrenceStatus'] },
5184
+ 'occurrencevitality' => { 124 => [\'Occurrence','OccurrenceVitality'] },
5178
5185
  'oecfcolumns' => { 533 => [\'OECF','OECFColumns'] },
5179
5186
  'oecfnames' => { 533 => [\'OECF','OECFNames'] },
5180
5187
  'oecfrows' => { 533 => [\'OECF','OECFRows'] },
@@ -5480,6 +5487,7 @@ my %tagLookup = (
5480
5487
  'parametricshadowsplit' => { 527 => 'ParametricShadowSplit', 529 => 'ParametricShadowSplit' },
5481
5488
  'parentalrating' => { 186 => 'WM/ParentalRating' },
5482
5489
  'parentid' => { 541 => 'parentId' },
5490
+ 'parentmeasurementid' => { 124 => [\'MeasurementOrFact','MeasurementOrFactParentMeasurementID'] },
5483
5491
  'parentmediaeventid' => { 515 => 'ParentMediaEventID' },
5484
5492
  'parentmeid' => { 515 => 'ParentMEID' },
5485
5493
  'parentproductid' => { 412 => '@ppi' },
@@ -6858,9 +6866,11 @@ my %tagLookup = (
6858
6866
  'taxonconceptid' => { 124 => [\'Taxon','TaxonTaxonConceptID'] },
6859
6867
  'taxoncultivarepithet' => { 124 => [\'Taxon','TaxonCultivarEpithet'] },
6860
6868
  'taxonfamily' => { 124 => [\'Taxon','TaxonFamily'] },
6869
+ 'taxongenericname' => { 124 => [\'Taxon','TaxonGenericName'] },
6861
6870
  'taxongenus' => { 124 => [\'Taxon','TaxonGenus'] },
6862
6871
  'taxonhigherclassification' => { 124 => [\'Taxon','TaxonHigherClassification'] },
6863
6872
  'taxonid' => { 124 => [\'Taxon','TaxonTaxonID'] },
6873
+ 'taxoninfragenericepithet' => { 124 => [\'Taxon','TaxonInfragenericEpithet'] },
6864
6874
  'taxoninfraspecificepithet' => { 124 => [\'Taxon','TaxonInfraspecificEpithet'] },
6865
6875
  'taxonkingdom' => { 124 => [\'Taxon','TaxonKingdom'] },
6866
6876
  'taxonnameaccordingto' => { 124 => [\'Taxon','TaxonNameAccordingTo'] },
@@ -6882,8 +6892,12 @@ my %tagLookup = (
6882
6892
  'taxonscientificnameauthorship' => { 124 => [\'Taxon','TaxonScientificNameAuthorship'] },
6883
6893
  'taxonscientificnameid' => { 124 => [\'Taxon','TaxonScientificNameID'] },
6884
6894
  'taxonspecificepithet' => { 124 => [\'Taxon','TaxonSpecificEpithet'] },
6895
+ 'taxonsubfamily' => { 124 => [\'Taxon','TaxonSubFamily'] },
6885
6896
  'taxonsubgenus' => { 124 => [\'Taxon','TaxonSubgenus'] },
6897
+ 'taxonsubtribe' => { 124 => [\'Taxon','TaxonSubTribe'] },
6898
+ 'taxonsuperfamily' => { 124 => [\'Taxon','TaxonSuperFamily'] },
6886
6899
  'taxontaxonomicstatus' => { 124 => [\'Taxon','TaxonTaxonomicStatus'] },
6900
+ 'taxontribe' => { 124 => [\'Taxon','TaxonTribe'] },
6887
6901
  'taxonverbatimtaxonrank' => { 124 => [\'Taxon','TaxonVerbatimTaxonRank'] },
6888
6902
  'taxonvernacularname' => { 124 => [\'Taxon','TaxonVernacularName'] },
6889
6903
  'tda1bandwidth' => { 145 => 0x196f },
@@ -7028,6 +7042,7 @@ my %tagLookup = (
7028
7042
  'track' => { 412 => "\xa9trk", 420 => "\xa9trk" },
7029
7043
  'trackcreatedate' => { 419 => 0x1 },
7030
7044
  'trackmodifydate' => { 419 => 0x2 },
7045
+ 'trackname' => { 420 => 'tnam' },
7031
7046
  'tracknumber' => { 412 => 'trkn', 557 => 'trackNumber' },
7032
7047
  'tracks' => { 557 => 'Tracks' },
7033
7048
  'tracksframerate' => { 557 => [\'Tracks','TracksFrameRate'] },
@@ -7804,6 +7819,7 @@ my %tagExists = (
7804
7819
  'alternateduotonecolors' => 1,
7805
7820
  'alternateellipsoidheight' => 1,
7806
7821
  'alternateellipsoidheightextended' => 1,
7822
+ 'alternateformattrack' => 1,
7807
7823
  'alternateheading' => 1,
7808
7824
  'alternatelatitude' => 1,
7809
7825
  'alternatelongitude' => 1,
@@ -8559,6 +8575,7 @@ my %tagExists = (
8559
8575
  'cloneobject' => 1,
8560
8576
  'clonetype' => 1,
8561
8577
  'closedcaptioning' => 1,
8578
+ 'closedcaptiontrack' => 1,
8562
8579
  'cmddialsaperturesetting' => 1,
8563
8580
  'cmddialschangemainsub' => 1,
8564
8581
  'cmddialschangemainsubexposure' => 1,
@@ -9374,6 +9391,7 @@ my %tagExists = (
9374
9391
  'extendedcontentdescr' => 1,
9375
9392
  'extendedcontentencryption' => 1,
9376
9393
  'extendedinfo' => 1,
9394
+ 'extendedlanguagetag' => 1,
9377
9395
  'extendedstreamprops' => 1,
9378
9396
  'extendedtracktitle' => 1,
9379
9397
  'extendedxmp' => 1,
@@ -9618,6 +9636,7 @@ my %tagExists = (
9618
9636
  'fontweight' => 1,
9619
9637
  'footerposition' => 1,
9620
9638
  'footnotes' => 1,
9639
+ 'forcedsubtitletrack' => 1,
9621
9640
  'form' => 1,
9622
9641
  'formatsdcard' => 1,
9623
9642
  'formattag' => 1,
@@ -10008,6 +10027,7 @@ my %tagExists = (
10008
10027
  'ics' => 1,
10009
10028
  'id' => 1,
10010
10029
  'id3' => 1,
10030
+ 'id3-2' => 1,
10011
10031
  'id3size' => 1,
10012
10032
  'id3v1' => 1,
10013
10033
  'id3v1_enh' => 1,
@@ -11102,6 +11122,7 @@ my %tagExists = (
11102
11122
  'nominalplaytime' => 1,
11103
11123
  'nominalvideobitrate' => 1,
11104
11124
  'nomssmarttags' => 1,
11125
+ 'non-primarysourcetrack' => 1,
11105
11126
  'normallinetransfertiming' => 1,
11106
11127
  'noseslimming' => 1,
11107
11128
  'note' => 1,
@@ -12547,6 +12568,7 @@ my %tagExists = (
12547
12568
  'subsystemversion' => 1,
12548
12569
  'subtileblocksize' => 1,
12549
12570
  'subtitledescription' => 1,
12571
+ 'subtitletrack' => 1,
12550
12572
  'suffix' => 1,
12551
12573
  'suggestedpalette' => 1,
12552
12574
  'summary' => 1,
@@ -12577,6 +12599,7 @@ my %tagExists = (
12577
12599
  'synchronizedlyricstext' => 1,
12578
12600
  'synchronizedlyricstype' => 1,
12579
12601
  'synconly' => 1,
12602
+ 'syncronizedtrack' => 1,
12580
12603
  'syncsampletable' => 1,
12581
12604
  'syncstate' => 1,
12582
12605
  'synlyrics' => 1,
@@ -12747,6 +12770,7 @@ my %tagExists = (
12747
12770
  'timecode' => 1,
12748
12771
  'timecodeindex' => 1,
12749
12772
  'timecodeindexparms' => 1,
12773
+ 'timecodetrack' => 1,
12750
12774
  'timeinfo' => 1,
12751
12775
  'timelapse' => 1,
12752
12776
  'timelineinfo' => 1,
@@ -12845,6 +12869,7 @@ my %tagExists = (
12845
12869
  'trackvolume' => 1,
12846
12870
  'trademark' => 1,
12847
12871
  'transactionid' => 1,
12872
+ 'transcripttrack' => 1,
12848
12873
  'transfercharacteristic' => 1,
12849
12874
  'transfercharacteristics' => 1,
12850
12875
  'transferrange' => 1,
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 28408 tags, with 17642 unique tag names.
15
+ They contain a total of 28431 tags, with 17665 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -6366,7 +6366,9 @@ These tags belong to the ExifTool XMP-xmpBJ family 1 group.
6366
6366
 
6367
6367
  =head3 XMP xmpDM Tags
6368
6368
 
6369
- XMP Dynamic Media namespace tags.
6369
+ XMP Dynamic Media namespace tags. See
6370
+ L<https://developer.adobe.com/xmp/docs/XMPNamespaces/xmpDM/> for the
6371
+ specification.
6370
6372
 
6371
6373
  These tags belong to the ExifTool XMP-xmpDM family 1 group.
6372
6374
 
@@ -7832,6 +7834,8 @@ Tags extracted from the maker notes of iPhone images.
7832
7834
  0x0042 SemanticStylePreset no
7833
7835
  0x004e Apple_0x004e? no
7834
7836
  0x004f Apple_0x004f? no
7837
+ 0x0054 Apple_0x0054? no
7838
+ 0x005a Apple_0x005a? no
7835
7839
 
7836
7840
  =head3 Apple RunTime Tags
7837
7841
 
@@ -26666,6 +26670,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26666
26670
  EventID string/_
26667
26671
  EventRemarks lang-alt_
26668
26672
  EventTime string_
26673
+ EventEventType string_
26669
26674
  EventFieldNotes string_
26670
26675
  EventFieldNumber string_
26671
26676
  EventHabitat string_
@@ -26708,6 +26713,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26708
26713
  HumanObservationEventID string/_
26709
26714
  HumanObservationEventRemarks lang-alt_
26710
26715
  HumanObservationEventTime string_
26716
+ HumanObservationEventType string_
26711
26717
  HumanObservationFieldNotes string_
26712
26718
  HumanObservationFieldNumber string_
26713
26719
  HumanObservationHabitat string_
@@ -26742,6 +26748,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26742
26748
  MachineObservationEventID string/_
26743
26749
  MachineObservationEventRemarks lang-alt_
26744
26750
  MachineObservationEventTime string_
26751
+ MachineObservationEventType string_
26745
26752
  MachineObservationFieldNotes string_
26746
26753
  MachineObservationFieldNumber string_
26747
26754
  MachineObservationHabitat string_
@@ -26767,6 +26774,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26767
26774
  MeasurementType string_
26768
26775
  MeasurementUnit string_
26769
26776
  MeasurementValue string_
26777
+ ParentMeasurementID string_
26770
26778
  Occurrence DarwinCore Occurrence Struct
26771
26779
  OccurrenceAssociatedMedia string_
26772
26780
  OccurrenceAssociatedOccurrences string_
@@ -26774,6 +26782,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26774
26782
  OccurrenceAssociatedSequences string_
26775
26783
  OccurrenceAssociatedTaxa string_
26776
26784
  OccurrenceBehavior string_
26785
+ OccurrenceCaste string_
26777
26786
  OccurrenceCatalogNumber string_
26778
26787
  OccurrenceDegreeOfEstablishment string_
26779
26788
  OccurrenceDisposition string_
@@ -26797,6 +26806,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26797
26806
  OccurrenceRecordNumber string_
26798
26807
  OccurrenceReproductiveCondition string_
26799
26808
  OccurrenceSex string_
26809
+ OccurrenceVitality string_
26800
26810
  Organism DarwinCore Organism Struct
26801
26811
  OrganismAssociatedOccurrences string_
26802
26812
  OrganismAssociatedOrganisms string_
@@ -26834,8 +26844,10 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26834
26844
  TaxonClass string_
26835
26845
  TaxonCultivarEpithet string_
26836
26846
  TaxonFamily string_
26847
+ TaxonGenericName string_
26837
26848
  TaxonGenus string_
26838
26849
  TaxonHigherClassification string_
26850
+ TaxonInfragenericEpithet string_
26839
26851
  TaxonInfraspecificEpithet string_
26840
26852
  TaxonKingdom string_
26841
26853
  TaxonNameAccordingTo string_
@@ -26855,12 +26867,16 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26855
26867
  TaxonScientificNameAuthorship string_
26856
26868
  TaxonScientificNameID string_
26857
26869
  TaxonSpecificEpithet string_
26870
+ TaxonSubFamily string_
26858
26871
  TaxonSubgenus string_
26872
+ TaxonSubTribe string_
26873
+ TaxonSuperFamily string_
26859
26874
  TaxonConceptID string_
26860
26875
  TaxonID string_
26861
26876
  TaxonTaxonomicStatus string_
26862
26877
  TaxonRank string_
26863
26878
  TaxonRemarks string_
26879
+ TaxonTribe string_
26864
26880
  TaxonVerbatimTaxonRank string_
26865
26881
  TaxonVernacularName lang-alt_
26866
26882
 
@@ -26925,6 +26941,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26925
26941
  EventID string
26926
26942
  EventRemarks lang-alt
26927
26943
  EventTime string
26944
+ EventType string
26928
26945
  FieldNotes string
26929
26946
  FieldNumber string
26930
26947
  Habitat string
@@ -26996,6 +27013,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
26996
27013
  MeasurementType string
26997
27014
  MeasurementUnit string
26998
27015
  MeasurementValue string
27016
+ ParentMeasurementID string
26999
27017
 
27000
27018
  =head3 DarwinCore Occurrence Struct
27001
27019
 
@@ -27007,6 +27025,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
27007
27025
  AssociatedSequences string
27008
27026
  AssociatedTaxa string
27009
27027
  Behavior string
27028
+ Caste string
27010
27029
  CatalogNumber string
27011
27030
  DegreeOfEstablishment string
27012
27031
  Disposition string
@@ -27030,6 +27049,7 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
27030
27049
  RecordedByID string
27031
27050
  ReproductiveCondition string
27032
27051
  Sex string
27052
+ Vitality string
27033
27053
 
27034
27054
  =head3 DarwinCore Organism Struct
27035
27055
 
@@ -27081,8 +27101,10 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
27081
27101
  Class string
27082
27102
  CultivarEpithet string
27083
27103
  Family string
27104
+ GenericName string
27084
27105
  Genus string
27085
27106
  HigherClassification string
27107
+ InfragenericEpithet string
27086
27108
  InfraspecificEpithet string
27087
27109
  Kingdom string
27088
27110
  NameAccordingTo string
@@ -27102,12 +27124,16 @@ These tags belong to the ExifTool XMP-dwc family 1 group.
27102
27124
  ScientificNameAuthorship string
27103
27125
  ScientificNameID string
27104
27126
  SpecificEpithet string
27127
+ SubFamily string
27128
+ SubTribe string
27105
27129
  Subgenus string
27130
+ SuperFamily string
27106
27131
  TaxonConceptID string
27107
27132
  TaxonID string
27108
27133
  TaxonRank string
27109
27134
  TaxonRemarks string
27110
27135
  TaxonomicStatus string
27136
+ Tribe string
27111
27137
  VerbatimTaxonRank string
27112
27138
  VernacularName lang-alt
27113
27139
 
@@ -30998,7 +31024,7 @@ and are not currently writable.
30998
31024
  'hvcC' HEVCConfiguration QuickTime HEVCConfig
30999
31025
  'irot' Rotation int8u!
31000
31026
  'ispe' ImageSpatialExtent no
31001
- 'pasp' PixelAspectRatio int32u!
31027
+ 'pasp' PixelAspectRatio int32u[2]!
31002
31028
  'pixi' ImagePixelDepth no
31003
31029
  'rloc' RelativeLocation no
31004
31030
 
@@ -31133,6 +31159,7 @@ MP4 media box.
31133
31159
 
31134
31160
  Tag ID Tag Name Writable
31135
31161
  ------ -------- --------
31162
+ 'elng' ExtendedLanguageTag no
31136
31163
  'hdlr' Handler QuickTime Handler
31137
31164
  'mdhd' MediaHeader QuickTime MediaHeader
31138
31165
  'minf' MediaInfo QuickTime MediaInfo
@@ -31532,8 +31559,15 @@ MP4 video media header.
31532
31559
  ------ -------- --------
31533
31560
  'cdsc' ContentDescribes no
31534
31561
  'chap' ChapterListTrackID no
31562
+ 'clcp' ClosedCaptionTrack no
31563
+ 'fall' AlternateFormatTrack no
31564
+ 'folw' SubtitleTrack no
31565
+ 'forc' ForcedSubtitleTrack no
31535
31566
  'mpod' ElementaryStreamTrack no
31536
- 'tmcd' TimeCode no
31567
+ 'scpt' TranscriptTrack no
31568
+ 'ssrc' Non-primarySourceTrack no
31569
+ 'sync' SyncronizedTrack no
31570
+ 'tmcd' TimecodeTrack no
31537
31571
 
31538
31572
  =head3 QuickTime UserData Tags
31539
31573
 
@@ -31681,6 +31715,7 @@ the config file.
31681
31715
  UnknownThumbnail string
31682
31716
  'time' TimeStamp no
31683
31717
  'titl' Title string/
31718
+ 'tnam' TrackName string
31684
31719
  'urat' UserRating undef/
31685
31720
  'uuid' GarminSoftware string
31686
31721
  GarminModel no
@@ -32096,6 +32131,7 @@ metadata to WEBP images, but can't yet write to other RIFF-based formats.
32096
32131
  'EXIF' EXIF EXIF
32097
32132
  UnknownEXIF no
32098
32133
  'ICCP' ICC_Profile ICC_Profile
32134
+ 'ID3 ' ID3-2 ID3
32099
32135
  'IDIT' DateTimeOriginal no
32100
32136
  'JUNK' OlympusJunk Olympus AVI
32101
32137
  CasioJunk EXIF
@@ -40161,7 +40197,7 @@ Tags extracted from CAP, PCAP and PCAPNG Packet Capture files.
40161
40197
  0x0bac CustomOption1 no
40162
40198
  0x0bad CustomOption2 no
40163
40199
  0x4bac CustomOption3 no
40164
- 0x4bad CustomOption3 no
40200
+ 0x4bad CustomOption4 no
40165
40201
  'ByteOrder' ByteOrder no
40166
40202
  'IDB-2' DeviceName no
40167
40203
  'IDB-3' Description no
@@ -40173,8 +40209,8 @@ Tags extracted from CAP, PCAP and PCAPNG Packet Capture files.
40173
40209
  'IDB-9' TimeStampResolution no
40174
40210
  'IDB-10' TimeZone no
40175
40211
  'IDB-11' Filter no
40176
- 'IDB-12' OperatingSytem no
40177
- 'IDB-13' FCSLen no
40212
+ 'IDB-12' OperatingSystem no
40213
+ 'IDB-13' FrameCheckSequenceLength no
40178
40214
  'IDB-14' TimeStampOffset no
40179
40215
  'IDB-15' Hardware no
40180
40216
  'IDB-16' TXSpeed no
@@ -40183,7 +40219,7 @@ Tags extracted from CAP, PCAP and PCAPNG Packet Capture files.
40183
40219
  'LinkType' LinkType no
40184
40220
  'PCAPVersion' PCAPVersion no
40185
40221
  'SHB-2' Hardware no
40186
- 'SHB-3' OperatingSytem no
40222
+ 'SHB-3' OperatingSystem no
40187
40223
  'SHB-4' UserApplication no
40188
40224
  'TimeStamp' TimeStamp no
40189
40225
 
@@ -1208,7 +1208,11 @@ sub WriteQuickTime($$$)
1208
1208
  if (defined $itemIndex and $$et{ItemInfo}) {
1209
1209
  my $items = $$et{ItemInfo};
1210
1210
  my ($id, $prop, $isPrimary);
1211
- my $primary = $$et{PrimaryItem} || 0;
1211
+ my $primary = $$et{PrimaryItem};
1212
+ unless (defined $primary) {
1213
+ ($primary) = sort { $a <=> $b } keys %{$$et{ItemInfo}} if $$et{ItemInfo};
1214
+ $primary = 0 unless defined $primary;
1215
+ }
1212
1216
  my $pitem = $$items{$primary} || { };
1213
1217
  $$pitem{RefersTo} or $$pitem{RefersTo} = { };
1214
1218
  ItemID2: foreach $id (reverse sort { $a <=> $b } keys %$items) {
@@ -1512,7 +1516,10 @@ ItemID2: foreach $id (reverse sort { $a <=> $b } keys %$items) {
1512
1516
  ++$$et{CHANGED};
1513
1517
  my $grp = $et->GetGroup($langInfo, 1);
1514
1518
  $et->VerboseValue("- $grp:$$langInfo{Name}", $val);
1515
- next unless defined $newData and not $$didTag{$nvHash};
1519
+ unless (defined $newData and not $$didTag{$nvHash}) {
1520
+ # must not delete items from iprp because it will mess up the ordering
1521
+ next unless defined $itemIndex;
1522
+ }
1516
1523
  $et->VerboseValue("+ $grp:$$langInfo{Name}", $newData);
1517
1524
  # add back necessary header and encode as necessary
1518
1525
  if (defined $lang) {
@@ -1541,7 +1548,7 @@ ItemID2: foreach $id (reverse sort { $a <=> $b } keys %$items) {
1541
1548
  $newData = $et->Encode($newData, 'UTF8');
1542
1549
  } elsif ($format and not $$tagInfo{Binary}) {
1543
1550
  # format new value for writing
1544
- $newData = WriteValue($newData, $format);
1551
+ $newData = WriteValue($newData, $format, $$tagInfo{Count});
1545
1552
  }
1546
1553
  }
1547
1554
  $$didTag{$nvHash} = 1; # set flag so we don't add this tag again
@@ -1296,15 +1296,15 @@ sub SetNewValuesFromFile($$;@)
1296
1296
  # ! option to decide how it is handled here. !
1297
1297
  # +------------------------------------------+
1298
1298
  foreach (qw(ByteUnit Charset CharsetEXIF CharsetFileName CharsetID3 CharsetIPTC
1299
- CharsetPhotoshop Composite DateFormat Debug EncodeHangs Escape ExtendedXMP
1300
- ExtractEmbedded FastScan Filter FixBase Geolocation GeolocAltNames
1301
- GeolocFeature GeolocMinPop GeolocMaxDist GlobalTimeShift GPSQuadrant
1302
- HexTagIDs IgnoreGroups IgnoreMinorErrors IgnoreTags ImageHashType Lang
1303
- LargeFileSupport LigoGPSScale ListItem ListSep MDItemTags
1304
- MissingTagValue NoPDFList NoWarning Password PrintConv QuickTimeUTC
1305
- RequestTags SaveFormat SavePath ScanForXMP StructFormat SystemTags
1306
- TimeZone Unknown UserParam Validate WindowsLongPath WindowsWideFile
1307
- XAttrTags XMPAutoConv))
1299
+ CharsetPhotoshop Composite DateFormat Debug EncodeHangs Escape
1300
+ ExtendedXMP ExtractEmbedded FastScan Filter FixBase Geolocation
1301
+ GeolocAltNames GeolocFeature GeolocMinPop GeolocMaxDist
1302
+ GlobalTimeShift GPSQuadrant HexTagIDs IgnoreGroups IgnoreMinorErrors
1303
+ IgnoreTags ImageHashType KeepUTCTime Lang LargeFileSupport
1304
+ LigoGPSScale ListItem ListSep MDItemTags MissingTagValue NoPDFList
1305
+ NoWarning Password PrintConv QuickTimeUTC RequestTags SaveFormat
1306
+ SavePath ScanForXMP StructFormat SystemTags TimeZone Unknown UserParam
1307
+ Validate WindowsLongPath WindowsWideFile XAttrTags XMPAutoConv))
1308
1308
  {
1309
1309
  $srcExifTool->Options($_ => $$options{$_});
1310
1310
  }
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.72';
53
+ $VERSION = '3.73';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -3539,14 +3539,19 @@ NoLoop:
3539
3539
  }
3540
3540
  last unless $sti;
3541
3541
  }
3542
- # generate new tagInfo hash based on existing top-level tag
3543
- $tagInfo = { %$sti, Name => $flat . $$sti{Name} };
3544
- # be careful not to copy elements we shouldn't...
3545
- delete $$tagInfo{Description}; # Description will be different
3546
- # can't copy group hash because group 1 will be different and
3547
- # we need to check this when writing tag to a specific group
3548
- delete $$tagInfo{Groups};
3549
- $$tagInfo{Groups}{2} = $$sti{Groups}{2} if $$sti{Groups};
3542
+ # use existing definition if we already added this tag
3543
+ if ($$tagTablePtr{$tagID}) {
3544
+ $tagInfo = $$tagTablePtr{$tagID};
3545
+ } else {
3546
+ # generate new tagInfo hash based on existing top-level tag
3547
+ $tagInfo = { %$sti, Name => $flat . $$sti{Name} };
3548
+ # be careful not to copy elements we shouldn't...
3549
+ delete $$tagInfo{Description}; # Description will be different
3550
+ # can't copy group hash because group 1 will be different and
3551
+ # we need to check this when writing tag to a specific group
3552
+ delete $$tagInfo{Groups};
3553
+ $$tagInfo{Groups}{2} = $$sti{Groups}{2} if $$sti{Groups};
3554
+ }
3550
3555
  last;
3551
3556
  }
3552
3557
  }
@@ -3592,13 +3597,15 @@ NoLoop:
3592
3597
  #} elsif (grep / /, @$props) {
3593
3598
  # $$tagInfo{List} = 1;
3594
3599
  }
3595
- # save property list for verbose "adding" message unless this tag already exists
3596
- $added = \@tagList unless $$tagTablePtr{$tagID};
3597
- # if this is an empty structure, we must add a Struct field
3598
- if (not length $val and $$attrs{'rdf:parseType'} and $$attrs{'rdf:parseType'} eq 'Resource') {
3599
- $$tagInfo{Struct} = { STRUCT_NAME => 'XMP Unknown' };
3600
+ unless ($$tagTablePtr{$tagID} and $$tagTablePtr{$tagID} eq $tagInfo) {
3601
+ # save property list for verbose "adding" message unless this tag already exists
3602
+ $added = \@tagList unless $$tagTablePtr{$tagID};
3603
+ # if this is an empty structure, we must add a Struct field
3604
+ if (not length $val and $$attrs{'rdf:parseType'} and $$attrs{'rdf:parseType'} eq 'Resource') {
3605
+ $$tagInfo{Struct} = { STRUCT_NAME => 'XMP Unknown' } unless $$tagInfo{Struct};
3606
+ }
3607
+ AddTagToTable($tagTablePtr, $tagID, $tagInfo);
3600
3608
  }
3601
- AddTagToTable($tagTablePtr, $tagID, $tagInfo);
3602
3609
  last;
3603
3610
  }
3604
3611
  # decode value if necessary (et:encoding was used before exiftool 7.71)
@@ -170,7 +170,11 @@ my %sAppInfo = (
170
170
  %xmpTableDefaults,
171
171
  GROUPS => { 1 => 'XMP-xmpDM', 2 => 'Image' },
172
172
  NAMESPACE => 'xmpDM',
173
- NOTES => 'XMP Dynamic Media namespace tags.',
173
+ NOTES => q{
174
+ XMP Dynamic Media namespace tags. See
175
+ L<https://developer.adobe.com/xmp/docs/XMPNamespaces/xmpDM/> for the
176
+ specification.
177
+ },
174
178
  absPeakAudioFilePath=> { },
175
179
  album => { },
176
180
  altTapeName => { },