Crate mp4ameta

Source
Expand description

A library for reading and writing iTunes style MPEG-4 audio metadata.

§Examples

§The Easy Way

let mut tag = mp4ameta::Tag::read_from_path("music.m4a").unwrap();

println!("{}", tag.artist().unwrap());

tag.set_artist("artist");
tag.write_to_path("music.m4a").unwrap();

§The Hard Way

use mp4ameta::{Data, Fourcc, Tag};

let mut tag = Tag::read_from_path("music.m4a").unwrap();
let artist_ident = Fourcc(*b"\xa9ART");

let artist = tag.strings_of(&artist_ident).next().unwrap();
println!("{}", artist);

tag.set_data(artist_ident, Data::Utf8("artist".to_owned()));
tag.write_to_path("music.m4a").unwrap();

§Using Freeform Identifiers

use mp4ameta::{Data, FreeformIdent, Tag};

let mut tag = Tag::read_from_path("music.m4a").unwrap();
let isrc_ident = FreeformIdent::new_static("com.apple.iTunes", "ISRC");

let isrc = tag.strings_of(&isrc_ident).next().unwrap();
println!("{}", isrc);

tag.set_data(isrc_ident, Data::Utf8("isrc".to_owned()));
tag.write_to_path("music.m4a").unwrap();

§Chapters

There are two ways of storing chapters in mp4 files. They can either be stored inside a chapter list, or a chapter track.

use mp4ameta::{Chapter, Tag};
use std::time::Duration;

let mut tag = Tag::read_from_path("audiobook.m4b").unwrap();

for chapter in tag.chapter_track() {
    let mins = chapter.start.as_secs() / 60;
    let secs = chapter.start.as_secs() % 60;
    println!("{mins:02}:{secs:02} {}", chapter.title);
}
tag.chapter_track_mut().clear();

tag.chapter_list_mut().extend([
    Chapter::new(Duration::ZERO, "first chapter"),
    Chapter::new(Duration::from_secs(3 * 60 + 42), "second chapter"),
    Chapter::new(Duration::from_secs(7 * 60 + 13), "third chapter"),
]);

tag.write_to_path("audiobook.m4b").unwrap();

§Read and Write Configurations

Read only the data that is relevant for your usecase. And (over)write only the data that you want to edit.

By default all data is read and written.

use mp4ameta::{ChplTimescale, ReadConfig, Tag, WriteConfig};

// Only read the metadata item list, not chapters or audio information
let read_cfg = ReadConfig {
    read_meta_items: true,
    read_image_data: false,
    ..ReadConfig::NONE
};
let mut tag = Tag::read_with_path("music.m4a", &read_cfg).unwrap();

println!("{tag}");

tag.clear_meta_items();

// Only overwrite the metadata item list, leave chapters intact
let write_cfg = WriteConfig {
    write_meta_items: true,
    ..WriteConfig::NONE
};
tag.write_with_path("music.m4a", &write_cfg).unwrap();

Modules§

ident
A module for working with identifiers.

Macros§

const_assert

Structs§

AudioInfo
Audio information of an mp4 track.
Chapter
A chapter.
Error
Any error that may occur while performing metadata operations.
Fourcc
A 4 byte atom identifier (four character code).
FreeformIdent
An identifier of a freeform (----) atom containing borrowed mean and name strings.
Img
Image data with an associated format.
ReadConfig
Configure what kind of data should be rad
Tag
A tag containing MPEG-4 audio metadata.
Userdata
User defined MPEG-4 audio metadata that can be modified.
WriteConfig
Configure which metadata is (over)written.

Enums§

AdvisoryRating
The iTunes advisory rating of a file. This is stored in the rtng atom.
ChannelConfig
The channel configuration of an MPEG-4 audio track.
ChplTimescale
The timescale which is used for the chapter list (chpl).
Data
Different types of data defined by Table 3-5 Well-known data types.
DataIdent
The identifier used to store metadata inside an item list. Either a Fourcc or an freeform identifier.
ErrorKind
Kinds of errors that may occur while performing metadata operations.
ImgFmt
The image format used to store images inside the userdata of an MPEG-4 file.
MediaType
The iTunes media type of a file. This is stored in the stik atom.
SampleRate
An enum representing the sample rate of an MPEG-4 audio track.

Constants§

STANDARD_GENRES
A list of standard genre codes and values found in the gnre atom. The codes are equivalent to the ID3v1 genre codes plus 1.

Traits§

Ident
A trait providing information about an identifier.
StorageFile
A trait representing a file-like reader/writer.

Type Aliases§

ImgBuf
Type alias for an owned image buffer.
ImgMut
Type alias for a mutable image reference.
ImgRef
Type alias for an image reference.
Result
Type alias for the result of tag operations.