使用 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
正确的做法如下:
- 发出
arecord -L
命令。 - 查找
plughw
与您的硬件相对应的值。请注意,plughw 代表已插入计算机的硬件。 - 交叉检查目录中的值
/dev/snd/by-id
。- 当您拔下网络摄像头时,
by-id
子目录将从/dev/snd
目录中消失。这是确认哪个plughw
是外部插入设备的极佳测试。
- 当您拔下网络摄像头时,
- 这里列出的声音设备 ID 将与从命令获取的值之一相同或相对应
arecord -L
。 - 要使用的命令是
ffmpeg: -f alsa -i plughw
。 - 请注意,不要将 plughw 值括在引号中。
对我来说一个可行的例子是:
ffmpeg -f alsa -i plughw:CARD=U0x46d0x821,DEV=0 -acodec libmp3lame -t 20 output.mp4
您可以通过添加以下内容将视频部分添加到上述命令中:
-f video4linux2 -i /dev/video0
希望对您有所帮助。欢迎提出任何相关问题。
答案2
我快速阅读了 ffmpeg 的手册页,他们建议查看 /proc/asound/cards
我的机器上有两张卡 0 和 1,我的网络摄像头是 1,所以对我来说命令是
ffmpeg -f alsa -i hw:1