使用TagLib编写ID3v2元数据

时间:2011-06-12 09:41:17

标签: c++ mp3 metadata taglib

我正在写一个音乐开膛手,现在已经有几天了。除了设置元数据之外,一切都正常。我正在下载原始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来提供长数据。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以使用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();

希望这有帮助