mp3 lsf扩展

news/2024/11/30 2:50:02/

今天在处理一个mp3的文件播放问题的时候,用ffmpeg把mp3的采样率重采样为16000,发现frame samples变成了576,看了下平时没有注意这个细节,一直都是习惯了1152个采样率的MP3,原来576属于MP3的LSF扩展。

LSF(low sample frequency) extension


MP3 LSF是一种特殊的MP3编码方式,它使用更低的采样率来压缩音频数据,从而减小文件大小。通常,MP3 LSF的采样率为8 kHz或16 kHz,而标准MP3的采样率为44.1 kHz或48 kHz。这种编码方式主要用于低码率的音频传输,例如电话会议、语音邮件等。

MP3的低采样频率(LSF)扩展是一种用于压缩低比特率音频的技术。它可以在16 kHz以下的采样频率下工作,而标准的MP3只能在32 kHz以上工作。LSF扩展可以提高音质和压缩效率,适用于语音和低保真音乐。

MP3 (LSF) extension的标准是指MPEG-2音频标准(ISO/IEC 13818-3)中引入的一种扩展,它可以支持低于32 kHz的采样率,比如16 kHz和22.05 kHz。这种扩展是在MPEG-1 Layer III(也就是MP3)的基础上进行的修改,它并没有改变MP3编码过程中其他参数和算法,只是改变了采样率和相应的滤波器系数。

LSF的帧大小是576个采样


MP3的粒度大小是由采样率决定的。采样率越高,粒度越小,反之亦然。不同层次(Layer)的MP3有不同的粒度大小。Layer I和Layer II的粒度大小是固定的,每个粒度包含384个采样点。Layer III的粒度大小是可变的,每个粒度可以包含576或1152个采样点。

LSF extension并没有改变MP3编码过程中其他参数和算法,只是改变了采样率和相应的滤波器系数。但是,这种改变也会影响到粒度大小。因为LSF extension使用了低于32 kHz的采样率,所以它只能使用576个采样点作为一个粒度,而不能使用1152个采样点。

下面是计算处理MPEG音频帧大小的部分代码:

// Samples per frame - use [version][layer]
const uint16_t mpeg_frame_samples[4][4] = {
//    Rsvd     3     2     1  < Layer  v Version{    0,  576, 1152,  384 }, //       2.5{    0,    0,    0,    0 }, //       Reserved{    0,  576, 1152,  384 }, //       2{    0, 1152, 1152,  384 }  //       1
};

ffmpeg中mpeg audio部分对framesize的计算:

    switch(s->layer) {case 1:s->avctx->frame_size = 384;nb_frames = mp_decode_layer1(s);break;case 2:s->avctx->frame_size = 1152;nb_frames = mp_decode_layer2(s);break;case 3:s->avctx->frame_size = s->lsf ? 576 : 1152;default:nb_frames = mp_decode_layer3(s);// ...}

http://www.ppmy.cn/news/726097.html

相关文章

手动分割数组 mybatisPlus 大量插入

public void pmsCount(String date) {if (CollectionUtil.isNotEmpty(addCountVOS)) {List<List<CountVO>> addLists subToList(addCountVOS);//addCountVOS 为大数组for (List<CountVO> toInsertC : addLists) {pmsCountMapper.batchInsertOrderCount(toIn…

运行python文件时出错SyntaxError: Non-UTF-8 code starting with '\xb5' in file, but no encoding declared;...

今天ytkah在运行python文件时出现错误&#xff0c;提示如下&#xff0c;很明显这是没有定义python文件编码引起的问题&#xff0c;那么要怎么解决呢&#xff1f;很简单&#xff0c;在文件头部定义一下就可以了。 File "hello.py", line 6 SyntaxError: Non-UTF-8 cod…

python 报错 'gbk' codec can't encode character '\xb5' in position 7431: illegal multib

将代码放在cmd中执行时&#xff0c;报错 ‘gbk’ codec can’t encode character ‘\xb5’ in position 7431: illegal multib 原因&#xff1a;在windows下面&#xff0c;新文件的默认编码是gbk&#xff0c;这样的话&#xff0c;python解释器会用gbk编码去解析我们的网络数据…

SyntaxError: Non-UTF-8 code starting with '\xb5' in file“问题解决办法

最近学习深度学习的时候&#xff0c;遇到如下问题 SyntaxError: Non-UTF-8 code starting with \xb5 in file /Users/qianjiangang/Desktop/stock 2/stock/run_RL.py on line 6, but no encoding declared; see http://py解决办法&#xff1a; 在开头加 #codinggbk

SyntaxError: Non-UTF-8 code starting with ‘\xb5‘ in file问题如何解决???求助求助!!!

SyntaxError: Non-UTF-8 code starting with \xb5 in file E:\Geany\python1示例样品.py on line 2,but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details问题如何解决&#xff1f;&#xff1f;&#xff1f;&#xff1f; 编码问题而已&#xff0c…

python爬虫中遇到“\xb5”、“xa0”等字符时报错编码错误的处理方式

写python爬虫是遇到编码错误 报错为&#xff1a; UnicodeEncodeError: gbk codec cant encode character \xa0 经过多方查找发现 \xa0是html网页源码中的空格 解决方法 替换掉字符 &#xff1a;replace(u\xa0, u ) 下面是一些html中的常见符号 chr HexCode Numeri…

python \xe6\xb5解码

python中文decode&#xff0c;类似\xe6\xb5等 utf-8编码gbk编码总结 utf-8编码 data “python中文测试” utf-8编码之后&#xff1a; data_utf8 data.encode(“utf-8”) gbk编码 data “python中文测试” gbk编码之后&#xff1a; data_gbk data.encode(“gbk”) 总…

com_error: (-2147221008, '\xc9\xd0\xce\xb4\xb5\xf7\xd3\xc3 CoInitialize\xa1\

使用多线程编程&#xff0c;且需要调用win32com模块时&#xff0c;常见的错误如下 com_error: (-2147221008, \xc9\xd0\xce\xb4\xb5\xf7\xd3\xc3 CoInitialize\xa1\xa3, None, None) 将第二行error中的第二项&#xff0c;打印出来是&#xff1a;“尚未调用 CoInitialize”&…