在 16.04LTS 中使用命令行从网络摄像头捕获音频和视频到文件

在 16.04LTS 中使用命令行从网络摄像头捕获音频和视频到文件

关于从网络摄像头捕获视频,已经有人提出并回答了类似的问题。有许多可接受的答案。但是,它们要么来自不再支持的旧版 Ubuntu,要么仅与视频有关,而不是像这个问题的主题那样同时涉及视频和音频。此外,这个问题的主题是如何使用当前的 LTS Ubuntu 版本。

目前,Ubuntu 官方 Wiki 文档也提供过时且不起作用的分辨率。

有一些 GUI 应用程序可以捕获来自网络摄像头的音频和视频。但这些应用程序不足以实现将视频轻松包含在脚本中的目的。

许多其他关于这个主题的参考资料包括以下变体:Ubuntu 官方文档摄像头支持

带有提示符的行$是命令。 后面几行是错误响应。

$ ffmpeg -f oss -i /dev/dsp -f video4linux2 -s 320x240 -i /dev/video0 out.mpg
[oss @ 0x15f38a0] /dev/dsp: No such file or directory
/dev/dsp: Input/output error

$ avconv -f oss -i /dev/dsp -f video4linux2 -s 320x240 -i /dev/video0 out.mpg
[oss @ 0xd9b8a0] /dev/dsp: No such file or directory
/dev/dsp: Input/output error

虽然上述两个命令将失败,但此命令将从网络摄像头捕获 10 秒的视频:

$ timeout 10 ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 out.mpg

如您所见,删除有问题的音频输入选项将消除错误。因此缺少的是与此选项匹配的支持的音频输入。在安装和尝试配置其他音频包之前,我试图获取有关如何使用官方内置音频支持的信息。

我看到了有关安装其他软件包以实现声音支持的参考,但如果可行的话,我首先想了解如何默认使用 Ubuntu 16.04LTS 上已安装的软件包。

dmesg -wUSB网络摄像头插入后的输出:

[41763.153707] CPU7: Core temperature/speed normal
[41763.153708] CPU3: Core temperature/speed normal
[41845.576323] retire_capture_urb: 66 callbacks suppressed
[41845.699994] usb 2-1.4: USB disconnect, device number 14
[41872.523599] usb 2-1.4: new high-speed USB device number 15 using ehci-pci
[41872.882616] usb 2-1.4: New USB device found, idVendor=046d, idProduct=0826
[41872.882620] usb 2-1.4: New USB device strings: Mfr=0, Product=2, SerialNumber=1
[41872.882622] usb 2-1.4: Product: HD Webcam C525
[41872.882624] usb 2-1.4: SerialNumber: 94D25250
[41873.142026] usb 2-1.4: current rate 5666600 is different from the runtime rate 16000
[41873.145382] usb 2-1.4: current rate 8859453 is different from the runtime rate 24000
[41873.149264] usb 2-1.4: current rate 12572339 is different from the runtime rate 32000
[41873.152635] usb 2-1.4: current rate 10782671 is different from the runtime rate 48000
[41873.165044] usb 2-1.4: set resolution quirk: cval->res = 384
[41873.165529] uvcvideo: Found UVC 1.00 device HD Webcam C525 (046d:0826)
[41873.178089] input: HD Webcam C525 as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.2/input/input33
[41873.222700] usb 2-1.4: current rate 5530139 is different from the runtime rate 48000
[41873.226055] usb 2-1.4: current rate 698870 is different from the runtime rate 48000
[41873.243770] usb 2-1.4: current rate 1805767 is different from the runtime rate 48000
[41873.246765] usb 2-1.4: current rate 1763607 is different from the runtime rate 48000

答案1

OSS 是 Linux 中唯一的音频 API,直到官方 (kernel.org) Linux 内核 2.4 系列。ALSA 从 2.5 开始添加,在这些版本中,Linux 内核作者将 OSS 标记为已弃用。4Front 继续在 Linux 内核之外开发 OSS。

来源:开放式音响系统 - 维基百科

使用 找到声音设备arecord -L。然后在命令行中使用它。输出非常广泛。

这将从我的网络摄像头录制 30 秒的视频:

$ ffmpeg -f alsa -i plughw:CARD=C525,DEV=0  -f video4linux2 -s 320x240 -i /dev/video0 -t 30 out.mpg

一个记录下面输入了我系统上的输出,其中我选择使用的音频设备以粗体突出显示。在本例中是plughw:卡=C525,设备=0

默认
    通过 PulseAudio 声音服务器播放/录音
无效的
    丢弃所有样本(播放)或生成零样本(捕获)
脉冲
    PulseAudio 声音服务器
系统默认值:CARD=MID
    HDA 英特尔 MID,ALC889A 模拟
    默认音频设备
