从两个设备录制,但无法从硬件设备录制,ffmpeg

从两个设备录制,但无法从硬件设备录制,ffmpeg

我意识到同时问两个问题可能会违反正常礼仪,但因为我认为我的两个问题可能是相关的(如果第二个问题不相关,我实际上只需要解决第一个问题),所以同时描述两个问题似乎是唯一明智的方法。

我真正想要实现的是采用两个独立的 USB 音频输入设备,并同时从它们进行录音(同步,因此单独的文件似乎不是一个可行的选择)。

一个问题是,我不确定如何向 ffmpeg 表达这个请求,文档非常庞大,初学者甚至不知道从哪里开始查找。在某种程度上,这可能是因为我不知道概念名称是什么,所以索引条目对我来说没有意义。

另一个问题是,为了实现这一点,我很确定我需要直接引用硬件设备(因为-f alsa -i pulse我相信只能引用“当前选定的”脉冲设备)。现在,如果我尝试从单个设备录制,其中一个设备工作正常,如果我用名称引用它hw:2。另一个,目前hw:3有一种令人讨厌的报告繁忙的倾向,但如果我忽略它,我总是会收到一个错误:cannot set sample format 0x10000 2 (Invalid argument) hw:3: Input/output error但是,如果我尝试通过脉冲从它录制(这是唯一的变化;选择它作为默认输入,并将其引用为-i pulse,而不是-i hw:3那么它就可以正常工作(显然仍然是单个)。

有什么建议吗?我是不是在尝试一些不可能的事情?我应该参考 ffmpeg 文档的哪一部分?

编辑:随着我的搜索继续,我想知道这是否是我必须了解“复杂过滤器图”的东西,或者可能是“jack”系统可以处理的东西。我还没有真正理解,但它们似乎是可能的竞争者?

编辑(添加信息):

下面是我一直尝试使用的命令和输出的选择,带有内联注释,像往常一样[...]表明我省略了那些似乎无助于理解的内容:

toby@LinuxStudio:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
[...]
card 1: PCH [HDA Intel PCH], device 0: 92HD99BXX Analog [92HD99BXX Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: CODEC [USB Audio CODEC], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 3: U192k [UMC404HD 192k], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

toby@LinuxStudio:~$ ffmpeg -f alsa -i hw:3 -sample_rate 48000 -channels 4 -channel_layout quad test.wav
[...]
[alsa @ 0x563b07aa6960] cannot set sample format 0x10000 2 (Invalid argument)
hw:3: Input/output error

toby@LinuxStudio:~$ ffmpeg -f alsa -i hw:2 -sample_rate 48000 -channels 2 -channel_layout quad test.wav
[...]
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, quad, s16, 3072 kb/s
[...]
Exiting normally, received signal 2.

toby@LinuxStudio:~$ ffmpeg -f alsa -i pulse -sample_rate 48000 -channels 4 -channel_layout quad test.wav
[...]
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, quad, s16, 3072 kb/s
Exiting normally, received signal 2.

toby@LinuxStudio:~$ ffmpeg -f alsa -i pulse -sample_rate 48000 -channels 4 -i hw:2 -sample_rate 48000 -channels 2 -channel_layout hexagonal test.wav
[...]
hw:2: Protocol not found
Did you mean file:hw:2?

因此,特别要注意的是,带有的命令hw:2适用于两个通道,带有的命令hw:3因“无效参数”而失败,等效命令在引用pulse而不是时有效hw:3(并且脉冲默认设备设置为hw:3使用,pavucontrol因此它们应该是相同的目标)。

此外,我对从两个输入中抓取的格式的最佳猜测显然是一个语法错误,但我只是猜测,所以这并不奇怪!

hw最后,我发现,如果我尝试使用该格式访问四通道设备,十有八九, ffmpeg 会拒绝我的努力cannot open audio device hw:2 (Device or resource busy) hw:2: Input/output error,我经常会pavucontrol选择该设备作为默认设备,但如果我取消选择它,这种情况不会消失,即使该设备从来都不是默认设备,这种情况也经常发生。

答案1

我建议您将 hw:3 设置为默认设备,然后尝试以下操作,

ffmpeg -f alsa -sample_rate 48000 -channels 4 -i pulse -f alsa -sample_rate 48000 -channels 2 -i hw:2 -filter_complex amerge test.wav

相关内容