exiftool_vendored 12.25.0 → 12.32.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +114 -4
  3. data/bin/MANIFEST +11 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +44 -43
  7. data/bin/arg_files/xmp2exif.args +2 -1
  8. data/bin/config_files/convert_regions.config +25 -14
  9. data/bin/config_files/example.config +1 -1
  10. data/bin/exiftool +72 -56
  11. data/bin/fmt_files/gpx.fmt +1 -1
  12. data/bin/fmt_files/gpx_wpt.fmt +1 -1
  13. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +10 -2
  14. data/bin/lib/Image/ExifTool/CBOR.pm +277 -0
  15. data/bin/lib/Image/ExifTool/Canon.pm +25 -18
  16. data/bin/lib/Image/ExifTool/DPX.pm +13 -2
  17. data/bin/lib/Image/ExifTool/Exif.pm +11 -6
  18. data/bin/lib/Image/ExifTool/FlashPix.pm +35 -10
  19. data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -0
  20. data/bin/lib/Image/ExifTool/Geotag.pm +13 -2
  21. data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
  22. data/bin/lib/Image/ExifTool/ID3.pm +15 -3
  23. data/bin/lib/Image/ExifTool/JPEG.pm +68 -2
  24. data/bin/lib/Image/ExifTool/JSON.pm +4 -2
  25. data/bin/lib/Image/ExifTool/Jpeg2000.pm +58 -26
  26. data/bin/lib/Image/ExifTool/LIF.pm +153 -0
  27. data/bin/lib/Image/ExifTool/Lang/nl.pm +60 -59
  28. data/bin/lib/Image/ExifTool/M2TS.pm +103 -7
  29. data/bin/lib/Image/ExifTool/MIE.pm +2 -1
  30. data/bin/lib/Image/ExifTool/MRC.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Nikon.pm +15 -4
  32. data/bin/lib/Image/ExifTool/NikonSettings.pm +10 -2
  33. data/bin/lib/Image/ExifTool/Olympus.pm +5 -2
  34. data/bin/lib/Image/ExifTool/Other.pm +93 -0
  35. data/bin/lib/Image/ExifTool/PDF.pm +9 -12
  36. data/bin/lib/Image/ExifTool/PNG.pm +7 -6
  37. data/bin/lib/Image/ExifTool/Panasonic.pm +14 -2
  38. data/bin/lib/Image/ExifTool/Pentax.pm +28 -5
  39. data/bin/lib/Image/ExifTool/Photoshop.pm +6 -0
  40. data/bin/lib/Image/ExifTool/QuickTime.pm +103 -24
  41. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +203 -121
  42. data/bin/lib/Image/ExifTool/README +3 -0
  43. data/bin/lib/Image/ExifTool/RIFF.pm +7 -2
  44. data/bin/lib/Image/ExifTool/Samsung.pm +47 -10
  45. data/bin/lib/Image/ExifTool/Sony.pm +84 -33
  46. data/bin/lib/Image/ExifTool/TagLookup.pm +50 -3
  47. data/bin/lib/Image/ExifTool/TagNames.pod +135 -29
  48. data/bin/lib/Image/ExifTool/Torrent.pm +18 -11
  49. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  50. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  51. data/bin/lib/Image/ExifTool/WritePNG.pl +2 -0
  52. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +11 -4
  53. data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
  54. data/bin/lib/Image/ExifTool/Writer.pl +3 -0
  55. data/bin/lib/Image/ExifTool/XMP.pm +17 -5
  56. data/bin/lib/Image/ExifTool/XMP2.pl +2 -1
  57. data/bin/lib/Image/ExifTool/XMPStruct.pl +3 -1
  58. data/bin/lib/Image/ExifTool/ZISRAW.pm +121 -2
  59. data/bin/lib/Image/ExifTool.pm +79 -37
  60. data/bin/lib/Image/ExifTool.pod +62 -60
  61. data/bin/perl-Image-ExifTool.spec +43 -42
  62. data/lib/exiftool_vendored/version.rb +1 -1
  63. metadata +6 -3
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 24273 tags, with 15738 unique tag names.
15
+ They contain a total of 24338 tags, with 15779 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
@@ -115,6 +115,7 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
115
115
  PreviewImage no
116
116
  'APP3' Meta Kodak Meta
117
117
  Stim Stim
118
+ JPS JPEG JPS
118
119
  ThermalData no
119
120
  PreviewImage no
120
121
  'APP4' Scalado Scalado
@@ -174,6 +175,18 @@ images).
174
175
  ------ -------- --------
175
176
  'Rev' OcadRevision no
176
177
 
