radikoの仕様が変わってた

ことに、2回も録音失敗してから気付きました。

上記リンク先で

237 :まちがって名前消しちゃいました。:2012/10/24(水) 16:49:48.22 ID:???
player_2.0.1.00.swf

player_3.0.0.01.swf

swfextract -b 5

swfextract -b 14

radiko.smartstream.ne.jp

w-radiko.smartstream.ne.jp

simul-stream

simul-stream.stream

_defInst_

_definst_

これでイケた。

とあったのでちまちまスクリプトを修正してたら、下のGistでエレガントに解決してました。

wget -q "http://radiko.jp/v2/station/stream/${channel}.xml"
stream_url=`echo "cat /url/item[1]/text()" | xmllint --shell ${channel}.xml | tail -2 | head -1`
url_parts=(`echo ${stream_url} | perl -pe 's!^(.*)://(.*?)/(.*)/(.*?)$/!$1://$2 $3 $4!'`)
rm -f ${channel}.xml
#
# rtmpdump
#
rtmpdump -v \
    -r ${url_parts[0]} \
    --app ${url_parts[1]} \
    --playpath ${url_parts[2]} \
    -W $playerurl \
    -C S:"" -C S:"" -C S:"" -C S:$authtoken \
    --live \
    --flv $output

このままだとcronで予約録音できないので少々手を入れて使ってます。

広告

rtmpdumpでNHK-FMを録音する

PC(というかMac)でNHK-FMを録音できないかと頼まれたのでやってみました。

必要なもの

  • rtmpdump

ストリーミングを保存するコマンド。ソースからビルド(後述)。

  • ffmpeg

保存したflvファイルを変換するコマンド。Homebrewでインストール。

rtmpdump のビルド

Homebrew で手に入る version 2.3 だと失敗するらしいのでソースからビルド。

git clone git://git.ffmpeg.org/rtmpdump
cd rtmpdump
make SYS=darwin
sudo make install SYS=darwin

make install のときも SYS=darwin が要るんですな。

録音スクリプト

以下のようなスクリプト (nhkfmrec.sh) を作りました。
引数なしで実行するとその時点から2時間+2分の録音が始まります。
第一引数で録音時間を分で指定することができます。念のため内部で2分追加してますが。
RTMPDUMP, FFMPEG, SAVEDIRは環境に応じて変更してください。

#!/bin/sh
XDATE=`date -v+1M +"%Y-%m%d-%H%M"`
STOPMINS=${1:-120}
STOPSECS=`expr ${STOPMINS} \* 60 + 120`
RTMPDUMP=/usr/local/bin/rtmpdump
FFMPEG=/usr/local/bin/ffmpeg
AFCONVERT=/usr/bin/afconvert
SAVEDIR=/Users/hoge
FLVFILE=${SAVEDIR}/NHK-FM_${XDATE}.flv
AACFILE=${FLVFILE%.flv}.aac
${RTMPDUMP} --rtmp "rtmpe://netradio-fm-flash.nhk.jp" \
    --playpath 'NetRadio_FM_flash@63343' \
    --app "live" \
    -W http://www3.nhk.or.jp/netradio/files/swf/rtmpe.swf \
    --live \
    -B $STOPSECS \
    -o ${FLVFILE}
${FFMPEG} -i ${FLVFILE} -vn -acodec copy ${AACFILE}
if [ $? != 0 ]; then
    ${FFMPEG} -i ${FLVFILE} ${AACFILE}
fi
${AFCONVERT} -f m4af -d aach -b 48000 ${AACFILE}
#rm ${FLVFILE} ${AACFILE}
exit 0

rtmpdumpコマンドで録音したファイルを flv → aac → m4a と変換してます。
--rtmp--playpath の値を変えればNHK第一や第二も録音できるはずです。

タイマー録音

Mac は完全に launchd に移行してるのかと思ったら cron も動いてるので cron で予約録音しました。launchdのためにXML書くの面倒臭いです。
crontab -e を実行して以下のように入力します。ZZコマンドで保存して終了。

59 20 * * 0 /path/to/nhkfmrec.sh 120

この設定だと「毎週日曜日20時59分に /path/to/nhkfmrec.sh 120 を実行」という意味になります。

参考