ffmpeg进行多通道语音分离

ffmpeg进行多通道语音分离

Author: Xin Pan

Date: 2020.05.22


问题

当我们想将一条多通道的语音分离成很多的单通道语音时我们怎么办呢?

解决

假设我已经有了一个多通道的音频文件DTM1_100.wav和一个手机文件phone_left.wav。

文件夹

使用下边的命令来看看文件信息:

ffprobe .\DTM1_100.wav

可以看到返回如下结果:

ffprobe version N-93397-gf8075b2c91 Copyright (c) 2007-2019 the FFmpeg developers
  built with gcc 8.2.1 (GCC) 20190212
  #此处省略很多行
Input #0, wav, from '.\DTM1_100.wav':
  Duration: 00:00:06.31, bitrate: 24576 kb/s
    Stream #0:0: Audio: pcm_s32le ([1][0][0][0] / 0x0001), 48000 Hz, 16 channels, s32, 24576 kb/s

可以看到这个音频48k的采样率、16通道的阵列数据。

使用cooledit打开这个文件我们可以看到音频的时域图,左侧可以看到16通道的拆分:

16通道打开示例

使用如下的程序,可以将阵列的数据进行拆分:

import os
import sys
import platform

# config-start
Channels = 16  # use $Channels mic array datas.
# config-end


def dirlist(path,savePath):
    for i in range(Channels):
        saveName = "out_%02d.wav" % (i)
        currentSavePath = os.path.join(savePath, saveName)
        os.system("ffmpeg -i %s -acodec pcm_s16le -ac 1 -ar 16000 -map_channel 0.0.%d %s -y" %
                  (path, i, currentSavePath))


# srciptPath = sys.argv[0]
srciptPath = r"C:\Users\abc\Desktop\array_test\DTM1_100.wav"
savePath = r"C:\Users\abc\Desktop\array_test"


dirlist(srciptPath, savePath)
print("Done!")

这里使用的是ffmpeg -i $INPUT_NAME -map_channel 0.0.$N $OUT_NAME

$INPUT_NAME是输入的名字,-map_channel 0.0.$N可以将输入文件的$N通道输出到$OUT_NAME文件中。在这个示例中$N=[0,15]。至此问题应该就解决了。

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值