exiftool_vendored 12.68.0 → 12.72.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/Changes +98 -15
- data/bin/MANIFEST +5 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +10 -10
- data/bin/exiftool +32 -25
- data/bin/lib/Image/ExifTool/AAC.pm +175 -0
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +2 -1
- data/bin/lib/Image/ExifTool/CBOR.pm +18 -2
- data/bin/lib/Image/ExifTool/Canon.pm +87 -20
- data/bin/lib/Image/ExifTool/DJI.pm +3 -2
- data/bin/lib/Image/ExifTool/DNG.pm +25 -2
- data/bin/lib/Image/ExifTool/EXE.pm +54 -6
- data/bin/lib/Image/ExifTool/Exif.pm +204 -22
- data/bin/lib/Image/ExifTool/FujiFilm.pm +145 -20
- data/bin/lib/Image/ExifTool/GIF.pm +5 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +16 -1
- data/bin/lib/Image/ExifTool/ID3.pm +76 -10
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +4 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +30 -15
- data/bin/lib/Image/ExifTool/M2TS.pm +21 -16
- data/bin/lib/Image/ExifTool/MakerNotes.pm +2 -2
- data/bin/lib/Image/ExifTool/Nikon.pm +213 -105
- data/bin/lib/Image/ExifTool/Olympus.pm +7 -1
- data/bin/lib/Image/ExifTool/PNG.pm +8 -13
- data/bin/lib/Image/ExifTool/Panasonic.pm +15 -2
- data/bin/lib/Image/ExifTool/Pentax.pm +15 -6
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +2 -2
- data/bin/lib/Image/ExifTool/QuickTime.pm +60 -14
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +59 -11
- data/bin/lib/Image/ExifTool/README +14 -5
- data/bin/lib/Image/ExifTool/RIFF.pm +60 -10
- data/bin/lib/Image/ExifTool/Ricoh.pm +109 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +3 -2
- data/bin/lib/Image/ExifTool/Sony.pm +177 -37
- data/bin/lib/Image/ExifTool/TagLookup.pm +6971 -6714
- data/bin/lib/Image/ExifTool/TagNames.pod +957 -372
- data/bin/lib/Image/ExifTool/Text.pm +4 -5
- data/bin/lib/Image/ExifTool/Validate.pm +23 -20
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +2 -2
- data/bin/lib/Image/ExifTool/WriteExif.pl +33 -8
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +1 -0
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +31 -6
- data/bin/lib/Image/ExifTool/Writer.pl +121 -28
- data/bin/lib/Image/ExifTool/XMP.pm +67 -2
- data/bin/lib/Image/ExifTool/XMP2.pl +35 -0
- data/bin/lib/Image/ExifTool.pm +94 -43
- data/bin/lib/Image/ExifTool.pod +28 -17
- data/bin/perl-Image-ExifTool.spec +9 -9
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1f510ba188ef652b3d3d2b5cf0a8f317c7ce8eb1ef27448b0de2d6ea326e67d
|
4
|
+
data.tar.gz: 8221ec58b898f84a00d6739e79a88417d83b57e481b473216d2a4001f34e7909
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c294ea7e4739692d2e938409230f791474b64e427a494d0abc984165415dd59a18a3e33ec5c37a8deddbf809d61adc338936762993d6cd43462b717be22be5d3
|
7
|
+
data.tar.gz: 8083b7e1418ecf28253e5fef7ec3a1125e430b1235feb820cf85c7796af1d94a65ac7c5521ca36162916c4908da5f2f9a8a8598bf9ecf06d07c0d757166f21a4
|
data/bin/Changes
CHANGED
@@ -4,24 +4,109 @@ 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.
|
7
|
+
Note: The most recent production release is Version 12.70. (Other versions are
|
8
8
|
considered development releases, and are not uploaded to MetaCPAN.)
|
9
9
|
|
10
|
+
Dec. 29, 2023 - Version 12.72
|
11
|
+
|
12
|
+
- Added read support for AAC audio files
|
13
|
+
- Added a new QuickTime Keys Android tag
|
14
|
+
- Added a number of new values for some Ricoh GR III tags
|
15
|
+
- Decode timed metadata from Intsa360 Ace Pro MP4 videos
|
16
|
+
- Decode GPSDateTime milliseconds in timed Insta360 metadata
|
17
|
+
- Decode timed metadata from INNOV K5 TS videos
|
18
|
+
- Decode a number of new GoPro timed-metadata tags
|
19
|
+
- Decode a few new Xiaomi EXIF tags
|
20
|
+
- Fixed writing of JPG/ARW images from some newer Sony models to preserve
|
21
|
+
HiddenData
|
22
|
+
|
23
|
+
Dec. 21, 2023 - Version 12.71
|
24
|
+
|
25
|
+
- Added a warning if there was an error reading an alternate file with the
|
26
|
+
-fileNUM option
|
27
|
+
- Added the ability to write QuickTime Keys:Encoder
|
28
|
+
- Added a few new Canon LensType values (thanks Norbert Wasser)
|
29
|
+
- Added a new, obscure EXIF tag (thanks Neal Krawetz)
|
30
|
+
- Decode real-time metadata from Ricoh Theta videos
|
31
|
+
- Decode SpecularWhiteLevel for more Canon models (github #232)
|
32
|
+
- Decode Canon DualPixelRaw tag (thanks John Moyer)
|
33
|
+
- Decode a few new Nikon tags (thanks Warren Hatch)
|
34
|
+
- Decode more FujiFilm M-RAW tags (thanks Greybeard)
|
35
|
+
- Improved generation of tag names for some JSON tag ID's containing colons
|
36
|
+
- Fixed "Undefined subroutine" error when writing makernotes as a block
|
37
|
+
- Fixed missing ID in family 7 group name for ID3 tags which are not valid for
|
38
|
+
the specified ID3 version
|
39
|
+
- Fixed bug where some tags from alternate files (with the -fileNUM option)
|
40
|
+
could show up as "not defined" when used in expressions even though they did
|
41
|
+
exist
|
42
|
+
- API Changes:
|
43
|
+
- Added NoMandatory option
|
44
|
+
|
45
|
+
Nov. 19, 2023 - Version 12.70 (production release) - "20th Anniversary"
|
46
|
+
|
47
|
+
- This marks the 20th anniversary of the initial ExifTool release!
|
48
|
+
- Added ability to read/delete C2PA CAI JUMBF metadata from TIFF-based images
|
49
|
+
(eg. DNG), QuickTime-based files (eg. MP4) and WebP images, and read JUMBF
|
50
|
+
from other RIFF-based files (eg. WAV, AVI), GIF images and ID3v2 metadata
|
51
|
+
- Added read/write support for JPH images
|
52
|
+
- Added ability to read Leica Q3 maker notes
|
53
|
+
- Added ability to recognize and write FujiFilm M-RAW RAF images (multiple raw
|
54
|
+
images in a single file) and the ability to read preview-less RAF images
|
55
|
+
- Added support for reading a number of obscure Microsoft EXIF tags
|
56
|
+
- Added a few new Sony lenses and support for the ILCE-9M3 (thanks Jos Roost)
|
57
|
+
- Added a couple of new Panasonic Leica lenses
|
58
|
+
- Added a couple of new Canon RF lenses (thanks Norbert Wasser)
|
59
|
+
- Added a number of new CPUType values for ELF executables
|
60
|
+
- Added some new Olympus CameraType values
|
61
|
+
- Decode a few more ID3v2.2 tags (github #142)
|
62
|
+
- Decode a few new Canon G5X Mark II tags (thanks Martin B.)
|
63
|
+
- Decode WB_RGGBLevels for a few more Nikon cameras
|
64
|
+
- Extract information from FujiFilm M-RAW header
|
65
|
+
- Improved decoding of a few Nikon Z tags (thanks Warren Hatch)
|
66
|
+
- Marked misspelt XMP-drone-dji:GPSLongtitude tag to Avoid when writing
|
67
|
+
- Changed RIFF MaxDataRate conversion to use SI prefixes by default
|
68
|
+
- Fixed decoding of unknown ColorBalance information for some Nikon models
|
69
|
+
- Fixed an incorrect Nikon Z LensID
|
70
|
+
- API Changes:
|
71
|
+
- Added ByteUnit option
|
72
|
+
|
73
|
+
Oct. 26, 2023 - Version 12.69
|
74
|
+
|
75
|
+
- Added support for DNG version 1.7.0.0
|
76
|
+
- Added a new XMP-GCamera tag
|
77
|
+
- Added a number of new Nikon Z lenses (thanks Warren Hatch and Stefan)
|
78
|
+
- Added a number of new XMP-crs tags
|
79
|
+
- Extract XML metadata from some Hasselblad images
|
80
|
+
- Tweaked -fast2 option to read metadata from inside mdat atom of HEIC images
|
81
|
+
- Patched FFF reader to be more tolerant of the mess made by incompetent
|
82
|
+
Hasselblad programmers (wrong IFD count for some values)
|
83
|
+
- Patched WebP reader to be more tolerant of the mess made by incompetent
|
84
|
+
Google programmers (EXIF with wrong header and XMP with wrong ID)
|
85
|
+
- Fixed writing of MakerNotes as a block to CR3 images (now properly stored in
|
86
|
+
the CMT3 chunk instead of the ExifIFD) and added ability to delete them from
|
87
|
+
the ExifIFD of CR3 images
|
88
|
+
- Fixed problem which could cause runtime error when copying MakerNotes from a
|
89
|
+
file that contains multiple maker note blocks
|
90
|
+
- Fixed problem which could cause "use of uninitialized variable" warnings
|
91
|
+
when reading images from some Nikon cameras
|
92
|
+
- Fixed List type for new XMP-photomech:CreatorIdentity tag
|
93
|
+
|
10
94
|
Oct. 16, 2023 - Version 12.68
|
11
95
|
|
12
96
|
- Added preliminary read support for XISF images
|
13
|
-
- Added the ability to delete JUMBF metadata from PNG images
|
97
|
+
- Added the ability to delete CAI JUMBF metadata from PNG images
|
14
98
|
- Added support for writing Canon burst-roll CR3 images
|
15
|
-
- Added a new Nikon Z9 SubjectDetection value, and improved Zf support
|
99
|
+
- Added a new Nikon Z9 SubjectDetection value, and improved Zf support (thanks
|
100
|
+
Warren Hatch)
|
16
101
|
- Added a couple of new PentaxModelID values
|
17
102
|
- Added a few couple of new tag values for the Pentax K-3 Mark III Monochrome (github #226)
|
18
|
-
- Added a
|
103
|
+
- Added a new XMP-photomech tag
|
104
|
+
- Added a new QuickTime ItemList tag
|
19
105
|
- Added a new Nikon LensID
|
20
106
|
- Added a new Canon LensType
|
21
|
-
- Added a new QuickTime ItemList tag
|
22
107
|
- Support decimal values for FujiFilm ShadowTone and HighlightTone tags
|
23
108
|
- Decode some new Sony tags (thanks Jos Roost)
|
24
|
-
- Decode ShutterCount for Canon EOS R6 (thanks
|
109
|
+
- Decode ShutterCount for Canon EOS R6 (thanks Martin B.)
|
25
110
|
- Decode QuickTime VideoFullRangeFlag
|
26
111
|
- Decode JPGCompression for the Nikon D3S
|
27
112
|
- Enhanced -geotag feature to allow writing QuickTime:GPSCoordinates
|
@@ -176,8 +261,6 @@ Apr. 5, 2023 - Version 12.60 (production release)
|
|
176
261
|
- Fixed problem where setting the Geotime value didn't work when using an
|
177
262
|
advanced-formatting expression containing a greater-than symbol (>)
|
178
263
|
|
179
|
-
History of older versions (back to Nov. 19, 2003 - Version 1.00) -->
|
180
|
-
|
181
264
|
Mar. 28, 2023 - Version 12.59
|
182
265
|
|
183
266
|
- COMPATIBILITY WARNING: Changed the calculated ImageDataMD5 for JPEG images
|
@@ -307,7 +390,7 @@ Dec. 6, 2022 - Version 12.52
|
|
307
390
|
Nov. 21, 2022 - Version 12.51
|
308
391
|
|
309
392
|
- Added a new Olympus LensType (thanks Herb)
|
310
|
-
- Extract C2PA JUMBF metadata from PNG images and extract C2PA Salt values
|
393
|
+
- Extract C2PA CAI JUMBF metadata from PNG images and extract C2PA Salt values
|
311
394
|
- Decode NikonSettings for Z9 firmware 3.0 (thanks Warren Hatch)
|
312
395
|
- Decode additional camm metadata from Insta360 Pro2 MP4 videos
|
313
396
|
- Improved Verbose output when writing Composite tags to add a "+" sign to
|
@@ -690,8 +773,8 @@ Oct. 16, 2021 - Version 12.33
|
|
690
773
|
|
691
774
|
Sept. 30, 2021 - Version 12.32
|
692
775
|
|
693
|
-
- Added support for CBOR-format metadata in JUMBF (note that JUMBF support
|
694
|
-
still experimental)
|
776
|
+
- Added support for CBOR-format metadata in CAI JUMBF (note that JUMBF support
|
777
|
+
is still experimental)
|
695
778
|
- Added a new Nikon LensID
|
696
779
|
- Added a new Pentax LensType
|
697
780
|
- Decode timed GPS for two more dashcam formats
|
@@ -750,7 +833,7 @@ July 9, 2021 - Version 12.29
|
|
750
833
|
- Improved a QuickTime "File format error" message to be more meaningful, and
|
751
834
|
made it a minor error
|
752
835
|
- Changed PNG writer to add EXIF before IDAT
|
753
|
-
- Some changes the way JUMBF metadata is handled
|
836
|
+
- Some changes the way CAI JUMBF metadata is handled
|
754
837
|
- Patched to read timed GPS from a different type of INSV videos
|
755
838
|
- Patched a security issue
|
756
839
|
- Fixed problem where ExifTool could hang when processing mebx timed metadata
|
@@ -826,7 +909,7 @@ Apr. 13, 2021 - Version 12.24
|
|
826
909
|
- Decode a few new Panasonic and FujiFilm tags (thanks LibRaw and Greybeard)
|
827
910
|
- Updated acdsee.config in distribution (thanks StarGeek)
|
828
911
|
- Recognize AutoCAD DXF files
|
829
|
-
- More work on experimental JUMBF read support
|
912
|
+
- More work on experimental CAI JUMBF read support
|
830
913
|
- More work on experimental JPEG XL read/write support
|
831
914
|
- Patched security vulnerability in DjVu reader
|
832
915
|
|
@@ -834,8 +917,8 @@ Apr. 1, 2021 - Version 12.23
|
|
834
917
|
|
835
918
|
- Added support for Olympus ORI files
|
836
919
|
- Added experimental read/write support for JPEG XL images
|
837
|
-
- Added experimental read support for
|
838
|
-
images
|
920
|
+
- Added experimental read support for CAI (Content Authenticity Initiative)
|
921
|
+
JUMBF-format metadata in JPEG and Jpeg2000 images
|
839
922
|
- Added built-in support for parsing GPS track from Denver ACG-8050 videos
|
840
923
|
with the -ee option
|
841
924
|
- Added a some new Sony lenses (thanks Jos Roost and LibRaw)
|
data/bin/MANIFEST
CHANGED
@@ -41,6 +41,7 @@ fmt_files/kml_track.fmt
|
|
41
41
|
html/ExifTool.html
|
42
42
|
html/MIE1.1-20070121.pdf
|
43
43
|
html/Shift.html
|
44
|
+
html/TagNames/AAC.html
|
44
45
|
html/TagNames/AFCP.html
|
45
46
|
html/TagNames/AIFF.html
|
46
47
|
html/TagNames/APE.html
|
@@ -214,6 +215,7 @@ lib/File/RandomAccess.pod
|
|
214
215
|
lib/Image/ExifTool.pm
|
215
216
|
lib/Image/ExifTool.pod
|
216
217
|
lib/Image/ExifTool/7Z.pm
|
218
|
+
lib/Image/ExifTool/AAC.pm
|
217
219
|
lib/Image/ExifTool/AES.pm
|
218
220
|
lib/Image/ExifTool/AFCP.pm
|
219
221
|
lib/Image/ExifTool/AIFF.pm
|
@@ -441,6 +443,8 @@ lib/Image/ExifTool/ZIP.pm
|
|
441
443
|
lib/Image/ExifTool/ZISRAW.pm
|
442
444
|
lib/Image/ExifTool/iWork.pm
|
443
445
|
perl-Image-ExifTool.spec
|
446
|
+
t/AAC.t
|
447
|
+
t/AAC_2.out
|
444
448
|
t/AFCP.t
|
445
449
|
t/AFCP_2.out
|
446
450
|
t/AFCP_3.out
|
@@ -979,6 +983,7 @@ t/ZIP_7.out
|
|
979
983
|
t/ZIP_8.out
|
980
984
|
t/ZISRAW.t
|
981
985
|
t/ZISRAW_2.out
|
986
|
+
t/images/AAC.aac
|
982
987
|
t/images/AFCP.jpg
|
983
988
|
t/images/AIFF.aif
|
984
989
|
t/images/APE.ape
|
data/bin/META.json
CHANGED
data/bin/META.yml
CHANGED
data/bin/README
CHANGED
@@ -14,13 +14,14 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
14
14
|
|
15
15
|
File Types
|
16
16
|
------------+-------------+-------------+-------------+------------
|
17
|
-
360 r/w |
|
18
|
-
3FR r |
|
19
|
-
3G2 r/w |
|
20
|
-
3GP r/w |
|
21
|
-
7Z r |
|
22
|
-
A r |
|
23
|
-
AA r |
|
17
|
+
360 r/w | DOCX r | ISO r | NRW r/w | RAR r
|
18
|
+
3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
|
19
|
+
3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
|
20
|
+
3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
|
21
|
+
7Z r | DV r | JP2 r/w | ODS r | RTF r
|
22
|
+
A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
23
|
+
AA r | DVR-MS r | JSON r | OFR r | RWL r/w
|
24
|
+
AAC r | DYLIB r | JXL r | OGG r | RWZ r
|
24
25
|
AAE r | EIP r | K25 r | OGV r | RM r
|
25
26
|
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
26
27
|
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
@@ -56,7 +57,6 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
56
57
|
DLL r | INSP r/w | MXF r | RA r | XLSX r
|
57
58
|
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
|
58
59
|
DOC r | INX r | NKSC r/w | RAM r | ZIP r
|
59
|
-
DOCX r | ISO r | NRW r/w | RAR r |
|
60
60
|
|
61
61
|
Meta Information
|
62
62
|
----------------------+----------------------+---------------------
|
@@ -108,8 +108,8 @@ your home directory, then you would type the following commands in a
|
|
108
108
|
terminal window to extract and run ExifTool:
|
109
109
|
|
110
110
|
cd ~/Desktop
|
111
|
-
gzip -dc Image-ExifTool-12.
|
112
|
-
cd Image-ExifTool-12.
|
111
|
+
gzip -dc Image-ExifTool-12.72.tar.gz | tar -xf -
|
112
|
+
cd Image-ExifTool-12.72
|
113
113
|
./exiftool t/images/ExifTool.jpg
|
114
114
|
|
115
115
|
Note: These commands extract meta information from one of the test images.
|
data/bin/exiftool
CHANGED
@@ -11,7 +11,7 @@ use strict;
|
|
11
11
|
use warnings;
|
12
12
|
require 5.004;
|
13
13
|
|
14
|
-
my $version = '12.
|
14
|
+
my $version = '12.72';
|
15
15
|
|
16
16
|
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
|
17
17
|
my $exePath;
|
@@ -1642,7 +1642,10 @@ if (@newValues) {
|
|
1642
1642
|
if ($tag =~ /^(All)?TagsFromFile$/i) {
|
1643
1643
|
defined $newVal or Error("Need file name for -tagsFromFile\n"), next Command;
|
1644
1644
|
++$isWriting;
|
1645
|
-
if ($newVal eq '@' or not defined FilenameSPrintf($newVal)
|
1645
|
+
if ($newVal eq '@' or not defined FilenameSPrintf($newVal) or
|
1646
|
+
# can't set tags yet if we are using tags from other files with the -fileNUM option
|
1647
|
+
grep /\bfile\d+:/i, @{$setTags{$newVal}})
|
1648
|
+
{
|
1646
1649
|
push @dynamicFiles, $newVal;
|
1647
1650
|
next; # set tags from dynamic file later
|
1648
1651
|
}
|
@@ -4628,13 +4631,14 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4628
4631
|
|
4629
4632
|
File Types
|
4630
4633
|
------------+-------------+-------------+-------------+------------
|
4631
|
-
360 r/w |
|
4632
|
-
3FR r |
|
4633
|
-
3G2 r/w |
|
4634
|
-
3GP r/w |
|
4635
|
-
7Z r |
|
4636
|
-
A r |
|
4637
|
-
AA r |
|
4634
|
+
360 r/w | DOCX r | ISO r | NRW r/w | RAR r
|
4635
|
+
3FR r | DPX r | ITC r | NUMBERS r | RAW r/w
|
4636
|
+
3G2 r/w | DR4 r/w/c | J2C r | O r | RIFF r
|
4637
|
+
3GP r/w | DSS r | JNG r/w | ODP r | RSRC r
|
4638
|
+
7Z r | DV r | JP2 r/w | ODS r | RTF r
|
4639
|
+
A r | DVB r/w | JPEG r/w | ODT r | RW2 r/w
|
4640
|
+
AA r | DVR-MS r | JSON r | OFR r | RWL r/w
|
4641
|
+
AAC r | DYLIB r | JXL r | OGG r | RWZ r
|
4638
4642
|
AAE r | EIP r | K25 r | OGV r | RM r
|
4639
4643
|
AAX r/w | EPS r/w | KDC r | ONP r | SEQ r
|
4640
4644
|
ACR r | EPUB r | KEY r | OPUS r | SKETCH r
|
@@ -4670,7 +4674,6 @@ supported by ExifTool (r = read, w = write, c = create):
|
|
4670
4674
|
DLL r | INSP r/w | MXF r | RA r | XLSX r
|
4671
4675
|
DNG r/w | INSV r | NEF r/w | RAF r/w | XMP r/w/c
|
4672
4676
|
DOC r | INX r | NKSC r/w | RAM r | ZIP r
|
4673
|
-
DOCX r | ISO r | NRW r/w | RAR r |
|
4674
4677
|
|
4675
4678
|
Meta Information
|
4676
4679
|
----------------------+----------------------+---------------------
|
@@ -4738,7 +4741,7 @@ L<Input-output text formatting|/Input-output text formatting>
|
|
4738
4741
|
-n (--printConv) No print conversion
|
4739
4742
|
-p FMTFILE (-printFormat) Print output in specified format
|
4740
4743
|
-php Export tags as a PHP Array
|
4741
|
-
-s[NUM] (-short) Short output format
|
4744
|
+
-s[NUM] (-short) Short output format (-s for tag names)
|
4742
4745
|
-S (-veryShort) Very short output format
|
4743
4746
|
-sep STR (-separator) Set separator string for list items
|
4744
4747
|
-sort Sort output alphabetically
|
@@ -4951,7 +4954,7 @@ while C<-all:all=> deletes entire blocks.
|
|
4951
4954
|
application segments which are not associated with another deletable group.
|
4952
4955
|
For example, specifying C<-APP14:All=> will NOT delete the APP14 "Adobe"
|
4953
4956
|
segment because this is accomplished with C<-Adobe:All>. But note that
|
4954
|
-
these unnamed APP segments may not be excluded with C<--APPxx:all>
|
4957
|
+
these unnamed APP segments may not be excluded with C<--APPxx:all> when
|
4955
4958
|
deleting all information.
|
4956
4959
|
|
4957
4960
|
6) When shifting a value, the shift is applied to the original value of the
|
@@ -5440,7 +5443,7 @@ tags specified for the specific SourceFile processed. The imported JSON
|
|
5440
5443
|
file must have the same format as the exported JSON files with the exception
|
5441
5444
|
that options exporting JSON objects instead of simple values are not
|
5442
5445
|
compatible with the import file format (ie. export with B<-D>, B<-H>, B<-l>,
|
5443
|
-
or B<-T> is not
|
5446
|
+
or B<-T> is not compatible, and use B<-G> instead of B<-g>). Additionally,
|
5444
5447
|
tag names in the input JSON file may be suffixed with a C<#> to disable
|
5445
5448
|
print conversion.
|
5446
5449
|
|
@@ -5582,7 +5585,7 @@ with this command:
|
|
5582
5585
|
|
5583
5586
|
produces output like this:
|
5584
5587
|
|
5585
|
-
-- Generated by ExifTool 12.
|
5588
|
+
-- Generated by ExifTool 12.72 --
|
5586
5589
|
File: a.jpg - 2003:10:31 15:44:19
|
5587
5590
|
(f/5.6, 1/60s, ISO 100)
|
5588
5591
|
File: b.jpg - 2006:05:23 11:57:38
|
@@ -6593,20 +6596,24 @@ option no longer suppresses the output "{readyNUM}" message.
|
|
6593
6596
|
|
6594
6597
|
Read tags from an alternate source file. Among other things, this allows
|
6595
6598
|
tags from different files to be compared and combined using the B<-if> and
|
6596
|
-
B<-p> options.
|
6597
|
-
family 8 group name (eg. C<File1:TAG> for
|
6598
|
-
for B<-file2>, etc). I<ALTFILE> may
|
6599
|
-
the B<-w> option (%d, %f, etc),
|
6600
|
-
|
6601
|
-
|
6602
|
-
C<money$$.jpg>). For example, assuming that
|
6603
|
-
been set in the edited file, a command to copy
|
6604
|
-
could look like this:
|
6599
|
+
B<-p> options. I<NUM> is any string of digits. Tags from alternate files
|
6600
|
+
are accessed via the corresponding family 8 group name (eg. C<File1:TAG> for
|
6601
|
+
the B<-file1> option, C<File2:TAG> for B<-file2>, etc). I<ALTFILE> may
|
6602
|
+
contain filename formatting codes like the B<-w> option (%d, %f, etc),
|
6603
|
+
and/or tag names with a leading C<$> symbol to access tags from the source
|
6604
|
+
file in the same way as the B<-p> option (so any other dollar symbol in the
|
6605
|
+
file name must be doubled, eg. C<money$$.jpg>). For example, assuming that
|
6606
|
+
the OriginalFileName tag has been set in the edited file, a command to copy
|
6607
|
+
Rights from the original file could look like this:
|
6605
6608
|
|
6606
6609
|
exiftool -file1 '$originalfilename' '-rights<file1:rights' edited.jpg
|
6607
6610
|
|
6608
|
-
|
6609
|
-
|
6611
|
+
Subtle note: If a B<-tagsFromFile> option is used, tags in the I<ALTFILE>
|
6612
|
+
argument come from the I<SRCFILE> that applies to the first argument
|
6613
|
+
accessing tags from the corresponding C<FileNUM> group.
|
6614
|
+
|
6615
|
+
User-defined Composite tags may access tags from alternate files using the
|
6616
|
+
appropriate (case-sensitive) family 8 group name.
|
6610
6617
|
|
6611
6618
|
=item B<-list_dir>
|
6612
6619
|
|
@@ -0,0 +1,175 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# File: AAC.pm
|
3
|
+
#
|
4
|
+
# Description: Read AAC audio files
|
5
|
+
#
|
6
|
+
# Revisions: 2023-12-29 - P. Harvey Created
|
7
|
+
#------------------------------------------------------------------------------
|
8
|
+
|
9
|
+
package Image::ExifTool::AAC;
|
10
|
+
|
11
|
+
use strict;
|
12
|
+
use vars qw($VERSION);
|
13
|
+
use Image::ExifTool qw(:DataAccess :Utils);
|
14
|
+
use Image::ExifTool::FLAC;
|
15
|
+
|
16
|
+
$VERSION = '1.00';
|
17
|
+
|
18
|
+
my %convSampleRate = (
|
19
|
+
0 => 96000, 7 => 22050,
|
20
|
+
1 => 88200, 8 => 16000,
|
21
|
+
2 => 64000, 9 => 12000,
|
22
|
+
3 => 48000, 10 => 11025,
|
23
|
+
4 => 44100, 11 => 8000,
|
24
|
+
5 => 32000, 12 => 7350,
|
25
|
+
6 => 24000,
|
26
|
+
);
|
27
|
+
|
28
|
+
%Image::ExifTool::AAC::Main = (
|
29
|
+
PROCESS_PROC => \&Image::ExifTool::FLAC::ProcessBitStream,
|
30
|
+
GROUPS => { 2 => 'Audio' },
|
31
|
+
# Bit000-011 - sync word (all 1's)
|
32
|
+
# Bit012 - ID (seems to be always 0)
|
33
|
+
# Bit013-014 - layer (00)
|
34
|
+
# Bit015 - CRC absent (0=crc exists, 1=no crc)
|
35
|
+
'Bit016-017' => {
|
36
|
+
Name => 'ProfileType',
|
37
|
+
PrintConv => {
|
38
|
+
0 => 'Main',
|
39
|
+
1 => 'Low Complexity',
|
40
|
+
2 => 'Scalable Sampling Rate',
|
41
|
+
},
|
42
|
+
},
|
43
|
+
'Bit018-021' => {
|
44
|
+
Name => 'SampleRate',
|
45
|
+
ValueConv => \%convSampleRate,
|
46
|
+
},
|
47
|
+
# Bit022 - private
|
48
|
+
'Bit023-025' => {
|
49
|
+
Name => 'Channels',
|
50
|
+
PrintConv => {
|
51
|
+
0 => '?',
|
52
|
+
1 => 1,
|
53
|
+
2 => 2,
|
54
|
+
3 => 3,
|
55
|
+
4 => 4,
|
56
|
+
5 => 5,
|
57
|
+
6 => '5+1',
|
58
|
+
7 => '7+1',
|
59
|
+
},
|
60
|
+
},
|
61
|
+
# Bit026 - original/copy
|
62
|
+
# Bit027 - home
|
63
|
+
# Bit028 - copyright ID
|
64
|
+
# Bit029 - copyright start
|
65
|
+
# Bit030-042 - FrameLength
|
66
|
+
# Bit043-053 - buffer fullness
|
67
|
+
# Bit054-055 - BlocksInFrame (minus 1)
|
68
|
+
# Note: Bitrate for frame = FrameLength * 8 * SampleRate / ((BlocksInFrame+1) * 1024)
|
69
|
+
# - but all frames must be scanned to calculate average bitrate
|
70
|
+
Encoder => {
|
71
|
+
Name => 'Encoder',
|
72
|
+
Notes => 'taken from filler payload of first frame',
|
73
|
+
},
|
74
|
+
);
|
75
|
+
|
76
|
+
#------------------------------------------------------------------------------
|
77
|
+
# Read information from an AAC file
|
78
|
+
# Inputs: 0) ExifTool object reference, 1) Directory information reference
|
79
|
+
# Returns: 1 on success, 0 if this wasn't a valid AAC file
|
80
|
+
sub ProcessAAC($$)
|
81
|
+
{
|
82
|
+
my ($et, $dirInfo) = @_;
|
83
|
+
my $raf = $$dirInfo{RAF};
|
84
|
+
my ($buff, $buf2);
|
85
|
+
|
86
|
+
# format of frame header (7 bytes):
|
87
|
+
# SSSS SSSS SSSS ILLC PPRR RRpC CCoh csff ffff ffff fffb bbbb bbbb bbNN
|
88
|
+
# 1111 1111 1111 0001 0110 0000 0100 0000 0000 0101 0101 1111 1111 1100 (eg.)
|
89
|
+
# S = sync word o = original/copy
|
90
|
+
# I = ID h = home
|
91
|
+
# L = layer (00) c = copyright ID
|
92
|
+
# C = CRC absent s = copyright start
|
93
|
+
# P = profile object type f = frame length
|
94
|
+
# R = sampling rate index b = buffer fullness
|
95
|
+
# p = private N = number of raw data blocks in frame
|
96
|
+
# C = channel configuration
|
97
|
+
|
98
|
+
$raf->Read($buff, 7) == 7 or return 0;
|
99
|
+
return 0 unless $buff =~ /^\xff[\xf0\xf1]/;
|
100
|
+
my @t = unpack('NnC', $buff);
|
101
|
+
return 0 if (($t[0] >> 16) & 0x03) == 3; # (reserved profile type)
|
102
|
+
return 0 if (($t[0] >> 12) & 0x0f) > 12; # validate sampling frequency index
|
103
|
+
my $len = (($t[0] << 11) & 0x1800) | (($t[1] >> 5) & 0x07ff);
|
104
|
+
return 0 if $len < 7;
|
105
|
+
|
106
|
+
$et->SetFileType();
|
107
|
+
|
108
|
+
my $tagTablePtr = GetTagTable('Image::ExifTool::AAC::Main');
|
109
|
+
$et->ProcessDirectory({ DataPt => \$buff }, $tagTablePtr);
|
110
|
+
|
111
|
+
# read the first frame data to check for a filler with the encoder name
|
112
|
+
if ($len > 8 and $raf->Read($buff, $len-7) == $len-7) {
|
113
|
+
my $noCRC = ($t[0] & 0x00010000);
|
114
|
+
my $blocks = ($t[2] & 0x03);
|
115
|
+
my $pos = 0;
|
116
|
+
$pos += 2 + 2 * $blocks unless $noCRC;
|
117
|
+
last if $pos + 2 > length($buff);
|
118
|
+
my $tmp = unpack("x${pos}n", $buff);
|
119
|
+
my $id = $tmp >> 13;
|
120
|
+
# read filler payload
|
121
|
+
if ($id == 6) {
|
122
|
+
my $cnt = ($tmp >> 9) & 0x0f;
|
123
|
+
++$pos;
|
124
|
+
if ($cnt == 15) {
|
125
|
+
$cnt += (($tmp >> 1) & 0xff) - 1 if $cnt == 15;
|
126
|
+
++$pos;
|
127
|
+
}
|
128
|
+
if ($pos + $cnt < length($buff)) {
|
129
|
+
my $dat = substr($buff, $pos, $cnt);
|
130
|
+
$dat =~ s/^\0+//;
|
131
|
+
$dat =~ s/\0+$//;
|
132
|
+
$et->HandleTag($tagTablePtr, Encoder => $dat) if $dat =~ /^[\x20-\x7e]+$/;
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
return 1;
|
138
|
+
}
|
139
|
+
|
140
|
+
1; # end
|
141
|
+
|
142
|
+
__END__
|
143
|
+
|
144
|
+
=head1 NAME
|
145
|
+
|
146
|
+
Image::ExifTool::AAC - Read AAC audio files
|
147
|
+
|
148
|
+
=head1 SYNOPSIS
|
149
|
+
|
150
|
+
This module is used by Image::ExifTool
|
151
|
+
|
152
|
+
=head1 DESCRIPTION
|
153
|
+
|
154
|
+
This module contains definitions required by Image::ExifTool to read AAC
|
155
|
+
audio files.
|
156
|
+
|
157
|
+
=head1 NOTES
|
158
|
+
|
159
|
+
Since ISO charges money for the official AAC specification, this module is
|
160
|
+
based on unofficial sources which may be incomplete, inaccurate or outdated.
|
161
|
+
|
162
|
+
=head1 AUTHOR
|
163
|
+
|
164
|
+
Copyright 2003-2023, Phil Harvey (philharvey66 at gmail.com)
|
165
|
+
|
166
|
+
This library is free software; you can redistribute it and/or modify it
|
167
|
+
under the same terms as Perl itself.
|
168
|
+
|
169
|
+
=head1 SEE ALSO
|
170
|
+
|
171
|
+
L<Image::ExifTool::TagNames/AAC Tags>,
|
172
|
+
L<Image::ExifTool(3pm)|Image::ExifTool>
|
173
|
+
|
174
|
+
=cut
|
175
|
+
|
@@ -219,7 +219,8 @@ writable directly, but is written automatically by ExifTool (often when a
|
|
219
219
|
corresponding L<Composite|Image::ExifTool::TagNames/Composite Tags> or
|
220
220
|
L<Extra|Image::ExifTool::TagNames/Extra Tags> tag is written). A colon
|
221
221
|
(C<:>) indicates a I<Mandatory> tag which may be added automatically when
|
222
|
-
writing
|
222
|
+
writing (use the API L<NoMandatory|../ExifTool.html#NoMandatory> option to avoid creating mandatory EXIF
|
223
|
+
tags). Normally MakerNotes tags may not be deleted individually, but a
|
223
224
|
caret (C<^>) indicates a I<Deletable> MakerNotes tag.
|
224
225
|
|
225
226
|
The HTML version of these tables also lists possible B<Values> for
|
@@ -7,6 +7,7 @@
|
|
7
7
|
#
|
8
8
|
# References: 1) https://c2pa.org/public-draft/
|
9
9
|
# 2) https://datatracker.ietf.org/doc/html/rfc7049
|
10
|
+
# 3) https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml
|
10
11
|
#------------------------------------------------------------------------------
|
11
12
|
|
12
13
|
package Image::ExifTool::CBOR;
|
@@ -15,7 +16,7 @@ use vars qw($VERSION);
|
|
15
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
16
17
|
use Image::ExifTool::JSON;
|
17
18
|
|
18
|
-
$VERSION = '1.
|
19
|
+
$VERSION = '1.02';
|
19
20
|
|
20
21
|
sub ProcessCBOR($$$);
|
21
22
|
sub ReadCBORValue($$$$);
|
@@ -28,15 +29,27 @@ my %cborType6 = (
|
|
28
29
|
3 => 'negative bignum',
|
29
30
|
4 => 'decimal fraction',
|
30
31
|
5 => 'bigfloat',
|
32
|
+
16 => 'COSE Encrypt0', #3 (COSE Single Recipient Encrypted Data Object)
|
33
|
+
17 => 'COSE Mac0', #3 (COSE Mac w/o Recipients Object)
|
34
|
+
18 => 'COSE Sign1', #3 (COSE Single Signer Data Object)
|
35
|
+
19 => 'COSE Countersignature', #3 (COSE standalone V2 countersignature)
|
31
36
|
21 => 'expected base64url encoding',
|
32
37
|
22 => 'expected base64 encoding',
|
33
38
|
23 => 'expected base16 encoding',
|
34
39
|
24 => 'encoded CBOR data',
|
40
|
+
25 => 'string number', #3 (reference the nth previously seen string)
|
41
|
+
26 => 'serialized Perl', #3 (Serialised Perl object with classname and constructor arguments)
|
42
|
+
27 => 'serialized code', #3 (Serialised language-independent object with type name and constructor arguments)
|
43
|
+
28 => 'shared value', #3 (mark value as (potentially) shared)
|
44
|
+
29 => 'shared value number', #3 (reference nth marked value)
|
45
|
+
30 => 'rational', #3 (Rational number)
|
46
|
+
31 => 'missing array value', #3 (Absent value in a CBOR Array)
|
35
47
|
32 => 'URI',
|
36
48
|
33 => 'base64url',
|
37
49
|
34 => 'base64',
|
38
50
|
35 => 'regular expression',
|
39
51
|
36 => 'MIME message',
|
52
|
+
# (lots more after this in ref 3, but don't include them unless we see them)
|
40
53
|
55799 => 'CBOR magic number',
|
41
54
|
);
|
42
55
|
|
@@ -212,7 +225,7 @@ sub ReadCBORValue($$$$)
|
|
212
225
|
{
|
213
226
|
$val = $$val[1] * ($num == 4 ? 10 : 2) ** $$val[0];
|
214
227
|
}
|
215
|
-
} elsif ($fmt == 7) {
|
228
|
+
} elsif ($fmt == 7) {
|
216
229
|
if ($dat == 31) {
|
217
230
|
undef $val; # "break" = end of indefinite array/hash (not used in C2PA)
|
218
231
|
} elsif ($dat < 24) {
|
@@ -263,6 +276,7 @@ sub ProcessCBOR($$$)
|
|
263
276
|
my ($val, $err, $tag, $i);
|
264
277
|
|
265
278
|
$et->VerboseDir('CBOR', undef, $$dirInfo{DirLen});
|
279
|
+
SetByteOrder('MM');
|
266
280
|
|
267
281
|
$$et{cbor_datapos} = $$dirInfo{DataPos} + $$dirInfo{Base};
|
268
282
|
|
@@ -320,6 +334,8 @@ under the same terms as Perl itself.
|
|
320
334
|
|
321
335
|
=item L<https://datatracker.ietf.org/doc/html/rfc7049>
|
322
336
|
|
337
|
+
=item L<https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml>
|
338
|
+
|
323
339
|
=back
|
324
340
|
|
325
341
|
=head1 SEE ALSO
|