我目前正在使用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设置返回的长度不正确。
答案 0 :(得分:3)
据悉,我必须在lametag
标记之后立即将lame_get_lametag_frame
(来自id3v2
)写入文件。这解决了挑战!
注意:
调用lame_get_lametag_frame
后会调用lame_encode_flush
,因此您必须回到id3v2
标记的末尾才能编写lametag
。