2个版本
0.3.1 | 2022年5月27日 |
---|---|
0.3.0 | 2022年5月26日 |
#12 in #id3
2MB
1K SLoC
audiotags2
audiotags2
是 audiotags
的分支,目前未维护。
这个crate使得解析、转换和写入不同文件类型音频文件中的元数据(也称为标签)变得更加容易。
这个crate旨在为不同音频文件格式的解析器和写入器提供一个统一的trait。这意味着你可以使用单个函数:Tag::default(). read_from_path()
解析mp3、flac和m4a文件中的标签,并通过直接调用其结果上的 .album()
、.artist()
来获取字段。如果没有这个crate,你将需要学习 id3、mp4ameta 等不同API来解析不同文件格式中的元数据。
性能
如果你想要猜测元数据格式(从文件扩展名),使用 audiotags2 会因为vtable而带来一点开销。除此之外,性能几乎与直接调用那些“专业”crate提供的函数相同。
如果你只需要读取和写入一种格式的元数据,则不会进行复制。如果你想在不同标签之间进行转换,无论使用 audiotags2 还是使用专门库提供的获取器和设置器,复制都是不可避免的。audiotags2 不会进行额外的、不必要的复制。
支持格式
文件格式 | 元数据格式 | 后端 |
---|---|---|
mp3 |
id3v2.4 | id3 |
m4a/mp4/... |
MPEG-4音频元数据 | mp4ameta |
flac |
Vorbis注释 | metaflac |
示例
阅读手册中的示例,但这里有一个快速示例
fn main() {
// using `default()` or `new()` alone so that the metadata format is
// guessed (from the file extension) (in this case, Id3v2 tag is read)
let mut tag = Tag::new().read_from_path(MP3_FILE).unwrap();
tag.set_title("foo title");
assert_eq!(tag.title(), Some("foo title"));
tag.remove_title();
assert!(tag.title().is_none());
tag.remove_title();
// trying to remove a field that's already empty won't hurt
let cover = Picture {
mime_type: MimeType::Jpeg,
data: &vec![0u8; 10],
};
tag.set_album_cover(cover.clone());
assert_eq!(tag.album_cover(), Some(cover));
tag.remove_album_cover();
assert!(tag.album_cover().is_none());
tag.remove_album_cover();
tag.write_to_path(MP3_FILE).expect("Fail to save");
}
许可证:MIT
依赖项
~2.5MB
~39K SLoC