LAME应用教学--HIFI级MP3制作之路

news/2024/11/18 0:34:53/
HIFI级MP3?可能吗?LAME又是什么?看完全文就会知道,不过,在此之前,还是先普及一下MP3基本知识,不然大家或许会不明白。

一、MP3家史
  mp3全名是mpeg audio layer iii,诞生于1987年,创始者是设在德国爱尔蓝根市的一个音频研究机构fraunhofer iis。设计目标是利用人类听觉上某些方面的知觉不足(注意,这可是重点),开发一种高音质(cd音质)、低流量(320k以内)的数码压缩格式。大约在3年后也就是1990年,在德国申请获得该技术专利,又3年后国际标准组织(iso)也接受这项技术,mp3从此成为mpeg标准一部分。因mp3在当时技术上优越性及高度开放性和免费性(最近fraunhofer iis已开始对使用其压缩算法软件收费),各式各样mp3编码软件和播放软件开始在互联网流传,xxx.mp3音乐从此铺天盖地而来。mp3历史就这样。


  做MP3,几年来试用好几十种MP3压缩软件,发现不同压缩软件压出的MP3音质听起来相差很大。抱着为什么会这样的疑问去查讯了一些MP3技术资料,才明白,原来MP3只是一个音频数码格式规范,这个规范对压缩过程中所使用的心理音响模型模式、哈夫曼运算法、流量分配等都没做硬性规定。单靠规范是不能做出MP3的,因有如此高开放性,在这个规范下开发的各种MP3编码器一下就有了几十种,压出来的文件都是MP3,也都能用同样播放器播放,但因不同编码器采用遮罩频率,哈夫曼运算法、心理音响模型参数、及绝对听觉底限等都不相同,所以最后得到的MP3音质就大不一样。


二、LAME美妙在何处?


  在知道LAME前几乎试用过所有MP3编码器,其中音质最好当属MP3规范制定者Fraunhofer IIS小组开发的Fraunhofer IIS Mpeg Lyaer3编码器,这个编码器在CBR(静态流量编码)上特别是128Kbps上表现是无与伦比的(比LAME还好),可惜其不支持VBR(动态流量编码),流量最高也只能到上256Kbps,所以在最高质量比拼下不如LAME,且最新版又已开始收费,只好对其敬而远之。除它以外其它编码器都不怎么样,表现十分平庸。特别是解霸,抓CD和压MP3性能都极烂,抓CD是不顾一切的抓下了事,根本不做任何修正,而压出来的MP3不管是128K的还是320K的,都一样高频损失特别严重,有削顶失真,低频也让人感觉含糊不清。可是就是这样的软件,还能成为国人最常用MP3压缩软件,MP3高音质名声都给败坏了。直到使用短歌行推荐的Lame压缩引擎,才发现MP3音质同样可达很高标准。LAME把原来MP3给的音色尖锐,空间狭窄,低音模糊,以及细节不够等印象一扫而光,取而代之极其纯正的CD音质,特别用高质VBR编码的MP3已根本听不出和原CD区别了,设备不赖,SBlive!+极典PA60功放+短歌行朝露音箱。


  LAME不但将VBR编码发挥淋漓尽致,且还针对CBR编码模式落后和VBR生成文件大小不定的缺点而独创了ABR编码模式。ABR可在指定文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,(ABR和CBR的私生子)这样音质得到最大程度保护。LAME对波形分析也有着相当高的研究。这些都还不算LAME全部优点,毕竟VBR最早在XING上面就实现了,其能在诸多编码器中笑傲群雄最主要靠的是自家独门的心理音响模型。早期LAME应用ISO编码技术,但现在使用心理音响模型(LAME将其称作GPSYCHO)已完全独力开发,与其它公司技术没任何关系。最重要一点,是免费软件。

三、抓轨的要旨


  首先得把要压缩成MP3的CD抓取下来存为WAV,怎样把CD高质量的抓取成WAV是一件很复杂也很麻烦的事,在这里不可能把原理阐述清楚,只能简单谈谈经验。能否抓取高质量WAV最主要取决于3个因素,既CD盘片质量、光驱的抓音轨性能和抓音轨软件。关于盘片质量,若是Z版CD自不用说,当然很好,而D版就难说。光驱也是一个不大不小问题,现在市面上主流光驱动则40-50倍速,对没有Jitter Correction(光驱对抓CD的硬件修正能力,中国市场上销售光驱基本都没有这项能力)能力光驱来说,抓取速度越快,得到不正确资料和产生爆音的可能性越大,一些低速日产光驱(原装日产光驱一般带Jitter Correction功能)抓取CD时倒表现异常出色。

K*{
  不过也大可不必为china或taiwan光驱担心,因硬件不提供功能可由软件提供,eac、cdex、windac、cd-copy、cd-extracting等软件都提供了软件jitter correction功能。特别是eac,非常专业的抓取cd和复制cd软件,设置得当可做到完全无损(强烈推荐),其也可配合lame使用,最新版是0.9probeta9版。eac选项很多,只为抓cd,不用去管那些复杂的设置选项,只需勾选drive options -> secure modes -> drive has'accurate stream'feature选项就够,如不放心还可在决定抓取时按f6键,这样eac就会把同一音轨抓取两次并比较得到资料是否有差别,从而得到更准确的wav文件。

四、压缩编码参数


  有wav就可开始压缩mp3,3.87版lame分dll和exe版。dll版不能直接执行,是提供给一些抓cd软件做外挂mp3编码程序,这样lame的压缩过程会简单很多(不推荐用dll版,exe版一样可提供给lame的shell做mp3外挂程序)。而可直接执行的exe版是最常用且编码质量略好于dll版,所以这里重点介绍。lame.exe是一个command line模式程序,必需在windows的msdos下运行,直接执行并不方便,下一次指令只能够压缩一个mp3,且因其演算法十分复杂,使压缩速度较慢,如想对设置有所改变的话也只能靠在执行命令后加不同参数实现。lame参数有好几十个之多,下面把最常用参数给简单介绍一下。


  LAME 基本命令行格式: lame [参数选项] <输入文件名> [<输出文件名>]


  1.cbr编码时的基本参数


  CBR是最常用MP3编码方式,其编码流量可在32kbps-320kbps中选择。一般来说,过去压MP3最常用128kbps,但以128k编码MP3流量实在是太小,不足以保留高质量声音,用来放随身听也许还不错,电脑上听就不怎么样。所以,如想做HIFI水准MP3,不推荐用CBR模式,除非用320Kbps(最高质量MP3)


  [-b] 指定编码流量。可使用的流量如下:
  32 40 48 56 64 80 96 112 128 160 192 224 256 320 ,
  不管用哪种流量大小,为节省空间,LAME被判断为静音部分,会自动采用最小流量。


  [-h] 高品质编码模式,启动某些可增进品质的运算,但会降低一些速度(建议使用)。这个选项在 VBR 压缩模式中是预设开启的。


  [-f] 快速编码模式,但会降低品质(预设)。用这个参数后,LAME编码质量就和一般编码器差不多,但相应编码速度要快不少,做MP3网站的朋友也许需要用到这个参数。


  [-q] 指定频率资料量化时的精确度,范围也是为0-9,和前面的[-V]参数一样,数字越低质量越好。 z
推荐cbr编码最佳质量命令行:lame.exe -b320 -h -q0


  2.vbr编码时的基本参数


  VBR编码是LAME做的最好的一部分,可提供最佳音质/流量比,最强烈推荐!一般来说,用最佳VBR编码时,平均流量在210kbps左右。


  [-V] 指定VBR的压缩品质,范围为0-9(数字越小品质越高),预设值为4。


  [-b] 指定流量变动的下限,预设为32Kbps。


  [-B] 指定流量变动的上限,预设为320Kbps。


  [-q] 见CBR编码参数 N4!Xf


推荐vbr编码最佳质量命令行:lame.exe -v0 -q0


  3.abr编码时的基本参数


  前面提过,ABR是LAME独有的编码方式,可提供和CBR一样大小但音质更好,因是使用先进VBR编码方式来压缩CBR。ABR和CBR一样,可指定平均流量大小。


  [--abr] 不指定品质,而指定想要的平均流量,LAME就会像编码VBR一样自动在不同时候使用不同的流量大小,但会把最终文件大小保持到你指定大小,流量许可范围是8-320,可使用这个范围内任一整数。


  [-b] 见VBR编码参数


  [-B] 见VBR编码参数。


  不建议使用该参数,因ABR和CBR一样,可使用“Bit Reservoir”功能,一个CBR编码128KbpsMP3,在某些时段可使用到320Kbps压缩。而VBR并不使用“Bit Reservoir”,因此需允许使用320Kbps流量上限才能达到与CBR相同弹性。(“Bit Reservoir”,这是一个MP3压缩规范中功能,主要是在CBR编码和ABR编码中发挥作用。原理是:如压缩程序在压缩某段资料时,认为不必要使用指定流量时(例如指定256Kbps而压缩程序认为此时使用192Kbps就够),压缩程序就会把多出来的流量(在前面那个例子中就是256Kbps-192Kbps=64Kbps)放到 "Bit Reservoir" 中储存起来。若当后面某段资料是大动态部分,指定流量大小不足以满足压缩需要时,就可从“Bit Reservoir”中提取储存流量出来使用,使流量超过原本指定大小限制。


  [-h] 见CBR编码参数


  [-q] 见VBR编码参数


推荐abr编码最佳质量命令行:lame.exe --abr 320 -h -q0


  4、此外还有一些共通的参数:


  [-m] 立体声压缩模式,分别有 [-ms] Stereo [-mj] Joint Stereo [-mf] Force ms_stereo [-mm] Mono


当使用VBR编码并把品质设为4-9和使用CBR编码流量小于160 Kbps时,预设为Joint Stereo。其余时候预设为 Stereo。


  Stereo: 单纯双声道立体声模式,在此种压缩模式中,LAME 将不会计算双声道之间的资料相关性,但会协调分配双声道的资料流量,自动分配较多流量给复杂的声道使用。
  Joint Stereo: 当压缩立体声文件时,LAME还会利用左右声道间可能出现的冗余来压缩。大部分立体声录音左右声道都很相似,使用联合立体声编码可大大减小文件体积。这意味着在保持完美立体声效果同时,文件体积可变更小。(话虽如此,但不建议使用此参数,不为什么,就因听起来不如-ms好,但若无需太好品质和想要更小体积,倒可加上此参数)
  Force: 强迫所有 frame 全部使用 M/S Joint Stereo 编码,速度可增快很多,但不建议使用。 qW"l`
  Mono: 单声道编码模式。


  [-t] 将LAME编码的MP3解码成Wav文件。


  [-k] 保留所有频率。


  LAME在编码时,为了把资料流量保留给最重要的频段,提高压缩出来的品质,LAME会自动随著所选用的流量指定高低通滤波器的数值。一般来说,小于196kbps的MP3充分应用听觉遮罩原理而截除一些16000HZ以上不敏感频率(不会听出什么不同,因为听觉遮罩在此时会发挥作用。简单来说,人耳听不到与同频率较强音频信号一道的较弱音频信号。这种现象通常称作听觉遮罩,较强信号盖住较弱信号。LAME在压缩时,首先分析一个声音文件频谱,然后把它分成一系列频带。频带中较弱信号被区分开来并被量化,以减小用来替代原音频文件数据大小。因被量化的那些频带位于同频率范围较强信号“阴影”下,所以量化过程中产生的噪声并不会被人耳察觉。看起来很复杂,举个简单例子,在家里也许能听到钢针掉到地上声音,但如是在汽车或火车上,还能听到吗?一定会说是汽车声把针掉地上声音掩盖了,这就是听觉遮罩原理体现)。如是完美主义者,需保留所有频率,就可加这个参数来实现。但注意!如所设定流量大小不足以保留全部频率,可能会造成无法预料鸣响及失真,请小心使用!


  比较重要的LAME参数就上面这些,当然LAME不止这几个参数,在短歌行有一篇LAME使用/参数说明表,上面有所有LAME参数介绍,可去一看。

五、外壳应用


  是不是好复杂?没关系,如不想用这些并不方便的dos命令,就用lame的shell程序(第三方外壳程序)好了,shell程序就是为一些不满用dll版做抓cd软件的mp3外挂程序做出来的mp3质量而开发的可用exe版做外挂的软件。lame的shell程序有三个,分别是lamer1.0版、razorlame1.1版、及winlamer1.1版。三个软件大同小异,用过后感觉winlamer和razorlame好用一些,下面具体谈这两个shell程序使用。 S


  razorlame界面简单明了,方便使用,要设定地方并不多;在 options -> general 中,指定 lame.exe的位置,然后就可在其他页面调节各种压缩参数。如想试试一些实验性(尚未正式公布)的参数,或懒得慢慢检查每一页设定,可直接在 options -> advanced 中把写好的参数填入 custom options 中,并选取 only use custom options 即可。options -> advanced 里面,有一个 delete source file after encoding 的选项,选取之后,编码完成的wav文件会被自动删除,很是方便。需注意一点,在options -> audio processing中的output sampling frequency输出频率选项中一定要选定44.1khz,否则razorlame就会以32khz来输出从而使音质劣化。


  至于winlamer,和razorlame相比除界面有所不同外,操作大同小异。在主界面中打开add wav fiile选定需要压缩的wav文件后再选择lame‘!!就可压缩。settings菜单中,各种设置选项一目了然,和razorlame一样首先需要在location of lame.exe中指定 lame.exe的位置。下面选项分别的bitrate - cbr编码时的流量选择(32-320),output - 立体声压缩模式选择(建议设为stereo)。右面的secondary settings就是对具体的品质做设置了,建议只勾选improved quality(改良的压缩品质)和下面的psycho acoustics(lame的心理音响模型)这两项。压缩vbr和abr的选项在下面的variable bitrate settings中。其中设置可结合上面lame参数表选择。


六、随想


  LAME具体应用也就写的差不多了,谈谈使用LAME后一些感受。数码技术一日千里,发展极为迅速。作为在上个世纪80年代诞生的MP3,面对诸多21世纪新数码格式如WMA,VQF,AAC(MP3法定继承人),OGG等,依然能靠自身技术更新在技术和市场上广泛领先。如今MP3在互联网和随身听上广泛应用,使人不得不对它明天看好。在PCHOME和ITPOWER,很多MD玩家一说到MP3就是垃圾音质,非常片面,在没有对一件事物完整了解前对它做出完全否定,是井底之蛙。其实如真的要比压缩格式优劣,MD所用ATRAC比不过MP3,MD只不过是因MD碟片容量大,回放质量好,实现最佳质量容易而领先MP3随身听。假如市面上出现SONY等随身听老厂出品以8CM光盘为载体可刻录MP3随身听,那MD优势就大打折扣,从技术上说,实现这样MP3随身听不难,就看有厂商会不会那么做。至于LAME,到现在为止还在不停修正和推出新版(LAME是由一大票业余软件者合作开发),倒底能做到怎样程度,让人期待。


  赶快去体验LAME带来的这场MP3革命!
  

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

相关文章

学画画软件app推荐_画画自学app推荐

极典画室从几个方面整理了不同用处的学画画APP&#xff0c;希望可以帮到你。 学习APP bilibili哔哩哔哩/B站 B站很多绘画up主会上传很多视频&#xff0c;有绘画录播&#xff0c;也有很多教程&#xff0c;其中不乏很多大佬的教程还有国外大佬的教程。虽然有一些视频是用于招生的…

梁储定郊外,为官正派-太子少保南京吏部尚书记

梁储&#xff08;1453-1527年&#xff09;字叔厚&#xff0c;又字藏用&#xff0c;号厚斋&#xff0c;晚号郁洲&#xff0c;石肯&#xff08;1952年划归南海县&#xff09;人。明成化十四年&#xff08;1478年&#xff09;进士&#xff0c;选庶吉士。由翰林编修累官至吏部尚书、…

缓存雪崩和缓存穿透的解决方案

缓存雪崩 缓存雪崩是指存储在缓存里面的大量数据&#xff0c;在同一时刻全部过期&#xff0c;大部分流量直接到达了数据库&#xff0c;导致数据库压力增加&#xff0c;造成数据库崩溃的情况。 缓存雪崩的解决方案如下&#xff1a; 每个缓存的key设置不同的过期时间采用多级缓…

网络之socket套接字-基础知识

文章目录 前言一、IP与端口号1.IP2.端口号3.我们之前讲过&#xff0c;可以用进程pid来标识一个进程&#xff0c;那么为什么还要有端口号port呢&#xff1f;4.底层OS如何根据port找到进程&#xff1f; 二、TCP/UDP协议1.TCP协议特点2.UDP协议特点 三、网络字节流1.大端和小端数据…

word2013安装mathtype7错误‘53‘的解决办法

安装包来源&#xff1a;淘宝&#xff08;发密钥&#xff0c;一开始拿破解版装了半天没装上&#xff0c;以为是安装包的问题&#xff0c;去淘宝买了一个月试用&#xff0c;结果发现还是会出现同样的问题&#xff0c;但是在金钱的压力下不得不开始倒腾&#xff0c;不然六块大洋打…

el-table渲染二级对象数组

1、序言 项目地址如下&#xff1a;https://gitee.com/liu-wenxin/complexELTable.git 想要渲染这样的数据&#xff1a; el-table官网给的例子都是一级对象数组&#xff0c;如果想要渲染二级对象数组&#xff0c;直接 :table tableData 这样el-table渲染是不成功的&am…

TopView工作室实录

TopView工作室实录 笔试 2021年3月19日晚上7点半到9点&#xff0c;进行了笔试&#xff0c;主要还是以c语言为主考了&#xff1a; 链表的删除&#xff0c;没有学到&#xff0c;不会用html的结构&#xff0c;太细节了&#xff0c;不太记得了 总的来说这次的笔试还是挺失败的吧…

记录RecyclerView滚动位置并恢复

//监听RecyclerView滚动状态 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);if(recyclerView.getLayou…