178
+ =head3 JPEG JPS Tags
179
+
180
+ Tags found in JPEG Stereo (JPS) images.
181
+
182
+ Index1 Tag Name Writable
183
+ ------ -------- --------
184
+ 10 JPSSeparation no
185
+ 11 JPSFlags no
186
+ 12 JPSLayout no
187
+ 13 JPSType no
188
+ 16 JPSComment no
189
+
177
190
  =head3 JPEG EPPIM Tags
178
191
 
179
192
  APP6 is used in by the Toshiba PDR-M700 to store a TIFF structure containing
@@ -3506,7 +3519,8 @@ These tags belong to the ExifTool XMP-iptcCore family 1 group.
3506
3519
 
3507
3520
  This table contains tags defined by the IPTC Extension schema version 1.5.
3508
3521
  The actual namespace prefix is "Iptc4xmpExt", but ExifTool shortens this for
3509
- the family 1 group name. (see L<http://www.iptc.org/IPTC4XMP/>)
3522
+ the family 1 group name. (see
3523
+ L<http://www.iptc.org/standards/photo-metadata/iptc-standard/>)
3510
3524
 
3511
3525
  These tags belong to the ExifTool XMP-iptcExt family 1 group.
3512
3526
 
@@ -5924,6 +5938,7 @@ Unknown only to reduce the volume of the normal output.
5924
5938
  0x0023 FocusPointWrap no
5925
5939
  0x0025 ManualFocusPointIllumination no
5926
5940
  0x0026 AF-AssistIlluminator no
5941
+ 0x0027 ManualFocusRingInAFMode no
5927
5942
  0x0029 ISOStepSize no
5928
5943
  0x002a ExposureControlStepSize no
5929
5944
  0x002b EasyExposureCompensation no
@@ -6102,6 +6117,7 @@ Unknown only to reduce the volume of the normal output.
6102
6117
  0x016c LimitAF-AreaModeSelWideLAnimals? no
6103
6118
  0x016e AFAreaMode no
6104
6119
  0x0170 PreferSubSelectorCenter no
6120
+ 0x0171 KeepExposureWithTeleconverter no
6105
6121
  0x0174 FocusPointSelectionSpeed no
6106
6122
 
6107
6123
  =head2 Canon Tags
@@ -15606,6 +15622,7 @@ These tags are used in Panasonic/Leica cameras.
15606
15622
  0x00d1 ISO int32u
15607
15623
  0x00d2 MonochromeGrainEffect int16u
15608
15624
  0x00d6 NoiseReductionStrength rational64s
15625
+ 0x00e4 LensTypeModel int16u
15609
15626
  0x0e00 PrintIM PrintIM
15610
15627
  0x2003 TimeInfo Panasonic TimeInfo
15611
15628
  0x8000 MakerNoteVersion undef
@@ -15963,6 +15980,7 @@ These tags are used in Pentax/Asahi cameras.
15963
15980
  0x008b ISO int32u
15964
15981
  0x0092 IntervalShooting int16u[2]
15965
15982
  0x0095 SkinToneCorrection int8s[2]
15983
+ SkinToneCorrection int8s[3]
15966
15984
  0x0096 ClarityControl int8s[2]
15967
15985
  0x0200 BlackPoint int16u[4]
15968
15986
  0x0201 WhitePoint int16u[4]
@@ -15995,6 +16013,8 @@ These tags are used in Pentax/Asahi cameras.
15995
16013
  0x0215 CameraInfo Pentax CameraInfo
15996
16014
  0x0216 BatteryInfo Pentax BatteryInfo
15997
16015
  0x021b SaturationInfo? no
16016
+ 0x021c ColorMatrixA2 undef[18]
16017
+ 0x021d ColorMatrixB2 undef[18]
15998
16018
  0x021f AFInfo Pentax AFInfo
15999
16019
  0x0220 HuffmanTable? no
16000
16020
  0x0221 KelvinWB Pentax KelvinWB
@@ -17023,11 +17043,13 @@ Camera orientation information written by the Gear 360 (SM-C200).
17023
17043
 
17024
17044
  Tags extracted from the trailer of JPEG images written when using certain
17025
17045
  features (such as "Sound & Shot" or "Shot & More") from Samsung models such
17026
- as the Galaxy S4 and Tab S.
17046
+ as the Galaxy S4 and Tab S, and from the 'sefd' atom in HEIC images from the
17047
+ Samsung S10+.
17027
17048
 
17028
17049
  Tag Name Writable
17029
17050
  -------- --------
17030
17051
  DepthMapData no
17052
+ DepthMapData2 no
17031
17053
  DepthMapName no
17032
17054
  DualCameraImage no
17033
17055
  DualCameraImageName no
@@ -17035,9 +17057,11 @@ as the Galaxy S4 and Tab S.
17035
17057
  EmbeddedAudioFile no
17036
17058
  EmbeddedAudioFileName no
17037
17059
  EmbeddedImage no
17060
+ EmbeddedImage2 no
17038
17061
  EmbeddedImageName no
17039
17062
  EmbeddedVideoFile no
17040
17063
  EmbeddedVideoType no
17064
+ MCCData no
17041
17065
  SingleShotDepthMap no
17042
17066
  SingleShotMeta Samsung SingleShotMeta
17043
17067
  SurroundShotVideo no
@@ -19234,6 +19258,8 @@ some models when the ExtractEmbedded option is used.
19234
19258
  0x851d GPSDateStamp no
19235
19259
  0xe303 WhiteBalance no
19236
19260
  0xe304 DateTime no
19261
+ 0xe43b PitchRollYaw no
19262
+ 0xe44b Accelerometer no
19237
19263
 
19238
19264
  =head2 SonyIDC Tags
19239
19265
 
@@ -20480,6 +20506,7 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
20480
20506
  'EISA' ElectronicImageStabilization no
20481
20507
  'EMPT' Empty? no
20482
20508
  'ESCS' EscapeStatus? no
20509
+ 'EXPT' MaximumShutterAngle no
20483
20510
  'FACE' FaceDetected no
20484
20511
  'FCNM' FaceNumbers no
20485
20512
  'FMWR' FirmwareVersion no
@@ -20497,7 +20524,11 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
20497
20524
  'LNED' LocalPositionNED no
20498
20525
  'MAGN' Magnetometer no
20499
20526
  'MINF' Model no
20527
+ 'MTRX' AccelerometerMatrix no
20528
+ 'MUID' MediaUniqueID no
20500
20529
  'OREN' AutoRotation no
20530
+ 'ORIN' InputOrientation no
20531
+ 'ORIO' OutputOrientation no
20501
20532
  'PHDR' HDRSetting no
20502
20533
  'PIMN' AutoISOMin no
20503
20534
  'PIMX' AutoISOMax no
@@ -20514,6 +20545,7 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
20514
20545
  'SHUT' ExposureTimes no
20515
20546
  'SIMU' ScaledIMU no
20516
20547
  'SIUN' SIUnits? no
20548
+ 'SROT' SensorReadoutTime no
20517
20549
  'STMP' TimeStamp no
20518
20550
  'STNM' StreamName? no
20519
20551
  'STRM' NestedSignalStream GoPro GPMF
@@ -20521,6 +20553,7 @@ L<https://github.com/gopro/gpmf-parser> for details about this format.
20521
20553
  'TMPC' CameraTemperature no
20522
20554
  'TSMP' TotalSamples? no
20523
20555
  'TYPE' StructureType? no
20556
+ 'UNIF' InputUniformity no
20524
20557
  'UNIT' Units? no
20525
20558
  'VERS' MetadataVersion no
20526
20559
  'VFOV' FieldOfView no
@@ -21790,16 +21823,19 @@ even if it is not listed in this table.
21790
21823
 
21791
21824
  =head2 Jpeg2000 Tags
21792
21825
 
21793
- The tags below are extracted from JPEG 2000 images and the JUMBF metadata in
21794
- JPEG images. Note that ExifTool currently writes only EXIF, IPTC and XMP
21795
- tags in Jpeg2000 images.
21826
+ The tags below are found in JPEG 2000 images and the JUMBF metadata in JPEG
21827
+ images, but not all of these are extracted. Note that ExifTool currently
21828
+ writes only EXIF, IPTC and XMP tags in Jpeg2000 images.
21796
21829
 
21797
21830
  Tag ID Tag Name Writable
21798
21831
  ------ -------- --------
21799
21832
  'Exif' EXIF EXIF
21800
21833
  'asoc' Association Jpeg2000
21834
+ 'bfdb' BinaryDataType no
21801
21835
  'bfil' BinaryFilter no
21836
+ 'bidb' BinaryData no
21802
21837
  'bpcc' BitsPerComponent no
21838
+ 'cbor' CBORData CBOR
21803
21839
  'cdef' ComponentDefinition no
21804
21840
  'cgrp' ColorGroup no
21805
21841
  'chck' DigitalSignature no
@@ -21853,6 +21889,7 @@ tags in Jpeg2000 images.
21853
21889
  UUID-GeoJP2 EXIF
21854
21890
  UUID-Photoshop Photoshop
21855
21891
  UUID-Signature no
21892
+ UUID-C2PAClaimSignature -
21856
21893
  UUID-Unknown no
21857
21894
  'xml ' XML XMP XML
21858
21895
  XMP -
@@ -21891,13 +21928,13 @@ tags in Jpeg2000 images.
21891
21928
 
21892
21929
  Information extracted from the JUMBF description box.
21893
21930
 
21894
- Tag ID Tag Name Writable
21895
- ------ -------- --------
21896
- 'jumd-flags' JUMDFlags no
21897
- 'jumd-id' JUMDID no
21898
- 'jumd-label' JUMDLabel no
21899
- 'jumd-sig' JUMDSignature no
21900
- 'jumd-type' JUMDType no
21931
+ Tag ID Tag Name Writable
21932
+ ------ -------- --------
21933
+ 'id' JUMDID no
21934
+ 'label' JUMDLabel no
21935
+ 'sig' JUMDSignature no
21936
+ 'toggles' JUMDToggles? no
21937
+ 'type' JUMDType no
21901
21938
 
21902
21939
  =head3 Jpeg2000 CaptureResolution Tags
21903
21940
 
@@ -21934,6 +21971,24 @@ JSON-formatted files.
21934
21971
  ON1_SettingsMetadataUsage no
21935
21972
  ON1_SettingsMetadataVisibleToUser no
21936
21973
 
21974
+ =head2 CBOR Tags
21975
+
21976
+ The tags below are extracted from CBOR (Concise Binary Object
21977
+ Representation) metadata. The C2PA specification uses this format for some
21978
+ metadata. As well as these tags, ExifTool will read any existing tags.
21979
+
21980
+ Tag Name Writable
21981
+ -------- --------
21982
+ AuthorIdentifier no
21983
+ AuthorName no
21984
+ DocumentID no
21985
+ Format no
21986
+ InstanceID no
21987
+ Relationship no
21988
+ ThumbnailHash no+
21989
+ ThumbnailURL no
21990
+ Title no
21991
+
21937
21992
  =head2 PLIST Tags
21938
21993
 
21939
21994
  Apple Property List tags. ExifTool reads both XML and binary-format PLIST
@@ -23929,6 +23984,8 @@ available. Alternate language tags and values containing special characters
23929
23984
  if the Compress option is used and Compress::Zlib is available. Raw profile
23930
23985
  information is always created as compressed zTXt if Compress::Zlib is
23931
23986
  available, or tEXt otherwise. Standard XMP is written as uncompressed iTXt.
23987
+ User-defined tags may set an 'iTXt' flag in the tag definition to be written
23988
+ only as iTXt.
23932
23989
 
23933
23990
  Alternate languages are accessed by suffixing the tag name with a '-',
23934
23991
  followed by an RFC 3066 language code (eg. "PNG:Comment-fr", or
@@ -24362,6 +24419,7 @@ Tags extracted from DPX (Digital Picture Exchange) images.
24362
24419
  1532 SourceCreateDate no
24363
24420
  1556 InputDeviceName no
24364
24421
  1588 InputDeviceSerialNumber no
24422
+ 1628 AspectRatio no
24365
24423
  1724 OriginalFrameRate no
24366
24424
  1728 ShutterAngle no
24367
24425
  1732 FrameID no
@@ -24577,6 +24635,16 @@ Tags extracted from FEI1 and FEI2 extended headers.
24577
24635
  868 PhasePlatePosition no
24578
24636
  872 ObjectiveAperture no
24579
24637
 
24638
+ =head2 LIF Tags
24639
+
24640
+ Tags extracted from Leica Image Format (LIF) imaging files. As well as the
24641
+ tags listed below, all available information is extracted from the
24642
+ XML-format metadata in the LIF header.
24643
+
24644
+ Tag Name Writable
24645
+ -------- --------
24646
+ TimeStampList no
24647
+
24580
24648
  =head2 MIFF Tags
24581
24649
 
24582
24650
  The MIFF (Magick Image File Format) format allows aribrary tag names to be
@@ -24763,6 +24831,18 @@ specification.
24763
24831
  'software' Software no
24764
24832
  'view' View no
24765
24833
 
24834
+ =head3 Other PFM Tags
24835
+
24836
+ Tags extracted from Portable FloatMap images. See
24837
+ L<http://www.pauldebevec.com/Research/HDR/PFM/> for the specification.
24838
+
24839
+ Tag Name Writable
24840
+ -------- --------
24841
+ ByteOrder no
24842
+ ColorSpace no
24843
+ ImageHeight no
24844
+ ImageWidth no
24845
+
24766
24846
  =head2 PDF Tags
24767
24847
 
24768
24848
  The tags listed in the PDF tables below are those which are used by ExifTool
@@ -24941,11 +25021,12 @@ This is the PDF document catalog.
24941
25021
 
24942
25022
  Tag ID Tag Name Writable
24943
25023
  ------ -------- --------
24944
- 'Cs1' Cs1 PDF Cs1
25024
+ 'CS0' CS0 PDF ICCBased
25025
+ 'Cs1' Cs1 PDF ICCBased
24945
25026
  'DefaultCMYK' DefaultCMYK PDF DefaultRGB
24946
25027
  'DefaultRGB' DefaultRGB PDF DefaultRGB
24947
25028
 
24948
- =head3 PDF Cs1 Tags
25029
+ =head3 PDF ICCBased Tags
24949
25030
 
24950
25031
  Tag ID Tag Name Writable
24951
25032
  ------ -------- --------
@@ -24957,12 +25038,6 @@ This is the PDF document catalog.
24957
25038
  ------ -------- --------
24958
25039
  'ICCBased' ICCBased PDF ICCBased
24959
25040
 
24960
- =head3 PDF ICCBased Tags
24961
-
24962
- Tag ID Tag Name Writable
24963
- ------ -------- --------
24964
- '_stream' _stream ICC_Profile
24965
-
24966
25041
  =head3 PDF Properties Tags
24967
25042
 
24968
25043
  Tag ID Tag Name Writable
@@ -25074,8 +25149,8 @@ Additional document permissions imposed by digital signatures.
25074
25149
 
25075
25150
  =head2 ID3 Tags
25076
25151
 
25077
- ExifTool extracts ID3 and Lyrics3 information from MP3, MPEG, AIFF, OGG,
25078
- FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple
25152
+ ExifTool extracts ID3 and Lyrics3 information from MP3, MPEG, WAV, AIFF,
25153
+ OGG, FLAC, APE, MPC and RealAudio files. ID3v2 tags which support multiple
25079
25154
  languages (eg. Comment and Lyrics) are extracted by specifying the tag name,
25080
25155
  followed by a dash ('-'), then a 3-character ISO 639-2 language code (eg.
25081
25156
  "Comment-spa"). See L<http://www.id3.org/> for the official ID3
@@ -26005,6 +26080,7 @@ for the official specification.
26005
26080
  'pict' PreviewPICT no
26006
26081
  'pnot' Preview QuickTime Preview
26007
26082
  'prrt' ARDroneTelemetry no
26083
+ 'sefd' SamsungTrailer Samsung Trailer
26008
26084
  'skip' CanonSkip Canon Skip
26009
26085
  PreviewImage no
26010
26086
  Skip? no
@@ -26046,10 +26122,10 @@ Tags found in Pittasoft Blackvue dashcam "free" data.
26046
26122
 
26047
26123
  =head3 QuickTime Stream Tags
26048
26124
 
26049
- Timed metadata extracted from QuickTime media data and some AVI videos when
26050
- the ExtractEmbedded option is used. Although most of these tags are
26051
- combined into the single table below, ExifTool currently reads 51 different
26052
- formats of timed GPS metadata from video files.
26125
+ The tags below are extracted from timed metadata in QuickTime and other
26126
+ formats of video files when the ExtractEmbedded option is used. Although
26127
+ most of these tags are combined into the single table below, ExifTool
26128
+ currently reads 57 different formats of timed GPS metadata from video files.
26053
26129
 
26054
26130
  Tag Name Writable
26055
26131
  -------- --------
@@ -26105,8 +26181,10 @@ formats of timed GPS metadata from video files.
26105
26181
  camm6 QuickTime camm6
26106
26182
  camm7 QuickTime camm7
26107
26183
  fdsc GoPro fdsc
26108
- gpmd_GoPro GoPro GPMF
26184
+ gpmd_Kingslim QuickTime Stream
26109
26185
  gpmd_Rove QuickTime Stream
26186
+ gpmd_FMAS QuickTime Stream
26187
+ gpmd_GoPro GoPro GPMF
26110
26188
  marl QuickTime marl
26111
26189
  mebx QuickTime Keys
26112
26190
  mett Parrot mett
@@ -26534,21 +26612,42 @@ QuickTimeHandler option may be set to 0 to avoid this.
26534
26612
  =head3 QuickTime iTunesInfo Tags
26535
26613
 
26536
26614
  ExifTool will extract any iTunesInfo tags that exist, even if they are not
26537
- defined in this table.
26615
+ defined in this table. These tags belong to the family 1 "iTunes" group,
26616
+ and are not currently writable.
26538
26617
 
26539
26618
  Tag ID Tag Name Writable
26540
26619
  ------ -------- --------
26620
+ 'ARTISTS' Artists no
26621
+ 'BARCODE' Barcode no
26622
+ 'CATALOGNUMBER' CatalogNumber no
26541
26623
  'DISCNUMBER' DiscNumber no
26624
+ 'Dynamic Range (DR)' DynamicRange no
26625
+ 'Dynamic Range (R128)' DynamicRangeR128 no
26542
26626
  'Encoding Params' EncodingParams QuickTime EncodingParams
26627
+ 'LABEL' Label no
26628
+ 'MEDIA' Media no
26629
+ 'MOOD' Mood no
26630
+ 'Peak Level (R128)' PeakLevelR128 no
26631
+ 'Peak Level (Sample)' PeakLevelSample no
26632
+ 'RATING' Rating no
26633
+ 'SCRIPT' Script no
26543
26634
  'TRACKNUMBER' TrackNumber no
26635
+ 'Volume Level (R128)' VolumeLevelR128 no
26636
+ 'Volume Level (ReplayGain)' ReplayVolumeLevel no
26544
26637
  'iTunEXTC' ContentRating no
26545
26638
  'iTunMOVI' iTunMOVI PLIST
26546
26639
  'iTunNORM' VolumeNormalization no
26547
26640
  'iTunSMPB' iTunSMPB no
26548
26641
  'iTunes_CDDB_1' CDDB1Info no
26549
26642
  'iTunes_CDDB_TrackNumber' CDDBTrackNumber no
26643
+ 'initialkey' InitialKey no
26644
+ 'originaldate' OriginalDate no
26645
+ 'originalyear' OriginalYear no
26550
26646
  'popularimeter' Popularimeter no
26647
+ 'replaygain_track_gain' ReplayTrackGain no
26648
+ 'replaygain_track_peak' ReplayTrackPeak no
26551
26649
  'tool' iTunTool no
26650
+ '~length' Length no
26552
26651
 
26553
26652
  =head3 QuickTime EncodingParams Tags
26554
26653
 
@@ -27203,6 +27302,7 @@ the config file.
27203
27302
  'lrcu' LyricsURI string
27204
27303
  'lvlm' LevelMeter? rational64s
27205
27304
  'manu' Make no
27305
+ 'mcvr' PreviewImage string
27206
27306
  'meta' Meta QuickTime Meta
27207
27307
  'modl' Model no
27208
27308
  'name' Name string
@@ -30063,6 +30163,7 @@ sub-documents, but the Duration is calculated for the full video.
30063
30163
  'gps0' GPSTrack QuickTime Stream
30064
30164
  'gsen' GSensor QuickTime Stream
30065
30165
  'iXML' IXML XMP XML
30166
+ 'id3 ' ID3 ID3
30066
30167
  'inst' Instrument RIFF Instrument
30067
30168
  'labl' CuePointLabel no
30068
30169
  'list' ListType no
@@ -30184,6 +30285,7 @@ by some software.
30184
30285
  'ISTD' ProductionStudio no
30185
30286
  'ISTR' Starring no
30186
30287
  'ITCH' Technician no
30288
+ 'ITRK' TrackNumber no
30187
30289
  'IWMU' WatermarkURL no
30188
30290
  'IWRI' WrittenBy no
30189
30291
  'LANG' Language no
@@ -35478,11 +35580,15 @@ values, may created via the ExifTool configuration file.
35478
35580
  GPS:GPSLatitudeRef
35479
35581
  GPSLatitude QuickTime:GPSCoordinates no
35480
35582
  GPSLatitude QuickTime:LocationInformation no
35583
+ GPSLatitude Sony:GPSLatitude no
35584
+ Sony:GPSLatitudeRef
35481
35585
  GPSLatitudeRef XMP-exif:GPSLatitude no
35482
35586
  GPSLongitude GPS:GPSLongitude no
35483
35587
  GPS:GPSLongitudeRef
35484
35588
  GPSLongitude QuickTime:GPSCoordinates no
35485
35589
  GPSLongitude QuickTime:LocationInformation no
35590
+ GPSLongitude Sony:GPSLongitude no
35591
+ Sony:GPSLongitudeRef
35486
35592
  GPSLongitudeRef XMP-exif:GPSLongitude no
35487
35593
  GPSPosition GPSLatitude no
35488
35594
  GPSLongitude
@@ -13,10 +13,11 @@ package Image::ExifTool::Torrent;
13
13
  use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
+ use Image::ExifTool::XMP;
16
17
 
17
- $VERSION = '1.04';
18
+ $VERSION = '1.05';
18
19
 
19
- sub ReadBencode($$);
20
+ sub ReadBencode($$$);
20
21
  sub ExtractTags($$$;$$@);
21
22
 
22
23
  # tags extracted from BitTorrent files
@@ -99,12 +100,12 @@ sub ReadMore($$)
99
100
 
100
101
  #------------------------------------------------------------------------------
101
102
  # Read bencoded value
102
- # Inputs: 0) input file, 1) buffer (pos must be set to current position)
103
+ # Inputs: 0) ExifTool ref, 1) input file, 2) buffer (pos must be set to current position)
103
104
  # Returns: HASH ref, ARRAY ref, SCALAR ref, SCALAR, or undef on error or end of data
104
105
  # Notes: Sets BencodeError element of RAF on any error
105
- sub ReadBencode($$)
106
+ sub ReadBencode($$$)
106
107
  {
107
- my ($raf, $dataPt) = @_;
108
+ my ($et, $raf, $dataPt) = @_;
108
109
 
109
110
  # read more if necessary (keep a minimum of 64 bytes in the buffer)
110
111
  my $pos = pos($$dataPt);
@@ -123,21 +124,21 @@ sub ReadBencode($$)
123
124
  } elsif ($tok eq 'd') { # dictionary
124
125
  $val = { };
125
126
  for (;;) {
126
- my $k = ReadBencode($raf, $dataPt);
127
+ my $k = ReadBencode($et, $raf, $dataPt);
127
128
  last unless defined $k;
128
129
  # the key must be a byte string
129
130
  if (ref $k) {
130
131
  ref $k ne 'SCALAR' and $$raf{BencodeError} = 'Bad dictionary key', last;
131
132
  $k = $$k;
132
133
  }
133
- my $v = ReadBencode($raf, $dataPt);
134
+ my $v = ReadBencode($et, $raf, $dataPt);
134
135
  last unless defined $v;
135
136
  $$val{$k} = $v;
136
137
  }
137
138
  } elsif ($tok eq 'l') { # list
138
139
  $val = [ ];
139
140
  for (;;) {
140
- my $v = ReadBencode($raf, $dataPt);
141
+ my $v = ReadBencode($et, $raf, $dataPt);
141
142
  last unless defined $v;
142
143
  push @$val, $v;
143
144
  }
@@ -165,8 +166,14 @@ sub ReadBencode($$)
165
166
  }
166
167
  if (defined $value) {
167
168
  # return as binary data unless it is a reasonable-length ASCII string
168
- if (length($value) > 256 or $value =~ /[^\t\x20-\x7e]/) {
169
+ if (length($value) > 256) {
169
170
  $val = \$value;
171
+ } elsif ($value =~ /[^\t\x20-\x7e]/) {
172
+ if (Image::ExifTool::XMP::IsUTF8(\$value) >= 0) {
173
+ $val = $et->Decode($value, 'UTF8');
174
+ } else {
175
+ $val = \$value;
176
+ }
170
177
  } else {
171
178
  $val = $value;
172
179
  }
@@ -206,7 +213,7 @@ sub ExtractTags($$$;$$@)
206
213
  my $tagInfo = $et->GetTagInfo($tagTablePtr, $id) or next;
207
214
  if (ref $val eq 'ARRAY') {
208
215
  if ($$tagInfo{JoinPath}) {
209
- $val = join '/', @$val;
216
+ $val = join '/', map { ref $_ ? '(Binary data)' : $_ } @$val;
210
217
  } else {
211
218
  push @more, @$val;
212
219
  next if ref $more[0] eq 'ARRAY'; # continue expanding nested lists
@@ -273,7 +280,7 @@ sub ProcessTorrent($$)
273
280
  my $raf = $$dirInfo{RAF};
274
281
  my $buff = '';
275
282
  pos($buff) = 0;
276
- my $dict = ReadBencode($raf, \$buff);
283
+ my $dict = ReadBencode($et, $raf, \$buff);
277
284
  my $err = $$raf{BencodeError};
278
285
  $et->Warn("Bencode error: $err") if $err;
279
286
  if (ref $dict eq 'HASH' and ($$dict{announce} or $$dict{'created by'})) {
@@ -170,7 +170,7 @@ sub FormatIPTC($$$$$;$)
170
170
  } else {
171
171
  my $len = int(($1 || 0) / 8);
172
172
  if ($len == 1) { # 1 byte
173
- $$valPtr = chr($$valPtr);
173
+ $$valPtr = chr($$valPtr & 0xff);
174
174
  } elsif ($len == 2) { # 2-byte integer
175
175
  $$valPtr = pack('n', $$valPtr);
176
176
  } else { # 4-byte integer
@@ -293,6 +293,7 @@ sub WritePDF($$)
293
293
  my $newTool = new Image::ExifTool;
294
294
  $newTool->Options(List => 1);
295
295
  $newTool->Options(Password => $et->Options('Password'));
296
+ $newTool->Options(NoPDFList => $et->Options('NoPDFList'));
296
297
  $$newTool{PDF_CAPTURE} = \%capture;
297
298
  my $info = $newTool->ImageInfo($raf, 'XMP', 'PDF:*', 'Error', 'Warning');
298
299
  # not a valid PDF file unless we got a version number
@@ -179,6 +179,8 @@ sub BuildTextChunk($$$$$)
179
179
  $tag =~ s/-$lang$//; # remove language code from tagID
180
180
  } elsif ($$et{OPTIONS}{Charset} ne 'Latin' and $val =~ /[\x80-\xff]/) {
181
181
  $iTXt = 1; # write as iTXt if it contains non-Latin special characters
182
+ } elsif ($$tagInfo{iTXt}) {
183
+ $iTXt = 1; # write as iTXt if specified in user-defined tag
182
184
  }
183
185
  }
184
186
  if ($comp) {
@@ -163,6 +163,9 @@ sub ConvInvISO6709($)
163
163
  # latitude must have 2 digits before the decimal, and longitude 3,
164
164
  # and all values must start with a "+" or "-", and Google Photos
165
165
  # requires at least 3 digits after the decimal point
166
+ # (and as of Apr 2021, Google Photos doesn't accept coordinats
167
+ # with more than 5 digits after the decimal place:
168
+ # https://exiftool.org/forum/index.php?topic=11055.msg67171#msg67171 )
166
169
  my @fmt = ('%s%02d.%s%s','%s%03d.%s%s','%s%d.%s%s');
167
170
  foreach (@a) {
168
171
  return undef unless Image::ExifTool::IsFloat($_);
@@ -314,7 +317,7 @@ sub FormatQTValue($$;$$)
314
317
  if ($writable and $qtFormat{$writable}) {
315
318
  $flags = $qtFormat{$writable};
316
319
  } else {
317
- $flags = $qtFormat{$format} || 0;
320
+ $flags = $qtFormat{$format || 0} || 0;
318
321
  }
319
322
  } elsif ($$valPt =~ /^\xff\xd8\xff/) {
320
323
  $flags = 0x0d; # JPG
@@ -846,7 +849,7 @@ sub WriteQuickTime($$$)
846
849
  # --> hold this terminator to the end
847
850
  $term = $hdr;
848
851
  } elsif ($n != 0) {
849
- $et->Error('File format error');
852
+ $et->Error("Unknown $n bytes at end of file", 1);
850
853
  }
851
854
  last;
852
855
  }
@@ -1086,7 +1089,9 @@ sub WriteQuickTime($$$)
1086
1089
  $$et{CHANGED} = $oldChanged if $$et{DemoteErrors} > 1;
1087
1090
  delete $$et{DemoteErrors};
1088
1091
  }
1089
- if (defined $newData and not length $newData and $$tagTablePtr{PERMANENT}) {
1092
+ if (defined $newData and not length $newData and ($$tagInfo{Permanent} or
1093
+ ($$tagTablePtr{PERMANENT} and not defined $$tagInfo{Permanent})))
1094
+ {
1090
1095
  # do nothing if trying to delete tag from a PERMANENT table
1091
1096
  $$et{CHANGED} = $oldChanged;
1092
1097
  undef $newData;
@@ -1094,7 +1099,9 @@ sub WriteQuickTime($$$)
1094
1099
  $$et{CUR_WRITE_GROUP} = $oldWriteGroup;
1095
1100
  SetByteOrder('MM');
1096
1101
  # add back header if necessary
1097
- if ($start and defined $newData and length $newData) {
1102
+ if ($start and defined $newData and (length $newData or
1103
+ (defined $$tagInfo{Permanent} and not $$tagInfo{Permanent})))
1104
+ {
1098
1105
  $newData = substr($buff,0,$start) . $newData;
1099
1106
  $$_[1] += $start foreach @chunkOffset;
1100
1107
  }
@@ -1469,7 +1469,7 @@ sub WriteXMP($$;$)
1469
1469
  $long[-2] .= "$nl$sp<$prop rdf:about='${about}'";
1470
1470
  # generate et:toolkit attribute if this is an exiftool RDF/XML output file
1471
1471
  if (@ns and $nsCur{$ns[0]} =~ m{^http://ns.exiftool.(?:ca|org)/}) {
1472
- $long[-2] .= "\n$sp${sp}xmlns:et='http://ns.exiftool.ca/1.0/'" .
1472
+ $long[-2] .= "\n$sp${sp}xmlns:et='http://ns.exiftool.org/1.0/'" .
1473
1473
  " et:toolkit='Image::ExifTool $Image::ExifTool::VERSION'";
1474
1474
  }
1475
1475
  $long[-2] .= "\n$sp${sp}xmlns:$_='$nsCur{$_}'" foreach @ns;
@@ -574,6 +574,9 @@ sub SetNewValue($;$$%)
574
574
  my $pre = $wantGroup ? $wantGroup . ':' : '';
575
575
  $err = "Tag '$pre${origTag}' is not defined";
576
576
  $err .= ' or has a bad language code' if $origTag =~ /-/;
577
+ if (not $pre and uc($origTag) eq 'TAG') {
578
+ $err .= " (specify a writable tag name, not '${origTag}' literally)"
579
+ }
577
580
  } else {
578
581
  $err = "Invalid tag name '${tag}'";
579
582
  $err .= " (remove the leading '\$')" if $tag =~ /^\$/;