exiftool_vendored 12.12.0 → 12.17.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.
Files changed (196) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +73 -3
  3. data/bin/MANIFEST +3 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +3 -3
  7. data/bin/exiftool +87 -57
  8. data/bin/lib/File/RandomAccess.pm +1 -1
  9. data/bin/lib/File/RandomAccess.pod +2 -2
  10. data/bin/lib/Image/ExifTool.pm +36 -3
  11. data/bin/lib/Image/ExifTool.pod +12 -8
  12. data/bin/lib/Image/ExifTool/AES.pm +1 -1
  13. data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
  14. data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
  15. data/bin/lib/Image/ExifTool/APE.pm +1 -1
  16. data/bin/lib/Image/ExifTool/APP12.pm +1 -1
  17. data/bin/lib/Image/ExifTool/ASF.pm +1 -1
  18. data/bin/lib/Image/ExifTool/Apple.pm +1 -1
  19. data/bin/lib/Image/ExifTool/Audible.pm +1 -1
  20. data/bin/lib/Image/ExifTool/BMP.pm +1 -1
  21. data/bin/lib/Image/ExifTool/BPG.pm +1 -1
  22. data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
  23. data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
  24. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +14 -7
  25. data/bin/lib/Image/ExifTool/Canon.pm +3 -2
  26. data/bin/lib/Image/ExifTool/CanonCustom.pm +20 -2
  27. data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
  28. data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
  29. data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
  30. data/bin/lib/Image/ExifTool/Casio.pm +1 -1
  31. data/bin/lib/Image/ExifTool/Charset.pm +1 -1
  32. data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
  33. data/bin/lib/Image/ExifTool/DJI.pm +28 -2
  34. data/bin/lib/Image/ExifTool/DNG.pm +1 -1
  35. data/bin/lib/Image/ExifTool/DPX.pm +4 -4
  36. data/bin/lib/Image/ExifTool/DV.pm +1 -1
  37. data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
  38. data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
  39. data/bin/lib/Image/ExifTool/EXE.pm +1 -1
  40. data/bin/lib/Image/ExifTool/Exif.pm +45 -16
  41. data/bin/lib/Image/ExifTool/FITS.pm +1 -1
  42. data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
  43. data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
  44. data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
  45. data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
  46. data/bin/lib/Image/ExifTool/Flash.pm +1 -1
  47. data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
  48. data/bin/lib/Image/ExifTool/Font.pm +1 -1
  49. data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
  50. data/bin/lib/Image/ExifTool/FujiFilm.pm +3 -2
  51. data/bin/lib/Image/ExifTool/GE.pm +1 -1
  52. data/bin/lib/Image/ExifTool/GIF.pm +1 -1
  53. data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
  54. data/bin/lib/Image/ExifTool/GPS.pm +6 -6
  55. data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
  56. data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
  57. data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
  58. data/bin/lib/Image/ExifTool/H264.pm +21 -6
  59. data/bin/lib/Image/ExifTool/HP.pm +1 -1
  60. data/bin/lib/Image/ExifTool/HTML.pm +1 -1
  61. data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
  62. data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
  63. data/bin/lib/Image/ExifTool/ID3.pm +1 -1
  64. data/bin/lib/Image/ExifTool/IPTC.pm +1 -1
  65. data/bin/lib/Image/ExifTool/ISO.pm +1 -1
  66. data/bin/lib/Image/ExifTool/ITC.pm +1 -1
  67. data/bin/lib/Image/ExifTool/Import.pm +1 -1
  68. data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
  69. data/bin/lib/Image/ExifTool/JPEG.pm +24 -2
  70. data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
  71. data/bin/lib/Image/ExifTool/JSON.pm +1 -1
  72. data/bin/lib/Image/ExifTool/JVC.pm +1 -1
  73. data/bin/lib/Image/ExifTool/Jpeg2000.pm +9 -4
  74. data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
  75. data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
  76. data/bin/lib/Image/ExifTool/LNK.pm +1 -1
  77. data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
  78. data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
  79. data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
  80. data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
  81. data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
  82. data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
  83. data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
  84. data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
  85. data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
  86. data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
  87. data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
  88. data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
  89. data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
  90. data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
  91. data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
  92. data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
  93. data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
  94. data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
  95. data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
  96. data/bin/lib/Image/ExifTool/M2TS.pm +1 -1
  97. data/bin/lib/Image/ExifTool/MIE.pm +1 -1
  98. data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
  99. data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
  100. data/bin/lib/Image/ExifTool/MNG.pm +1 -1
  101. data/bin/lib/Image/ExifTool/MOI.pm +1 -1
  102. data/bin/lib/Image/ExifTool/MPC.pm +1 -1
  103. data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
  104. data/bin/lib/Image/ExifTool/MPF.pm +1 -1
  105. data/bin/lib/Image/ExifTool/MWG.pm +1 -1
  106. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  107. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  108. data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
  109. data/bin/lib/Image/ExifTool/Matroska.pm +1 -1
  110. data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
  111. data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
  112. data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
  113. data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
  114. data/bin/lib/Image/ExifTool/Nikon.pm +315 -36
  115. data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
  116. data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
  117. data/bin/lib/Image/ExifTool/NikonSettings.pm +2013 -0
  118. data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
  119. data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
  120. data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
  121. data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
  122. data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
  123. data/bin/lib/Image/ExifTool/Opus.pm +1 -1
  124. data/bin/lib/Image/ExifTool/PCX.pm +1 -1
  125. data/bin/lib/Image/ExifTool/PDF.pm +10 -2
  126. data/bin/lib/Image/ExifTool/PGF.pm +1 -1
  127. data/bin/lib/Image/ExifTool/PICT.pm +1 -1
  128. data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
  129. data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
  130. data/bin/lib/Image/ExifTool/PNG.pm +12 -4
  131. data/bin/lib/Image/ExifTool/PPM.pm +1 -1
  132. data/bin/lib/Image/ExifTool/PSP.pm +1 -1
  133. data/bin/lib/Image/ExifTool/Palm.pm +1 -1
  134. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  135. data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
  136. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  137. data/bin/lib/Image/ExifTool/Pentax.pm +3 -2
  138. data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
  139. data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
  140. data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
  141. data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
  142. data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
  143. data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
  144. data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
  145. data/bin/lib/Image/ExifTool/QuickTime.pm +20 -14
  146. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +46 -7
  147. data/bin/lib/Image/ExifTool/README +5 -4
  148. data/bin/lib/Image/ExifTool/RIFF.pm +85 -7
  149. data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
  150. data/bin/lib/Image/ExifTool/RTF.pm +1 -1
  151. data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
  152. data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
  153. data/bin/lib/Image/ExifTool/Real.pm +1 -1
  154. data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
  155. data/bin/lib/Image/ExifTool/Red.pm +1 -1
  156. data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
  157. data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
  158. data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
  159. data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
  160. data/bin/lib/Image/ExifTool/Shift.pl +1 -1
  161. data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
  162. data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
  163. data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
  164. data/bin/lib/Image/ExifTool/Sony.pm +6 -2
  165. data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
  166. data/bin/lib/Image/ExifTool/Stim.pm +1 -1
  167. data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
  168. data/bin/lib/Image/ExifTool/TagLookup.pm +3985 -3807
  169. data/bin/lib/Image/ExifTool/TagNames.pod +432 -21
  170. data/bin/lib/Image/ExifTool/Text.pm +1 -1
  171. data/bin/lib/Image/ExifTool/Theora.pm +1 -1
  172. data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
  173. data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
  174. data/bin/lib/Image/ExifTool/VCard.pm +1 -1
  175. data/bin/lib/Image/ExifTool/Validate.pm +1 -1
  176. data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
  177. data/bin/lib/Image/ExifTool/WTV.pm +1 -1
  178. data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
  179. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  180. data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
  181. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
  182. data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
  183. data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
  184. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
  185. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -1
  186. data/bin/lib/Image/ExifTool/WriteXMP.pl +10 -7
  187. data/bin/lib/Image/ExifTool/Writer.pl +32 -18
  188. data/bin/lib/Image/ExifTool/XMP.pm +44 -9
  189. data/bin/lib/Image/ExifTool/XMP2.pl +5 -1
  190. data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
  191. data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
  192. data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
  193. data/bin/lib/Image/ExifTool/iWork.pm +1 -1
  194. data/bin/perl-Image-ExifTool.spec +1 -1
  195. data/lib/exiftool_vendored/version.rb +1 -1
  196. metadata +9 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb85849da2fdeb7f34dcbd03ba9548e5744c692f93d8163cf3029a5189f75d2c
