ffmpeg를 사용하여 USB 오디오 인터페이스에서 대량의 채널을 녹음하는 방법은 무엇입니까?

ffmpeg를 사용하여 USB 오디오 인터페이스에서 대량의 채널을 녹음하는 방법은 무엇입니까?

예를 들어 10, 18 또는 32와 같은 많은 입력 채널이 있는 두 개의 USB 오디오 인터페이스가 있습니다.

현재 내 Linux PC에 10개의 입력 채널이 연결된 채널이 있고 pactl list sources. 관련 부분은 다음과 같습니다.

Source #1414
    ...
    Name: alsa_input.usb-Behringer_FLOW_8_03-FF-02-11-55-44-00.Direct__hw_F8__source
    ...
    Sample Specification: s32le 10ch 48000Hz
    Channel Map: aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7,aux8,aux9
    ...
    Volume: aux0: 48287 /  74% / -7.96 dB,   aux1: 48287 /  74% / -7.96 dB,   aux2: 48287 /  74% / -7.96 dB,   aux3: 48287 /  74% / -7.96 dB,   aux4: 48287 /  74% / -7.96 dB,   aux5: 48287 /  74% / -7.96 dB,   aux6: 48287 /  74% / -7.96 dB,   aux7: 48287 /  74% / -7.96 dB,   aux8: 48287 /  74% / -7.96 dB,   aux9: 48287 /  74% / -7.96 dB
            balance 0.00
    ...
    Properties:
        ...
        audio.channels = "10"
        ...

따라서 분명히 10개의 입력 채널이 있습니다.

그리고 대담함도 동의합니다. 10개 채널을 모두 문제 없이 별도의 트랙에 병렬로 녹음할 수 있습니다. 반대편의 ffmpeg는 내 오디오 인터페이스에 2개 이상의 채널이 있다는 사실을 잘 이해하지 못하는 것 같습니다. 심지어 내가 채널_레이아웃을 지정하더라도(저는 1111111111(10개 채널)의 16진수 표현인 0x3ff를 사용하고 있습니다.

다음과 같이 실행해 보았습니다.

$ export SOURCE_NAME="alsa_input.usb-Behringer_FLOW_8_03-FF-02-11-55-44-00.Direct__hw_F8__source"
$ ffmpeg -f pulse -i "${SOURCE_NAME}" -c:a pcm_s32le -ar 48000 -ac 10 -channel_layout 0x3ff output.w64

그리고 나는 다음과 같은 결과를 얻었습니다.

...
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, pulse, from 'alsa_input.usb-Behringer_FLOW_8_03-FF-02-11-55-44-00.Direct__hw_F8__source':
  Duration: N/A, start: 1689435887.317692, bitrate: 1536 kb/s
  Stream #0:0: Audio: pcm_s16le, 48000 Hz, stereo, s16, 1536 kb/s
Multiple -ac options specified for stream 0, only the last option '-ac 10' will be used.
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_s16le (native) -> pcm_s32le (native))
Press [q] to stop, [?] for help
[pcm_s32le @ 0x5636967eb040] Channel layout '10 channels (FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL)' with 10 channels does not match number of specified channels 2
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!

대신에 Channel_layout을 지정하면 hexadecagonal실제로 녹음되지만 처음 2개 채널만 녹음하여 16개 채널이 있는 w64 파일을 생성하고 처음 2개 채널만 오디오를 포함합니다.

$ ffmpeg -f pulse -i "${SOURCE_NAME}" -c:a pcm_s32le -ar 48000 -ac 10 -channel_layout hexadecagonal output.w64
...
Output #0, w64, to 'output.w64':
  Metadata:
    encoder         : Lavf58.76.100
  Stream #0:0: Audio: pcm_s32le ([1][0][0][0] / 0x0001), 48000 Hz, hexadecagonal, s32, 24576 kb/s
    Metadata:
      encoder         : Lavc58.134.100 pcm_s32le
size=   54000kB time=00:00:16.02 bitrate=27602.2kbits/s speed=1.07x    
video:0kB audio:54000kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000231%
Exiting normally, received signal 2.

내가 뭘 잘못하고 있는지 단서가 있습니까?

관련 정보