ラジコの録音、東京の放送を取得する一案(8 録音スクリプト
サーバー接続してトークンを取得して録音するスクリプトを作ります。
大部分はネットから拾ってきたコードです。色々手を入れています。
とくに「get torken from server」の部分です。
ここで、クライアントを使って、サーバーにトークンを取りに行っています。
クライアントはこちら↓
サーバークライアントを試す
あと一部「mp3」と書いてありますが、aacのママとしています。
この方が音質もよくファイルサイズも小さいからです。これは知った時驚きました。
ファイルサイズは約3分の1で、しかもエンコードする時間も不要です。
また出力先を別で指定しているのは、
webアプリで簡単に視聴できるようにするためです。
#!/bin/sh # TBS:TBSラジオ # QRR:文化放送 # LFR:ニッポン放送 # NSB:ラジオNIKKEI # INT:INTER FM # FMT:TOKYO FM # FMJ:J-WAVE # JORF:ラジオ日本 # BAYFM78:bayfm78 # NACK5:NACK5 # YFM:FMヨコハマ if [ $# -eq 3 ]; then OUTFILEPREFIX=$1 RECTIMEMIN=$2 CHANNEL=$3 else echo "usage : $0 OUTFILEPREFIX RECTIMEMIN CHANNEL" exit 1 fi OUTFILEPREFIX=$1 RECTIMEMIN=$2 CHANNEL=$3 RTMPDUMP=/usr/local/bin/rtmpdump FFMPEG=/usr/bin/ffmpeg MP3PATH=[mp3を吐き出したいディレクトリ] OUTFILEBASEPATH=[処理を実行するディレクトリ] OUTFILENAME=${OUTFILEBASEPATH}/${OUTFILEPREFIX}_`date +%Y-%m-%d` FLVFILEEXT=".flv" AACFILEEXT=".aac" MP3FILEEXT=".mp3" MARGINTIMEMIN=1 RECTIME=`expr ${RECTIMEMIN} \* 60 + ${MARGINTIMEMIN} \* 2 \* 30` # 30sec wait echo "===== `date` Wait 30sec. =====" for f1 in 2 1 0 do for f2 in 9 8 7 6 5 4 3 2 1 0 do echo -n "$f1$f2\r" sleep 1 done done echo `date` Start. #開始時刻 START=`date +%s` cd ${OUTFILEBASEPATH} playerurl=http://radiko.jp/player/swf/player_3.0.0.01.swf playerfile=./player.swf keyfile=./authkey.png # # get player # if [ ! -f $playerfile ]; then wget -q -O $playerfile $playerurl if [ $? -ne 0 ]; then echo "failed get player" exit 1 fi fi # # get keydata (need swftools) # if [ ! -f $keyfile ]; then swfextract -b 14 $playerfile -o $keyfile if [ ! -f $keyfile ]; then echo "failed get keydata" exit 1 fi fi # # get torken from server # CRIENT=`./client.pl $CHANNEL` echo $CRIENT authtoken=`echo $CRIENT| cut -d ' ' -f2` # # rtmpdump # RETRYCOUNT=0 while : do ${RTMPDUMP} -v \ -r "rtmpe://f-radiko.smartstream.ne.jp" \ --playpath "simul-stream.stream" \ --app "${CHANNEL}/_definst_" \ -W $playerurl \ -C S:"" -C S:"" -C S:"" -C S:$authtoken \ --live \ --flv ${OUTFILENAME}${FLVFILEEXT} \ --stop ${RECTIME} RET=$? #録音終了 END=`date +%s` SS=`expr ${END} - ${START}` if [ $SS -gt `expr $RECTIME - 30` ] ; then echo "OK... " $SS " > " $RECTIME "(-30)" else echo "NG... " $SS " <= " $RECTIME "(-30)" NOKORI=`expr $RECTIME - $SS` echo ./simple_rec_radiko.sh $OUTFILEPREFIX $NOKORI $CHANNEL # ------- echo *------------------- RECOVERY START ------------------------* echo *------------------- RECOVERY START -----`date`-------------* >> err.log 2>&1 ./mail_err.sh ./simple_rec_radiko.sh $OUTFILEPREFIX $NOKORI $CHANNEL >> err.log 2>&1 & echo *------------------- RECOVERY E N D -----`date`-------------* fi if [ $RET -ne 1 -o `wc -c ${OUTFILENAME}${FLVFILEEXT} | awk '{print $1}'` -ge 10240 ]; then echo RETURN ... $RET echo `wc -c ${OUTFILENAME}${FLVFILEEXT} | awk '{print $1}'` break elif [ ${RETRYCOUNT} -ge 5 ]; then echo "failed rtmpdump" exit 1 else RETRYCOUNT=`expr ${RETRYCOUNT} + 1` fi done echo `date` MP3 Encode Start. ${FFMPEG} -y -i "${OUTFILENAME}${FLVFILEEXT}" -vn -acodec copy "${OUTFILENAME}${AACFILEEXT}" # ${FFMPEG} -y -i "${OUTFILENAME}${FLVFILEEXT}" -acodec libmp3lame -ab 128k "${OUTFILENAME}${MP3FILEEXT}" echo `date` MP3 Encode E n d. # mv ${OUTFILENAME}${MP3FILEEXT} ${MP3PATH} mv ${OUTFILENAME}${AACFILEEXT} ${MP3PATH} rm -f ${OUTFILENAME}${FLVFILEEXT} echo "===== `date` E n d. ====="
ディスカッション
コメント一覧
まだ、コメントがありません