4
- data.tar.gz: 0fd722ec987c17f4449f7eb9d18101286ceff673134d784833acd811cd376a09
3
+ metadata.gz: 282998369bb9233d2f181df0f59f292915623e97fba11993c01c310e533eb29f
4
+ data.tar.gz: fd371cfbcd5c85f4a8ab489cd9ee53f0a24dd3ac69a598d5d0a35a47a05853a9
5
5
  SHA512:
6
- metadata.gz: 8273b84dd45c1b266eec1a0c13c14e0c60e6f68c3bbd76fce169002a9983606b76f70e636199b751dda2f8f6992ea39b164f4d24c29849fa494b30b4ad14b1fa
7
- data.tar.gz: a65c0a97fdbc17365a46bd7605b36e72557004549f92ba9fc1f02d7358899643932125a499d65daa88eddebbf9c7a8d343c037b70baa4ff30802c97dfb66efd6
6
+ metadata.gz: 0347af9fa9e87b8a4de28e8274cd5f00bbd75d78ffc0a340624da063681eae24385a46928848248b92a53ec3549010b269bd2216e5a8390f8da4bf727223ba86
7
+ data.tar.gz: becbc52e82c10df8e11c73460e711926d3e422d8e42af2c81bf94b4f1f511a7e68037e9e1601cda42964fe995bb8c54d79ecd2196a583a85941d748d749d18be
data/bin/Changes CHANGED
@@ -4,8 +4,78 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: https://exiftool.org/rss.xml
6
6
 
