exiftool_vendored 12.16.0 → 12.25.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 +137 -1
  3. data/bin/MANIFEST +12 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +44 -43
  7. data/bin/config_files/acdsee.config +193 -6
  8. data/bin/config_files/cuepointlist.config +70 -0
  9. data/bin/config_files/example.config +1 -8
  10. data/bin/exiftool +139 -98
  11. data/bin/fmt_files/gpx.fmt +1 -1
  12. data/bin/fmt_files/gpx_wpt.fmt +1 -1
  13. data/bin/fmt_files/kml.fmt +1 -1
  14. data/bin/fmt_files/kml_track.fmt +1 -1
  15. data/bin/lib/Image/ExifTool.pm +158 -49
  16. data/bin/lib/Image/ExifTool.pod +94 -75
  17. data/bin/lib/Image/ExifTool/Apple.pm +3 -2
  18. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +25 -14
  19. data/bin/lib/Image/ExifTool/Canon.pm +28 -3
  20. data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
  21. data/bin/lib/Image/ExifTool/DJI.pm +6 -6
  22. data/bin/lib/Image/ExifTool/DjVu.pm +6 -5
  23. data/bin/lib/Image/ExifTool/Exif.pm +50 -22
  24. data/bin/lib/Image/ExifTool/FITS.pm +13 -2
  25. data/bin/lib/Image/ExifTool/FujiFilm.pm +19 -8
  26. data/bin/lib/Image/ExifTool/GPS.pm +24 -13
  27. data/bin/lib/Image/ExifTool/H264.pm +20 -5
  28. data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
  29. data/bin/lib/Image/ExifTool/JPEG.pm +6 -2
  30. data/bin/lib/Image/ExifTool/JSON.pm +24 -3
  31. data/bin/lib/Image/ExifTool/Jpeg2000.pm +361 -16
  32. data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
  33. data/bin/lib/Image/ExifTool/MIE.pm +2 -2
  34. data/bin/lib/Image/ExifTool/MRC.pm +341 -0
  35. data/bin/lib/Image/ExifTool/MWG.pm +3 -3
  36. data/bin/lib/Image/ExifTool/MXF.pm +1 -1
  37. data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
  38. data/bin/lib/Image/ExifTool/Microsoft.pm +298 -82
  39. data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
  40. data/bin/lib/Image/ExifTool/NikonSettings.pm +25 -16
  41. data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
  42. data/bin/lib/Image/ExifTool/PNG.pm +2 -2
  43. data/bin/lib/Image/ExifTool/Panasonic.pm +14 -1
  44. data/bin/lib/Image/ExifTool/PhaseOne.pm +4 -3
  45. data/bin/lib/Image/ExifTool/QuickTime.pm +148 -68
  46. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +94 -34
  47. data/bin/lib/Image/ExifTool/README +5 -4
  48. data/bin/lib/Image/ExifTool/RIFF.pm +84 -12
  49. data/bin/lib/Image/ExifTool/Samsung.pm +2 -1
  50. data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
  51. data/bin/lib/Image/ExifTool/Sony.pm +157 -49
  52. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  53. data/bin/lib/Image/ExifTool/TagLookup.pm +4079 -3987
  54. data/bin/lib/Image/ExifTool/TagNames.pod +642 -273
  55. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  56. data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -0
  57. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +44 -17
  58. data/bin/lib/Image/ExifTool/WriteXMP.pl +15 -8
  59. data/bin/lib/Image/ExifTool/Writer.pl +50 -14
  60. data/bin/lib/Image/ExifTool/XMP.pm +50 -11
  61. data/bin/perl-Image-ExifTool.spec +42 -42
  62. data/lib/exiftool_vendored/version.rb +1 -1
  63. metadata +52 -12
