【ffmpeg】-利用ffmpeg和alsa捕获音频

12 篇文章 0 订阅

利用ffmpeg和alsa捕获音频

目录

利用ffmpeg和alsa捕获音频

1.语法:

2.选择输入音频:

3.重启:

4.ALSA混合器的工具:

5.输入操作:

6.举例:

1.记录音频从您的麦克风

2.记录来自应用程序的音频

3.记录来自应用程序的音频,同时将音频路由到输出设备


1.语法:

利用ffmpeg以及ALSA捕获音频非常简单:

ffmpeg -f alsa <input_options> -i <input_device> ... output.wav

2.选择输入音频:

input_device告诉ffmpeg你想要使用哪个音频卡或者是设备。你可以输入 arecord -l 或者 arecord -L ,得到所有在你的机器上已经安装的设备列表。

下面是列出来的录音卡或者设备:

$ arecord -l

**** List of CAPTURE Hardware Devices ****

card 0: ICH5 [Intel ICH5], device 0: Intel ICH [Intel ICH5]

  Subdevices: 1/1

  Subdevice #0: subdevice #0

card 0: ICH5 [Intel ICH5], device 1: Intel ICH - MIC ADC [Intel ICH5 - MIC ADC]

  Subdevices: 1/1

  Subdevice #0: subdevice #0

card 0: ICH5 [Intel ICH5], device 2: Intel ICH - MIC2 ADC [Intel ICH5 - MIC2 ADC]

  Subdevices: 1/1

  Subdevice #0: subdevice #0

card 0: ICH5 [Intel ICH5], device 3: Intel ICH - ADC2 [Intel ICH5 - ADC2]

  Subdevices: 1/1

  Subdevice #0: subdevice #0

card 1: U0x46d0x809 [USB Device 0x46d:0x809], device 0: USB Audio [USB Audio]

  Subdevices: 1/1

  Subdevice #0: subdevice #0

我们可以看到这里有两个音频卡已经安装了音频捕获的功能,名为”card 0”(Intel ICH5)和”card 1”(Microphone on the USB web cam),最简单的方法就是去直接使用-f alsa -i hw:0 or -f alsa -i hw:1引用它们

ffmpeg -f alsa -i hw:1 -t 30 out.wav

我这行命令我们将获得一个30秒的输出WAV格式的音频文件,从我的USB摄像头的默认记录设备(麦克风)记录。可以使用alsamixer工具(参见下面)选择默认的记录设备,或者在hw中使用附加参数Y指定设备:hw:<X>,<Y>,其中<X>=card, <Y>=device。例如,要从Intel card中选择“MIC2 ADC”(见上面的列表),我们将使用:

ffmpeg -f alsa -i hw:0,2 -t 30 out.wav

最好的方法是使用alsamixer工具选择您的卡和默认的记录设备,因为有些音频卡通过ffmpeg命令行选择默认输入的方式非常复杂。

3.重启:

如果你重新启动你的机器,你会注意到有时你的卡被重新排序,所以“卡0”被列为USB音频和“卡1”被列为英特尔音频卡。您可能想要使用udev规则,但是有一个更简单的解决方案。输入arecord -L会给我们一个更详细的记录设备列表:

# arecord -L

null

    Discard all samples (playback) or generate zero samples (capture)

default:CARD=ICH5

    Intel ICH5, Intel ICH5

    Default Audio Device

sysdefault:CARD=ICH5

    Intel ICH5, Intel ICH5

    Default Audio Device

front:CARD=ICH5,DEV=0

    Intel ICH5, Intel ICH5

    Front speakers

surround40:CARD=ICH5,DEV=0

    Intel ICH5, Intel ICH5

    4.0 Surround output to Front and Rear speakers

surround41:CARD=ICH5,DEV=0

    Intel ICH5, Intel ICH5

    4.1 Surround output to Front, Rear and Subwoofer speakers

surround50:CARD=ICH5,DEV=0

    Intel ICH5, Intel ICH5

    5.0 Surround output to Front, Center and Rear speakers

surround51:CARD=ICH5,DEV=0

    Intel ICH5, Intel ICH5

    5.1 Surround output to Front, Center, Rear and Subwoofer speakersdefault:CARD=U0x46d0x809

    USB Device 0x46d:0x809, USB Audio

    Default Audio Device

sysdefault:CARD=U0x46d0x809

    USB Device 0x46d:0x809, USB Audio

    Default Audio Device

front:CARD=U0x46d0x809,DEV=0

    USB Device 0x46d:0x809, USB Audio

    Front speakers

