如何解决使用TagLib编写ID3v2元数据
| 我正在写音乐开膛手,已经有好几天了。除设置元数据外,一切都按预期进行。我正在下载原始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使用了me脚的编解码器。因此,您可能需要检查如何配置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();
希望这可以帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。