2011-06-12 20 views
0

我正在写一个音乐松土器,并且已经有好几天了。除了设置元数据之外,所有事情都应该如此。我正在下载原始PCM数据,使用ffmpeg.exe将其编码为MP3,然后将元数据设置为该文件。我知道ffmpeg.exe可以编写元数据,但它不适合我的需要,因为我不能在命令行中指定元数据时写入字符(“)。另外,ffmpeg.exe将我的数据剪切为最多30个字符,这也是使用标签库时,我的问题:使用TagLib编写ID3v2元数据

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(); 

看来,因为它作物的长字符串,只是30个字符的代码使用的ID3v1,是的,我也读了一些维基百科上这样的:PI需要使用的ID3v2给长?数据有什么想法

回答

0

可以使用类标签库:: MPEG ::文件打开文件和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(); 

希望这有助于

+0

仍将字符串切换为30个字符。任何其他能够使用长字符串设置这四种元数据的库也适用于我,如果没有其他解决方案出现:) – Alex 2011-06-12 11:56:28

+0

我刚发现这两个代码似乎都存储了整个字符串,但Windows资源管理器和我的MP3播放器只显示前30个字符。如果我使用Windows资源管理器设置元数据,它会在我的MP3播放器上显示全长,当然也可以在Windows中显示。所以我想我想在代码中做同样的事情。 – Alex 2011-06-12 12:10:59

+0

Ahh,“Windows资源管理器和Windows Media Player无法处理任何版本的ID3v2版本2.4标签,包括Windows 7/Windows Media Player 12. [5] Windows可以理解ID3v2高达并包括2.3版本”似乎我需要特别是ID3v2.3,对.. – Alex 2011-06-12 12:19:33

1

正如我从FFmpeg的文件ffmpeg.exe得到它使用瘸子编解码器。因此,您可能想要检查如何配置lame而不是ffmpeg。 Lame有ID3标签的选项,请看这里的主页:http://lame.cvs.sourceforge.net/viewvc/lame/lame/USAGE

+0

编码进行得很好,我只需要设置元数据。这可以是和在我的情况下,一个单独的通行证。我目前正在查看ID3lib,我可以设置长文本值,但我在设置UTF-8文本时遇到问题。 – Alex 2011-06-12 13:33:27