用LAME编码的MP3长度

时间:2013-08-28 16:48:18

标签: c++ lame

我目前正在使用LAME编写pcm到mp3的编码,但生成的mp3的长度更长(并且能够隔离导致此问题的部分代码)。 pcm约为4:45,但是当我使用设置进行编码时

///cbr settings
lame_set_VBR(gfp, vbr_off);
lame_set_quality(gfp, 5);
lame_set_preset(gfp, 128);

得到的mp3长度大约是11:30。当我使用设置进行编码时

//vbr settings
lame_set_VBR(gfp, vbr_mtrh);
lame_set_VBR_quality(gfp, 5);

得到的mp3长度约为14:18。但是当我用设置编码时

//abr settings
lame_set_VBR(gfp, vbr_abr);
lame_set_VBR_min_bitrate_kbps(gfp, 128);

得到的mp3长度是正确的4:45(但我注意到当我将比特率增加到188时,长度上升了大约5秒到4:50)

我真的不知道什么是错误的,但似乎只有abr导致正确的长度vbr和cbr不是!

UPDATE :::: 当这些mp3播放时,它们正常播放并在4:45停止,但Windows媒体播放器及其属性(在Windows上)仍然可以读取长度

UPDATE ::: 通过删除lame_set_preset设置使cbr设置正常工作。只有vbr设置返回的长度不正确。

1 个答案:

答案 0 :(得分:3)

据悉,我必须在lametag标记之后立即将lame_get_lametag_frame(来自id3v2)写入文件。这解决了挑战!

注意: 调用lame_get_lametag_frame后会调用lame_encode_flush,因此您必须回到id3v2标记的末尾才能编写lametag