¿Cómo grabar grandes cantidades de canales desde una interfaz de audio USB usando ffmpeg?

¿Cómo grabar grandes cantidades de canales desde una interfaz de audio USB usando ffmpeg?

Tengo un par de interfaces de audio USB que tienen muchos canales de entrada, por ejemplo 10, 18 o 32.

Actualmente tengo el que tiene 10 canales de entrada conectado a mi PC con Linux y pude encontrarlo en la salida de pactl list sources. Aquí están las partes relevantes:

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"
        ...

Claramente tiene 10 canales de entrada.

Y audacity está de acuerdo: puedo grabar los 10 canales en paralelo en pistas separadas sin ningún problema. ffmpeg en el otro lado no parece entender que mi interfaz de audio tiene más de 2 canales, incluso cuando especifico un diseño de canal (estoy usando 0x3ff, que es una representación hexadecimal de 1111111111 (10 canales).

Intenté ejecutarlo así:

$ 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

Y obtuve este resultado:

...
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!

Si en su lugar especifico hexadecagonalcomo channel_layout, en realidad graba, pero luego solo graba los dos primeros canales creando un archivo w64 con 16 canales y solo los 2 primeros contienen audio.

$ 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.

¿Alguna pista de lo que estoy haciendo mal?

información relacionada