使用 LAME 编码的 MP3 的长度

问题描述 投票:0回答:2

我目前正在使用 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 没有!

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

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

c++ mp3 lame
2个回答
3
投票

了解到我必须在

lametag
标签之后立即将
lame_get_lametag_frame
(从
id3v2
获取)写入文件。这解决了挑战!

注意:

lame_get_lametag_frame
是在调用
lame_encode_flush
之后调用的,所以你必须回去找
id3v2
标签的末尾来写入
lametag


0
投票

令人惊讶的是这个问题仍然发生!

© www.soinside.com 2019 - 2024. All rights reserved.