MPlayer的音频接口称为libao2。它目前包含这些驱动:
/dev/audio
)Linux下的声卡驱动有兼容问题。这是因为MPlayer使用一个正确编码的声卡驱动内建的特性来实现音频/视频同步。遗憾的是有些驱动的作者 不在乎这个功能,它在播放MP3和实现声音效果时并不需要。
别的媒体播放器比如aviplay或者xine可能在这些驱动上工作没有问题因为他们使用内部计时器的“简单”方法。 测试表明他们的方法没有MPlayer的方法有效率。
使用一个正确编制的音频驱动的时候MPlayer将永远不会产生音频相关的A/V不同步,除非你的文件制作的相当糟糕。(man page里面有解决的办法)。
如果你碰巧遇到一个不好的音频驱动,尝试使用-autosync
选项,它应该可以解决你的问题。详细的信息参见man page。
一些提示:
-ao oss
(这是默认的)。如果你遇到毛刺,停止或者任何不正常的事情,
尝试-ao sdl
(注意:你需要安装SDL库和头文件)。许多情况下SDL的音频驱动都会有帮助,也支持ESD(GNOME),ARTS(KDE)。-ao alsa5
,因为ALSA 0.5的OSS仿真很buggy,
会导致MPlayer崩溃并出现这样的信息:DEMUXER: Too many (945 in 8390980 bytes) video packets in the buffer!
-ao sun
选项选择使用SUN的音频驱动,否则视频音频都无法工作。hdparm -u1 /dev/cdrom
(man hdparm
)。这
一般来说时有益的,进一步的描述在CD-ROM部分。Linux下的声卡驱动主要是自由版本的OSS。这些驱动在2.5的开发树中已经被ALSA(Advanced Linux Sound Architecture)取代,如果你的发行版中还没有使用ALSA,而你的声卡又有问题你可能应该试试。ALSA的驱动一般来说,在 兼容性,表现和特性方面都比OSS要好,但也有些声卡只有4Front Technologies的商业版本的 OSS驱动才支持,他们也支持一些非Linux系统。
声卡 | 驱动 | 最大kHz | 最大声道数 | 最大打开数 | |||
---|---|---|---|---|---|---|---|
OSS/Free | ALSA | OSS/Pro | 其他 | ||||
VIA板载芯片(via82cxxx)只能48kHz | via82cxxx_audio | snd-via82xx | 4-48 kHz或者只能使用48 kHz,取决于芯片 | ||||
Aureal Vortex 2 | 没有 | 没有 | OK | Linux Aureal Drivers 缓冲大小增加到32k |
48 | 4.1 | 5+ |
SB Live! | 模拟方式OK,SP与DIF不能工作 | 都OK | 都OK | Creative的OSS驱动(支持SP/DIF) | 192 | 4.0/5.1 | 32 |
SB 128 PCI(es1371) | OK | ? | 48 | 立体声 | 2 | ||
SB AWE 64 | 最大44kHz | 48kHz听起来很糟 | 48 | ||||
GUS PnP | 没有 | OK | OK | 48 | |||
Gravis UltraSound ACE | 不OK | OK | 44 | ||||
Gravis UltraSound MAX | OK | OK (?) | 48 | ||||
ESS 688 | OK | OK(?) | 48 | ||||
C-Media声卡(哪一种?) | 不OK(有咝咝声)(?) | OK(?) | ? | ||||
Yamaha声卡(*ymf*) | 不OK(?)(可能应该用-ao sdl ) |
只有使用ALSA 0.5的OSS模拟并使用-ao sdl (!)(?)时OK |
? | ||||
使用envy24芯片的声卡(比如Terratec EWS88MT) | ? | ? | OK | ? | |||
PC扬声器或者DAC | OK (使用SDL驱动:-ao sdl ) |
none | Linux PC扬声器的OSS驱动 | 驱动可以模拟到44.1,可能更高。 | 单声道 | 1 |
对这个文件的反馈是受欢迎的。请告诉我们你的声卡是如何与MPlayer共同工作的。
老的音频插件被新的音频滤镜层取代了。音频滤镜用来在声音到达声卡之前改变声音数据的属性。激活和关闭滤镜通常是自动的但也可以强制。
当音频数据的属性与声卡要求的不同时就会激活滤镜,不需要时就会关闭。-af filter1,filter2,...
选项用来取代滤镜的默认行为
或者插入不能自动插入的滤镜。滤镜将按照它们在逗号分隔的列表中出现的顺序运行。
例如:
mplayer -af resample,pan movie.avi
声音将先通过resample滤镜然后通过pan滤镜。注意列表中不能包含任何空格,否则它将会失败。
滤镜通常有选项用来改变他们的行为。这些选项在下面的章节会详细的解释。当选项被省略是滤镜将执行默认的设置。这里是一个 使用带相应选项的滤镜的例子:
mplayer -af resample=11025,pan=1:0.5:0.5 -channels 1
-srate 11025 media.avi
将resample滤镜的输出频率设置为11025Hz并使用pan滤镜把音频混合到一个声道。
这个滤镜层的运行由-af-adv
选项控制。这个选项有两个子选项:
force
0
1
2
3
4
5
6
7
list
滤镜层同样会影响下面的一般选项:
-v
-channels
-srate
-format
MPlayer完全支持使用resample
插件进行声音的升/降采样率。当你使用固定采样率的声卡或者被只兼容
最大44.1kHz的老声卡郁闷时可以使用它。这个滤镜会在需要时自动开启,但它也可以用命令行显式的开启。他有三个选项:
srate <8000-192000>
sloppy
srate
给定的频率稍有不同。这个选项用于开始播放的过程非常慢的情况。
它是默认打开的。type <0-2>
0
到2
之间的整数用来决定使用那种重新采样的方式。0
重新采样方式为
代表线性插值算法,1
代表使用多相filter-bank和整数处理过程,2
代表使用多相filter-bank和浮点处理
过程。线性插值非常的会,但是声音质量很差特别是在升高采样率时。质量最好的时2
代表的重新采样方法,但CPU的
消耗最大。示例:
mplayer -af resample=44100:0:0
将resample滤镜的输出频率设定为44100Hz使用精确的输出频率缩放和线性插值算法。
channels
滤镜用来添加和去除声道,它也可以用来实现声道的定向与复制。当音频滤镜层的输出与输入层不同
或者当别的滤镜需要它是它将自动开启。当不需要是这个滤镜会自行卸载。选项的数目是可变的:
nch <1-6>
1
到6
间的整数用来设定输出的声道数。这个选项的必须的,不设置会导致运行时错误。nr <1-6>
1
到6
之间的整数用来指定定向的数量,这个选项是可选的,如果省略将使用默认的定向。from1:to1:from2:to2:from3:to3...
0
到5
之间的一对数定义每个声道被定向到哪里。如果只给定nch
将使用默认的定向,它是这样工作的:如果输出声道的数量大于输入声道的数量就插入空
声道(除了把单声道混合为立体声,此时单声道会输出到两个输出声道)。如果输出声道的数量比输入声道的数量少,多余
的声道将被删去。
示例1:
mplayer -af channels=4:4:0:1:1:0:2:2:3:3 media.avi
将输出声道设为4,并设定4个定向,把0声道和1声道互换,2,3声道保持原状。注意如果播放只有两个声道的媒体 2,3声道将没有声音,但0,1声道仍然会互换。
示例2:
mplayer -af channels=6:4:0:0:0:1:0:2:0:3 media.avi
将把声道数设为6,并设置4个定向,把0声道复制到0到3声道,4,5声道仍然没有声音。
format
滤镜在不同的采样格式之间转换,当声卡或其他滤镜需要是它会自动开启。
bps <number>
1
, 2
或者4
代表样本的字节数。这个选项是必须的,不设置会
导致运行时错误。f <format>
alaw
, mulaw
或者imaadpcm
,
float
或者int
, unsigned
或者signed
, le
或者be
(低位优先或高位优先)。这个选项是必须的,不设置会导致运行时错误。示例:
mplayer -af format=4:float media.avi
将把输出格式设置为每个样本4字节的浮点数据。
delay
滤镜延迟声音到达扬声器的时间使得不同的声道能同时到达听众的位置。这个功能只当你有两个以上的扬声器
才有用,这个滤镜的选项的数目是可变的:
d1:d2:d3...
计算不同声道需要的延迟的方法如下:
示例:
mplayer -af delay=10.5:10.5:0:0:7:0 media.avi
将左前和右前声道延迟10.5ms, 两个后声道和副声道不延迟,中间声道延迟7ms。
软件音量控制通过volume
音频滤镜实现,小心使用这个滤镜因为他会降低声音的信噪比。在大多数情况下最好是
把PCM音量开到最大,不使用这个滤镜而是通过混音器的主音量控制来控制你的扬声器的输出级别。如果你的声卡使用数字PCM混音器而不是
模拟的,而你又听到有扭曲现象,就改用主混音器。如果你的电脑连有外部放大器。(这几乎是普遍现象),可以通过调节主音量和放大器
上的音量旋钮直到背景的咝咝声消失来使噪音级别达到最小。这个滤镜有两个选项:
v <-200 - +60>
-200
到+60
之间的浮点数,代表音量大小,以分贝为单位,默认值是0分贝。c
示例:
mplayer -af volume=10.1:0 media.avi
将音量增加10.1分贝并在音量太高的时候进行硬修饰。
这个滤镜还有另一个特性:它检测总的最大音量并且会在MPlayer退出的时候显示出来。这个音量估计可以用来设定MEncoder 中的音量以利用最大的动态范围。
equalizer
滤镜描述一个有10个倍频带的图形均衡器,通过使用10个IIR通频带滤镜实现。这表示不管播放什么
样的音频它都会工作。10个带的中央频率分别为:
频带号 | 中央频率 |
0 | 31.25 Hz |
1 | 62.50 Hz |
2 | 125.0 Hz |
3 | 250.0 Hz |
4 | 500.0 Hz |
5 | 1.000 kHz |
6 | 2.000 kHz |
7 | 4.000 kHz |
8 | 8.000 kHz |
9 | 16.00 kHz |
如果播放的样本的频率比一个频带的中心频率低,那个带就被禁用。这个滤镜的一个已知的bug是当样本频率接近 最高频带的中心频率的时候,最高频带的特性不是对称的。这个问题可以通过使用resample滤镜在声音到达本滤镜之前 升高样本频率来解决。
这个滤镜有10个选项:
g1:g2:g3...g10
-12
and +12
之间的浮点数表示每个频带音量的改变,以分贝为单位。Example:
mplayer -af equalizer=11:11:10:5:0:-12:0:5:12:12 media.avi
将升高高频和低频区域的声音而几乎完全消去1kHz附近的声音。
使用pan
滤镜可以把声道任意混合。它基本上是volunme滤镜和channels滤镜的组合。这个滤镜主要有
两个用途:
这个滤镜很难使用,而且在获得想要的效果之前需要动些脑筋。这个滤镜的选项数取决于输出的声道数:
nch <1-6>
1
到6
之间的整数,用来设置输出的声道数。这个选项是必须的,如果省略将导致
运行时错误。l00:l01:l02:..l10:l11:l12:...ln0:ln1:ln2:...
0
到1
之间的浮点数。l[i][j]
决定把输入声道j的多少成分混合到输出声道i。示例1:
mplayer -af pan=1:0.5:0.5 -channels 1 media.avi
把立体声混合成单声道。
示例2:
mplayer -af pan=3:1:0:1:0.5:0.5 -channels 3 media.avi
将输出3个声道,0声道和1声道保持不变,再把0声道和1声道混合输出到2声道(然后可以把这个声道输出到副低音)。
sub
插件给音频增加一个副低音声道。用来产生副低音声道的数据是0声道和1声道音频数据的平均混合。
混合后的声音进过4阶Butterworth滤波器低通过滤,默认去掉60Hz以上的声音,然后添加到音频流的一个单独声道中。
警告:当你播放5.1杜比数字音效的DVD时禁用这个滤镜,否则它使副低音的声音发生混乱。这个滤镜有两个选项:
fc <20-300>
ch <0-5>
0
到5
之间的整数,决定插入副声道的声道编号,默认的声道号是5
。
注意如果需要总的声道数会自动增加到ch
个。示例:
mplayer -af sub=100:4 -channels 5 media.avi
将增加一个剪除频率为100Hz的副低音声道到输出声道4。
矩阵编码的环绕音效可以通过surround
滤镜解码。杜比环绕就是矩阵编码格式的一个例子。很多两声道的音频
实际上包含了矩阵编码。为了使用这个特性你需要一个至少支持4声道的声卡。这个滤镜有1个选项:
d <0-1000>
0
到1000
之间的浮点数用来设定后部扬声器的延迟时间,以ms为单位。这个延迟应该
这样设定:如果d1是从听众位置到前扬声器的距离而d2是从听众位置到后扬声器的距离,如果d1 <= d2,那么延迟d
应该设置为15ms,如果d1 > d2,那么设置为15 + 5*(d1-d2),d
的默认值是20ms。示例:
mplayer -af surround=15 -channels 4 media.avi
将使用环绕音效解码并给后部扬声器增加15ms的延迟。
MPlayer支持音频插件。音频插件s用于在声音到达声卡之前改变音频数据的属性。他们用-aop
选项加上
list=插件1,插件2,...
选项打开。必须有list
选项用来确定应该使用哪些插件,以及他们执行的顺序。例如:
mplayer media.avi -aop list=resample,format
将让声音先通过resample插件然后再经过format插件。
插件也有改变他们行为的选项。这些选项在下面将详细地解释。如果选项被省略,插件将按照默认设置运行。 这是一个关于如何组合使用指定选项的插件的例子:
mplayer media.avi -aop
list=resample,format:fout=44100:format=0x8
这将会将resample插件的输出频率设为44100Hz,format插件的输出格式设置为AFMT-U8。
目前音频插件不能用于MEncoder。
MPlayer完全支持对声音升/降采样率。如果你使用固定采样率的声卡或者如果你被只兼容
最大44.1kHz的老声卡郁闷时可以使用这个插件。是否使用这个插件是自动检测的
这个插件有一个选项:fout
用于设置期望的输出的采样率。单位是<Hz>,默认是48kHz。
用法:
mplayer media.avi -aop list=resample:fout=<required
frequency in Hz, like 44100>
注意输出频率不能从默认值升高。因为升高会导致音频和视频流播放缓慢而且音频也会扭曲。
MPlayer有一个能解码矩阵编码的环绕音效的音频插件。杜比环绕是矩阵编码格式的一个例子。 大多数2通道音频的文件实际上包含了矩阵编码的环绕音效。为使用这个特性你需要至少支持4个声道的声卡。
用法:
mplayer media.avi -aop list=surround
如果你的声卡驱动不支持带符号的16位int
数据类型,这个插件能被用来把它转换为一个你的
声卡能理解的格式。它有一个选项,format
,可以设置为你在libao2/afmt.h
中找到的数字。
这个插件几乎很少会用到而且是面向高级用户的。记住这个插件仅仅改变采样格式而不改变采样频率或者声道数。
用法:
mplayer media.avi -aop
list=format:format=<required output format>
这个插件将声音延迟,被计划当做如何开发新的插件的例子。它不能用于任何以用户观点来说有用的东西, 在这里被提到只是为了完整的缘故。不要使用这个插件除非你是开发者。
如果你有一个文件总是A/V同步失败,使用+/-
实时调整就可以,建议使用OSD,调节更加方便。
这个插件是音量控制功能的软件替代,用于哪些使用蹩脚的混音设备的机器。如果你想要改变MPlayer的输
出音量而不改变混音器中PCM音量的设置也可以使用这个插件。它有一个volume
选项设置初始的音量水平。
初始音量水平能取0到255之间的值,默认值是101相当于放大0分贝。谨慎使用这个插件因为它会降低声音的信噪比。
在大多数情况下最好是把PCM音量设为最大值,放弃这个插件并且通过混音器的主音量控制来控制你的扬声器输出水平。如果你的声卡使用
数字PCM混音器而不是模拟的,而你又听到有扭曲现象,就改用主混音器。如果有连接到计算机的外部功放(这几乎是普遍情况),噪音水平
能通过调整在主音量级别和功放上的旋钮而最大限度的减少,直到去除嘶嘶的背景噪音。
用法:
mplayer media.avi -aop
list=volume:volume=<0-255>
这插件也有压缩器或称为“软修饰”的功能。 压缩用于声音的动态范围十分高或者如果扬声器的动态范围十分低的的情况。注意这个特性将造成扭曲并且应该 是最后一种被考虑的手段。
Usage:
mplayer media.avi -aop
list=volume:softclip
这个插件(线性地)增加左右声道的差别(像XMMS的extrastereo插件一样)使回放产生某种“现场”效果。
用法:
mplayer media.avi -aop list=extrastereo
mplayer media.avi -aop list=extrastereo:mul=3.45
默认选项(mul
)是默认值为2.5的浮点数。如果你把它设置到0.0,你将获得单声道(两个声道的平均值)。
如果你把它设置到1.0,声音不变,如果你把它设置为-1.0,左右声道将被交换。
这个插件能没有变形的最大化音量。
用法:
mplayer media.avi -aop list=volnorm