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

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

使用 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

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

usb-046d_0821_6813BFD0-00 -> ../controlC1

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

ffmpeg -f alsa -i $ALSA_DEVICE_NAME..

我努力了

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

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

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

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

我也尝试过

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

需要一些帮助来制定正确的命令格式

答案1

正确的做法如下:

  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
    
  8. 您可以通过添加以下内容将视频部分添加到上述命令中:

    -f video4linux2 -i /dev/video0
    

希望对您有所帮助。欢迎提出任何相关问题。

答案2

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

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

ffmpeg -f alsa -i hw:1

相关内容