らじる★らじるも録音したい
2010年当時、radikoではNHKのラジオ番組は視聴できなかった...。当時はなぜ参加してくれないんだと嘆いていたのだが、その後、2011年にはらじる★らじるが始まっていた。radikoで録音していれば、きっとそのうち らじる★らじるでも録音したくなるはず。そうだ、rec_radiko.shと同じ基準で利用できるrec_radiru.shを作ってみよう!
二つの方式
らじる★らじるを録音するには二つの方法が公開されていた。(感謝です!)
どちらの方式を利用させて頂くか迷ったが、すでにrec_radiko.shでrtmpdumpを使っているので、rtmpdumpを利用する方法でやってみた。
rtmpdumpバージョン2.4が必要
"NetRadio_R1_flash@63346" # らじる★らじる ラジオ第1ストリーム "NetRadio_R2_flash@63342" # らじる★らじる ラジオ第2ストリーム "NetRadio_FM_flash@63343" # らじる★らじる NHK-FMストリーム
- 認証不要でいきなり以下のrtmpdumpコマンドで保存される。
$ 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 \
-stop 30 \
-o NHK-FM.m4a
- ...はずなのだが、エラーでファイルに保存できない...。
- どうやら、らじる★らじるをダウンロードするにはrtmpdump2.4が必要らしい。
- 自分の環境のrtmpdumpは、homebrewでインストールした2.3なのであった。
- そこで、rtmpdump2.4をダウンロードしてみた。(バイナリ版)
- Downloads | trick77.com
- インストーラーに従って、インストールしてみた。
- これで、らじる★らじるのR1、R2、FMも録音できるようになった!
ファイル形式
iTunesのHE-AAC v2サポート
- ところで、.flvのままではiTunesでは視聴できない...。
- でも、.flvというコンテナ(入れ物)から中にあるオーディオファイルを無劣化でそのまま取り出すことはできる。
$ ffmpeg -i NHK-FM.flv -acodec copy NHK-FM.m4a
- そして、この取り出したNHK-FM.m4aをダブルクリックしてみると、iTunesが起動し、ライブラリに取り込まれ、あっさり再生されてしまった!
- 確か、2010年の時点では、iTunesがサポートしているプロファイルやHE-AACのバージョンの違いによって、そのままでは再生できなかったはず。
- そうか、そうか、これはらじる★らじるだから、radikoとは違ってiTunesで再生可能な形式を使ってくれているのかもしれない。
- そう思って、今度はradikoのflvから同じようにffmpegでオーディオファイルを取り出してみた。
$ ffmpeg -i J-WAVE_20130120-1700.flv -acodec copy J-WAVE_20130120-1700.m4a
- 同じようにダブルクリックしてみると、やはりiTunesが起動し、ライブラリに取り込まれ、あっさり再生されてしまった!
素晴らしい!最新のiTunesは、radikoのHE-AAC v2に対応していたのだ!
-
- iPad 2 - 技術仕様
- 上記はiPad2の技術仕様だが、オーディオ再生「対応するオーディオフォーマット:HE-AAC(V1およびV2)」とある。
- iPad2が対応していれば、きっとそれを管理するiTunesも対応しているはずだと予測した。
m4a変換処理の追加
- というわけで、過去の苦労はあっさり過去のものとなり、最新の環境ではm4aに変換すれば当然のように聴ける、という幸せが訪れた。
- これは同時に変換処理も絡めたくなる。
- 変換といっても、flvというコンテナ(入れ物)の中からオーディオファイルをそのまま取り出すだけなので、無劣化かつ一瞬である。
$ 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 \ -stop 30 \ -o NHK-FM.flv $ ffmpeg -i NHK-FM.flv -acodec copy NHK-FM.m4a $ rm -f NHK-FM.flv
- m4aに変換してしまったら、元のflvは削除してしまう。(無劣化で取り出したオーディオファイルのはずだから)
rec_radiru.shにまとめる
- らじる★らじるを録音するのは苦労最小限に簡単だけど、これをrec_radiko.shと同じ基準で使えるようにしておくことが大事。
- メインの処理はたった3コマンドなのだけど、rec_radiko.shと同じ操作性を追加するために、rec_radiru.shは以下のようになった。
#!/bin/sh # Original: http://qiita.com/items/549b42c8b361807d96a2 # Original: https://gist.github.com/1185755 saiten / radiru.txt # Install: rtmpdump2.4 http://trick77.com/downloads/ # 使い方 show_usage() { echo "Usage: $COMMAND [-o output_path] [-t recording_seconds] NHK-R1 | NHK-R2 | NHK-FM" echo ' -o Default output_path = $HOME/Downloads/${station_name}_`date +%Y%m%d-%H%M`.flv' 1>&2 echo ' a/b/c/ = $HOME/Downloads/a/b/c/NHK-FM_20130123-1700.flv' 1>&2 echo ' a/b/c = $HOME/Downloads/a/b/c.flv' 1>&2 echo ' /a/b/c/ = /a/b/c/NHK-FM_20130123-1700.flv' 1>&2 echo ' /a/b/c = /a/b/c.flv' 1>&2 echo ' ./a/b/c/ = ./a/b/c/NHK-FM_20130123-1700.flv' 1>&2 echo ' ./a/b/c = ./a/b/c.flv' 1>&2 echo ' -t Default recording_seconds = 30' 1>&2 echo ' 60 = 1 minute, 3600 = 1 hour, 0 = go on recording until stopped(control-C)' 1>&2 } # 引数解析 COMMAND=`basename $0` while getopts ho:t: OPTION do case $OPTION in o ) OPTION_o="TRUE" ; VALUE_o="$OPTARG" ;; t ) OPTION_t="TRUE" ; VALUE_t="$OPTARG" ;; * ) show_usage ; exit 1 ;; esac done shift $(($OPTIND - 1)) #残りの非オプションな引数のみが、$@に設定される if [ $# = 0 ]; then show_usage ; exit 1 fi # オプション処理 if [ "$OPTION_o" = "TRUE" ]; then if echo $VALUE_o|grep -q -v -e '^./\|^/'; then mkdir -p $HOME/Downloads ; cd $HOME/Downloads fi fname_ext="${VALUE_o##*/}" fname="${fname_ext%.*}" fext="${fname_ext#$fname}" wdir="${VALUE_o%/*}"; [ "$fname_ext" = "$wdir" ] && wdir="" fi if [ "$OPTION_t" = "TRUE" ]; then rectime=$VALUE_t fi mkdir -p ${wdir:=$HOME/Downloads} ; cd $wdir ; wdir=`pwd` output="${wdir}/${fname:=$1_`date +%Y%m%d-%H%M`}${fext:=.flv}" PLAYPATH[NHK-R1]="NetRadio_R1_flash@63346" # らじる★らじる ラジオ第1ストリーム PLAYPATH[NHK-R2]="NetRadio_R2_flash@63342" # らじる★らじる ラジオ第2ストリーム PLAYPATH[NHK-FM]="NetRadio_FM_flash@63343" # らじる★らじる NHK-FMストリーム echo "==== recording ====" echo "save as '$output'" /usr/local/bin/rtmpdump \ --rtmp "rtmpe://netradio-${1##*-}-flash.nhk.jp" \ --playpath "${PLAYPATH[$1]}" \ --app "live" \ -W http://www3.nhk.or.jp/netradio/files/swf/rtmpe.swf \ --live \ --stop "${rectime:=30}" \ -o "${output}" ffmpeg -v quiet -y -i "${output}" -acodec copy "${output%.*}.m4a" rm -f "${output}"
これでrec_radiko.shとrec_radiru.shはほぼ同じ操作性になった!
$ ./rec_radiru.sh -h Usage: rec_radiru5.sh [-o output_path] [-t recording_seconds] NHK-R1 | NHK-R2 | NHK-FM -o Default output_path = $HOME/Downloads/${station_name}_`date +%Y%m%d-%H%M`.flv a/b/c/ = $HOME/Downloads/a/b/c/NHK-FM_20130123-1700.flv a/b/c = $HOME/Downloads/a/b/c.flv /a/b/c/ = /a/b/c/NHK-FM_20130123-1700.flv /a/b/c = /a/b/c.flv ./a/b/c/ = ./a/b/c/NHK-FM_20130123-1700.flv ./a/b/c = ./a/b/c.flv -t Default recording_seconds = 30 60 = 1 minute, 3600 = 1 hour, 0 = go on recording until stopped(control-C) $ ./rec_radiru.sh -o radiru/ -t 10 NHK-FM ==== recording ==== save as '/Users/zari/Downloads/radiru/NHK-FM_20130125-0517.flv' RTMPDump 2.4 (c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL WARNING: No application or playpath in URL! Connecting ... WARNING: HandShake: Type mismatch: client sent 6, server answered 9 INFO: Connected... Starting Live Stream For duration: 10.000 sec INFO: Metadata: INFO: audiodatarate 48.00 INFO: audiocodecid mp4a 63.113 kB / 9.98 sec Download complete