美文网首页
FFmpeg滤镜(6)

FFmpeg滤镜(6)

作者: Goning | 来源:发表于2019-03-18 10:23 被阅读0次

    FFmpeg音频流滤镜操作


    1、双声道合并单声道

    将stereo转变为mono模式:

    ffmpeg -i input.aac -ac 1 output.aac
    
    Input #0, aac, from 'input.aac':
      Duration: 00:00:32.14, bitrate: 154 kb/s
        Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 154 kb/s
    Stream mapping:
      Stream #0:0 -> #0:0 (aac (native) -> aac (native))
    Press [q] to stop, [?] for help
    Output #0, adts, to 'output.aac':
      Metadata:
        encoder         : Lavf58.20.100
        Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 69 kb/s
        Metadata:
          encoder         : Lavc58.35.100 aac
    size=     267kB time=00:00:30.32 bitrate=  72.0kbits/s speed= 127x    
    video:0kB audio:258kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 3.468710%
    verhead: 3.468710%
    

    原本双声道的音频,左耳右耳都可以听到声音,调整后依然可以左右耳都听到声音,只是布局发生了改变,为中央布局。


    2、双声道提取

    将音频为stereo的布局提取为两个mono流,左声道一个流,右声道一个流:

    ffmpeg -i input.aac -map_channel 0.0.0 left.aac -map_channel 0.0.1 right.aac
    
    Input #0, aac, from 'input.aac':
      Duration: 00:00:32.14, bitrate: 154 kb/s
        Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 154 kb/s
    Stream mapping:
      Stream #0:0 -> #0:0 (aac (native) -> aac (native))
      Stream #0:0 -> #1:0 (aac (native) -> aac (native))
    Press [q] to stop, [?] for help
    -map_channel is forwarded to lavfi similarly to -af pan=0x4|c0=c0.
    [pan @ 0x7f922be08380] Pure channel mapping detected: 0
    Output #0, adts, to 'left.aac':
      Metadata:
        encoder         : Lavf58.20.100
        Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 69 kb/s
        Metadata:
          encoder         : Lavc58.35.100 aac
    -map_channel is forwarded to lavfi similarly to -af pan=0x4|c0=c1.
    [pan @ 0x7f922bd0f9c0] Pure channel mapping detected: 1
    Output #1, adts, to 'right.aac':
      Metadata:
        encoder         : Lavf58.20.100
        Stream #1:0: Audio: aac (LC), 44100 Hz, mono, fltp, 69 kb/s
        Metadata:
          encoder         : Lavc58.35.100 aac
    size=     266kB time=00:00:30.32 bitrate=  72.0kbits/s speed=65.9x    
    video:0kB audio:515kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    [aac @ 0x7f922c803e00] Qavg: 395.652
    [aac @ 0x7f922d001e00] Qavg: 395.069
    

    从上述输出中可以看到,input.aac为stereo,而left.aac与right.aac为mono。


    3、双声道转双音频流

    FFmpeg不但可以将双声道音频提取出来生成两个音频文件,还可以将双声道音频提取出来转为一个音频文件两个音频流,每个音频流为一个声道:

    ffmpeg -i input.aac -filter_complex channelsplit=channel_layout=stereo output.mka
    
    Input #0, aac, from 'input.aac':
      Duration: 00:00:32.14, bitrate: 154 kb/s
        Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 154 kb/s
    Stream mapping:
      Stream #0:0 (aac) -> channelsplit
      channelsplit:FL -> Stream #0:0 (ac3)
      channelsplit:FR -> Stream #0:1 (ac3)
    Press [q] to stop, [?] for help
    Output #0, matroska, to 'output.mka':
      Metadata:
        encoder         : Lavf58.20.100
        Stream #0:0: Audio: ac3 ([0] [0][0] / 0x2000), 44100 Hz, mono, fltp, 96 kb/s
        Metadata:
          encoder         : Lavc58.35.100 ac3
        Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 44100 Hz, mono, fltp, 96 kb/s
        Metadata:
          encoder         : Lavc58.35.100 ac3
    size=     724kB time=00:00:30.33 bitrate= 195.5kbits/s speed= 123x    
    video:0kB audio:711kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.813252%
    

    如上信息所示,文件output.mka中的音频为两个mono的stream,大多数播放器在默认情况下会播放第一个音频stream但不会播放第二个。


    4、单声道转双声道

    FFmpeg可以将单声道转换为双声道,即当只有中央声道或只有mono布局时,才可以通过FFmpeg转换为stereo布局:

    ffmpeg -i left.aac -ac 2 output.m4a
    

    该命令执行完成后,将会从left.aac中,将布局为mono的音频转换为stereo布局的音频文件output.m4a。

    Input #0, aac, from 'left.aac':
      Duration: 00:00:30.31, bitrate: 72 kb/s
        Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 72 kb/s
    Stream mapping:
      Stream #0:0 -> #0:0 (aac (native) -> aac (native))
    Press [q] to stop, [?] for help
    Output #0, ipod, to 'output.m4a':
      Metadata:
        encoder         : Lavf58.20.100
        Stream #0:0: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s
        Metadata:
          encoder         : Lavc58.35.100 aac
    size=     482kB time=00:00:30.34 bitrate= 130.2kbits/s speed=64.6x    
    video:0kB audio:477kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.235094%
    [aac @ 0x7fae31804400] Qavg: 638.979
    

    除了使用ac参数,还可以使用amerge滤镜进行处理:

    ffmpeg -i left.aac -filter_complex "[0:a][0:a]amerge=inputs=2[aout]" -map "[aout]" output.m4a
    
    Input #0, aac, from 'left.aac':
      Duration: 00:00:30.31, bitrate: 72 kb/s
        Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 72 kb/s
    Stream mapping:
      Stream #0:0 (aac) -> amerge:in0
      Stream #0:0 (aac) -> amerge:in1
      amerge -> Stream #0:0 (aac)
    Press [q] to stop, [?] for help
    [Parsed_amerge_0 @ 0x7ffebe607bc0] No channel layout for input 1
    [Parsed_amerge_0 @ 0x7ffebe607bc0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
    Output #0, ipod, to 'output.m4a':
      Metadata:
        encoder         : Lavf58.20.100
        Stream #0:0: Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
        Metadata:
          encoder         : Lavc58.35.100 aac
    size=     483kB time=00:00:30.34 bitrate= 130.3kbits/s speed=  72x    
    video:0kB audio:477kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.234608%
    [aac @ 0x7ffebe804400] Qavg: 635.810
    

    命令行执行后的效果与使用ac参数的效果相同。
    另外,这样执行之后的双声道并不是真正的双声道,而是由单声道处理成的多声道,效果不会比原有的多声道效果好。


    5、两个音频源合并双声道

    前面说的将单mono处理为双声道,如果将输入的单mono转换为stereo双声道为伪双声道,则可以考虑将两个音频源合并为双声道,相对来说这样操作更容易理解些。
    输入两个布局为mono的音频源,合并为一个布局为stereo双声道的音频流,输出到output文件:

    ffmpeg -i left.aac -i right.aac -filter_complex "[0:a][1:a] amerge=inputs=2[aout]" -map "[aout]" output.mka
    

    命令行执行后,会讲left.aac与right.aac两个音频为mono布局的AAC文件合并为一个布局为stereo的音频流,输出至output.mka文件。

    [aac @ 0x7f97e9002200] Estimating duration from bitrate, this may be inaccurate
    Input #0, aac, from 'left.aac':
      Duration: 00:00:30.31, bitrate: 72 kb/s
        Stream #0:0: Audio: aac (LC), 44100 Hz, mono, fltp, 72 kb/s
    [aac @ 0x7f97ea001200] Estimating duration from bitrate, this may be inaccurate
    Input #1, aac, from 'right.aac':
      Duration: 00:00:32.99, bitrate: 66 kb/s
        Stream #1:0: Audio: aac (LC), 44100 Hz, mono, fltp, 66 kb/s
    Stream mapping:
      Stream #0:0 (aac) -> amerge:in0
      Stream #1:0 (aac) -> amerge:in1
      amerge -> Stream #0:0 (ac3)
    Press [q] to stop, [?] for help
    [Parsed_amerge_0 @ 0x7f97e8c16ec0] No channel layout for input 1
    [Parsed_amerge_0 @ 0x7f97e8c16ec0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
    Output #0, matroska, to 'output.mka':
      Metadata:
        encoder         : Lavf58.20.100
        Stream #0:0: Audio: ac3 ([0] [0][0] / 0x2000), 44100 Hz, stereo, fltp, 192 kb/s (default)
        Metadata:
          encoder         : Lavc58.35.100 ac3
    size=     719kB time=00:00:30.36 bitrate= 193.9kbits/s speed= 119x    
    video:0kB audio:712kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.949075%
    

    从以上信息可以看出,输入的两路mono转换为stereo了,输出音频为AC3。


    6、多个音频合并为多声道

    除了双声道音频,FFmpeg还可以支持多声道,通过ffmpeg -layouts即可看到声道布局有很多种,常见的多声道还有一种是5.1方式的多声道,也叫六声道环绕声,是由前置左、右声道,后置环绕左、右声道、中央声道(0.1声道)、重低音声道组成。

    Individual channels:
    NAME           DESCRIPTION
    FL             front left
    FR             front right
    FC             front center
    LFE            low frequency
    BL             back left
    BR             back right
    FLC            front left-of-center
    FRC            front right-of-center
    BC             back center
    SL             side left
    SR             side right
    TC             top center
    TFL            top front left
    TFC            top front center
    TFR            top front right
    TBL            top back left
    TBC            top back center
    TBR            top back right
    DL             downmix left
    DR             downmix right
    WL             wide left
    WR             wide right
    SDL            surround direct left
    SDR            surround direct right
    LFE2           low frequency 2
    
    Standard channel layouts:
    NAME           DECOMPOSITION
    mono           FC
    stereo         FL+FR
    2.1            FL+FR+LFE
    3.0            FL+FR+FC
    3.0(back)      FL+FR+BC
    4.0            FL+FR+FC+BC
    quad           FL+FR+BL+BR
    quad(side)     FL+FR+SL+SR
    3.1            FL+FR+FC+LFE
    5.0            FL+FR+FC+BL+BR
    5.0(side)      FL+FR+FC+SL+SR
    4.1            FL+FR+FC+LFE+BC
    5.1            FL+FR+FC+LFE+BL+BR
    5.1(side)      FL+FR+FC+LFE+SL+SR
    6.0            FL+FR+FC+BC+SL+SR
    6.0(front)     FL+FR+FLC+FRC+SL+SR
    hexagonal      FL+FR+FC+BL+BR+BC
    6.1            FL+FR+FC+LFE+BC+SL+SR
    6.1(back)      FL+FR+FC+LFE+BL+BR+BC
    6.1(front)     FL+FR+LFE+FLC+FRC+SL+SR
    7.0            FL+FR+FC+BL+BR+SL+SR
    7.0(front)     FL+FR+FC+FLC+FRC+SL+SR
    7.1            FL+FR+FC+LFE+BL+BR+SL+SR
    7.1(wide)      FL+FR+FC+LFE+BL+BR+FLC+FRC
    7.1(wide-side) FL+FR+FC+LFE+FLC+FRC+SL+SR
    octagonal      FL+FR+FC+BL+BR+BC+SL+SR
    hexadecagonal  FL+FR+FC+BL+BR+BC+SL+SR+TFL+TFC+TFR+TBL+TBC+TBR+WL+WR
    downmix        DL+DR
    

    相关文章

      网友评论

          本文标题:FFmpeg滤镜(6)

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