正面:CARD=MID,DEV=0
    HDA 英特尔 MID,ALC889A 模拟
    前置扬声器
环绕21:CARD = MID,DEV = 0
    HDA 英特尔 MID,ALC889A 模拟
    2.1 环绕输出至前置和低音炮扬声器
环绕40:CARD = MID,DEV = 0
    HDA 英特尔 MID,ALC889A 模拟
    4.0 环绕输出至前置和后置扬声器
环绕41:CARD = MID,DEV = 0
    HDA 英特尔 MID,ALC889A 模拟
    4.1 环绕输出至前置、后置和低音炮扬声器
环绕50:CARD = MID,DEV = 0
    HDA 英特尔 MID,ALC889A 模拟
    5.0 环绕输出至前置、中置和后置扬声器
环绕51:CARD = MID,DEV = 0
    HDA 英特尔 MID,ALC889A 模拟
    5.1 环绕输出至前置、中置、后置和低音炮扬声器
surrounded71:CARD=MID,DEV=0
    HDA 英特尔 MID,ALC889A 模拟
    7.1 环绕输出至前置、中置、侧置、后置和低音扬声器
dmix:卡=MID,设备=0
    HDA 英特尔 MID,ALC889A 模拟
    直接样品混合装置
dmix:卡=MID,设备=2
    HDA 英特尔 MID,ALC889A Alt 模拟
    直接样品混合装置
dsnoop:CARD=MID,DEV=0
    HDA 英特尔 MID,ALC889A 模拟
    直接取样装置
dsnoop:CARD=MID,设备=2
    HDA 英特尔 MID,ALC889A Alt 模拟
    直接取样装置
硬件:CARD=MID,DEV=0
    HDA 英特尔 MID,ALC889A 模拟
    直接使用硬件设备,无需任何转换
硬件:CARD=MID,DEV=2
    HDA 英特尔 MID,ALC889A Alt 模拟
    直接使用硬件设备,无需任何转换
plughw:CARD=MID,DEV=0
    HDA 英特尔 MID,ALC889A 模拟
    硬件设备及所有软件转换
plughw:CARD=MID,DEV=2
    HDA 英特尔 MID,ALC889A Alt 模拟
    硬件设备及所有软件转换
系统默认值:CARD=HDMI
    USB 捕获 HDMI、USB 音频
    默认音频设备
正面:CARD=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    前置扬声器
环绕21:CARD=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    2.1 环绕输出至前置和低音炮扬声器
环绕40:卡=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    4.0 环绕输出至前置和后置扬声器
环绕41:卡=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    4.1 环绕输出至前置、后置和低音炮扬声器
环绕50:CARD=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    5.0 环绕输出至前置、中置和后置扬声器
环绕51:卡=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    5.1 环绕输出至前置、中置、后置和低音炮扬声器
环绕71:卡=HDMI,设备=0
    USB 捕获 HDMI、USB 音频
    7.1 环绕输出至前置、中置、侧置、后置和低音扬声器
iec958:卡=HDMI,设备=0
    USB 捕获 HDMI、USB 音频
    IEC958 (S/PDIF) 数字音频输出
dmix:卡=HDMI,设备=0
    USB 捕获 HDMI、USB 音频
    直接样品混合装置
dsnoop:CARD=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    直接取样装置
硬件:CARD=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    直接使用硬件设备,无需任何转换
plughw:CARD=HDMI,DEV=0
    USB 捕获 HDMI、USB 音频
    硬件设备及所有软件转换
系统默认值:CARD=C525
    高清网络摄像头 C525,USB 音频
    默认音频设备
正面:CARD=C525,DEV=0
    高清网络摄像头 C525,USB 音频
    前置扬声器
环绕21:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    2.1 环绕输出至前置和低音炮扬声器
环绕40:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    4.0 环绕输出至前置和后置扬声器
环绕41:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    4.1 环绕输出至前置、后置和低音炮扬声器
环绕50:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    5.0 环绕输出至前置、中置和后置扬声器
环绕51:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    5.1 环绕输出至前置、中置、后置和低音炮扬声器
surrounded71:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    7.1 环绕输出至前置、中置、侧置、后置和低音扬声器
iec958:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    IEC958 (S/PDIF) 数字音频输出
dmix:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    直接样品混合装置
dsnoop:CARD=C525,设备=0
    高清网络摄像头 C525,USB 音频
    直接取样装置
硬件:CARD=C525,DEV=0
    高清网络摄像头 C525,USB 音频
    直接使用硬件设备,无需任何转换
plughw:卡=C525,设备=0
    高清网络摄像头 C525,USB 音频
    硬件设备及所有软件转换

根据您要捕获的音频,很多设备都可以被排除,例如环绕声以及在我的情况下的其他 HDMI 捕获设备。

相关内容