美文网首页
ffmpeg使用 lavfi filter 实现声道映射(cha

ffmpeg使用 lavfi filter 实现声道映射(cha

作者: mudssky | 来源:发表于2021-05-23 00:47 被阅读0次

    关于双声道立体声,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
    

    相关文章

      网友评论

          本文标题:ffmpeg使用 lavfi filter 实现声道映射(cha

          本文链接:https://www.haomeiwen.com/subject/kgrajltx.html