@@ -0,0 +1,70 @@
1
+ #------------------------------------------------------------------------------
2
+ # File: cuepointlist.config
3
+ #
4
+ # Description: ExifTool config file to generate list of cue points and labels
5
+ # in WAV audio files
6
+ #
7
+ # Usage: exiftool -config cuepointlist.config -cuepointlist -b FILE
8
+ #
9
+ # Requires: ExifTool version 12.25 or later
10
+ #
11
+ # Revisions: 2021-04-20 - P. Harvey Created
12
+ #------------------------------------------------------------------------------
13
+
14
+ %Image::ExifTool::UserDefined = (
15
+ 'Image::ExifTool::Composite' => {
16
+ CuePointList => {
17
+ Require => {
18
+ 0 => 'CuePoints',
19
+ 1 => 'SampleRate',
20
+ },
21
+ Desire => {
22
+ 2 => 'CuePointLabel',
23
+ 3 => 'CuePointNotes',
24
+ 4 => 'LabeledText',
25
+ },
26
+ ValueConv => q{
27
+ SetByteOrder('II');
28
+ my (%lbl, %rgn, %rtyp, %rlbl, %note, $pos, $i);
29
+ # get labels if available
30
+ for ($i=1; defined $val[2]; ++$i) {
31
+ $lbl{$1} = $2 if $val[2] =~ /^(\d+) (.*)/ and length $2;
32
+ $val[2] = $self->GetValue("CuePointLabel ($i)");
33
+ }
34
+ # get notes if available
35
+ for ($i=1; defined $val[3]; ++$i) {
36
+ $note{$1} = $2 if $val[3] =~ /^(\d+) (.*)/ and length $2;
37
+ $val[3] = $self->GetValue("CuePointNotes ($i)");
38
+ }
39
+ # get regions if available
40
+ for ($i=1; defined $val[4]; ++$i) {
41
+ if ($val[4] =~ /^(\d+) (\d+) '(.*)' \d+ \d+ \d+ \d+ (.*)/) {
42
+ $rgn{$1} = $2;
43
+ $rtyp{$1} = $3;
44
+ $rlbl{$1} = $4;
45
+ }
46
+ $val[4] = $self->GetValue("LabeledText ($i)");
47
+ }
48
+ my $buff = "Cue\tStart\tEnd\tLabel\tPurpose\tText\tNotes\n";
49
+ for ($pos=4; $pos+24<=length(${$val[0]}); $pos+=24) {
50
+ my $n = Get32u($val[0], $pos);
51
+ my $start = Get32u($val[0], $pos + 4);
52
+ my (@lbl, $lbl);
53
+ push @lbl, $lbl{$n} if defined $lbl{$n};
54
+ push @lbl, $rlbl{$n} if defined $rlbl{$n};
55
+ push @lbl, '-', $note{$n} if defined $note{$n};
56
+ my $lbl = join ' ', @lbl;
57
+ $buff .= sprintf("%d\t%.3f\t%.3f\t%s\t%s\t%s\t%s\n",
58
+ $n, $start/$val[1], ($start+($rgn{$n}||0))/$val[1],
59
+ defined($lbl{$n}) ? $lbl{$n} : '',
60
+ defined($rtyp{$n}) ? $rtyp{$n} : '',
61
+ defined($rlbl{$n}) ? $rlbl{$n} : '',
62
+ defined($note{$n}) ? $note{$n} : '');
63
+ }
64
+ return $buff;
65
+ },
66
+ },
67
+ },
68
+ );
69
+
70
+ 1; # end
@@ -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.16';
13
+ my $version = '12.25';
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:
@@ -284,6 +286,7 @@ my @recommends = qw(
284
286
  Digest::SHA
285
287
  IO::Compress::Bzip2
286
288
  POSIX::strptime
289
+ Time::Local
287
290
  Unicode::LineBreak
288
291
  IO::Compress::RawDeflate
289
292
  IO::Uncompress::RawInflate
@@ -474,6 +477,7 @@ undef $joinLists;
474
477
  undef $langOpt;
475
478
  undef $listItem;
476
479
  undef $multiFile;
480
+ undef $noBinary;
477
481
  undef $outOpt;
478
482
  undef $preserveTime;
479
483
  undef $progress;
@@ -691,7 +695,7 @@ for (;;) {
691
695
  } else { # 'g(\d*)'
692
696
  # list all groups in specified family
693
697
  my $family = $2 || 0;
694
- PrintTagList("Groups in family $family", GetAllGroups($family));
698
+ PrintTagList("Groups in family $family", $mt->GetAllGroups($family));
695
699
  }
696
700
  next;
697
701
  }
@@ -792,7 +796,11 @@ for (;;) {
792
796
  next;
793
797
  }
794
798
  /^arg(s|format)$/i and $argFormat = 1, next;
