exiftool-rs becomes a faithful port of Perl ExifTool 13.60: ExifTool's own
modules, embedded, run by a Perl interpreter written in Rust, with its subs
and the exiftool application ported to Rust one by one. It replaces the
0.x reimplementation (MIGRATION.md).
Changed
- Everything read, printed and written is ExifTool's: ExifTool's test suite
passes unchanged (114 scripts, 604 tests), every test image extracts as
Perl does, and the CLI is compared with Perl'sexiftoolcase by case. - The CLI has every option of the
exiftoolapplication. - The Rust API keeps 0.14's names and signatures, as a facade over
Image::ExifTool (docs/port/API.md lists the differences). - 0.x's writers for the types ExifTool does not write (ID3, FLAC, Ogg,
Opus, Matroska) are kept, behind theextra-writersfeature (default). - Building needs a C compiler (PCRE2 and zlib are built in).
Added
Options::lang(ExifTool's-lang: descriptions and values translated),
Options::binary(binary values extracted, as-b) andOptions::trim
(off by default: leading and trailing spaces, tabs and invisible
characters stripped from printed values).- One interpreter per
ExifTool, kept from file to file on a worker
thread (ExifToolisSend + Sync);Options::fresh_interpreterstarts
a new one for each call. FormatExtensionandExifTool::register_extension: a program can add a
writer for a type ExifTool does not write; the built-in ID3, Vorbis
(FLAC, Ogg, Opus) and Matroska writers are extensions.set_new_values_from_fileacross formats: a tag copied into a type that
stores it elsewhere goes to the destination's preferred group (FLAC's
Vorbis Artist becomes ID3 in an MP3), with the audio
equivalences ExifTool has no table for (Year/Date, Track/TrackNumber...),
also given as an argfile forexiftool(arg_files/audio2quicktime.args).-ver -vlists the included libraries: the port's own Rust
implementations of the Perl modules, and the crates and C libraries
(PCRE2, zlib, built in) they are based on.- The GUI: light, dark or system theme; every color meets WCAG 2 AA
contrast; accessible names for screen readers (AccessKit) and full
keyboard use. - The binaries use rusty_alloc as their allocator (
rusty-allocfeature,
default; the library never sets one).
Changed (API)
write_infocounts only the changes that take effect: writing a value a
tag already has counts 0 and leaves the file untouched (Perl ExifTool
rewrites it and reports it "updated").
Removed
- The internal modules 0.x exported (
formats,metadata,tags,
writer,encoding,geolocation,geotag,i18n,md5...).
Upgrading from 0.x: MIGRATION.md. Parity report: https://le-syl21.github.io/exiftool-rs/
crates.io: cargo install exiftool-rs (GUI: --features gui)