7
- Note: The most recent production release is Version 12.00. (Other versions are
8
- considered development releases, and are not uploaded to CPAN.)
7
+ Note: The most recent production release is Version 12.16. (Other versions are
8
+ considered development releases, and are not uploaded to MetaCPAN.)
9
+
10
+ Feb. 3, 2021 - Version 12.17
11
+
12
+ - Added a new Canon FocusMode value
13
+ - Added a new FujiFilm FilmMode value
14
+ - Added a number of new XMP-crs tags (thanks Herb)
15
+ - Decode a new H264 MDPM tag
16
+ - Allow non-conforming lower-case XMP boolean "true" and "false" values to be
17
+ written, but only when print conversion is disabled
18
+ - Improved Validate option to warn about non-capitalized boolean XMP values
19
+ - Improved logic for setting GPSLatitude/LongitudeRef values when writing
20
+ - Changed -json and -php options so the -a option is implied even without the
21
+ -g option
22
+ - Avoid extracting audio/video data from AVI videos when -ee -u is used
23
+ - Patched decoding of Canon ContinuousShootingSpeed for newer firmware
24
+ versions of the EOS-1DXmkIII
25
+ - Re-worked LensID patch of version 12.00 (github issue #51)
26
+ - Fixed a few typos in newly-added NikonSettings tags (thanks Herb)
27
+ - Fixed problem where group could not be specified for PNG-pHYs tags when
28
+ writing
29
+
30
+ Jan. 21, 2021 - Version 12.16 (production release)
31
+
32
+ - Extract another form of video subtitle text
33
+ - Enhanced -ee option with -ee2 and -ee3 to allow parsing of the H264 video
34
+ stream in MP4 files
35
+ - Changed a Nikon FlashMode value
36
+ - Fixed problem that caused a failed DPX test on Strawberry Perl
37
+ - API Changes:
38
+ - Enhanced ExtractEmbedded option
39
+
40
+ Jan. 18, 2021 - Version 12.15 (production release)
41
+
42
+ - Added a couple of new Sony LensType values (thanks LibRaw and Jos Roost)
43
+ - Added a new Nikon FlashMode value (thanks Mike)
44
+ - Decode NikonSettings (thanks Warren Hatch)
45
+ - Decode thermal information from DJI RJPEG images
46
+ - Fixed extra newline in -echo3 and -echo4 outputs added in version 12.10
47
+ - Fixed out-of-memory problem when writing some very large PNG files under
48
+ Windows
49
+
50
+ Jan. 6, 2021 - Version 12.14
51
+
52
+ - Added support for 2 more types of timed GPS in video files (that makes 49
53
+ different formats now supported)
54
+ - Added validity check for PDF trailer dictionary Size
55
+ - Added a new Pentax LensType
56
+ - Extract metadata from Jpeg2000 Association box
57
+ - Changed -g:XX:YY and -G:XX:YY options to show empty strings for non-existent
58
+ groups
59
+ - Patched to issue warning and avoid writing date/time values with a zero
60
+ month or day number
61
+ - Patched to avoid runtime warnings if trying to set FileName to an empty
62
+ string
63
+ - Fixed issue that could cause GPS test number 12 to fail on some systems
64
+ - Fixed problem extracting XML as a block from Jpeg2000 images, and extract
65
+ XML tags in the XML group instead of XMP
66
+
67
+ Dec. 24, 2020 - Version 12.13
68
+
69
+ - Added -i HIDDEN option to ignore files with names that start with "."
70
+ - Added a few new Nikon ShutterMode values (thanks Jan Skoda)
71
+ - Added ability to write Google GCamera MicroVideo XMP tags
72
+ - Add time zone automatically to most string-based QuickTime date/time tags
73
+ when writing unless the PrintConv option is disabled
74
+ - Decode a new Sony tag (thanks LibRaw)
75
+ - Changed behaviour when writing only pseudo tags to return an error and avoid
76
+ writing any other tags if writing FileName fails
77
+ - Print "X image files read" message even if only 1 file is read when at least
78
+ one other file has failed the -if condition
9
79
 
10
80
  Dec. 4, 2020 - Version 12.12
11
81
 
@@ -172,7 +242,7 @@ July 27, 2020 - Version 12.02
172
242
  - Improved decoding of some Canon EOS 1DXmkIII custom functions
173
243
  - Allow integer QuickTime TrackNumber and DiskNumber values
174
244
  - Relax validity check of QuickTime:ContentCreateDate when writing with -n
175
- - Removed "Com" from the start of some unknown ItemList tag names
245
+ - Removed "Com" from the start of some unknown QuickTime ItemList tag names
176
246
  - Patched CanonCustom decoding for bug in Canon EOS-1DX firmware
177
247
  - Changed QuickTime CleanAperture tags decode as signed rationals
178
248
 
data/bin/MANIFEST CHANGED
@@ -115,6 +115,7 @@ html/TagNames/Motorola.html
115
115
  html/TagNames/Nikon.html
116
116
  html/TagNames/NikonCapture.html
117
117
  html/TagNames/NikonCustom.html
118
+ html/TagNames/NikonSettings.html
118
119
  html/TagNames/Nintendo.html
119
120
  html/TagNames/OOXML.html
120
121
  html/TagNames/Ogg.html
@@ -337,6 +338,7 @@ lib/Image/ExifTool/Motorola.pm
337
338
  lib/Image/ExifTool/Nikon.pm
338
339
  lib/Image/ExifTool/NikonCapture.pm
339
340
  lib/Image/ExifTool/NikonCustom.pm
341
+ lib/Image/ExifTool/NikonSettings.pm
340
342
  lib/Image/ExifTool/Nintendo.pm
341
343
  lib/Image/ExifTool/OOXML.pm
342
344
  lib/Image/ExifTool/Ogg.pm
@@ -603,6 +605,7 @@ t/Jpeg2000.t
603
605
  t/Jpeg2000_2.out
604
606
  t/Jpeg2000_3.out
605
607
  t/Jpeg2000_4.out
608
+ t/Jpeg2000_5.out
606
609
  t/Kodak.t
607
610
  t/Kodak_2.out
608
611
  t/Kodak_3.out
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.12"
50
+ "version" : "12.17"
51
51
  }