795
- /^b(inary)?$/i and $mt->Options(Binary => 1, NoPDFList => 1), $binaryOutput = 1, next;
799
+ if (/^(-?)b(inary)?$/i) {
800
+ ($binaryOutput, $noBinary) = $1 ? (undef, 1) : (1, undef);
801
+ $mt->Options(Binary => $binaryOutput, NoPDFList => $binaryOutput);
802
+ next;
803
+ }
796
804
  if (/^c(oordFormat)?$/i) {
797
805
  my $fmt = shift;
798
806
  $fmt or Error("Expecting coordinate format for -c option\n"), $badCmd=1, next;
@@ -876,6 +884,7 @@ for (;;) {
876
884
  }
877
885
  (/^D$/ or $a eq 'decimal') and $showTagID = 'D', next;
878
886
  /^delete_original(!?)$/i and $deleteOrig = ($1 ? 2 : 1), next;
887
+ /^list_dir$/i and $listDir = 1, next;
879
888
  (/^e$/ or $a eq '-composite') and $mt->Options(Composite => 0), next;
880
889
  (/^-e$/ or $a eq 'composite') and $mt->Options(Composite => 1), next;
881
890
  (/^E$/ or $a eq 'escapehtml') and require Image::ExifTool::HTML and $escapeHTML = 1, next;
@@ -1264,7 +1273,7 @@ for (;;) {
1264
1273
  if (/^php$/i) {
1265
1274
  $json = 2;
1266
1275
  $html = $xml = 0;
1267
- $mt->Options(Duplicates=>1);
1276
+ $mt->Options(Duplicates => 1);
1268
1277
  next;
1269
1278
  }
1270
1279
  if (/^z(ip)?$/i) {
@@ -1505,7 +1514,6 @@ if ($xml) {
1505
1514
  require Image::ExifTool::XMP if $json == 1; # (for EncodeBase64)
1506
1515
  }
1507
1516
  $mt->Options(List => 1) unless $joinLists;
1508
- $mt->Options(Duplicates => 0) unless defined $showGroup;
1509
1517
  $showTagID = 'D' if $tabFormat and not $showTagID;
1510
1518
  } elsif ($structOpt) {
1511
1519
  $mt->Options(List => 1);
@@ -2271,7 +2279,8 @@ TAG: foreach $tag (@foundTags) {
2271
2279
  next unless $$et{REQ_TAG_LOOKUP}{$lcTag};
2272
2280
  }
2273
2281
  $val = ConvertBinary($val); # convert SCALAR references
2274
- if ($structOpt) {
2282
+ next unless defined $val;
2283
+ if ($structOpt and ref $val) {
2275
2284
  # serialize structure if necessary
2276
2285
  $val = Image::ExifTool::XMP::SerializeStruct($val) unless $xml or $json;
2277
2286
  } elsif (ref $val eq 'ARRAY') {
@@ -2304,7 +2313,7 @@ TAG: foreach $tag (@foundTags) {
2304
2313
  $group = $et->GetGroup($tag, $showGroup);
2305
2314
  # look ahead to see if this tag may suppress a priority tag in
2306
2315
  # the same group, and if so suppress this tag instead
2307
- next if $noDups and $tag =~ /^(.*?) ?\(/ and defined $$info{$1} and
2316
+ next if $noDups and $tag =~ /^(.*?) \(/ and defined $$info{$1} and
2308
2317
  $group eq $et->GetGroup($1, $showGroup);
2309
2318
  $group = 'Unknown' if not $group and ($xml or $json or $csv);
2310
2319
  if ($fp and not ($allGroup or $csv)) {
@@ -2327,6 +2336,9 @@ TAG: foreach $tag (@foundTags) {
2327
2336
  }
2328
2337
  undef $group; # undefine so we don't print it below
2329
2338
  }
2339
+ } elsif ($noDups) {
2340
+ # don't allow duplicates, but avoid suppressing the priority tag
2341
+ next if $tag =~ /^(.*?) \(/ and defined $$info{$1};
2330
2342
  }
2331
2343
 
2332
2344
  ++$lineCount; # we are printing something meaningful
@@ -2706,7 +2718,7 @@ sub SetImageInfo($$$)
2706
2718
  return 0;
2707
2719
  }
2708
2720
  }
2709
- if (not $isStdout and ($et->IsDirectory($outfile) or $outfile =~ /\/$/)) {
2721
+ if (not $isStdout and (($et->IsDirectory($outfile) and not $listDir) or $outfile =~ /\/$/)) {
2710
2722
  $outfile .= '/' unless $outfile =~ /\/$/;
2711
2723
  my $name = $file;
2712
2724
  $name =~ s/^.*\///s; # remove directory name
@@ -2909,6 +2921,10 @@ sub SetImageInfo($$$)
2909
2921
  unless (defined $tmpFile) {
2910
2922
  # count the number of tags and pseudo-tags we are writing
2911
2923
  my ($numSet, $numPseudo) = $et->CountNewValues();
2924
+ if ($numSet != $numPseudo and $et->IsDirectory($file)) {
2925
+ print $vout "Can't write real tags to a directory - $infile\n" if defined $verbose;
2926
+ $numSet = $numPseudo;
2927
+ }
2912
2928
  if ($et->Exists($file)) {
2913
2929
  unless ($numSet) {
2914
2930
  # no need to write if no tags set
@@ -3393,20 +3409,25 @@ sub AddGroups($$$$)
3393
3409
  #------------------------------------------------------------------------------
3394
3410
  # Convert binary data (SCALAR references) for printing
3395
3411
  # Inputs: 0) object reference
3396
- # Returns: converted object
3412
+ # Returns: converted object, or undef if we don't want binary objects
3397
3413
  sub ConvertBinary($)
3398
3414
  {
3399
3415
  my $obj = shift;
3400
3416
  my ($key, $val);
3401
3417
  if (ref $obj eq 'HASH') {
3402
3418
  foreach $key (keys %$obj) {
3403
- $$obj{$key} = ConvertBinary($$obj{$key}) if ref $$obj{$key};
3419
+ next unless ref $$obj{$key};
3420
+ $$obj{$key} = ConvertBinary($$obj{$key});
3421
+ return undef unless defined $$obj{$key};
3404
3422
  }
3405
3423
  } elsif (ref $obj eq 'ARRAY') {
3406
3424
  foreach $val (@$obj) {
3407
- $val = ConvertBinary($val) if ref $val;
3425
+ next unless ref $val;
3426
+ $val = ConvertBinary($val);
3427
+ return undef unless defined $val;
3408
3428
  }
3409
3429
  } elsif (ref $obj eq 'SCALAR') {
3430
+ return undef if $noBinary;
3410
3431
  # (binaryOutput flag is set to 0 for binary mode of XML/PHP/JSON output formats)
3411
3432
  if (defined $binaryOutput) {
3412
3433
  $obj = $$obj;
@@ -3583,7 +3604,7 @@ sub ProcessFiles($;$)
3583
3604
  ++$progressCount;
3584
3605
  $progStr = " [$progressCount/$progressMax]" if $progress;
3585
3606
  }
3586
- if ($et->IsDirectory($file)) {
3607
+ if ($et->IsDirectory($file) and not $listDir) {
3587
3608
  $multiFile = $validFile = 1;
3588
3609
  ScanDir($et, $file, $list);
3589
3610
  } elsif ($filterFlag and not AcceptFile($file)) {
@@ -4448,47 +4469,47 @@ supported by ExifTool (r = read, w = write, c = create):
4448
4469
 
4449
4470
  File Types
4450
4471
  ------------+-------------+-------------+-------------+------------
4451
- 360 r/w | DPX r | ITC r | ODP r | RIFF r
4452
- 3FR r | DR4 r/w/c | J2C r | ODS r | RSRC r
4453
- 3G2 r/w | DSS r | JNG r/w | ODT r | RTF r
4454
- 3GP r/w | DV r | JP2 r/w | OFR r | RW2 r/w
4455
- A r | DVB r/w | JPEG r/w | OGG r | RWL r/w
4456
- AA r | DVR-MS r | JSON r | OGV r | RWZ r
4457
- AAE r | DYLIB r | K25 r | ONP r | RM r
4458
- AAX r/w | EIP r | KDC r | OPUS r | SEQ r
4459
- ACR r | EPS r/w | KEY r | ORF r/w | SKETCH r
4460
- AFM r | EPUB r | LA r | OTF r | SO r
4461
- AI r/w | ERF r/w | LFP r | PAC r | SR2 r/w
4462
- AIFF r | EXE r | LNK r | PAGES r | SRF r
4463
- APE r | EXIF r/w/c | LRV r/w | PBM r/w | SRW r/w
4464
- ARQ r/w | EXR r | M2TS r | PCD r | SVG r
4465
- ARW r/w | EXV r/w/c | M4A/V r/w | PCX r | SWF r
4466
- ASF r | F4A/V r/w | MACOS r | PDB r | THM r/w
4467
- AVI r | FFF r/w | MAX r | PDF r/w | TIFF r/w
4468
- AVIF r/w | FITS r | MEF r/w | PEF r/w | TORRENT r
4469
- AZW r | FLA r | MIE r/w/c | PFA r | TTC r
4470
- BMP r | FLAC r | MIFF r | PFB r | TTF r
4471
- BPG r | FLIF r/w | MKA r | PFM r | TXT r
4472
- BTF r | FLV r | MKS r | PGF r | VCF r
4473
- CHM r | FPF r | MKV r | PGM r/w | VRD r/w/c
4474
- COS r | FPX r | MNG r/w | PLIST r | VSD r
4475
- CR2 r/w | GIF r/w | MOBI r | PICT r | WAV r
4476
- CR3 r/w | GPR r/w | MODD r | PMP r | WDP r/w
4477
- CRM r/w | GZ r | MOI r | PNG r/w | WEBP r
4478
- CRW r/w | HDP r/w | MOS r/w | PPM r/w | WEBM r
4479
- CS1 r/w | HDR r | MOV r/w | PPT r | WMA r
4480
- CSV r | HEIC r/w | MP3 r | PPTX r | WMV r
4481
- CZI r | HEIF r/w | MP4 r/w | PS r/w | WTV r
4482
- DCM r | HTML r | MPC r | PSB r/w | WV r
4483
- DCP r/w | ICC r/w/c | MPG r | PSD r/w | X3F r/w
4484
- DCR r | ICS r | MPO r/w | PSP r | XCF r
4485
- DFONT r | IDML r | MQV r/w | QTIF r/w | XLS r
4486
- DIVX r | IIQ r/w | MRW r/w | R3D r | XLSX r
4487
- DJVU r | IND r/w | MXF r | RA r | XMP r/w/c
4488
- DLL r | INSP r/w | NEF r/w | RAF r/w | ZIP r
4489
- DNG r/w | INSV r | NRW r/w | RAM r |
4490
- DOC r | INX r | NUMBERS r | RAR r |
4491
- DOCX r | ISO r | O r | RAW r/w |
4472
+ 360 r/w | DPX r | ITC r | NUMBERS r | RAM r
4473
+ 3FR r | DR4 r/w/c | J2C r | O r | RAR r
4474
+ 3G2 r/w | DSS r | JNG r/w | ODP r | RAW r/w
4475
+ 3GP r/w | DV r | JP2 r/w | ODS r | RIFF r
4476
+ A r | DVB r/w | JPEG r/w | ODT r | RSRC r
4477
+ AA r | DVR-MS r | JSON r | OFR r | RTF r
4478
+ AAE r | DYLIB r | JXL r | OGG r | RW2 r/w
4479
+ AAX r/w | EIP r | K25 r | OGV r | RWL r/w
4480
+ ACR r | EPS r/w | KDC r | ONP r | RWZ r
4481
+ AFM r | EPUB r | KEY r | OPUS r | RM r
4482
+ AI r/w | ERF r/w | LA r | ORF r/w | SEQ r
4483
+ AIFF r | EXE r | LFP r | ORI r/w | SKETCH r
4484
+ APE r | EXIF r/w/c | LNK r | OTF r | SO r
4485
+ ARQ r/w | EXR r | LRV r/w | PAC r | SR2 r/w
4486
+ ARW r/w | EXV r/w/c | M2TS r | PAGES r | SRF r
4487
+ ASF r | F4A/V r/w | M4A/V r/w | PBM r/w | SRW r/w
4488
+ AVI r | FFF r/w | MACOS r | PCD r | SVG r
4489
+ AVIF r/w | FITS r | MAX r | PCX r | SWF r
4490
+ AZW r | FLA r | MEF r/w | PDB r | THM r/w
4491
+ BMP r | FLAC r | MIE r/w/c | PDF r/w | TIFF r/w
4492
+ BPG r | FLIF r/w | MIFF r | PEF r/w | TORRENT r
4493
+ BTF r | FLV r | MKA r | PFA r | TTC r
4494
+ CHM r | FPF r | MKS r | PFB r | TTF r
4495
+ COS r | FPX r | MKV r | PFM r | TXT r
4496
+ CR2 r/w | GIF r/w | MNG r/w | PGF r | VCF r
4497
+ CR3 r/w | GPR r/w | MOBI r | PGM r/w | VRD r/w/c
4498
+ CRM r/w | GZ r | MODD r | PLIST r | VSD r
4499
+ CRW r/w | HDP r/w | MOI r | PICT r | WAV r
4500
+ CS1 r/w | HDR r | MOS r/w | PMP r | WDP r/w
4501
+ CSV r | HEIC r/w | MOV r/w | PNG r/w | WEBP r
4502
+ CZI r | HEIF r/w | MP3 r | PPM r/w | WEBM r
4503
+ DCM r | HTML r | MP4 r/w | PPT r | WMA r
4504
+ DCP r/w | ICC r/w/c | MPC r | PPTX r | WMV r
4505
+ DCR r | ICS r | MPG r | PS r/w | WTV r
4506
+ DFONT r | IDML r | MPO r/w | PSB r/w | WV r
4507
+ DIVX r | IIQ r/w | MQV r/w | PSD r/w | X3F r/w
4508
+ DJVU r | IND r/w | MRC r | PSP r | XCF r
4509
+ DLL r | INSP r/w | MRW r/w | QTIF r/w | XLS r
4510
+ DNG r/w | INSV r | MXF r | R3D r | XLSX r
4511
+ DOC r | INX r | NEF r/w | RA r | XMP r/w/c
4512
+ DOCX r | ISO r | NRW r/w | RAF r/w | ZIP r
4492
4513
 
4493
4514
  Meta Information
4494
4515
  ----------------------+----------------------+---------------------
@@ -4622,6 +4643,7 @@ L<Advanced options|/Advanced options>
4622
4643
  -echo[NUM] TEXT Echo text to stdout or stderr
4623
4644
  -efile[NUM][!] ERRFILE Save names of files with errors
4624
4645
  -execute[NUM] Execute multiple commands on one line
4646
+ -list_dir List directories, not their contents
4625
4647
  -srcfile FMT Process a different source file
4626
4648
  -stay_open FLAG Keep reading -@ argfile even after EOF
4627
4649
  -userParam PARAM[[^]=[VAL]] Set user parameter (API UserParam opt)
@@ -4917,7 +4939,7 @@ and the value is written to all possible groups/tags. For example, the
4917
4939
  string form must be used in the following command since the intent is to set
4918
4940
  the value of all existing date/time tags from C<CreateDate>:
4919
4941
 
4920
- exiftool "-time:all<$createdate" -wm w FILE
4942
+ exiftool '-time:all<$createdate' -wm w FILE
4921
4943
 
4922
4944
  =item B<-x> I<TAG> (B<-exclude>)
4923
4945
 
@@ -4930,7 +4952,7 @@ documentation above for a complete description.
4930
4952
  =head3 Input-output text formatting
4931
4953
 
4932
4954
  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>.
4955
+ text formats. The exceptions are B<-b>, B<-csv>, B<-j> and B<-X>.
4934
4956
 
4935
4957
  =over 5
4936
4958
 
@@ -4943,7 +4965,7 @@ between images, but allows the metadata to be altered by editing the
4943
4965
  intermediate file (C<out.args> in this example):
4944
4966
 
4945
4967
  exiftool -args -G1 --filename --directory src.jpg > out.args
4946
- exiftool -@ out.args -sep ", " dst.jpg
4968
+ exiftool -@ out.args -sep ', ' dst.jpg
4947
4969
 
4948
4970
  Note: Be careful when copying information with this technique since it is
4949
4971
  easy to write tags which are normally considered "unsafe". For instance,
@@ -4956,17 +4978,21 @@ maintain separate list items when writing metadata back to image files, and
4956
4978
  the B<-struct> option may be used when extracting to preserve structured XMP
4957
4979
  information.
4958
4980
 
4959
- =item B<-b> (B<-binary>)
4981
+ =item B<-b>, B<--b> (B<-binary>, B<--binary>)
4960
4982
 
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.
4983
+ Output requested metadata in binary format without tag names or descriptions
4984
+ (B<-b> or B<-binary>). This option is mainly used for extracting embedded
4985
+ images or other binary data, but it may also be useful for some text strings
4986
+ since control characters (such as newlines) are not replaced by '.' as they
4987
+ are in the default output. By default, list items are separated by a
4988
+ newline when extracted with the B<-b> option, but this may be changed (see
4989
+ the B<-sep> option for details). May be combined with B<-j>, B<-php> or
4990
+ B<-X> to extract binary data in JSON, PHP or XML format, but note that
4991
+ "unsafe" tags must be specified explicitly to be extracted as binary in
4992
+ these formats.
4993
+
4994
+ With a leading double dash (B<--b> or B<--binary>), tags which contain
4995
+ binary data are suppressed in the output when reading.
4970
4996
 
4971
4997
  =item B<-c> I<FMT> (B<-coordFormat>)
4972
4998
 
@@ -5207,18 +5233,18 @@ JSON arrays unless B<-sep> is used. By default XMP structures are flattened
5207
5233
  into individual tags in the JSON output, but the original structure may be
5208
5234
  preserved with the B<-struct> option (this also causes all list-type XMP
5209
5235
  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.
5236
+ output as simple strings). The B<-a> option is implied when B<-json> is
5237
+ used, but entries with identical JSON names are suppressed in the output.
5238
+ (B<-G4> may be used to ensure that all tags have unique JSON names.) Adding
5239
+ the B<-D> or B<-H> option changes tag values to JSON objects with "val" and
5240
+ "id" fields, and adding B<-l> adds a "desc" field, and a "num" field if the
5241
+ numerical value is different from the converted "val". The B<-b> option may
5242
+ be added to output binary data, encoded in base64 if necessary (indicated by
5243
+ ASCII "base64:" as the first 7 bytes of the value), and B<-t> may be added
5244
+ to include tag table information (see B<-t> for details). The JSON output
5245
+ is UTF-8 regardless of any B<-L> or B<-charset> option setting, but the
5246
+ UTF-8 validation is disabled if a character set other than UTF-8 is
5247
+ specified.
5222
5248
 
5223
5249
  If I<JSONFILE> is specified, the file is imported and the tag definitions
5224
5250
  from the file are used to set tag values on a per-file basis. The special
@@ -5367,7 +5393,7 @@ with this command:
5367
5393
 
5368
5394
  produces output like this:
5369
5395
 
5370
- -- Generated by ExifTool 12.16 --
5396
+ -- Generated by ExifTool 12.25 --
5371
5397
  File: a.jpg - 2003:10:31 15:44:19
5372
5398
  (f/5.6, 1/60s, ISO 100)
5373
5399
  File: b.jpg - 2006:05:23 11:57:38
@@ -5527,18 +5553,18 @@ Notes:
5527
5553
  argument like C<%d%f.txt> is written as C<%%d%%f.txt>.
5528
5554
 
5529
5555
  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)
5556
+ then it is interpreted as a file extension, but there are three different
5557
+ ways to create a single output file from multiple source files:
5533
5558
 
5559
+ # 1. Shell redirection
5534
5560
  exiftool FILE1 FILE2 ... > out.txt
5535
5561
 
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
-
5562
+ # 2. With the -w option and a zero-width format code
5540
5563
  exiftool -w+! %0fout.txt FILE1 FILE2 ...
5541
5564
 
5565
+ # 3. With the -W option (see the -W option below)
5566
+ exiftool -W+! out.txt FILE1 FILE2 ...
5567
+
5542
5568
  Advanced features:
5543
5569
 
5544
5570
  A substring of the original file name, directory or extension may be taken
@@ -5727,7 +5753,8 @@ L<https://exiftool.org/geotag.html#Inverse> for examples.
5727
5753
  Setting I<NUM> to 2 causes the H264 video stream in MP4 videos to be parsed
5728
5754
  until the first Supplemental Enhancement Information (SEI) message is
5729
5755
  decoded, or 3 to parse the entire H624 stream and decode all SEI
5730
- information.
5756
+ information. For M2TS videos, a setting of 3 causes the entire file to be
5757
+ parsed in search of unlisted programs which may contain timed GPS.
5731
5758
 
5732
5759
  =item B<-ext>[+] I<EXT>, B<--ext> I<EXT> (B<-extension>)
5733
5760
 
@@ -5816,10 +5843,10 @@ Ignore specified directory name. I<DIR> may be either an individual folder
5816
5843
  name, or a full path. If a full path is specified, it must match the
5817
5844
  Directory tag exactly to be ignored. Use multiple B<-i> options to ignore
5818
5845
  more than one directory name. A special I<DIR> value of C<SYMLINKS> (case
5819
- sensitive) may be specified to ignore symbolic links when the B<-r> option
5820
- is used. As well, a value of C<HIDDEN> (case sensitive) may be used to
5821
- ignore files with names that start with a "." (ie. hidden files on Unix
5822
- systems) when scanning a directory.
5846
+ sensitive) may be specified to avoid recursing into directories which are
5847
+ symbolic links when the B<-r> option is used. As well, a value of C<HIDDEN>
5848
+ (case sensitive) may be used to ignore files with names that start with a
5849
+ "." (ie. hidden files on Unix systems) when scanning a directory.
5823
5850
 
5824
5851
  =item B<-if>[I<NUM>] I<EXPR>
5825
5852
 
@@ -6245,7 +6272,7 @@ As a convenience, C<-use MWG> is assumed if the C<MWG> group is specified
6245
6272
  for any tag on the command line. See the L<MWG Tags
6246
6273
  documentation|Image::ExifTool::TagNames/MWG Tags> for more details. Note
6247
6274
  that this option is not reversible, and remains in effect until the
6248
- application terminates, even across the C<-execute> option.
6275
+ application terminates, even across the B<-execute> option.
6249
6276
 
6250
6277
  =back
6251
6278
 
@@ -6349,6 +6376,20 @@ line. I<NUM> is an optional number that is echoed in the "{ready}" message
6349
6376
  when using the B<-stay_open> feature. If a I<NUM> is specified, the B<-q>
6350
6377
  option no longer suppresses the output "{readyNUM}" message.
6351
6378
 
6379
+ =item B<-list_dir>
6380
+
6381
+ List directories themselves instead of their contents. This option
6382
+ effectively causes directories to be treated as normal files when reading
6383
+ and writing. For example, with this option the output of the C<ls -la>
6384
+ command on Mac/Linux may be approximated by this exiftool command:
6385
+
6386
+ exiftool -list_dir -T -ls-l -api systemtags -fast5 .* *
6387
+
6388
+ (The B<-T> option formats the output in tab-separated columns, B<-ls-l> is a
6389
+ L<shortcut tag|Image::ExifTool::Shortcuts>, the API SystemTags option is
6390
+ required to extract some necessary tags, and the B<-fast5> option is added
6391
+ for speed since only system tags are being extracted.)
6392
+
6352
6393
  =item B<-srcfile> I<FMT>
6353
6394
 
6354
6395
  Specify a different source file to be processed based on the name of the
@@ -6396,7 +6437,7 @@ buffered output.) ExifTool will then execute the command with the arguments
6396
6437
  received up to this point, send a "{ready}" message to stdout when done
6397
6438
  (unless the B<-q> or B<-T> option is used), and continue trying to read
6398
6439
  arguments for the next command from I<ARGFILE>. To aid in command/response
6399
- synchronization, any number appended to the C<-execute> option is echoed in
6440
+ synchronization, any number appended to the B<-execute> option is echoed in
6400
6441
  the "{ready}" message. For example, C<-execute613> results in "{ready613}".
6401
6442
  When this number is added, B<-q> no longer suppresses the "{ready}" message.
6402
6443
  (Also, see the B<-echo3> and B<-echo4> options for additional ways to pass
@@ -6531,8 +6572,8 @@ complete list). Setting this triggers the use of Windows wide-character i/o
6531
6572
  routines, thus providing support for most Unicode file names (see note 4).
6532
6573
  But note that it is not trivial to pass properly encoded file names on the
6533
6574
  Windows command line (see L<https://exiftool.org/faq.html#Q18> for details),
6534
- so placing them in a UTF-8 encoded B<-@> argfile and using C<-charset
6535
- filename=utf8> is recommended if possible.
6575
+ so placing them in a UTF-8 encoded B<-@> argfile and using
6576
+ C<-charset filename=utf8> is recommended if possible.
6536
6577
 
6537
6578
  A warning is issued if a specified filename contains special characters and
6538
6579
  the filename character set was not provided. However, the warning may be
@@ -6606,7 +6647,7 @@ Print all meta information in an image, including duplicate and unknown
6606
6647
  tags, sorted by group (for family 1). For performance reasons, this command
6607
6648
  may not extract all available metadata. (Metadata in embedded documents,
6608
6649
  metadata extracted by external utilities, and metadata requiring excessive
6609
- processing time may not be extracted). Add C<-ee> and C<-api RequestAll=3>
6650
+ processing time may not be extracted). Add C<-ee3> and C<-api RequestAll=3>
6610
6651
  to the command to extract absolutely everything available.
6611
6652
 
6612
6653
  =item exiftool -common dir
@@ -6675,7 +6716,7 @@ L<Image::ExifTool::TagNames|Image::ExifTool::TagNames>).
6675
6716
  Print one line of output containing the file name and DateTimeOriginal for
6676
6717
  each image in directory C<dir>.
6677
6718
 
6678
- =item exiftool -ee -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
6719
+ =item exiftool -ee3 -p '$gpslatitude, $gpslongitude, $gpstimestamp' a.m2ts
6679
6720
 
6680
6721
  Extract all GPS positions from an AVCHD video.
6681
6722