关于双声道立体声,5.1声道,和7.1声道
一般的stereo音频流包含双声道,左声道(FL- Front Left),右声道(FR- Front Right),通过两声道实现了立体声效果
5.1声道,在双声道的的基础上,增加了环绕左声道(SL-),环绕右声道(SR),还有中央声道(FC- Front Center)
多出来的0.1是低音声道 LFE,因为低音声道的带宽只有普通声道的十分之一。
7.1声道则是在5.1声道基础上,多了后左声道(BL)和后右声道(BR)
一般我们的耳机就是普通的2声道,音箱要整好几个才有5.1声道,我们一般的桌面音箱也就是2.1声道,左右两个扬声器。
lavfi fliter中关于音频的mix和mapping操作
音频的mapping和mix是通过pan这个工具实现的。
这个filter的使用形式是"l|outdef|outdef|..."
- l 输出声道的layout或者声道数
- outdef 输出声道的定义,形式是
"out_name=[gain*]in_name[(+-)[gain*]in_name...]"
- out_name 定义输出声道,或者也可以用声道名(FL,FR等等)或者声道编号(c0,c1等等)
- gain 声道相乘的系数,1表示不做改变
- in_name 使用的输入声道,命名声道和编号声道不能同时使用。
=
在声道指定中不会对系数做改变,如果用<
,那么gains 相乘系数的综合会被限定为1,阻止clipping noise的发生
mixing的例子
如果你想从stereo down-mix到mono,但是给左声道更大的相乘因子:
pan=1c|c0=0.9*c0+0.1*c1
下面是自定义的down-mix to stereo方法,支持3,4,5,7声道
pan=stereo| FL < FL + 0.5*FC + 0.6*BL + 0.6*SL | FR < FR + 0.5*FC + 0.6*BR + 0.6*SR
remapping的例子
当且仅当以下两种情况声道mapping会生效:
- 相乘系数是0或者1
- 每个声道只有一个输出
如果检测到这两个条件满足,fliter就会用无损更优化的方式remapping
举个例子,如果你想把5.1声道删除额外的声道留下两个声道组成stereo立体声。
pan="stereo| c0=FL | c1=FR"
同样的例子,你也可以交换左右声道,保持其他声道的布局
pan="5.1| c0=c1 | c1=c0 | c2=c2 | c3=c3 | c4=c4 | c5=c5"
如果输入是立体声stereo音频流,你也可以静音front left音频,并且保持stereo格式。
pan="stereo|c1=c1"
你也可以拷贝右声道,到左右两个声道
pan="stereo| c0=FR | c1=FR"
因此,你用ffmpeg 进行左右声道切换的命令会是这样的,不过ffmpeg默认的编译版本里面是没有这个东西的。这里输出了flac格式,因为这是一种无损压缩格式。
ffmpeg -i input.m4a -af 'pan=stereo|c1=c0|c0=c1' -acodec flac out.flac
网友评论