JCBAインターネットサイマルラジオの仕様が変更された
以前、らじる★らじるをバッチファイルとWSHで録音するの記事でおまけでJCBAインターネットサイマルラジオの録音機能を付けていたが今回仕様が変わったので新しい仕様を解説して録音できるようにしたい。
http://hanpen.lsv.jp/blog.hanpen.net/%e3%82%89%e3%81%98%e3%82%8b%e2%98%85%e3%82%89%e3%81%98%e3%82%8b%e3%82%92%e3%83%90%e3%83%83%e3%83%81%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%81%a8wsh%e3%81%a7%e9%8c%b2%e9%9f%b3%e3%81%99%e3%82%8b/
JCBAインターネットサイマルラジオのパソコンでの聴取は下記のURLで聞ける
http://www.jcbasimul.com/
画面を下に動かすと放送局の一覧が出てくる
LISTENを押すと再生される
このLISTENを押す際にfirefoxを使うと再生URLが取得できる
firefox
https://www.mozilla.org/ja/firefox/new/
LISTENを押す前にF12を押してキャプチャー画面を出してキャプチャー画面の上のネットワークをクリックする。
そしてLISTENを押すとリストがずらずらと出てくるので右上の赤丸の検索入力の所にm3u8と入力するとファイルの位置の赤丸のURLが出てくる。
ここのURLを取得するため右クリックする
URLをコピーをクリックする。すると下記のURLがコピーされる。
http://musicbird-hls.leanstream.co/musicbird/JCB001.stream/playlist.m3u8?args=web_03&uid=固有の文字列
JCB001が放送局のIDになります。
uid=固有の文字列は特に必要ないのでカットしていいです。
これを録音するにはffmpeg.exeが必要なのでダウンロードする。
ffmpeg.exe
http://hp.vector.co.jp/authors/VA020429/ffmpeg/ffmpeg.html
https://ffmpeg.org/
ffmpeg.exeを解凍するとffplay.exeも同梱されてるので再生してみる。再生が不要な方は飛ばして構いません。
ffplay -i "http://musicbird-hls.leanstream.co/musicbird/JCB001.stream/playlist.m3u8?args=web_03"
このコマンドで再生できる。
ffmpeg.exeも同様に録音できるがバッチファイルとWSHで録音できるようにした。
D:\jcbaRec\にて実行する設定になっています。ここにffmpeg.exeと下記のスプリクトを置いてください。
途中で回線が切断されても時間計算して再録音し最後にmp3に変換するようになっています。
-起動例-
jcbaRec.bat JCB001 0:01:00 FMはな
jcbaRec.bat 放送局のID 録音時間1時間 録音番組名(ファイル名に含まれます)
jcbaRec.bat
@echo off REM ffmpegなどの位置のドライブ set drive=D: REM ffmpegなどの位置 set DFDirectory=D:\jcbaRec\ REM 録音ファイルの保存のドライブ set argdrive=D: REM 録音ファイルの保存先 set argDirectory=D:\jcbaRec\rec\ set argOut = "out" %drive% cd %DFDirectory% rem 録音ファイルの保存先フォルダチェックと作成 IF NOT EXIST "%argDirectory%" (md %argDirectory%) IF NOT EXIST "%argDirectory%OLD" (md %argDirectory%OLD) set ch=%1 if "%1"=="" goto usage if not "%2"=="" set argSTOPSEC=%2 if "%2"=="" goto usage if not "%3"=="" set argOut=%3 rem 録音終了日時を求める for /f "tokens=1,2" %%i in ('CScript Time.vbs /r:%argSTOPSEC%') do ( SET AUTHTOKEN_D=%%i SET AUTHTOKEN_T=%%j ) REM jcba set jcba=http://musicbird-hls.leanstream.co/musicbird/%ch%.stream/playlist.m3u8?args=web_03 set loopck=0 :loop rem 録音時間を秒に変換 for /f %%i in ('CScript Time.vbs /d:%AUTHTOKEN_D% /t:%AUTHTOKEN_T%') do SET AUTHTOKEN_END=%%i set STOPSEC=-t %AUTHTOKEN_END% if "%loopck%" == "0" set FLV_loop= if "%loopck%" geq "1" set FLV_loop=(%loopck%) set yyyymmdd=%date: =0% set hhmmss=%time: =0% set YMD=%yyyymmdd:~0,4%%yyyymmdd:~5,2%%yyyymmdd:~8,2%_%hhmmss:~0,2%%hhmmss:~3,2%%hhmmss:~6,2% set FLV=%YMD%_%ch%_%argOut% set RADI_PASS= REM 録音パラメータ if not "%jcba%"=="" ( set RADI=%DFDirectory%ffmpeg.exe -i "%jcba%" %STOPSEC% -acodec copy "%argDirectory%%FLV%%FLV_loop%.ts" set RADI_PASS=1 ) if "%RADI_PASS%"=="" goto usage echo 録音開始%date%_%time%_"%~3" >> log.txt echo 「%ch%」の「%argOut%」を録音開始、録音時間は「%argSTOPSEC%」 echo %RADI% >> log.txt echo %RADI% %RADI% echo 録音停止%date%_%time%_"%~3" >> log.txt for /f %%i in ('CScript Time.vbs /d:%AUTHTOKEN_D% /t:%AUTHTOKEN_T%') do SET AUTHTOKEN_EXIT=%%i if "%AUTHTOKEN_EXIT%" == "EXIT" goto loopEXIT if "%loopck%" geq "20" goto loopEXIT set /a loopck=loopck+1 REM Sleep[15秒数] set /a wtime=15*1000 echo WScript.Sleep %wtime% > tmp.vbs cscript //NoLogo tmp.vbs del tmp.vbs set wtime= REM *** goto loop :loopEXIT %argdrive% cd %argDirectory% for %%F in (*.ts) do goto FILE_EXIST echo エラーファイルが無い%date%_%time%_%argOut% >> %DFDirectory%log.txt goto end :FILE_EXIST echo MP3変換開始%date%_%time%_"%argOut%" >> %DFDirectory%log.txt REN *"%argOut%"*.ts *.m4a for %%i in (*"%argOut%"*.m4a) do %DFDirectory%ffmpeg.exe -y -i "./%%~ni.m4a" -vn -acodec libmp3lame -strict unofficial "./%%~ni.mp3" move *"%argOut%"*.m4a OLD\ >> %DFDirectory%log.txt echo MP3変換完了%date%_%time%_"%argOut%" >> %DFDirectory%log.txt goto end :usage echo "jcbaRec.bat JCB001 0:01:00 FMはな北海道" echo "jcbaRec.bat JCB003 0:01:00 エフエムもえる北海道" echo "jcbaRec.bat JCB006 0:01:00 ラジオモンスター山形県" pause :end
録音時間計算のスプリクトです。バッチファイルで時間計算は大変なのでWSHで処理します
Time.vbs
' CScript Time.vbs /r:0:01:00 ' CScript Time.vbs /d:2016/12/14 /t:18:47:44 Option Explicit Dim argRecTime Dim value dim gRecTime dim argDay dim argTime Dim aNamed Set aNamed = WScript.Arguments.Named argRecTime = WScript.Arguments.Named.Item("r") argDay = WScript.Arguments. Named.Item("d") argTime = WScript.Arguments. Named.Item("t") if not (argRecTime = "") Then '引数で指定の録音時間を日時属性に変換 gRecTime = TimeValue(argRecTime) '録音終了日時を求める Dim gEndDate gEndDate = Now() + gRecTime WScript.Echo gEndDate End If if not (argTime = "") Then '引数で指定の録音時間を日時属性に変換 argRecTime = TimeValue(argTime) argDay = DateValue(argDay) argRecTime = argDay + argRecTime '録音秒数をrtmpdumpの引数形式(秒数)にする gRecTime = argRecTime - Now() if (gRecTime > 0) Then gRecTime = Hour(gRecTime) * 60 * 60 + Minute(gRecTime) * 60 + Second(gRecTime) + 20 '20秒ほどマージンを設けることで録音終了時の誤差でリトライにいってしまうことを防止する。 Else gRecTime ="EXIT" End If WScript.Echo gRecTime End If
タスクスケジューラを使って予約する為のバッチファイル
(schtasks.batは管理者として実行してください)
schtasks.bat
goto kome /sc 種類 スケジュールの種類を指定する。指定できる種類は次の通り。 種類 内容 MINUTE 分単位でスケジュールを指定 HOURLY 時間単位でスケジュールを指定 DAILY 日単位でスケジュールを指定 WEEKLY 週単位でスケジュールを指定 MONTHLY 月単位でスケジュールを指定 ONCE 指定した日時に一回限り実行 ONSTART システム起動ごとに実行 ONLOGON ログオンごとに実行 ONIDLE アイドル状態が一定時間続いた場合に実行 /d 日 曜日または日にちを指定する。 スケジュールの種類が「WEEKLY」、または「MONTHLY」の場合に有効。 曜日は以下のように3文字で表す。 値 内容 MON 月曜日 TUE 火曜日 WED 水曜日 THU 木曜日 FRI 金曜日 SAT 土曜日 SUN 日曜日 スケジュールの種類と指定できる値は次の通り。 WEEKLYの場合 MON~SUN、あるいは「*(毎日)」。 省略時は「/d MON」を指定したとみなされる。 MONTHLYの場合 1~31の数字。省略時は「/d 1」 を指定したとみなされる。「/mo」オプションに FIRST、SECOND、THIRD、FOURTH、LAST が指定されている場合は、必ず「/d」オプションで曜日を指定する。 SCHTASKS /CREATE /TN "FMはな北海道TEST" /TR "D:\jcbaRec\jcbaRec.bat JCB001 0:01:00 FMはな北海道TEST" /sd 2017/07/07 /st 20:59 /sc once SCHTASKS /CREATE /TN "ラジオモンスター山形県TEST" /TR "D:\jcbaRec\jcbaRec.bat JCB006 0:01:00 ラジオモンスター山形県TEST" /sd 2017/07/07 /st 20:59 /sc once :kome SCHTASKS /CREATE /TN "タスク名TEST" /TR "D:\jcbaRec\jcbaRec.bat JCB001 0:01:00 録音ファイル名TEST" /SC WEEKLY /d SUN /ST 09:59 pause
以上実行ファイルと2つのバッチファイルと1つのvbsファイルと同じフォルダに置いて(上記の例ではD:\jcbaRec)
schtasks.batに録音したい番組を記入してタスクスケジューラに登録して実行する形になります。
タスクスケジューラにて実行するため後日動作確認する時用に実行フォルダにLOGを残す動きになっています。時々ファイルを削除してください
このスプリクトは試験的なもので要望など、いかなるサポートも行いません。 録音失敗や何らかの、いかなる損害が発生しても、苦情などを一切受け付けません。全て自己責任で利用してください。
こんにちは
今日、ESP32開発真ジュール+VS1053+ヘッドフォンでネットラジオを聞く実験をしています。
聞ける様には成りましたが・・
チャンネル(選局)変更が出来ません。
その為に[ 放送局のID ]が何としても知りたかったのですが、
こちらのWebの記事で分かりました。
ありがとうございます。
お陰様で、上手く行き選局出来ました。
頻繁にチャンネルを替える事は無いのですが、
こちらの方法で、お気に入りの局を
見つけたいと思います。
上記の構成だと、一度、プログラムを書き替えれば、PCは要りません。
5Vの電源だけでOKです。
いや~~嬉しい。
プログラムの書き替えも、局IDさえ判れば、随意に選局出来ます。
感謝