surround40:CARD=U0x46d0x809,DEV=0

    USB Device 0x46d:0x809, USB Audio

    4.0 Surround output to Front and Rear speakers

surround41:CARD=U0x46d0x809,DEV=0

    USB Device 0x46d:0x809, USB Audio

    4.1 Surround output to Front, Rear and Subwoofer speakers

surround50:CARD=U0x46d0x809,DEV=0

    USB Device 0x46d:0x809, USB Audio

    5.0 Surround output to Front, Center and Rear speakers

surround51:CARD=U0x46d0x809,DEV=0

    USB Device 0x46d:0x809, USB Audio

    5.1 Surround output to Front, Center, Rear and Subwoofer speakers

surround71:CARD=U0x46d0x809,DEV=0

    USB Device 0x46d:0x809, USB Audio

    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers

iec958:CARD=U0x46d0x809,DEV=0

    USB Device 0x46d:0x809, USB Audio

    IEC958 (S/PDIF) Digital Audio Output

我们可以告诉ffmpeg我们想要使用的确切的卡,指定确切的卡的名称,无论它是什么顺序,如下所示:

ffmpeg -f alsa -i default:CARD=U0x46d0x809 -t 30 out.wav

通过这种方式,您总是需要来自特定设备的输入(来自USB音频设备的默认记录设备),并且永远不会混淆

4.ALSA混合器的工具:

您可能会发现一个名为alsamixer的工具非常有用

 

 

它会让你视觉选择,对于每个指定的卡(英特尔或USB),你想用哪个记录装置(如果指定的卡有多个输入,输出,cd,麦克风,等等),这样你就可以运行alsamixer,按F6选择卡片,然后使用TAB键切换到录音设备(按多次之间切换播放/记录/所有设备),之后,只需使用箭头键来突出显示所需的设备,并只需按空格键来选择它(以及向上/向下、向上/dn键来更改输入音量)。

5.输入操作:

ALSA输入的唯一有用的音频输入选项是-ar(音频采样率)和-ac(音频通道)。
指定音频采样速率/频率将强制音频卡以指定的速率录制音频。通常默认值是“44100”(Hz)。指定音频通道将强制声卡以单声道、立体声甚至2.1/5.1(如果声卡支持)的形式录制音频。通常,麦克风输入的默认值是“1”(单声道),行入输入的默认值是“2”(立体声)。

6.举例:

1.记录音频从您的麦克风

在录制视频时,你通常也想录下自己的声音:

ffmpeg -f alsa -ac 1 -ar 44100 -i hw:0 -t 30 out.wav

看看我们的例子设备清单,这将是一样的:

ffmpeg -f alsa -ac 1 -ar 44100 -i default:CARD=ICH5 -t 30 out.wav

2.记录来自应用程序的音频

加载snd_aloop模块

modprobe snd-aloop pcm_substreams=1

设置默认的ALSA音频输出为.asoundrc(或/etc/asound.conf)中的环回设备的一个子流。

# .asoundrc

pcm.!default { type plug slave.pcm "hw:Loopback,0,0" }

你现在可以记录音频从一个运行的应用程序使用:

ffmpeg -f alsa -ac 2 -ar 44100 -i hw:Loopback,1,0 out.wav

3.记录来自应用程序的音频,同时将音频路由到输出设备

加载snd_aloop模块:

modprobe snd-aloop pcm_substreams=1

像这样设置你的.asoundrc(或/etc/asound.conf):

# .asoundrc

pcm.multi {

    type route;

    slave.pcm {

        type multi;

        slaves.a.pcm "output";

        slaves.b.pcm "loopin";

        slaves.a.channels 2;

        slaves.b.channels 2;

        bindings.0.slave a;

        bindings.0.channel 0;

        bindings.1.slave a;

        bindings.1.channel 1;

        bindings.2.slave b;

        bindings.2.channel 0;

        bindings.3.slave b;

        bindings.3.channel 1;

    }

 

    ttable.0.0 1;

    ttable.1.1 1;

    ttable.0.2 1;

    ttable.1.3 1;

}

 

pcm.!default {

type plug

slave.pcm "multi"

}

 

pcm.output {

type hw

card <Your Output Device Name>

}

 

pcm.loopin {

type plug

slave.pcm "hw:Loopback,0,0"

}

 

pcm.loopout {

type plug

slave.pcm "hw:Loopback,1,0"

}

输出pcm指向你想要音频去的输出设备

你现在可以记录音频从一个运行的应用程序使用:

ffmpeg -f alsa -ac 2 -ar 44100 -i loopout out.wav

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GLL_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值