使用TagLib写入ID3v2元数据

Writing ID3v2 metadata using TagLib

本文关键字:元数据 ID3v2 写入 TagLib 使用      更新时间:2023-10-16

我正在写一个音乐开膛手,已经写了好几天了。除了设置元数据之外,一切都正常工作。我正在下载原始PCM数据,使用ffmpeg.exe编码为MP3,然后将元数据设置为文件。我知道ffmpeg.exe可以写元数据,但它不适合我的需要,因为我在命令行中指定元数据时无法写字符(")。此外,ffmpeg..exe将我的数据最多剪切到30个字符,这也是我使用TagLib:时的问题

TagLib::FileRef f("some_mp3.mp3");
f.tag()->setArtist("Loooooooooooooooooooooooooooooooooooong Artist");
f.tag()->setAlbum("Loooooooooooooooooooooooooooooooooooong Album");
f.tag()->setTitle("Loooooooooooooooooooooooooooooooooooong Title");
f.tag()->setTrack(37);
f.save();

这段代码似乎使用了ID3v1,因为它将长字符串裁剪为只有30个字符,是的,我确实读过维基百科上的一些内容:p我需要它使用ID3v2来提供长数据。有什么想法吗?

正如我从ffmpeg文档中得到的,ffmpeg.exe使用了lame编解码器。因此,您可能需要检查如何配置lame而不是ffmpeg。Lame有ID3标签的选项,看看他们的主页在这里:http://lame.cvs.sourceforge.net/viewvc/lame/lame/USAGE

您可以使用TagLib::MPEG::File类打开文件,使用ID3v2Tag获取ID3v2标记。您的代码将变为:

  TagLib::MPEG::File f("some_mp3.mp3");
  f.ID3v2Tag()->setArtist("Loooooooooooooooooooooooooooooooooooong Artist");
  f.ID3v2Tag()->setAlbum("Loooooooooooooooooooooooooooooooooooong Album");
  f.ID3v2Tag()->setTitle("Loooooooooooooooooooooooooooooooooooong Title");
  f.ID3v2Tag()->setTrack(37);
  f.save();

希望这能帮助