태그 보관물: 라디오

Pogoplug를 NAS로 – 라디오 녹음하기

원래는 하드 디스크도 설정하고, FTP도 설치하고 설정하고 하며 차근차근 포스팅을 할 예정이었는데 중간에 쓰다 보니 몇 번이나 한 거 기억해서 쓰기도 힘들고 해서 지금 하고 있는 거 먼저 올린다. 이제부터의 글들은 포고플러그에만 제한되는 내용은 아니다. 대부분의 리눅스에서 쓸 수 있다.
먼저 하드 디스크가 마운트 된 상태라고 가정한다. 녹음 파일은 여기에 저장될 것이다. 이 글은 MMS 프로토콜을 통한 녹음만 해당 된다. 다른 프로토콜은 아래의 구문들을 조금씩 고치거나 다른 프로토콜에 대한 플레이어를 쓰거나 추가적으로 프로그램을 설치해 쓰면 될 것이다.

원래 라디오 녹음에 대해서는 얘기만 듣다가 흥미가 생겨 어제부터 계속 이것저것 해보았다. 처음에는 Mplayer를 사용해 녹음을 해보려 했으나 WAV로 밖에 녹음이 안 돼 용량 때문에 변환 작업이 꼭 필요했다. WAV인 만큼 한 시간이나 두 시간을 녹음하면 용량도 기가바이트 단위가 돼버리고, 한 시간 녹음을 하면 다시 그 이상의 변환 시간이 필요했다. 안 그래도 포고플러그는 여타 다른 NAS에 비해서는 성능이 좋지 않기에 많은 프로세스를 차지하는 프로그램은 지양하는 것이 좋다. 또 종료 시간을 따로 지정하는 옵션이 없어 sleep으로 종료 시간을 지정해야 하는데 sleep을 실행하는 순간 계속 Mplayer도 같이 멈춰버려서 다른 게 없나 찾아 보니 VLC라는 프로그램이 있었다. MP3로 바로 압축해서 저장이 되고, 녹음 종료 시간도 지정해놓을 수 있어서 VLC를 선택했다.
먼저 VLC가 없다면 설치한다.

pacman -S vlc

용량도 좀 있고 파일이 많아 시간이 좀 많이 걸린다. Root 사용자가 아닌 다른 계정으로 모든 작업을 하고 있다면 상관 없지만 만약 Root 사용자로 모든 작업을 한다면, 일단 설치하고 프롬프트에 vlc를 실행시켜 보면 Root 사용자는 보안의 문제로 사용할 수 없다고 하며 종료한다. 일단 Root 사용자로 실행이 되게 수정하자. 설정을 수정하는 게 아니라 프로그램을 수정한다. 여기서는 sed라는 프로그램을 사용한다. 여러 파일들의 특정 열이나 문자를 조건에 맞게 일괄적으로 바꾸는 프로그램이다. 없다면 받아 설치한다.

pacman -S sed

설치하고 아래와 같이 입력한다.

sed -i 's/geteuid/getppid/g' `which vlc`

이러면 수정이 된다. vlc를 다시 입력해 Root 권한에서도 작동이 되는지 확인한다.
이제 몇 가지 밑작업을 한다. 현재 나는 /data에 하드 디스크가 마운트 되어 있고, /data/radio, /data/tmp라는 폴더를 만들고 권한을 모두 777을 줬다. tmp 폴더를 따로 만들어 먼저 이 폴더에서 녹음 파일을 만들고 녹음이 끝나면 radio 폴더로 옮긴다. 이는 녹음 도중에 radio 폴더에 접속했을 때 불완전한 파일을 듣는 걸 방지하기 위함이다.
다음은 적당한 곳에 실행 스크립트 파일을 만든다. 나는 /radio라는 폴더를 만들었다

mkdir /radio

/radio/(라디오 방송국).sh와 같은 방식으로 실행 파일을 만들었다. 실행 파일 하나는 하나의 방송국을 녹음하는 데에 쓰일 것이다.
예로 MBC FM4U의 녹음 스크립트 파일을 만들어 보겠다.

nano /radio/mbc_fm4u.sh

아래의 스크립트를 복사해서 붙여넣는다. VLC에 관한 스크립트를 제외하고는 간단한 구문이라 입맛에 맞게 고치면 된다. VLC 구문의 옵션은 너무 많아서 나도 대충 이렇게 저렇게 붙여서 만들었다. 여기서는 라디오 프로그램 이름, 녹음 시간, 최종 저장 폴더를 변수로 놓았다. ID3 태그도 대한 부분도 있는데 처음에 mimms와 Mplayer 가지고 끙끙댈 때 거기서는 기능을 지원해서 넣어놨는데 VLC에서는 어떻게 적용하는지도 모르겠고 일단 그냥 남겨 놓은 것이다. 필수적인 건 아니니 저 부분은 지워도 된다. 공백 처리를 하려고 하니 이것저것 할 게 생겨서 그냥 언더바(_)로 대체했다.

