사용자 도구

사이트 도구


project:alternativeradiorecorer

무인 라디오 녹음: 대체방법

무인 라디오 녹음기 만들기 문서를 통해 간단하게 라디오 녹음을 하는 스크립트를 제작해 봤습니다. 사실 이런 방식으로 스크립트를 활용하는 아이디어는 흔한 것이죠. 제가 자주 가는 모 IT 커뮤니티의 게시물을 검색해 봐도 비슷한 글을 많이 찾을 수 있습니다.

이 방법은 어떻게든 방송의 URL이 공개되어 있다면 사용하기 괜찮습니다. 사실 이미 거의 모든 방송국의 URL 주소가 알려지기는 했어요. 그렇지만 이런저런 이유로 인해 순수하게 방송 URL에 접근하기 어려운 경우에는 어떻게 해야 할까요? 혹은 인터넷 방송 외에 다른 소리를 녹음해야 한다면?

예를 들어 EBS 외국어 라디오 채널 페이지를 보면, 플레이어가 플래시로 되어 있어 URL을 단박에 알기는 어렵습니다(사실, 이것도 이미 주소가 다 알려져 있어서 검색하면 다 나오지만, 추출하기 어려운 상황이라고 가정하도록 하죠). 이럴 때는 URL을 알아내기 위해 애를 쓰는 것보다 아예 웹브라우저를 통째로 활용해 녹음을 진행해 볼 수도 있습니다. 본 문서에는 아예 웹브라우저를 활용해 음원을 녹음하는 방식을 기록해 봅니다.

시나리오

어떤 사이트에서 제공하는 오디오를 녹음하려고 합니다. 그런데 안타깝게도 이 주소를 파악하기가 쉽지 않다고 합니다. 음원을 재생하는 모듈이 어떤 바이너리(이를테면, 플래시)로 되어 있어 그 음원의 주소가 가려져 있습니다. 예를 들면 EBS 외국어 라디오를 들 수 있습니다.

이런 음원의 주소를 추출하려고 애쓰기 보다는, 아예 셀레늄구글 크롬 드라이버를 이용해 브라우저를 운용해서 음원 추출을 시도합니다. 브라우저에서 재생되는 음원은 어떻게든 그 시스템의 오디오를 이용할 것입니다. 해당 오디오에서 흘러가는 스트림을 저장할 수만 있다면, PC에서 재생되는 모든 소리를 별도로 저장할 수 있게 됩니다. 또 셀레늄과 크롬 드라이버는 내가 원하는 대로 웹브라우저를 제어할 것입니다. Profit!

준비물

실행 중인 리눅스 기반 헤드리스 서버가 있어야 합니다(물론 데스크탑도 무방합니다). 저는 우분투를 기준으로 설명합니다. 셀레늄 코드는 파이썬으로 작성하며 3.x 버전을 기준입니다. 물론 virtualenv 환경을 적극 권장합니다.

과정

패키지 설치

아래 목록은 시스템에 설치될 패키지들입니다.

  • pulseaudio
  • pulseaudio-utils
  • chromium-browser
  • adobe-flashplugin
  • xvfb
  • libgconf-2-*

아래 목록은 별도로 다운로드 받기를 권장합니다.

  • chromedriver

아래 목록은 pip를 통해 다운로드 받습니다.

  • selenium
  • pyvirtualdisplay

브라우저는 물론 파이어폭스를 이용할 수도 있습니다. 그러나 제가 문서를 작성하는 시점에서 파이어폭스 드라이버는 동작에 필요한 일부 기능이 제대로 동작하지 않는 문제가 있었습니다. 이러한 문제는 차후 고쳐질 수 있으니 사용시 문제가 없다면 변경해도 무방합니다.

크롬 드라이버는 우분투 저장소의 것보다는 링크의 최신 버전을 다운로드 받는 것이 더 좋습니다. 마찬가지로 저장소 버전은 일부 기능이 동작하지 않는 문제가 있었습니다.

PulseAudio 세팅

음원 녹음 테스트

무음 구간 스킵

셀레늄 스크립트

마치며

사실 열심히 생각해서 구현하고 보니 EBS 외국어 라디오 채널의 URL이 버젓이 공개되어 있어 조금 허탈했습니다. 역시 세상에는 저보다 뛰어나신 분들이 많아요. :-)

그치만 이 방법은 이론상 웬만한 웹사이트의 음원을 거의 다 녹음 가능한 방법입니다. 게다가 사운드 시스템에서 흘러가는 디지털 스트림을 리다이렉션해서 저장하는 거라 라인 인/아웃 방법의 녹음과는 다르게 음질의 열화도 거의 일어나지 않습니다. 인코딩시 발생하는 열화 외에는 말이죠.

사실 이런 원리는 여러분들이 흔히 사용하는 녹음기와 다를 바 없습니다. 또 셀레늄을 이용한 웹브라우저 자동화는 소프트웨어 개발 테스트 때 많이 사용됩니다. 사람이 일일이 하기 힘든 소프트웨어의 테스트를 빠르고 정확하게 대신하기 위해 사용됩니다. 예를 들면, UI 중 어떤 버튼을 눌렀을 때 기대한 대로의 반응이 나오는가 나오지 않는가, 어떤 링크를 클릭했을 때 올바르게 페이지가 넘어가는가, 또 어떤 페이지는 이러저러한 내용을 제대로 표시하는가, 이런 지루한 것들 말이죠.

이 둘을 서로 합쳐 보면 요런 것도 나올 수 있구나 하는 게 재미있어 한 번 만들어 봤습니다. 무인 라디오 녹음기 만들기 문서 때와 마찬가지로 녹음된 콘텐츠는 부디 개인적인 용도로만 활용해 주십시오.

project/alternativeradiorecorer.txt · 마지막으로 수정됨: 2016/11/19 17:14 저자 changwoo

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki