找回密码
 注♥册
搜索

[凡高的牢骚] 对MP3编码的一些常见的认识误区

[复制链接]
入库单 发表于 2006-5-18 23:02:56 | 显示全部楼层 |阅读模式
LAME 4.0出来了,据说编码速度加快了但是结果音质上没有明显区别。

然后这个文……

  笔者是一个音乐下载狂人,平时出入各大音乐下载站点之余,发现很多人对MP3编码有一些认识上的误区。而对于发布者来说,这些认识上的错误很可能就会影响他们发布的音乐的质量。这是对音质有所追求的笔者所不愿看到的。所以,笔者很自私的想要来纠正这些错误,好让自己可以下载到更好的MP3。

  常见的一些认识错误如下:


1.320kbps VBR

  很多人在发布歌曲时常常说是“xxxK VBR”,让人不知所云——到底是用什么参数压的?
MP3的VBR模式不是用Bitrate来区分质量的(大多数音频格式的VBR模式同样如此),只有CBR和ABR模式才能说是xxxkbps的。当然,一首用VBR MP3压制的歌曲会有一个平均Bitrate,所以对于单首VBR的MP3歌曲你可以说是平均xxxkbps的,但如果说某张专辑是xxxK VBR压制绝对是错误的。因为即使用同一组VBR参数压制,一张专辑里面不同歌曲的平均Bitrate是不同的(有的还相差很大)。
另外,不要把ABR和VBR等同起来。尽管ABR算是VBR的一个分支,但ABR和VBR的差别还是很大的。同一首歌用VBR模式压制后平均Bitrate是200kbps跟你用200kbps ABR来压制的MP3在Foobar里播放,通过Foobar2000的实时Bitrate显示,你会发现ABR的波动范围远远比VBR要小很多。从这点上看,ABR的音质应该更接近相同Bitrate的CBR而不是VBR。


2.Join-Stereo不如Stereo好,Stereo才是真正的立体声。

  简单的说,你可以理解成:在Join-Stereo模式下,编码器会计算声道L和R(左和右)中的相同部分,将其合并成另一个L+R声道,原来的L和R声道只保留不同的部分。解码时,再将L+R声道分别和L和R混合,得到编码前的L和R。理论上,只要计算两个声道相同部分的算法没有失误,那Join-Stereo跟Stereo模式对立体声的还原应该是没有分别的。实际上,目前最常用的Lame在这点上已经做得很完美了。

  另一方面,由于在在Join-Stereo模式下,原来L和R重复记录的那部分现在只记录一次,Bitrate的利用率提高了,带来的好处自然就是在使用CBR时音质提升(因为合并L和R相同部分后节省出了一部分Bitrate,这部分Bitrate会用来记录其他部分,所以音质提升了,这在低Bitrate下效果尤为明显),使用VBR时则能减小文件体积(因为VBR可以说是固定质量,所以节省出来那部分Bitrate将直接被抛弃而不是用来提高音质,所以会使总的Bitrate变小,同时音质不变)。


3.关于Lame的预设参数,“--alt-preset insane”的频率不如“-b 320 -m j -h”这一组参数延伸
 得高,所以“-b 320 -m j -h”的音质应该更高。

  出现这样的认识也难怪,目前已有的比较音频编码格式优劣的文章中,大多数都将频谱对比作为重点,尽管基本上都指出了频谱对比只是作为参考,但结果还是误导了一大批人,出现了很多专靠频谱判断音质的“高手”。要知道,对于像APE这样的无损压缩格式来说,通过查看频谱来判断音质确实是管用的,但对于有损编码而言就不一定了。

  我们知道,有损编码在编码过程中会有选择的丢弃一些信息,这些信息既有可能是某些声音细节,也有可能是某一段不易被人耳感知的频率范围。想想看为什么128kbps的MP3砍掉了那么大的高频范围呢。因为如果强行让128kbps的MP3覆盖到20000Hz以上的频率,那样的话,本来已经少得可怜得数据流量将被过大的频率覆盖范围严重稀释,这样的MP3除了频谱看起来很“美”,实际听的时候将会不堪入耳。

  举个例子。假设一首歌的频率覆盖范围是0~20000,现在按照每4000Hz为一个范围,把频率覆盖范围分成5等份。为了便于理解,我们假定320kbps的数据流量在在这5个等份里是均匀分布的,那么每一个频带可以分到320/5=64kbps的流量。那么现在我砍掉16000~20000这一个频带,只剩下4个频带,每个就可以分到320/4=80kbps的流量。相对于64kbps,用80kbps来记录同样的音频保留的细节肯定会更多。这个例子说明,有损编码在同一bitrate的前提下,砍掉一部分频率范围可以提高其他频率范围的数据密度。对数字音频稍有了解的人都知道,无论是更大的频率覆盖范围还是更大的数据密度都对提高音质有正面作用。问题是在有限的Bitrate下,这两者的关系是成反比的,要想有很高的数据密度就要牺牲掉一部分频率范围,要想覆盖更多的频率数据密度就会比较稀薄。即使在320kbps的高Bitrate下也不能完全满足两方面的需求,必须要有所取舍。那么到底是数据密度重要还是频率范围重要呢,答案是都重要。这其实是一个效用最大化的问题。就好比拿1000元钱给一台1G CPU、128M内存的电脑升级,简单的把这1000元只花到CPU或者只花到内存上的方案获得的性能提升是不大的,绝对远远比不上把内存升到512M然后再拿剩下的钱升级CPU的方案。同理,要想在有限的Bitrate下尽量取得好的音质,只考虑频率范围或者数据密度都是不行的,必须在两者之间找到一个平衡点。

  现在我们回到"--alt-preset insane"和"-b 320 -m j -h"这两个参数上来。从频谱上来看,"--alt-preset insane"的频率覆盖刚好截止在20000Hz(如图01),而"-b 320 -m j -h"则在20000Hz以上还有延伸(如图02)。







  那么到底是哪个参数能在两者之间找到更好的平衡,得到更好得音质呢?我趋向于前者。从3.90版本开始,Lame开始提供像"--alt-preset insane"这样的以"--alt-preset"开头的一系列参数,称为预设参数(可以通过命令行"lame --preset help"来查看)。在Lame的相关文档中,开发者指出:这些预设参数是以高音质为目标,经过了大量的听音测试后精心设计的。从技术上讲,由于人耳对20000Hz以上的频率几乎是听不到的,将这部分砍掉,把节省出来的数据流量用来加强人耳比较敏感的中低频的记录,是有可能提升音质的。所以,除非你明显的感觉到自己组合的参数能得到比预设数更好的音质,否则,考虑到Lame开发一贯的严谨,我推荐你选"--alt-preset insane"。

  对于一些其他参数的类似争议,比如“--alt-preset extreme”和“-v 0”,可以把上面讲的作为参考。


┏━━━━━━━━━━━━━━━┓
┃凡戈原创  转载请保留作者名称  ┃
┗━━━━━━━━━━━━━━━┛
回复

使用道具 举报

soapy 发表于 2006-5-19 14:09:32 | 显示全部楼层
支持无损压缩,不喜欢MP3
回复

使用道具 举报

西门鸡翼 发表于 2006-5-19 15:04:40 | 显示全部楼层
TTA和WAVEPACK比APE好。
回复

使用道具 举报

soapy 发表于 2006-5-19 15:22:48 | 显示全部楼层
解压成WAV后刻成CD听都差不多的,但SHN和WV文件直接在电脑上播放,似乎的确比APE要好听一些
TTA是啥,没听说过啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注♥册

本版积分规则

Archiver|手机版|小黑屋|[豁達乱拜]❤

GMT+8, 2024-11-23 21:46

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表