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§
Structs§
- Audio
Info - 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).
- Freeform
Ident - An identifier of a freeform (
----) atom containing borrowed mean and name strings. - Img
- Image data with an associated format.
- Read
Config - 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.
- Write
Config - Configure which metadata is (over)written.
Enums§
- Advisory
Rating - The iTunes advisory rating of a file. This is stored in the
rtngatom. - Channel
Config - The channel configuration of an MPEG-4 audio track.
- Chpl
Timescale - The timescale which is used for the chapter list (
chpl). - Data
- Different types of data defined by Table 3-5 Well-known data types.
- Data
Ident - The identifier used to store metadata inside an item list.
Either a
Fourccor an freeform identifier. - Error
Kind - 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.
- Media
Type - The iTunes media type of a file. This is stored in the
stikatom. - Sample
Rate - 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
gnreatom. The codes are equivalent to the ID3v1 genre codes plus 1.
Traits§
- Ident
- A trait providing information about an identifier.
- Storage
File - A trait representing a file-like reader/writer.