data/bin/META.yml CHANGED
@@ -28,4 +28,4 @@ recommends:
28
28
  Time::HiRes: 0
29
29
  requires:
30
30
  perl: 5.004
31
- version: 12.12
31
+ version: 12.17
data/bin/README CHANGED
@@ -106,8 +106,8 @@ your home directory, then you would type the following commands in a
106
106
  terminal window to extract and run ExifTool:
107
107
 
108
108
  cd ~/Desktop
109
- gzip -dc Image-ExifTool-12.12.tar.gz | tar -xf -
110
- cd Image-ExifTool-12.12
109
+ gzip -dc Image-ExifTool-12.17.tar.gz | tar -xf -
110
+ cd Image-ExifTool-12.17
111
111
  ./exiftool t/images/ExifTool.jpg
112
112
 
113
113
  Note: These commands extract meta information from one of the test images.
@@ -161,7 +161,7 @@ for calculating digest values and providing other features listed below:
161
161
 
162
162
  COPYRIGHT AND LICENSE
163
163
 
164
- Copyright 2003-2020, Phil Harvey
164
+ Copyright 2003-2021, Phil Harvey
165
165
 
166
166
  This is free software; you can redistribute it and/or modify it under the
167
167
  same terms as Perl itself.
data/bin/exiftool CHANGED
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.12';
13
+ my $version = '12.17';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -106,6 +106,7 @@ my %csvTags; # lookup for all found tags with CSV option (lower case keys
106
106
  my %database; # lookup for database information based on file name (in ExifTool Charset)
107
107
  my %filterExt; # lookup for filtered extensions
108
108
  my %ignore; # directory names to ignore
109
+ my $ignoreHidden; # flag to ignore hidden files
109
110
  my %preserveTime; # preserved timestamps for files
110
111
  my %printFmt; # the contents of the print format file
111
112
  my %setTags; # hash of list references for tags to set from files
