Я понимаю, что задавать два вопроса одновременно, вероятно, является нарушением нормального протокола, но, поскольку я думаю, что, возможно, мои две проблемы связаны (и мне действительно нужно исправить первую проблему, если вторая не актуальна), она кажется единственной разумный путь вперед, чтобы описать оба сразу.
Чего я действительно хочу добиться, так это взять два отдельных 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 я должен ссылаться?
РЕДАКТИРОВАТЬ: Поскольку мой поиск продолжается, я задаюсь вопросом, может ли это быть что-то, для чего я должен понимать «сложный фильтр-граф», или, возможно, что-то, что система "Джек" может обрабатывать. Мне пока не удалось по-настоящему понять, но они кажутся возможными соперниками?
РЕДАКТИРОВАТЬ (добавить информацию):
Вот несколько команд и выводов, которые я пытался использовать, со встроенными комментариями, как обычно [...]
указывает, что я упустил материал, который не помогает понять:
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
чтобы выбрать устройство по умолчанию, но не исчезает, если я отключаю его, и часто происходит, даже если устройство никогда не использовалось по умолчанию.