JCBAインターネットサイマルラジオの仕様が変更された

以前、らじる★らじるをバッチファイルとWSHで録音するの記事でおまけでJCBAインターネットサイマルラジオの録音機能を付けていたが今回仕様が変わったので新しい仕様を解説して録音できるようにしたい。

らじる★らじるをバッチファイルとWSHで録音する

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を残す動きになっています。時々ファイルを削除してください

このスプリクトは試験的なもので要望など、いかなるサポートも行いません。 録音失敗や何らかの、いかなる損害が発生しても、苦情などを一切受け付けません。全て自己責任で利用してください。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)