@@ -370,12 +371,12 @@ if (grep /^-common_args$/i, @ARGV) {
370
371
  Command: for (;;) {
371
372
 
372
373
  if (@echo3) {
373
- my $str = join "\n", @echo3, "\n";
374
+ my $str = join("\n", @echo3) . "\n";
374
375
  $str =~ s/\$\{status\}/$rtnVal/ig;
375
376
  print STDOUT $str;
376
377
  }
377
378
  if (@echo4) {
378
- my $str = join "\n", @echo4, "\n";
379
+ my $str = join("\n", @echo4) . "\n";
379
380
  $str =~ s/\$\{status\}/$rtnVal/ig;
380
381
  print STDERR $str;
381
382
  }
@@ -468,6 +469,7 @@ undef $fileHeader;
468
469
  undef $filtered;
469
470
  undef $fixLen;
470
471
  undef $forcePrint;
472
+ undef $ignoreHidden;
471
473
  undef $joinLists;
472
474
  undef $langOpt;
473
475
  undef $listItem;
@@ -892,8 +894,8 @@ for (;;) {
892
894
  $helped = 1;
893
895
  next;
894
896
  }
895
- if (/^(ee|extractembedded)$/i) {
896
- $mt->Options(ExtractEmbedded => 1);
897
+ if (/^(ee|extractembedded)(\d*)$/i) {
898
+ $mt->Options(ExtractEmbedded => $2 || 1);
897
899
  $mt->Options(Duplicates => 1);
898
900
  next;
899
901
  }
@@ -986,6 +988,7 @@ for (;;) {
986
988
  my $dir = shift;
987
989
  defined $dir or Error("Expecting directory name for -i option\n"), $badCmd=1, next;
988
990
  $ignore{$dir} = 1;
991
+ $dir eq 'HIDDEN' and $ignoreHidden = 1;
989
992
  next;
990
993
  }
991
994
  if (/^if(\d*)$/i) {
@@ -1261,7 +1264,7 @@ for (;;) {
1261
1264
  if (/^php$/i) {
1262
1265
  $json = 2;
1263
1266
  $html = $xml = 0;
1264
- $mt->Options(Duplicates=>1);
1267
+ $mt->Options(Duplicates => 1);
1265
1268
  next;
1266
1269
  }
1267
1270
  if (/^z(ip)?$/i) {
@@ -1502,7 +1505,6 @@ if ($xml) {
1502
1505
  require Image::ExifTool::XMP if $json == 1; # (for EncodeBase64)
1503
1506
  }
1504
1507
  $mt->Options(List => 1) unless $joinLists;
1505
- $mt->Options(Duplicates => 0) unless defined $showGroup;
1506
1508
  $showTagID = 'D' if $tabFormat and not $showTagID;
1507
1509
  } elsif ($structOpt) {
1508
1510
  $mt->Options(List => 1);
@@ -1863,7 +1865,7 @@ if (defined $deleteOrig) {
1863
1865
  printf($o "%5d image files %s\n", $countCopyWr, $overwriteOrig ? 'moved' : 'copied') if $countCopyWr;
1864
1866
  printf($o "%5d files weren't updated due to errors\n", $countBadWr) if $countBadWr;
1865
1867
  printf($o "%5d files weren't created due to errors\n", $countBadCr) if $countBadCr;
1866
- printf($o "%5d image files read\n", $count) if $tot>1 or ($countDir and not $totWr);
1868
+ printf($o "%5d image files read\n", $count) if ($tot+$countFailed)>1 or ($countDir and not $totWr);
1867
1869
  printf($o "%5d files could not be read\n", $countBad) if $countBad;
1868
1870
  printf($o "%5d output files created\n", scalar(keys %created)) if $textOut;
1869
1871
  printf($o "%5d output files appended\n", scalar(keys %appended)) if %appended;
@@ -2301,7 +2303,7 @@ TAG: foreach $tag (@foundTags) {
2301
2303
  $group = $et->GetGroup($tag, $showGroup);
2302
2304
  # look ahead to see if this tag may suppress a priority tag in
2303
2305
  # the same group, and if so suppress this tag instead
2304
- next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
2306
+ next if $noDups and $tag =~ /^(.*?) \(/ and defined $$info{$1} and
2305
2307
  $group eq $et->GetGroup($1, $showGroup);
2306
2308
  $group = 'Unknown' if not $group and ($xml or $json or $csv);
2307
2309
  if ($fp and not ($allGroup or $csv)) {
@@ -2324,6 +2326,9 @@ TAG: foreach $tag (@foundTags) {
2324
2326
  }
2325
2327
  undef $group; # undefine so we don't print it below
2326
2328
  }
2329
+ } elsif ($noDups) {
2330
+ # don't allow duplicates, but avoid suppressing the priority tag
2331
+ next if $tag =~ /^(.*?) \(/ and defined $$info{$1};
2327
2332
  }
2328
2333
 
2329
2334
  ++$lineCount; # we are printing something meaningful
@@ -2855,6 +2860,10 @@ sub SetImageInfo($$$)
2855
2860
  # determine what our output file name should be
2856
2861
  my $newFileName = $et->GetNewValues('FileName');
2857
2862
  my $newDir = $et->GetNewValues('Directory');
2863
+ if (defined $newFileName and not length $newFileName) {
2864
+ Warn "Warning: New file name is empty - $ infile\n";
2865
+ undef $newFileName;
2866
+ }
2858
2867
  if (defined $testName) {
2859
2868
  my $err;
2860
2869
  $err = "You shouldn't write FileName or Directory with TestFile" if defined $newFileName or defined $newDir;
@@ -2933,14 +2942,19 @@ sub SetImageInfo($$$)
2933
2942
  }
2934
2943
  # quickly rename file and/or set file date if this is all we are doing
2935
2944
  if ($numSet == $numPseudo) {
2936
- my $r1 = $et->SetFileModifyDate($file,undef,'FileCreateDate');
2937
- my $r2 = $et->SetFileModifyDate($file);
2938
- my $r3 = $et->SetSystemTags($file);
2939
- my $r4 = 0;
2940
- $r4 = $et->SetFileName($file, $outfile) if defined $outfile;
2941
- if ($r1 > 0 or $r2 > 0 or $r3 > 0 or $r4 > 0) {
2945
+ my ($r0, $r1, $r2, $r3) = (0, 0, 0, 0);
2946
+ if (defined $outfile) {
2947
+ $r0 = $et->SetFileName($file, $outfile);
2948
+ $file = $$et{NewName} if $r0 > 0; # continue with new name if changed
2949
+ }
2950
+ unless ($r0 < 0) {
2951
+ $r1 = $et->SetFileModifyDate($file,undef,'FileCreateDate');
2952
+ $r2 = $et->SetFileModifyDate($file);
2953
+ $r3 = $et->SetSystemTags($file);
2954
+ }
2955
+ if ($r0 > 0 or $r1 > 0 or $r2 > 0 or $r3 > 0) {
2942
2956
  ++$countGoodWr;
2943
- } elsif ($r1 < 0 or $r2 < 0 or $r3 < 0 or $r4 < 0) {
2957
+ } elsif ($r0 < 0 or $r1 < 0 or $r2 < 0 or $r3 < 0) {
2944
2958
  EFile($infile);
2945
2959
  ++$countBadWr;
2946
2960
  return 0;
@@ -2949,8 +2963,7 @@ sub SetImageInfo($$$)
2949
2963
  ++$countSameWr;
2950
2964
  }
2951
2965
  if (defined $hardLink or defined $symLink or defined $testName) {
2952
- my $src = (defined $outfile and $r4 > 0) ? $outfile : $file;
2953
- DoHardLink($et, $src, $hardLink, $symLink, $testName);
2966
+ DoHardLink($et, $file, $hardLink, $symLink, $testName);
2954
2967
  }
2955
2968
  return 1;
2956
2969
  }
@@ -3686,6 +3699,7 @@ sub ScanDir($$;$)
3686
3699
  next;
3687
3700
  }
3688
3701
  next if $endThisDir;
3702
+ next if $ignoreHidden and $file =~ /^\./; # ignore hidden files if specified
3689
3703
  # apply rules from -ext options
3690
3704
  my $accepted;
3691
3705
  if ($filterFlag) {
@@ -4561,7 +4575,7 @@ L<Processing control|/Processing control>
4561
4575
 
4562
4576
  -a (-duplicates) Allow duplicate tags to be extracted
4563
4577
  -e (--composite) Do not generate composite tags
4564
- -ee (-extractEmbedded) Extract information from embedded files
4578
+ -ee[NUM] (-extractEmbedded) Extract information from embedded files
4565
4579
  -ext[+] EXT (-extension) Process files with specified extension
4566
4580
  -F[OFFSET] (-fixBase) Fix the base for maker notes offsets
4567
4581
  -fast[NUM] Increase speed when extracting metadata
@@ -4905,7 +4919,7 @@ and the value is written to all possible groups/tags. For example, the
4905
4919
  string form must be used in the following command since the intent is to set
4906
4920
  the value of all existing date/time tags from C<CreateDate>:
4907
4921
 
4908
- exiftool "-time:all<$createdate" -wm w FILE
4922
+ exiftool '-time:all<$createdate' -wm w FILE
4909
4923
 
4910
4924
  =item B<-x> I<TAG> (B<-exclude>)
4911
4925
 
@@ -4931,7 +4945,7 @@ between images, but allows the metadata to be altered by editing the
4931
4945
  intermediate file (C<out.args> in this example):
4932
4946
 
4933
4947
  exiftool -args -G1 --filename --directory src.jpg > out.args
4934
- exiftool -@ out.args -sep ", " dst.jpg
4948
+ exiftool -@ out.args -sep ', ' dst.jpg
4935
4949
 
4936
4950
  Note: Be careful when copying information with this technique since it is
4937
4951
  easy to write tags which are normally considered "unsafe". For instance,
@@ -5195,18 +5209,18 @@ JSON arrays unless B<-sep> is used. By default XMP structures are flattened
5195
5209
  into individual tags in the JSON output, but the original structure may be
5196
5210
  preserved with the B<-struct> option (this also causes all list-type XMP
5197
5211
  tags to be output as JSON arrays, otherwise single-item lists would be
5198
- output as simple strings). The B<-a> option is implied if the B<-g> or
5199
- B<-G> options are used, otherwise it is ignored and tags with identical
5200
- JSON names are suppressed. (B<-g4> may be used to ensure that all tags have
5201
- unique JSON names.) Adding the B<-D> or B<-H> option changes tag values to
5202
- JSON objects with "val" and "id" fields, and adding B<-l> adds a "desc"
5203
- field, and a "num" field if the numerical value is different from the
5204
- converted "val". The B<-b> option may be added to output binary data,
5205
- encoded in base64 if necessary (indicated by ASCII "base64:" as the first 7
5206
- bytes of the value), and B<-t> may be added to include tag table information
5207
- (see B<-t> for details). The JSON output is UTF-8 regardless of any B<-L>
5208
- or B<-charset> option setting, but the UTF-8 validation is disabled if a
5209
- character set other than UTF-8 is specified.
5212
+ output as simple strings). The B<-a> option is implied when B<-json> is
5213
+ used, but entries with identical JSON names are suppressed in the output.
5214
+ (B<-G4> may be used to ensure that all tags have unique JSON names.) Adding
5215
+ the B<-D> or B<-H> option changes tag values to JSON objects with "val" and
5216
+ "id" fields, and adding B<-l> adds a "desc" field, and a "num" field if the
5217
+ numerical value is different from the converted "val". The B<-b> option may
5218
+ be added to output binary data, encoded in base64 if necessary (indicated by
5219
+ ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
5220
+ to include tag table information (see B<-t> for details). The JSON output
5221
+ is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
5222
+ UTF-8 validation is disabled if a character set other than UTF-8 is
5223
+ specified.
5210
5224
 
5211
5225
  If I<JSONFILE> is specified, the file is imported and the tag definitions
5212
5226
  from the file are used to set tag values on a per-file basis. The special
@@ -5355,7 +5369,7 @@ with this command:
5355
5369
 
5356
5370
  produces output like this:
5357
5371
 
5358
- -- Generated by ExifTool 12.12 --
5372
+ -- Generated by ExifTool 12.17 --
5359
5373
  File: a.jpg - 2003:10:31 15:44:19
5360
5374
  (f/5.6, 1/60s, ISO 100)
5361
5375
  File: b.jpg - 2006:05:23 11:57:38
@@ -5515,18 +5529,18 @@ Notes:
5515
5529
  argument like C<%d%f.txt> is written as C<%%d%%f.txt>.
5516
5530
 
5517
5531
  2) If the argument for B<-w> does not contain a valid format code (eg. %f),
5518
- then it is interpreted as a file extension. It is not possible to specify a
5519
- simple filename as an argument -- creating a single output file from
5520
- multiple source files is typically done by shell redirection, ie)
5532
+ then it is interpreted as a file extension, but there are three different
5533
+ ways to create a single output file from multiple source files:
5521
5534
 
5535
+ # 1. Shell redirection
5522
5536
  exiftool FILE1 FILE2 ... > out.txt
5523
5537
 
5524
- But if necessary, an empty format code may be used to force the argument to
5525
- be interpreted as a format string, and the same result may be obtained
5526
- without the use of shell redirection:
5527
-
5538
+ # 2. With the -w option and a zero-width format code
5528
5539
  exiftool -w+! %0fout.txt FILE1 FILE2 ...
5529
5540
 
5541
+ # 3. With the -W option (see the -W option below)
5542
+ exiftool -W+! out.txt FILE1 FILE2 ...
5543
+
5530
5544
  Advanced features:
5531
5545
 
5532
5546
  A substring of the original file name, directory or extension may be taken
@@ -5694,7 +5708,7 @@ when copying.
5694
5708
 
5695
5709
  Extract existing tags only -- don't generate composite tags.
5696
5710
 
5697
- =item B<-ee> (B<-extractEmbedded>)
5711
+ =item B<-ee>[I<NUM>] (B<-extractEmbedded>)
5698
5712
 
5699
5713
  Extract information from embedded documents in EPS files, embedded EPS
5700
5714
  information and JPEG and Jpeg2000 images in PDF files, embedded MPF images
@@ -5712,6 +5726,11 @@ document as if it were a separate input file. This allows, for example,
5712
5726
  generation of GPS track logs from timed metadata in videos. See
5713
5727
  L<https://exiftool.org/geotag.html#Inverse> for examples.
5714
5728
 
5729
+ Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
5730
+ until the first Supplemental Enhancement Information (SEI) message is
5731
+ decoded, or 3 to parse the entire H624 stream and decode all SEI
5732
+ information.
5733
+
5715
5734
  =item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
5716
5735
 
5717
5736
  Process only files with (B<-ext>) or without (B<--ext>) a specified
@@ -5800,7 +5819,9 @@ name, or a full path. If a full path is specified, it must match the
5800
5819
  Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
5801
5820
  more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
5802
5821
  sensitive) may be specified to ignore symbolic links when the B<-r> option
5803
- is used.
5822
+ is used. As well, a value of C<HIDDEN> (case sensitive) may be used to
5823
+ ignore files with names that start with a "." (ie. hidden files on Unix
5824
+ systems) when scanning a directory.
5804
5825
 
5805
5826
  =item B<-if>[I<NUM>] I<EXPR>
5806
5827
 
@@ -6359,10 +6380,10 @@ name and directory.
6359
6380
 
6360
6381
  =item B<-stay_open> I<FLAG>
6361
6382
 
6362
- If I<FLAG> is C<1> or C<True>, causes exiftool keep reading from the B<-@>
6363
- I<ARGFILE> even after reaching the end of file. This feature allows calling
6364
- applications to pre-load exiftool, thus avoiding the overhead of loading
6365
- exiftool for each command. The procedure is as follows:
6383
+ If I<FLAG> is C<1> or C<True> (case insensitive), causes exiftool keep
6384
+ reading from the B<-@> I<ARGFILE> even after reaching the end of file. This
6385
+ feature allows calling applications to pre-load exiftool, thus avoiding the
6386
+ overhead of loading exiftool for each command. The procedure is as follows:
6366
6387
 
6367
6388
  1) Execute C<exiftool -stay_open True -@ I<ARGFILE>>, where I<ARGFILE> is the
6368
6389
  name of an existing (possibly empty) argument file or C<-> to pipe arguments
@@ -6385,8 +6406,9 @@ signals back to your application.)
6385
6406
 
6386
6407
  4) Repeat steps 2 and 3 for each command.
6387
6408
 
6388
- 5) Write C<-stay_open\nFalse\n> to I<ARGFILE> when done. This will cause
6389
- exiftool to process any remaining command-line arguments then exit normally.
6409
+ 5) Write C<-stay_open\nFalse\n> (or C<-stay_open\n0\n>) to I<ARGFILE> when
6410
+ done. This will cause exiftool to process any remaining command-line
6411
+ arguments then exit normally.
6390
6412
 
6391
6413
  The input I<ARGFILE> may be changed at any time before step 5 above by
6392
6414
  writing the following lines to the currently open I<ARGFILE>:
@@ -6414,10 +6436,11 @@ an interface to the API UserParam option (see the
6414
6436
  L<Image::ExifTool Options|Image::ExifTool/Options> documentation), and
6415
6437
  provides a method to access user-defined parameters in arguments to the
6416
6438
  B<-if> and B<-p> options as if they were any other tag. Appending a hash
6417
- tag (C<#>) to I<PARAM> also causes the parameter to be extracted as a normal
6418
- tag (in the UserParam group). Similar to the B<-api> option, the parameter
6419
- value is set to 1 if I<=VAL> is omitted, undef if just I<VAL> is omitted
6420
- with C<=>, or an empty string if I<VAL> is omitted with C<^=>.
6439
+ tag (C<#>) to I<PARAM> (eg. C<-userParam MyTag#=yes>) also causes the
6440
+ parameter to be extracted as a normal tag in the UserParam group. Similar
6441
+ to the B<-api> option, the parameter value is set to 1 if I<=VAL> is
6442
+ omitted, undef if just I<VAL> is omitted with C<=>, or an empty string if
6443
+ I<VAL> is omitted with C<^=>.
6421
6444
 
6422
6445
  exiftool -p '$test from $filename' -userparam test=Hello FILE
6423
6446
 
@@ -6487,9 +6510,9 @@ For example, the following command may be used to remove duplicate Keywords:
6487
6510
  The B<-sep> option is necessary to split the string back into individual
6488
6511
  list items when writing to a list-type tag.
6489
6512
 
6490
- An optional flag argument may be set to 1 to cause C<NoDups> to return undef
6491
- if no duplicates existed, thus preventing the file from being rewritten
6492
- unnecessarily:
6513
+ An optional flag argument may be set to 1 to cause C<NoDups> to set C<$_> to
6514
+ undef if no duplicates existed, thus preventing the file from being
6515
+ rewritten unnecessarily:
6493
6516
 
6494
6517
  exiftool -sep '##' '-keywords<${keywords;NoDups(1)}' a.jpg
6495
6518
 
@@ -7127,6 +7150,13 @@ flexibility of ExifTool.)
7127
7150
 
7128
7151
  =back
7129
7152
 
7153
+ =head1 INTERRUPTING EXIFTOOL
7154
+
7155
+ Interrupting exiftool with a CTRL-C or SIGINT will not result in partially
7156
+ written files or temporary files remaining on the hard disk. The exiftool
7157
+ application traps SIGINT and defers it until the end of critical processes
7158
+ if necessary, then does a proper cleanup before exiting.
7159
+
7130
7160
  =head1 EXIT STATUS
7131
7161
 
7132
7162
  The exiftool application exits with a status of 0 on success, or 1 if an
@@ -7135,7 +7165,7 @@ the commands if B<-execute> was used).
7135
7165
 
7136
7166
  =head1 AUTHOR
7137
7167
 
7138
- Copyright 2003-2020, Phil Harvey
7168
+ Copyright 2003-2021, Phil Harvey
7139
7169
 
7140
7170
  This is free software; you can redistribute it and/or modify it under the
7141
7171
  same terms as Perl itself.