또한 아래의 라디오 스트리밍 주소는 청주MBC의 라디오 주소로 MBC 라디오 본사에서는 스트리밍 주소를 현재 제공하지 않는다. 지금은 대부분이 공개하지 않고 앱이나 웹의 프로그램으로만 들을 수 있으며, 주소를 그대로 공개하는 건 지방의 MBC들이다. 지방의 MBC는 지방에 있는 사람은 알듯 몇몇 라디오 프로그램은 그 지방의 방송을 송출한다. 인기 프로그램들은 대부분 본사의 라디오 방송을 그대로 보내주니 감안하고 사용하도록 한다. 이도 사정에 따라 계속 없어지거나 주소가 변하니 처음에는 녹음이 됐는데 나중에 안 된다면 주소를 적절히 수정해 사용한다.

#!/bin/bash
RADIO_ADDR="mms://211.181.136.136/livefm"
RADIO_NAME="MBC FM4U"

PROGRAM_NAME=$1
RECORD_MINS=$2
DEST_DIR=$3

REC_DATE=`date +%m%d`
MP3_FILE_NAME=$PROGRAM_NAME"_"$REC_DATE.mp3

ID3_TITLE=$REC_DATE" - "$PROGRAM_NAME
ID3_ARTIST=$RADIO_NAME
ID3_ALBUM=$PROGRAM_NAME
ID3_YEAR=`date +%Y`

cd /data/tmp
cvlc -q "$RADIO_ADDR" ":sout=#transcode{acodec=mp3,ab=128}:std{access=file,mux=dummy,dst="$MP3_FILE_NAME"}" --run-time=$RECORD_MINS vlc://quit

mkdir -p $DEST_DIR
mv $MP3_FILE_NAME $DEST_DIR

다음 만든 스크립트 파일에 실행 권한을 준다.

chmod a+x mbc_fm4u.sh

이제 실행 스크립트에 변수를 넣어 실행하면 녹음이 시작될 것이다. 테스트를 해보자. 다음과 같이 넣어봤다.

/radio/mbc_fm4u.sh Temp 10 /data/radio/mbc_fm4u

Temp라는 라디오 프로그램 이름, 그리고 10초간 녹음을 하고 끝나면 /data/radio/mbc_fm4u 폴더로 파일을 가져다 놓는다. 안 된다면 위의 구문상 오류가 있거나 파일이 이동을 했는데 파일을 실행시켜도 소리가 안 나면 녹음에 문제가 있는 것이다. 오류가 날 여지는 다양하니 처음부터 뭐가 잘못 됐는지 살펴보거나 조금씩 수정하길 바란다.

이제 스크립트만 제대로 짜졌다면 정해진 시간에 녹음을 시작하게 스케줄을 설정하기만 하면 된다. crontab을 이용해보자. crontab은 정해진 시간이나 날짜에 지정한 작업을 수행하는 리눅스 내장 서비스이다. 기본적으로 crontab은 내장된 vi를 사용하기 때문에 이걸 nano로 바꿔서 하는 게 편하다. 시스템 기본 에디터를 nano, 혹은 사용하는 에디터로 바꾼다.

export EDITOR=nano

그런 다음 crontab에 스케줄을 추가한다. 그냥 한 줄 죽 써주고 저장하면 된다. 아래는 위의 스크립트로 만든 예이다.

0 22 * * * /radio/mbc_fm4u.sh Music_City 7320 /data/radio/mbc_fm4u/musiccity

각 항목은 공백으로 구분한다. 맨 앞부터 분, 시, 일, 달, 주, 실행할 스크립트이다. 분과 시는 최소 시작 단위니 꼭 써줘야 하고 * 혹은 ,를 사용해 격일이나 휴일을 두는 둥 조건을 좀 더 다양하게 줄 수 있다. 자세한 것은 cron – ArchWiki를 참조한다.
이 명령을 해석해 보자. MBC FM4U, 성시경의 음악도시를 녹음하는 스크립트다. 매일 매달 매주 22시 0분에 실행하는데 서버 시간과 포고플러그의 시간이 몇 초 정도 차이가 날 수 있다. 구조상 인터넷 라디오가 항상 좀 더 느리다. 많은 차이가 나지는 않으니 여분의 시간 없이 그냥 이렇게 설정했다.

이제 잘 되는지 안 되는지 기다리는 일만 남았다. 그리고 녹음 중에는 포고플러그의 CPU 리소스를 대부분 다 차지하니 그 시간대에는 무리한 명령을 주지 않도록 하자.