exiftool_vendored 12.15.0 → 12.22.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +96 -2
  3. data/bin/MANIFEST +1 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/config_files/example.config +1 -8
  8. data/bin/exiftool +104 -59
  9. data/bin/fmt_files/gpx.fmt +1 -1
  10. data/bin/fmt_files/gpx_wpt.fmt +1 -1
  11. data/bin/fmt_files/kml.fmt +1 -1
  12. data/bin/fmt_files/kml_track.fmt +1 -1
  13. data/bin/lib/Image/ExifTool.pm +74 -24
  14. data/bin/lib/Image/ExifTool.pod +34 -24
  15. data/bin/lib/Image/ExifTool/Apple.pm +3 -2
  16. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +24 -13
  17. data/bin/lib/Image/ExifTool/Canon.pm +26 -2
  18. data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
  19. data/bin/lib/Image/ExifTool/DJI.pm +6 -6
  20. data/bin/lib/Image/ExifTool/DPX.pm +3 -3
  21. data/bin/lib/Image/ExifTool/Exif.pm +35 -16
  22. data/bin/lib/Image/ExifTool/FITS.pm +13 -2
  23. data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
  24. data/bin/lib/Image/ExifTool/GPS.pm +24 -13
  25. data/bin/lib/Image/ExifTool/H264.pm +20 -5
  26. data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
  27. data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
  28. data/bin/lib/Image/ExifTool/MIE.pm +2 -2
  29. data/bin/lib/Image/ExifTool/Microsoft.pm +296 -82
  30. data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
  31. data/bin/lib/Image/ExifTool/NikonSettings.pm +16 -16
  32. data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
  33. data/bin/lib/Image/ExifTool/QuickTime.pm +58 -30
  34. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +27 -8
  35. data/bin/lib/Image/ExifTool/README +5 -4
  36. data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
  37. data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
  38. data/bin/lib/Image/ExifTool/Sony.pm +63 -29
  39. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  40. data/bin/lib/Image/ExifTool/TagLookup.pm +4032 -3981
  41. data/bin/lib/Image/ExifTool/TagNames.pod +261 -104
  42. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  43. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -5
  44. data/bin/lib/Image/ExifTool/WriteXMP.pl +9 -6
  45. data/bin/lib/Image/ExifTool/Writer.pl +49 -14
  46. data/bin/lib/Image/ExifTool/XMP.pm +31 -5
  47. data/bin/perl-Image-ExifTool.spec +1 -1
  48. data/lib/exiftool_vendored/version.rb +1 -1
  49. metadata +48 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e30c22a774925019702c59a5aa788607b27a5b217824d47ec66be50e5a10e8f1
4
- data.tar.gz: 5c54290d58d097af3d8950f187b940e6a930d1d9502c38252620b57c8ff64067
3
+ metadata.gz: e2862287affdad95022ad8df06fd1b420c2861e28f5daefa50c627c42db2e396
4
+ data.tar.gz: 90b7804c201830e6cacc5b28b9ba29ef4a5fff7bb6a1cb26db1fce970495769e
5
5
  SHA512:
6
- metadata.gz: '07965ed32bfb30fe68f862fc2e1e8c1a59094182b664d4cfbfdc9fe0c5e4db16b08733c0ff42c093c1dbd289148c24f5ed51e40b99b582701441cc4bf64b8061'
7
- data.tar.gz: 5ab6c978e3d9066a288173d0efd9a786245fabe9114446b77115032153fc64252dd05b1b47d4608e94b0ded7bf996fdb02706136036ede870aa2c779796b6d63
6
+ metadata.gz: 85a74e99266a89cf019066af0227b8d6515b153d2d5612814afa1bac1faffa874e6defa7aa524577a4031154cc81f0b74277136476cf35c6bb2aa9cc35e1148f
7
+ data.tar.gz: 42911ad4e1f2c03ff6a95cc25f3fcb47f8fbda099d6cfb669e72fefa9c743b002865225d872d179654dc79f3958d6e94feb20d7bfb317e3006c7b8bdee195e98
data/bin/Changes CHANGED
@@ -4,9 +4,103 @@ 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.15. (Other versions are
7
+ Note: The most recent production release is Version 12.16. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Mar. 17, 2021 - Version 12.22
11
+
12
+ - Added a few new Sony LensTypes and a new SonyModelID (thanks Jos Roost and
13
+ LibRaw)
14
+ - Added Extra BaseName tag
15
+ - Added a new CanonModelID (thanks LibRaw)
16
+ - Decode timed GPS from unlisted programs in M2TS videos with the -ee3 option
17
+ - Decode more Sony rtmd tags
18
+ - Decode some tags for the Sony ILME-FX3 (thanks Jos Roost)
19
+ - Allow negative values to be written to XMP-aux:LensID
20
+ - Recognize HEVC video program in M2TS files
21
+ - Enhanced -b option so --b suppresses tags with binary data
22
+ - Improved flexibility when writing GPS coordinates:
23
+ - Now pulls latitude and longitude from a combined GPSCoordinates string
24
+ - Recognizes the full word "South" and "West" to write negative coordinates
25
+ - Improved warning when trying to write an integer QuickTime date/time tag and
26
+ Time::Local is not available
27
+ - Convert GPSSpeed from mph to km/h in timed GPS from Garmin MP4 videos
28
+
29
+ Feb. 24, 2021 - Version 12.21
30
+
31
+ - Added a few new iOS QuickTime tags
32
+ - Decode a couple more Sony rtmd tags
33
+ - Patch to avoid possible "Use of uninitialized value" warning when attempting
34
+ to write QuickTime date/time tags with an invalid value
35
+ - Fixed problem writing Microsoft Xtra tags
36
+ - Fixed Windows daylight savings time patch for file times that was broken in
37
+ 12.19 (however directory times will not yet handle DST properly)
38
+
39
+ Feb. 23, 2021 - Version 12.20
40
+
41
+ - Added ability to write some Microsoft Xtra tags in MOV/MP4 videos
42
+ - Added two new Canon LensType values (thanks Norbert Wasser)
43
+ - Added a new Nikon LensID
44
+ - Fixed problem reading FITS comments that start before column 11
45
+
46
+ Feb. 18, 2021 - Version 12.19
47
+
48
+ - Added -list_dir option
49
+ - Added the "ls-l" Shortcut tag
50
+ - Extract Comment and History from FITS files
51
+ - Enhanced FilePermissions to include device type (similar to "ls -l")
52
+ - Changed the name of Apple ContentIdentifier tag to MediaGroupUUID
53
+ (thanks Neal Krawetz)
54
+ - Fixed a potential "substr outside of string" runtime error when reading
55
+ corrupted EXIF
56
+ - Fixed edge case where NikonScanIFD may not be copied properly when copying
57
+ MakerNotes to another file
58
+ - API Changes:
59
+ - Added ability to read/write System tags of directories
60
+ - Enhanced GetAllGroups() to support family 7 and take optional ExifTool
61
+ reference
62
+ - Changed QuickTimeHandler option default to 1
63
+
64
+ Feb. 9, 2021 - Version 12.18
65
+
66
+ - Added a new SonyModelID
67
+ - Decode a number of Sony tags for the ILCE-1 (thanks Jos Roost)
68
+ - Decode a couple of new Canon tags (thanks LibRaw)
69
+ - Patched to read differently formatted UserData:Keywords as written by iPhone
70
+ - Patched to tolerate out-of-order Nikon MakerNote IFD entries when obtaining
71
+ tags necessary for decryption
72
+ - Fixed a few possible Condition warnings for some NikonSettings tags
73
+
74
+ Feb. 3, 2021 - Version 12.17
75
+
76
+ - Added a new Canon FocusMode value
77
+ - Added a new FujiFilm FilmMode value
78
+ - Added a number of new XMP-crs tags (thanks Herb)
79
+ - Decode a new H264 MDPM tag
80
+ - Allow non-conforming lower-case XMP boolean "true" and "false" values to be
81
+ written, but only when print conversion is disabled
82
+ - Improved Validate option to warn about non-capitalized boolean XMP values
83
+ - Improved logic for setting GPSLatitude/LongitudeRef values when writing
84
+ - Changed -json and -php options so the -a option is implied even without the
85
+ -g option
86
+ - Avoid extracting audio/video data from AVI videos when -ee -u is used
87
+ - Patched decoding of Canon ContinuousShootingSpeed for newer firmware
88
+ versions of the EOS-1DXmkIII
89
+ - Re-worked LensID patch of version 12.00 (github issue #51)
90
+ - Fixed a few typos in newly-added NikonSettings tags (thanks Herb)
91
+ - Fixed problem where group could not be specified for PNG-pHYs tags when
92
+ writing
93
+
94
+ Jan. 21, 2021 - Version 12.16 (production release)
95
+
96
+ - Extract another form of video subtitle text
97
+ - Enhanced -ee option with -ee2 and -ee3 to allow parsing of the H264 video
98
+ stream in MP4 files
99
+ - Changed a Nikon FlashMode value
100
+ - Fixed problem that caused a failed DPX test on Strawberry Perl
101
+ - API Changes:
102
+ - Enhanced ExtractEmbedded option
103
+
10
104
  Jan. 18, 2021 - Version 12.15 (production release)
11
105
 
12
106
  - Added a couple of new Sony LensType values (thanks LibRaw and Jos Roost)
@@ -212,7 +306,7 @@ July 27, 2020 - Version 12.02
212
306
  - Improved decoding of some Canon EOS 1DXmkIII custom functions
213
307
  - Allow integer QuickTime TrackNumber and DiskNumber values
214
308
  - Relax validity check of QuickTime:ContentCreateDate when writing with -n
215
- - Removed "Com" from the start of some unknown ItemList tag names
309
+ - Removed "Com" from the start of some unknown QuickTime ItemList tag names
216
310
  - Patched CanonCustom decoding for bug in Canon EOS-1DX firmware
217
311
  - Changed QuickTime CleanAperture tags decode as signed rationals
218
312
 
data/bin/MANIFEST CHANGED
@@ -759,6 +759,7 @@ t/QuickTime_12.out
759
759
  t/QuickTime_13.out
760
760
  t/QuickTime_14.out
761
761
  t/QuickTime_15.out
762
+ t/QuickTime_16.out
762
763
  t/QuickTime_2.out
763
764
  t/QuickTime_3.out
764
765
  t/QuickTime_4.out
data/bin/META.json CHANGED
@@ -47,5 +47,5 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "12.15"
50
+ "version" : "12.22"
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.15
31
+ version: 12.22
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.15.tar.gz | tar -xf -
110
- cd Image-ExifTool-12.15
109
+ gzip -dc Image-ExifTool-12.22.tar.gz | tar -xf -
110
+ cd Image-ExifTool-12.22
111
111
  ./exiftool t/images/ExifTool.jpg
112
112
 
113
113
  Note: These commands extract meta information from one of the test images.
@@ -165,14 +165,7 @@
165
165
  # specified, then at least one of the Desire'd tags must exist. See
166
166
  # the Composite table in Image::ExifTool::Exif for more examples,
167
167
  # and lib/Image/ExifTool/README for all of the details.
168
- BaseName => {
169
- Require => {
170
- 0 => 'FileName',
171
- },
172
- # remove the extension from FileName
173
- ValueConv => '$val[0] =~ /(.*)\./ ? $1 : $val[0]',
174
- },
175
- # the next few examples demonstrate simplifications which may be
168
+ # The first few examples demonstrate simplifications which may be
176
169
  # used if only one tag is Require'd or Desire'd:
177
170
  # 1) the Require lookup may be replaced with a simple tag name
178
171
  # 2) "$val" may be used to represent "$val[0]" in the expression
data/bin/exiftool CHANGED
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '12.15';
13
+ my $version = '12.22';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -159,14 +159,17 @@ my $forcePrint; # string to use for missing tag values (undef to not print t
159
159
  my $helped; # flag to avoid printing help if no tags specified
160
160
  my $html; # flag for html-formatted output (2=html dump)
161
161
  my $interrupted; # flag set if CTRL-C is pressed during a critical process
162
+ my $isBinary; # true if value is a SCALAR ref
162
163
  my $isWriting; # flag set if we are writing tags
163
164
  my $joinLists; # flag set to join list values into a single string
164
165
  my $json; # flag for JSON/PHP output format (1=JSON, 2=PHP)
165
166
  my $langOpt; # language option
167
+ my $listDir; # treat a directory as a regular file
166
168
  my $listItem; # item number for extracting single item from a list
167
169
  my $listSep; # list item separator (', ' by default)
168
170
  my $mt; # main ExifTool object
169
171
  my $multiFile; # non-zero if we are scanning multiple files
172
+ my $noBinary; # flag set to ignore binary tags
170
173
  my $outFormat; # -1=Canon format, 0=same-line, 1=tag names, 2=values only
171
174
  my $outOpt; # output file or directory name
172
175
  my $overwriteOrig; # flag to overwrite original file (1=overwrite, 2=in place)
@@ -203,7 +206,6 @@ my $validFile; # flag indicating we processed a valid file
203
206
  my $verbose; # verbose setting
204
207
  my $vout; # verbose output file reference (\*STDOUT or \*STDERR)
205
208
  my $windowTitle; # title for console window
206
- my $isBinary; # true if value is a SCALAR ref
207
209
  my $xml; # flag for XML-formatted output
208
210
 
209
211
  # flag to keep the input -@ argfile open:
@@ -474,6 +476,7 @@ undef $joinLists;
474
476
  undef $langOpt;
475
477
  undef $listItem;
476
478
  undef $multiFile;
479
+ undef $noBinary;
477
480
  undef $outOpt;
478
481
  undef $preserveTime;
479
482
  undef $progress;
@@ -691,7 +694,7 @@ for (;;) {
691
694
  } else { # 'g(\d*)'
692
695
  # list all groups in specified family
693
696
  my $family = $2 || 0;
694
- PrintTagList("Groups in family $family", GetAllGroups($family));
697
+ PrintTagList("Groups in family $family", $mt->GetAllGroups($family));
695
698
  }
696
699
  next;
697
700
  }
@@ -792,7 +795,11 @@ for (;;) {
792
795
  next;
793
796
  }
794
797
  /^arg(s|format)$/i and $argFormat = 1, next;
795
- /^b(inary)?$/i and $mt->Options(Binary => 1, NoPDFList => 1), $binaryOutput = 1, next;
798
+ if (/^(-?)b(inary)?$/i) {
799
+ ($binaryOutput, $noBinary) = $1 ? (undef, 1) : (1, undef);
800
+ $mt->Options(Binary => $binaryOutput, NoPDFList => $binaryOutput);
801
+ next;
802
+ }
796
803
  if (/^c(oordFormat)?$/i) {
797
804
  my $fmt = shift;
798
805
  $fmt or Error("Expecting coordinate format for -c option\n"), $badCmd=1, next;
@@ -876,6 +883,7 @@ for (;;) {
876
883
  }
877
884
  (/^D$/ or $a eq 'decimal') and $showTagID = 'D', next;
878
885
  /^delete_original(!?)$/i and $deleteOrig = ($1 ? 2 : 1), next;
886
+ /^list_dir$/i and $listDir = 1, next;
879
887
  (/^e$/ or $a eq '-composite') and $mt->Options(Composite => 0), next;
880
888
  (/^-e$/ or $a eq 'composite') and $mt->Options(Composite => 1), next;
881
889
  (/^E$/ or $a eq 'escapehtml') and require Image::ExifTool::HTML and $escapeHTML = 1, next;
@@ -894,8 +902,8 @@ for (;;) {
894
902
  $helped = 1;
895
903
  next;
896
904
  }
897
- if (/^(ee|extractembedded)$/i) {
898
- $mt->Options(ExtractEmbedded => 1);
905
+ if (/^(ee|extractembedded)(\d*)$/i) {
906
+ $mt->Options(ExtractEmbedded => $2 || 1);
899
907
  $mt->Options(Duplicates => 1);
900
908
  next;
901
909
  }
@@ -1264,7 +1272,7 @@ for (;;) {
1264
1272
  if (/^php$/i) {
1265
1273
  $json = 2;
1266
1274
  $html = $xml = 0;
1267
- $mt->Options(Duplicates=>1);
1275
+ $mt->Options(Duplicates => 1);
1268
1276
  next;
1269
1277
  }
1270
1278
  if (/^z(ip)?$/i) {
@@ -1505,7 +1513,6 @@ if ($xml) {
1505
1513
  require Image::ExifTool::XMP if $json == 1; # (for EncodeBase64)
1506
1514
  }
1507
1515
  $mt->Options(List => 1) unless $joinLists;
1508
- $mt->Options(Duplicates => 0) unless defined $showGroup;
1509
1516
  $showTagID = 'D' if $tabFormat and not $showTagID;
1510
1517
  } elsif ($structOpt) {
1511
1518
  $mt->Options(List => 1);
@@ -2271,6 +2278,7 @@ TAG: foreach $tag (@foundTags) {
2271
2278
  next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
2272
2279
  }
2273
2280
  $val = ConvertBinary($val); # convert SCALAR references
2281
+ next unless defined $val;
2274
2282
  if ($structOpt) {
2275
2283
  # serialize structure if necessary
2276
2284
  $val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
@@ -2304,7 +2312,7 @@ TAG: foreach $tag (@foundTags) {
2304
2312
  $group = $et->GetGroup($tag, $showGroup);
2305
2313
  # look ahead to see if this tag may suppress a priority tag in
2306
2314
  # the same group, and if so suppress this tag instead
2307
- next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
2315
+ next if $noDups and $tag =~ /^(.*?) \(/ and defined $$info{$1} and
2308
2316
  $group eq $et->GetGroup($1, $showGroup);
2309
2317
  $group = 'Unknown' if not $group and ($xml or $json or $csv);
2310
2318
  if ($fp and not ($allGroup or $csv)) {
@@ -2327,6 +2335,9 @@ TAG: foreach $tag (@foundTags) {
2327
2335
  }
2328
2336
  undef $group; # undefine so we don't print it below
2329
2337
  }
2338
+ } elsif ($noDups) {
2339
+ # don't allow duplicates, but avoid suppressing the priority tag
2340
+ next if $tag =~ /^(.*?) \(/ and defined $$info{$1};
2330
2341
  }
2331
2342
 
2332
2343
  ++$lineCount; # we are printing something meaningful
@@ -2706,7 +2717,7 @@ sub SetImageInfo($$$)
2706
2717
  return 0;
2707
2718
  }
2708
2719
  }
2709
- if (not $isStdout and ($et->IsDirectory($outfile) or $outfile =~ /\/$/)) {
2720
+ if (not $isStdout and (($et->IsDirectory($outfile) and not $listDir) or $outfile =~ /\/$/)) {
2710
2721
  $outfile .= '/' unless $outfile =~ /\/$/;
2711
2722
  my $name = $file;
2712
2723
  $name =~ s/^.*\///s; # remove directory name
@@ -2909,6 +2920,10 @@ sub SetImageInfo($$$)
2909
2920
  unless (defined $tmpFile) {
2910
2921
  # count the number of tags and pseudo-tags we are writing
2911
2922
  my ($numSet, $numPseudo) = $et->CountNewValues();
2923
+ if ($numSet != $numPseudo and $et->IsDirectory($file)) {
2924
+ print $vout "Can't write real tags to a directory - $infile\n" if defined $verbose;
2925
+ $numSet = $numPseudo;
2926
+ }
2912
2927
  if ($et->Exists($file)) {
2913
2928
  unless ($numSet) {
2914
2929
  # no need to write if no tags set
@@ -3393,20 +3408,25 @@ sub AddGroups($$$$)
3393
3408
  #------------------------------------------------------------------------------
3394
3409
  # Convert binary data (SCALAR references) for printing
3395
3410
  # Inputs: 0) object reference
3396
- # Returns: converted object
3411
+ # Returns: converted object, or undef if we don't want binary objects
3397
3412
  sub ConvertBinary($)
3398
3413
  {
3399
3414
  my $obj = shift;
3400
3415
  my ($key, $val);
3401
3416
  if (ref $obj eq 'HASH') {
3402
3417
  foreach $key (keys %$obj) {
3403
- $$obj{$key} = ConvertBinary($$obj{$key}) if ref $$obj{$key};
3418
+ next unless ref $$obj{$key};
3419
+ $$obj{$key} = ConvertBinary($$obj{$key});
3420
+ return undef unless defined $$obj{$key};
3404
3421
  }
3405
3422
  } elsif (ref $obj eq 'ARRAY') {
3406
3423
  foreach $val (@$obj) {
3407
- $val = ConvertBinary($val) if ref $val;
3424
+ next unless ref $val;
3425
+ $val = ConvertBinary($val);
3426
+ return undef unless defined $val;
3408
3427
  }
3409
3428
  } elsif (ref $obj eq 'SCALAR') {
3429
+ return undef if $noBinary;
3410
3430
  # (binaryOutput flag is set to 0 for binary mode of XML/PHP/JSON output formats)
3411
3431
  if (defined $binaryOutput) {
3412
3432
  $obj = $$obj;
@@ -3583,7 +3603,7 @@ sub ProcessFiles($;$)
3583
3603
  ++$progressCount;
3584
3604
  $progStr = " [$progressCount/$progressMax]" if $progress;
3585
3605
  }
3586
- if ($et->IsDirectory($file)) {
3606
+ if ($et->IsDirectory($file) and not $listDir) {
3587
3607
  $multiFile = $validFile = 1;
3588
3608
  ScanDir($et, $file, $list);
3589
3609
  } elsif ($filterFlag and not AcceptFile($file)) {
@@ -4573,7 +4593,7 @@ L<Processing control|/Processing control>
4573
4593
 
4574
4594
  -a (-duplicates) Allow duplicate tags to be extracted
4575
4595
  -e (--composite) Do not generate composite tags
4576
- -ee (-extractEmbedded) Extract information from embedded files
4596
+ -ee[NUM] (-extractEmbedded) Extract information from embedded files
4577
4597
  -ext[+] EXT (-extension) Process files with specified extension
4578
4598
  -F[OFFSET] (-fixBase) Fix the base for maker notes offsets
4579
4599
  -fast[NUM] Increase speed when extracting metadata
@@ -4622,6 +4642,7 @@ L<Advanced options|/Advanced options>
4622
4642
  -echo[NUM] TEXT Echo text to stdout or stderr
4623
4643
  -efile[NUM][!] ERRFILE Save names of files with errors
4624
4644
  -execute[NUM] Execute multiple commands on one line
4645
+ -list_dir List directories, not their contents
4625
4646
  -srcfile FMT Process a different source file
4626
4647
  -stay_open FLAG Keep reading -@ argfile even after EOF
4627
4648
  -userParam PARAM[[^]=[VAL]] Set user parameter (API UserParam opt)
@@ -4917,7 +4938,7 @@ and the value is written to all possible groups/tags. For example, the
4917
4938
  string form must be used in the following command since the intent is to set
4918
4939
  the value of all existing date/time tags from C<CreateDate>:
4919
4940
 
4920
- exiftool "-time:all<$createdate" -wm w FILE
4941
+ exiftool '-time:all<$createdate' -wm w FILE
4921
4942
 
4922
4943
  =item B<-x> I<TAG> (B<-exclude>)
4923
4944
 
@@ -4930,7 +4951,7 @@ documentation above for a complete description.
4930
4951
  =head3 Input-output text formatting
4931
4952
 
4932
4953
  Note that trailing spaces are removed from extracted values for most output
4933
- text formats. The exceptions are C<-b>, C<-csv>, C<-j> and C<-X>.
4954
+ text formats. The exceptions are B<-b>, B<-csv>, B<-j> and B<-X>.
4934
4955
 
4935
4956
  =over 5
4936
4957
 
@@ -4943,7 +4964,7 @@ between images, but allows the metadata to be altered by editing the
4943
4964
  intermediate file (C<out.args> in this example):
4944
4965
 
4945
4966
  exiftool -args -G1 --filename --directory src.jpg > out.args
4946
- exiftool -@ out.args -sep ", " dst.jpg
4967
+ exiftool -@ out.args -sep ', ' dst.jpg
4947
4968
 
4948
4969
  Note: Be careful when copying information with this technique since it is
4949
4970
  easy to write tags which are normally considered "unsafe". For instance,
@@ -4956,17 +4977,21 @@ maintain separate list items when writing metadata back to image files, and
4956
4977
  the B<-struct> option may be used when extracting to preserve structured XMP
4957
4978
  information.
4958
4979
 
4959
- =item B<-b> (B<-binary>)
4980
+ =item B<-b>, B<--b> (B<-binary>, B<--binary>)
4960
4981
 
4961
- Output requested metadata in binary format without tag names or
4962
- descriptions. This option is mainly used for extracting embedded images or
4963
- other binary data, but it may also be useful for some text strings since
4964
- control characters (such as newlines) are not replaced by '.' as they are in
4965
- the default output. By default, list items are separated by a newline when
4966
- extracted with the B<-b> option, but this may be changed (see the B<-sep>
4967
- option for details). May be combined with C<-j>, C<-php> or C<-X> to
4968
- extract binary data in JSON, PHP or XML format, but note that "unsafe" tags
4969
- must be specified explicitly to be extracted as binary in these formats.
4982
+ Output requested metadata in binary format without tag names or descriptions
4983
+ (B<-b> or B<-binary>). This option is mainly used for extracting embedded
4984
+ images or other binary data, but it may also be useful for some text strings
4985
+ since control characters (such as newlines) are not replaced by '.' as they
4986
+ are in the default output. By default, list items are separated by a
4987
+ newline when extracted with the B<-b> option, but this may be changed (see
4988
+ the B<-sep> option for details). May be combined with B<-j>, B<-php> or
4989
+ B<-X> to extract binary data in JSON, PHP or XML format, but note that
4990
+ "unsafe" tags must be specified explicitly to be extracted as binary in
4991
+ these formats.
4992
+
4993
+ With a leading double dash (B<--b> or B<--binary>), tags which contain
4994
+ binary data are suppressed in the output when reading.
4970
4995
 
4971
4996
  =item B<-c> I<FMT> (B<-coordFormat>)
4972
4997
 
@@ -5207,18 +5232,18 @@ JSON arrays unless B<-sep> is used. By default XMP structures are flattened
5207
5232
  into individual tags in the JSON output, but the original structure may be
5208
5233
  preserved with the B<-struct> option (this also causes all list-type XMP
5209
5234
  tags to be output as JSON arrays, otherwise single-item lists would be
5210
- output as simple strings). The B<-a> option is implied if the B<-g> or
5211
- B<-G> options are used, otherwise it is ignored and tags with identical
5212
- JSON names are suppressed. (B<-g4> may be used to ensure that all tags have
5213
- unique JSON names.) Adding the B<-D> or B<-H> option changes tag values to
5214
- JSON objects with "val" and "id" fields, and adding B<-l> adds a "desc"
5215
- field, and a "num" field if the numerical value is different from the
5216
- converted "val". The B<-b> option may be added to output binary data,
5217
- encoded in base64 if necessary (indicated by ASCII "base64:" as the first 7
5218
- bytes of the value), and B<-t> may be added to include tag table information
5219
- (see B<-t> for details). The JSON output is UTF-8 regardless of any B<-L>
5220
- or B<-charset> option setting, but the UTF-8 validation is disabled if a
5221
- character set other than UTF-8 is specified.
5235
+ output as simple strings). The B<-a> option is implied when B<-json> is
5236
+ used, but entries with identical JSON names are suppressed in the output.
5237
+ (B<-G4> may be used to ensure that all tags have unique JSON names.) Adding
5238
+ the B<-D> or B<-H> option changes tag values to JSON objects with "val" and
5239
+ "id" fields, and adding B<-l> adds a "desc" field, and a "num" field if the
5240
+ numerical value is different from the converted "val". The B<-b> option may
5241
+ be added to output binary data, encoded in base64 if necessary (indicated by
5242
+ ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
5243
+ to include tag table information (see B<-t> for details). The JSON output
5244
+ is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
5245
+ UTF-8 validation is disabled if a character set other than UTF-8 is
5246
+ specified.
5222
5247
 
5223
5248
  If I<JSONFILE> is specified, the file is imported and the tag definitions
5224
5249
  from the file are used to set tag values on a per-file basis. The special
@@ -5367,7 +5392,7 @@ with this command:
5367
5392
 
5368
5393
  produces output like this:
5369
5394
 
5370
- -- Generated by ExifTool 12.15 --
5395
+ -- Generated by ExifTool 12.22 --
5371
5396
  File: a.jpg - 2003:10:31 15:44:19
5372
5397
  (f/5.6, 1/60s, ISO 100)
5373
5398
  File: b.jpg - 2006:05:23 11:57:38
@@ -5527,18 +5552,18 @@ Notes:
5527
5552
  argument like C<%d%f.txt> is written as C<%%d%%f.txt>.
5528
5553
 
5529
5554
  2) If the argument for B<-w> does not contain a valid format code (eg. %f),
5530
- then it is interpreted as a file extension. It is not possible to specify a
5531
- simple filename as an argument -- creating a single output file from
5532
- multiple source files is typically done by shell redirection, ie)
5555
+ then it is interpreted as a file extension, but there are three different
5556
+ ways to create a single output file from multiple source files:
5533
5557
 
5558
+ # 1. Shell redirection
5534
5559
  exiftool FILE1 FILE2 ... > out.txt
5535
5560
 
5536
- But if necessary, an empty format code may be used to force the argument to
5537
- be interpreted as a format string, and the same result may be obtained
5538
- without the use of shell redirection:
5539
-
5561
+ # 2. With the -w option and a zero-width format code
5540
5562
  exiftool -w+! %0fout.txt FILE1 FILE2 ...
5541
5563
 
5564
+ # 3. With the -W option (see the -W option below)
5565
+ exiftool -W+! out.txt FILE1 FILE2 ...
5566
+
5542
5567
  Advanced features:
5543
5568
 
5544
5569
  A substring of the original file name, directory or extension may be taken
@@ -5706,7 +5731,7 @@ when copying.
5706
5731
 
5707
5732
  Extract existing tags only -- don't generate composite tags.
5708
5733
 
5709
- =item B<-ee> (B<-extractEmbedded>)
5734
+ =item B<-ee>[I<NUM>] (B<-extractEmbedded>)
5710
5735
 
5711
5736
  Extract information from embedded documents in EPS files, embedded EPS
5712
5737
  information and JPEG and Jpeg2000 images in PDF files, embedded MPF images
@@ -5724,6 +5749,12 @@ document as if it were a separate input file. This allows, for example,
5724
5749
  generation of GPS track logs from timed metadata in videos. See
5725
5750
  L<https://exiftool.org/geotag.html#Inverse> for examples.
5726
5751
 
5752
+ Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
5753
+ until the first Supplemental Enhancement Information (SEI) message is
5754
+ decoded, or 3 to parse the entire H624 stream and decode all SEI
5755
+ information. For M2TS videos, a setting of 3 causes the entire file to be
5756
+ parsed in search of unlisted programs which may contain timed GPS.
5757
+
5727
5758
  =item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
5728
5759
 
5729
5760
  Process only files with (B<-ext>) or without (B<--ext>) a specified
@@ -5811,10 +5842,10 @@ Ignore specified directory name. I<DIR> may be either an individual folder
5811
5842
  name, or a full path. If a full path is specified, it must match the
5812
5843
  Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
5813
5844
  more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
5814
- sensitive) may be specified to ignore symbolic links when the B<-r> option
5815
- is used. As well, a value of C<HIDDEN> (case sensitive) may be used to
5816
- ignore files with names that start with a "." (ie. hidden files on Unix
5817
- systems) when scanning a directory.
5845
+ sensitive) may be specified to avoid recursing into directories which are
5846
+ symbolic links when the B<-r> option is used. As well, a value of C<HIDDEN>
5847
+ (case sensitive) may be used to ignore files with names that start with a
5848
+ "." (ie. hidden files on Unix systems) when scanning a directory.
5818
5849
 
5819
5850
  =item B<-if>[I<NUM>] I<EXPR>
5820
5851
 
@@ -6240,7 +6271,7 @@ As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
6240
6271
  for any tag on the command line. See the L<MWG Tags
6241
6272
  documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
6242
6273
  that this option is not reversible, and remains in effect until the
6243
- application terminates, even across the C<-execute> option.
6274
+ application terminates, even across the B<-execute> option.
6244
6275
 
6245
6276
  =back
6246
6277
 
@@ -6344,6 +6375,20 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
6344
6375
  when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
6345
6376
  option no longer suppresses the output "{readyNUM}" message.
6346
6377
 
6378
+ =item B<-list_dir>
6379
+
6380
+ List directories themselves instead of their contents. This option
6381
+ effectively causes directories to be treated as normal files when reading
6382
+ and writing. For example, with this option the output of the C<ls -la>
6383
+ command on Mac/Linux may be approximated by this exiftool command:
6384
+
6385
+ exiftool -list_dir -T -ls-l -api systemtags -fast5 .* *
6386
+
6387
+ (The B<-T> option formats the output in tab-separated columns, B<-ls-l> is a
6388
+ L<shortcut tag|Image::ExifTool::Shortcuts>, the API SystemTags option is
6389
+ required to extract some necessary tags, and the B<-fast5> option is added
6390
+ for speed since only system tags are being extracted.)
6391
+
6347
6392
  =item B<-srcfile> I<FMT>
6348
6393
 
6349
6394
  Specify a different source file to be processed based on the name of the
@@ -6391,7 +6436,7 @@ buffered output.) ExifTool will then execute the command with the arguments
6391
6436
  received up to this point, send a "{ready}" message to stdout when done
6392
6437
  (unless the B<-q> or B<-T> option is used), and continue trying to read
6393
6438
  arguments for the next command from I<ARGFILE>. To aid in command/response
6394
- synchronization, any number appended to the C<-execute> option is echoed in
6439
+ synchronization, any number appended to the B<-execute> option is echoed in
6395
6440
  the "{ready}" message. For example, C<-execute613> results in "{ready613}".
6396
6441
  When this number is added, B<-q> no longer suppresses the "{ready}" message.
6397
6442
  (Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
@@ -6526,8 +6571,8 @@ complete list). Setting this triggers the use of Windows wide-character i/o
6526
6571
  routines, thus providing support for most Unicode file names (see note 4).
6527
6572
  But note that it is not trivial to pass properly encoded file names on the
6528
6573
  Windows command line (see L<https://exiftool.org/faq.html#Q18> for details),
6529
- so placing them in a UTF-8 encoded B<-@> argfile and using C<-charset
6530
- filename=utf8> is recommended if possible.
6574
+ so placing them in a UTF-8 encoded B<-@> argfile and using
6575
+ C<-charset filename=utf8> is recommended if possible.
6531
6576
 
6532
6577
  A warning is issued if a specified filename contains special characters and
6533
6578
  the filename character set was not provided. However, the warning may be
@@ -6601,7 +6646,7 @@ Print all meta information in an image, including duplicate and unknown
6601
6646
  tags, sorted by group (for family 1). For performance reasons, this command
6602
6647
  may not extract all available metadata. (Metadata in embedded documents,
6603
6648
  metadata extracted by external utilities, and metadata requiring excessive
6604
- processing time may not be extracted). Add C<-ee> and C<-api RequestAll=3>
6649
+ processing time may not be extracted). Add C<-ee3> and C<-api RequestAll=3>
6605
6650
  to the command to extract absolutely everything available.
6606
6651
 
6607
6652
  =item exiftool -common dir
@@ -6670,7 +6715,7 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>).
6670
6715
  Print one line of output containing the file name and DateTimeOriginal for
6671
6716
  each image in directory C<dir>.
6672
6717
 
6673
- =item exiftool -ee -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
6718
+ =item exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
6674
6719
 
6675
6720
  Extract all GPS positions from an AVCHD video.
6676
6721