如何在不重新编码的情况下剪切 MP3?我应该只复制框架吗?

Posted

技术标签:

【中文标题】如何在不重新编码的情况下剪切 MP3?我应该只复制框架吗?【英文标题】:How to cut MP3 without re-encoding? Should i just copy the frames? 【发布时间】:2012-04-20 16:28:03 【问题描述】:

我需要实现一个功能,该功能可以通过 TCP/IP 传输大型 mp3 文件的一部分,这种方式允许用户在没有整个文件的情况下收听每个部分(使用 libmpg123)。我希望允许用户在不重新编码流的情况下传输尽可能小的部分。我想忘记重新编码,因为我不希望每次传输都会降低音质。每次我想剪切 mp3 时,我确实有样本中的分割坐标:“从什么样本到什么样本”,所以每次我都应该将其转换为 mp3 帧的 ID。所以我的问题是:

每个 mp3 帧是否有足够的信息(bps/samplerate/bits-per-sample/channels)来播放它而无需完整的 mp3 文件头,只需将它们提供给 mp3 解码器? 是否有任何 BSD/MIT 许可的小型库可以用作 mp3 拆分器,使用样本坐标并支持 VBR?

【问题讨论】:

MP3 文件没有标题。文件中每一帧的属性都可能不同。 【参考方案1】:

你可以只剪切二进制文件! 此解决方案的唯一问题...标签问题

或者试试这个:http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header

【讨论】:

【参考方案2】:

每个 mp3 帧都是独立的,可以独立存在。所以你不必担心。

【讨论】:

好吧,帧可以有不同的比特率,但是热的不同的采样率,对吧?那么关于采样率的信息在哪里?在 MP3 标题中还是在每一帧中?如果解码器遇到 22050 的 1 帧和 44010 的第二帧怎么办? 不幸的是,由于称为位(或字节)存储库的特性,帧并不总是独立的:“在最坏的情况下,可能需要 9 个输入帧才能解码单个帧。”来源:mp3-tech.org/programmer/frame_header.html

以上是关于如何在不重新编码的情况下剪切 MP3?我应该只复制框架吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新加载的情况下提交表单? [复制]

如何在不重新编译的情况下配置我的 C# 项目? [复制]

使用MP3 Cutter Joiner在Mac上剪切和加入mp3文件?

Gstreamer:如何在不重新编码的情况下将 rtpvp8depay 导入 webmmux?

在不使用库的情况下播放 MP3/WAV 文件?

如何在不重新加载页面的情况下更改内容? [复制]