使用TagLib写入ID3v2元数据
Writing ID3v2 metadata using 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来提供长数据。有什么想法吗?
正如我从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();
希望这能帮助
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 以非特权用户身份查询 NTFS 特殊文件的元数据?
- 如何使用 Google Test 向测试添加元数据 / 如何将数据从 Google Test 发送到 TestEven
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 在 C++ 中修改 Grpc 双向流式处理期间的元数据
- cpp / c ++中的grpc客户端代码,元数据x-api-key/x-goog-api-key不起作用,给了我语音A
- 如何使用gRPC在客户端和服务器之间双向发送和接收流元数据
- 即使基类和派生类只使用基元数据类型,我是否需要定义虚拟析构函数
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- C++11 标准中的哪一部分规定了基元数据类型大小之间的相对顺序?
- 使用 ffmpeg 添加元数据信息
- WIC - Exif 元数据查询 - 如何获取图像说明
- 从Qt应用程序读取元数据
- 如何将编译时元数据/行为添加到特定函数
- 从编码域中的 MPEG 文件中读取元数据
- 在C 中显示图像及其元数据
- 如何用libcurl定义元数据
- 使用TagLib写入ID3v2元数据