c++ - 用 LAME 编码的 MP3 的长度

标签 c++ mp3 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 不是!

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

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

最佳答案

了解到我必须在 id3v2 标记之后立即将 lametag(从 lame_get_lametag_frame 获取)写入文件。这解决了挑战!

注意: lame_get_lametag_frame是在调用lame_encode_flush之后调用的,所以要找回id3v2标签的末尾写入lametag

关于c++ - 用 LAME 编码的 MP3 的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18493779/

相关文章:

audio - 更改 lameDS-3.99.5 DirectShow 过滤器的默认比特率

c++ - 当不是最后加载的纹理时,纹理会显得模糊

linux - "Install"在只有 FTP 访问的 linux 服务器上很差劲

php - C++ 输出未在 PHP 中显示

javascript - 在setInterval上播放声音

c++ - 使用 mciSendString (MCIERR_CANNOT_LOAD_DRIVER) 播放 mp3 文件

php - 如何按内容存储和搜索 mp3

c# - 如何在我的应用程序中使用 lame.exe?

c++ - COleDateTime 模糊符号

c++ - 没有除了风格和性能的练习?