사용자 도구

사이트 도구


project:soundrecord

리눅스 커맨드라인으로 녹음을

PulseAudio를 사용하여 PC에서 재생되는 소리를 덤프한다.

준비

pactl, parec, sox가 필요하다. 참고로 이번 조사로 처음 알게 된 프로그램. sox의 MP3 인코딩을 위해서는 우분투 기준 libsox-fmt-mp3 패키지를 별도로 설치한다.

준비 과정

장치 탐색

pactl list

이렇게 하면 리스트가 너무 많으니,

pactl list | grep -A3 '^소스 #'

줄여 보자. grep에 대해서는 미리 검색해보자. 출력이 한글로 나올 수 있다.

이제 좀 더 줄여 보자. awk의 $NF는 마지막 필드를 말한다. “monitor”라고 된 소스를 고르는 것이 도움이 될 것이다.

pactl list | grep -A3 '^소스 #' | grep '이름: .*\.monitor$' | awk '{print $NF}'

이 결과로 현재 PC에서는 “alsa_output.pci-0000_00_1f.3.analog-stereo.monitor”을 얻을 수 있었다.

parec, sox로 녹음

parec은 pulse audio의 오디오 데이터를 리다이렉트 시켜 주는 명령이다. sox는 음원에 대해 여러 작업을 할 수 있는 명령이다.

parec -d "alsa_output.pci-0000_00_1f.3.analog-stereo.monitor" | sox -t raw -r 44100 -e signed-integer -L -b 16 -c2 - -t mp3 -C "-4.2" out.mp3

이렇게 하면 소리가 출력되는 측시 out.mp3로 소리가 인코딩되어 저장된다. sox에서도 디바이스를 지정할 수 있지만 위처럼 리다이렉트 하는 것이 더 효율적으로 보인다. 왜냐면, 스크립트 시작 후 실제 소리 출력이 없는 동안은 parec이 출력을 내어 놓지 않아 무음구간을 만들지 않기 때문이다. 인코딩을 나중에 하고 싶다면 물론 이렇게 WAV로 저장할 수도 있다.

parec -d "alsa_output.pci-0000_00_1f.3.analog-stereo.monitor" | sox -t raw -r 44100 -e signed-integer -L -b 16 -c2 - -t wav out.wav

mp3의 경우 비트레이트 옵션이 관심의 대상이 된다. sox의 매뉴얼을 참고하자. 간단한 것만 보자면,

  • 고정 비트레이트의 경우 -C 128 처럼 주면 된다. 이 경우 128kbps로 인코딩된다.
  • -C 128.1처럼 소수점을 줄 수 있다. 디폴트는 .2이다. .0은 기본값을 쓴다는 뜻이다. .01은 최상의 퀄리티. .9는 가장 낮은 퀄리티이다.
  • 가변 비트레이트의 경우 음의 실수 표현을 쓴다. -C “-<size>.<quality>” 처럼 표현한다. 기본은 4.2. 더 자세한 것은 매뉴얼을 참고하자.

검증

적당한 동영상을 열어 재생 준비를 한다. 위 명령을 커맨드라인에 입력하여 녹음 준비를 하고, 동영상을 적절한 시간동안 재생한다. 동영상 재생을 중지하고 커맨트라인의 명령 또한 중지한다. 출력으로 나온 mp3 파일 또한 재생기에서 제대로 재생되는지 확인한다.

출처

project/soundrecord.txt · 마지막으로 수정됨: 2016/11/17 22:10 저자 changwoo

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki