
예를 들어 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.
내가 뭘 잘못하고 있는지 단서가 있습니까?