Record CBS Music Radio in every day
Purpose
매일 낮 11시 부터 1시간 동안 CBS 뮤직 FM에서 진행되는 신영음
을 듣고 싶다. 아주 오래 전 가장 좋아했던 라디어 프로가 정은임씨가 진행하던 영화음악 이었는데 한참 후에 알게된 신영음
을 통해 내가 좋아하는 영화음악을 다시 들을 수 있게 되었다.
문제는 라디오 방송 시간. 어디서든 CBS FM 라디오를 들을 수 있는 공식 레인보우
앱 이나 myTuner Pro
같은 앱을 쓰면 들을 수 있지만, 근무시간에 라디오를 듣기도 그렇고, 결정적으로 11시 30분에서 12시 사이에 점심 시간이 시작되어 제대로 듣기가 힘들었다.
이를 해결(?)하기 위해 그냥 스트리밍을 녹음해서 듣는 걸로
Step 1 - Find out the streaming URL
마이너 라디오 방송이라 그런지 의외로 streaming 주소가 쉽게 찾아지지 않았다. 그래도 myTuner Pro앱이나 Korea onAir
같은 OS X용 앱에서도 CBS를 들을 수 있는 걸 보면 분명히 어딘가에는 스트리밍 주소가 있을 거라는 생각에 찾다 드디어 제대로 동작하는 스트리밍 주소를 찾을 수 있었다.
http://aac.cbs.co.kr/cbs939/_definst_/cbs939.stream/playlist.m3u8
Step 2 - register recording task to launchd
crond를 사용해서 매일 오전 11시 부터 녹음되도록 할까 했는데 OS X에서는 crond를 대체하는 launchd를 사용하는 게 낫다는 글을 보고 한번 해보기로 했다.
비교적 간단(?)하게 원하는 내용을 설정할 수 있는 crond와 달리 launchd는 plist 파일을 이용해서 원하는 작업을 정의해야 한다고 한다.
cychong.record.plist
file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>cychong.record.cbs</string>
<key>ProgramArguments</key>
<array>
<string>/Users/cychong/Dropbox/working/mp3/record.py</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>10</integer>
<key>Minute</key>
<integer>57</integer>
</dict>
</dict>
</plist>
이제 launchctl을 이용해 위 plist 파일을 등록한다.
$ launchctl load cychong.record.cbs.plist
제대로 등록되었는 지 확인은 아래 명령어를 이용
mbpr15:mp3 cychong$ launchctl list |grep cychong
- 0 cychong.record.cbs
실제로 지정된 시간(11시 3분 전)에 실행되도록 한 script는 아래와 같다.
#!/usr/bin/env python
import os
from time import localtime, strftime
filename = strftime("cbs_cinema_%Y%M%d.mp3", localtime())
os.system("/usr/local/bin/ffmpeg -y -t 3605 -i http://aac.cbs.co.kr/cbs939/_definst_/cbs939.stream/playlist.m3u8 /Users/cychong/Dropbox/working/mp3/%s" %filename)
생성된 파일 크기
size= 938kB time=00:01:00.00 bitrate= 128.1kbits/s speed=1.98x
ffmpeg이 출력하는 정보를 보면 128.1kbps이므로 1분당 960.75KB(128.1/8*60
) 의 파일 생성. 1시간 짜리를 녹음하면 대략 58MB정도의 파일을 생성할 수 있다.
처음에는 podcast에 등록해서 매일 저녁에 자동으로 그날 녹음한 파일을 폰에 다운로드 받게 할까 했는데 파일 크기가 크지 않아 그냥 dropbox에 저장되도록 하고 dropbox app을 이용해서 들어보려고 한다.
How about mms streaming?
It is not clear whether ffmpeg support the recording mms streaming. I recommend to check mimms
brew install mimms
mimms -t 60 mms://STREAMING_ADDRESS
Something is wrong
실제 사용해 보니 이상하게 mp3 파일이 1시간 짜리 58MB가 아니라 1.2MB 정도만 만들어지고 만다. 혹시나 해서 예약 시간을 옮겨서 눈을 부릅뜨고 실험해 봐도 정상적으로 동작하는데. 녹음된 1분 가량의 분량은 정상적으로 재생되는데.
뭘까 뭘까 하다 든 생각이 power-saving. launchd를 통해 녹음 작업을 등록한 머신은 정상적으로 power-saving 기능이 기본 설정되어 있어 혹시 이와 관련된 게 아닌가 싶다. 그래서 동일한 plist 파일을 power saving 기능을 꺼 놓은 맥미니에 설정했더니 정상적으로 동작한다. 다행이다.