Linux의 명령줄에서 오디오 출력을 어떻게 녹음할 수 있나요?

Linux의 명령줄에서 오디오 출력을 어떻게 녹음할 수 있나요?

오디오 출력을 mp3 파일로 녹음하고 싶습니다. Ubuntu Linux 터미널에서 어떤 도구와 명령을 사용할 수 있나요?

답변1

sox다른 답변에서는 , arecord및 과 같은 도구를 제안했습니다 parec. 추가적으로,파이프와이어pw-cat다른 도구도 PipeWire와 함께 작동하지만 사용자는 를 사용할 수 있습니다 . 모두 간단하게 호출할 수 있습니다.

arecord

arecord --format=cd file.wav

.wav기본적으로 저장됩니다 . 적절한 형식을 지정하지 않으면 기본 오디오 품질이 좋지 않습니다. 이 프로그램에서 제가 좋아하는 기능 중 하나는 멋진 vumeter 그래픽 출력입니다. 또한 동적 출력 파일 이름 지정(시, 분, 일 등)을 지원합니다. 아쉽게도 ogg나 mp3로 출력할 수 없습니다.


sox

rec file.ext

이 프로그램은 현재 zsh 완성에서는 작동하지 않습니다. 그래픽 출력에 미터가 표시되지만 다른 정보도 표시됩니다. mp3와 ogg를 지원합니다.


pacat

parecord file.ext

mp3와 ogg를 지원합니다. 그러나 그래픽 출력에는 미터를 표시할 수 없습니다.


pw-cat

pw-record file.ext

PipeWire용 입니다 pacat. ogg 및 mp3에 대한 사용자 정의 품질 설정을 지원하지만 지원 pacat하지 않습니다. 계량된 그래픽 출력도 없습니다.

예를 들어 헤드셋과 같은 다른 오디오 장치에서 녹음하려면 나열된 방법 중 하나를 사용할 수 있습니다.여기먼저 녹음 장치의 이름을 알아보세요. 예를 들어:

pw-cli list-objects | grep node.name

이것이 "alsa_input.usb-Logitech_Wireless_Headset.mono"를 생성했다고 가정하면 해당 이름을 --target옵션과 함께 사용합니다:

pw-record --target alsa_input.usb-Logitech_Wireless_Headset.mono file.wav

답변2

먼저 출력 장치의 이름을 추출해야 합니다.

이를 위해 다음 패킷을 설치할 수 있습니다.

sudo apt-get install pulseaudio-utils lame mpg123

그리고 다음을 실행하세요:

pacmd list-sinks | grep -e 'name:' -e 'index' -e 'Speakers'

출력은 다음과 같을 수 있습니다.

index: 1
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo>
        analog-output-speaker: Speakers (priority 10000, latency offset 0 usec, available: unknown)
index: 23
    name: <alsa_output.pci-0000_00_03.0.hdmi-surround71>

이름을 찾은 후 다음 명령을 실행하여 출력을 mp3 파일에 기록할 수 있습니다.

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | lame -r -V0 - out.mp3

또는 sox다음을 수행할 수 있지만 첫 번째 솔루션이 더 강력하다는 것을 알았습니다.

sox -t pulseaudio alsa_output.pci-0000_00_1b.0.analog-stereo.monitor -t mp3 test.mp3 

그러나 자동으로 녹음을 시작하고 중지하려면 다음을 실행할 수 있습니다.

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | sox -t raw -b 16 -e signed -c 2 -r 44100 - test.ogg silence 1 0.1 3% 1 3.0 3%

스피커에 소리가 전송되면 녹음이 시작되고 3초 후에 아무 소리도 수신되지 않으면 녹음이 중지됩니다. 에 대한 자세한 내용은 sox해당 항목을 참조하세요.Linux용 매뉴얼 페이지.

답변3

당신이 사용할 수있는arecord이를 위해.

으로 사용 가능한 장치를 얻으세요 arecord -l. 그러면 다음과 같은 결과가 생성됩니다.

card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

그런 다음 USB 마이크(카드 1, 하위 장치 0)를 사용하여 녹음하려면 다음과 같이 하십시오.

arecord --device="hw:1,0" --format=s16_le --rate=48 rec_$(date "+%F_%H-%M-%S").wav

-f cd에 대한 단축키 도 있습니다 --format=s16_le --rate=44100.

기본 오디오 소스 설정

제공하지 않으면 에서 녹음됩니다 --device.arecord기본오디오 소스. 현재 기본 소스를 표시하려면 다음을 실행하세요.

pactl info | grep "Default Source"

최소한의 텍스트 메뉴를 사용하여 기본 소스를 변경하려면 다음을 사용할 수 있습니다.fzf:

pactl set-default-source $(pactl list short sources | cut -f2 | fzf)

카드와 하위 장치 색인을 찾는 것보다 이것이 더 편하다고 생각합니다.

녹음하면서 들어보세요

오디오 장치를 듣고 동시에 녹음하는 것이 유용한 경우가 많습니다. arecord표준 출력에 쓰기를 수행 -한 다음 해당 오디오 데이터를 파이프로 연결하여 이를 수행할 수 있습니다.tee오디오를 파일에 기록하고 다음으로 전달합니다 aplay.

arecord -f cd - | tee rec.wav | aplay -

파일 변환

WAVE 파일을 원하는 형식으로 변환하십시오.

  • 에게MP3:ffmpeg -i rec.wav rec.mp3
  • 에게오그:ffmpeg -i rec.wav rec.ogg
  • 에게FLAC:flac rec.wav -o rec.flac

답변4

@Ahmad에게 감사드립니다. 이것은 나에게 효과적이었습니다.

sox -e signed-integer -L -b16 -c2 -r44100 -t raw "|parec -d alsa_output.pci-0000_0c_00.4.iec958-stereo.monitor" -t mp3 -c2 -C 320.01 stream.mp3 silence 1 0.1 3% 1 3.0 3%

여기서 입력 스트림 매개변수는 다음을 사용하여 볼 수 있습니다 pacmd list-sinks.

name: <alsa_output.pci-0000_0c_00.4.iec958-stereo>
sample spec: s16le 2ch 44100Hz
properties:
        alsa.resolution_bits = "16"

관련 정보