如何格式化 ffmpeg 命令以从我的网络摄像头录制声音

use*_*779 6 sound microphone webcam ffmpeg soundcard

使用 ffmpeg arecord -L,我可以将我的 Logitech USB 网络摄像头识别为:

hw:CARD=U0x46d0x821,DEV=0
USB Device 0x46d:0x821, USB Audio
Direct hardware device without any conversions

plughw:CARD=U0x46d0x821,DEV=0
USB Device 0x46d:0x821, USB Audio
Hardware device with all software conversions
Run Code Online (Sandbox Code Playgroud)

当我进入 /dev/snd/by-id 时,网络摄像头被描述为:

usb-046d_0821_6813BFD0-00 -> ../controlC1
Run Code Online (Sandbox Code Playgroud)

我知道在 ffmpeg 中使用声音设备的命令是

ffmpeg -f alsa -i $ALSA_DEVICE_NAME..
Run Code Online (Sandbox Code Playgroud)

我试过了

ffmpeg -f alsa -i "hw:CARD=U0x46d0x821,DEV=0" and

ffmpeg -f alsa -i "plughw:CARD=U0x46d0x821,DEV=0"
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都收到相同的错误消息

ALSA lib pcm.c:2208:(snd_pcm_open_noupdate) Unknown PCM hw=CARD=U0x46d0x821,DEV=0
[alsa @ 0x9c96580] cannot open audio device hw=CARD=U0x46d0x821,DEV=0 (No such file or directory)
hw:CARD=U0x46d0x821,DEV=0: Input/output error
Run Code Online (Sandbox Code Playgroud)

我也试过

ffmpeg -f alsa -i "usb-046d_0821_6813BFD0-00" and

ffmpeg -f alsa -i "usb-046d_0821_6813BFD0-00,DEV=0" and have still received error message
Run Code Online (Sandbox Code Playgroud)

可以使用一些帮助来制定命令的正确格式

use*_*779 6

以下是正确的方法:

  1. 发出arecord -L命令。
  2. 查找plughw与您的硬件对应的值。请注意,plughw 代表已插入计算机的硬件。
  3. 交叉检查/dev/snd/by-id目录中的值。
    • 当您拔下网络摄像头时,by-id子目录将从目录中消失/dev/snd。这是一个很好的测试,可以确认哪个plughw是外部插入的设备。
  4. 此处列出的声音设备 ID 将与从arecord -L命令获得的值之一相同或对应。
  5. 要使用的命令是ffmpeg: -f alsa -i plughw.
  6. 请注意,不要将 plughw 值括在引号中。
  7. 对我来说一个有效的例子是:

    ffmpeg -f alsa -i plughw:CARD=U0x46d0x821,DEV=0 -acodec libmp3lame -t 20 output.mp4
    
    Run Code Online (Sandbox Code Playgroud)
  8. 您可以通过添加以下命令将视频部分添加到上述命令中:

    -f video4linux2 -i /dev/video0
    
    Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。欢迎任何相关问题。


小智 0

我快速阅读了 ffmpeg 的手册页,他们建议查看 /proc/asound/cards

我的机器上有两张卡 0 和 1,我的网络摄像头是 1,所以我的命令是

ffmpeg -f alsa -i hw:1
Run Code Online (Sandbox Code Playgroud)