らじる★らじるをバッチファイルとWSHで録音する
以前の記事でらじる★らじるを録音する方法を記事にした。
-注意-
今回はNHKラジオのらじる★らじるを録音する記事です
その時、github.comのbooskaのらじる★らじるを録音するWSHのスプリクトを利用することで録音することを紹介していた。しかし、booskaさんのソースは公開中止になってしまった。
いろいろ検討した結果、booskaさんのスプリクトを参照してバッチファイルとWSHで作成した。現在動作確認中だがほぼ利用可能な状況になったのでここに紹介することにする
おまけでコミュニティFMのJCBA系列と超A&G!が録音できます。
作成はWindows 10環境で作成しています。動作確認はWindows 7です。
利用にあたって
rtmpdump.exe
https://github.com/K-S-V/Scripts/releases
ffmpeg.exe
http://hp.vector.co.jp/authors/VA020429/ffmpeg/ffmpeg.html
https://ffmpeg.org/
各種実行ファイルを集めて一つのフォルダに置いてください
RajiruRec.bat
@echo off REM rtmpdumpなどの位置のドライブ set drive=D: REM rtmpdumpなどの位置(最後に\を) set DFDirectory=D:\RajiruRec\ REM 録音ファイルの保存のドライブ set argdrive=D: REM 録音ファイルの保存先(最後に\を) set argDirectory=D:\RajiruRec\rec\ set RTMPDUMP=rtmpdump.exe 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 NHKの連想配列 REM R1東京 if %ch%==R1 ( set aaNHK_r=rtmpe://netradio-r1-flash.nhk.jp set aaNHK_y=NetRadio_R1_flash@63346 ) REM R2東京 if %ch%==R2 ( set aaNHK_r=rtmpe://netradio-r2-flash.nhk.jp set aaNHK_y=NetRadio_R2_flash@63342 ) REM FM東京 if %ch%==FM ( set aaNHK_r=rtmpe://netradio-fm-flash.nhk.jp set aaNHK_y=NetRadio_FM_flash@63343 ) REM R2東京 if %ch%==JOAB ( set aaNHK_r=rtmpe://netradio-r2-flash.nhk.jp set aaNHK_y=NetRadio_R2_flash@63342 ) REM R1東京 if %ch%==JOAK ( set aaNHK_r=rtmpe://netradio-r1-flash.nhk.jp set aaNHK_y=NetRadio_R1_flash@63346 ) REM R1仙台 if %ch%==JOHK ( set aaNHK_r=rtmpe://netradio-hkr1-flash.nhk.jp set aaNHK_y=NetRadio_HKR1_flash@108442 ) REM R1名古屋 if %ch%==JOCK ( set aaNHK_r=rtmpe://netradio-ckr1-flash.nhk.jp set aaNHK_y=NetRadio_CKR1_flash@108234 ) REM R1大阪 if %ch%==JOBK ( set aaNHK_r=rtmpe://netradio-bkr1-flash.nhk.jp set aaNHK_y=NetRadio_BKR1_flash@108232 ) REM FM東京 if %ch%==JOAK-FM ( set aaNHK_r=rtmpe://netradio-fm-flash.nhk.jp set aaNHK_y=NetRadio_FM_flash@63343 ) REM FM仙台 if %ch%==JOHK-FM ( set aaNHK_r=rtmpe://netradio-hkfm-flash.nhk.jp set aaNHK_y=NetRadio_HKFM_flash@108237 ) REM FM名古屋 if %ch%==JOCK-FM ( set aaNHK_r=rtmpe://netradio-ckfm-flash.nhk.jp set aaNHK_y=NetRadio_CKFM_flash@108235 ) REM FM大阪 if %ch%==JOBK-FM ( set aaNHK_r=rtmpe://netradio-bkfm-flash.nhk.jp set aaNHK_y=NetRadio_BKFM_flash@108233 ) REM JCBAの連想配列 REM 参考URL https://radioserver2.jimdo.com/ REM はっぴぃ!FM if %ch%==JOZZ0BE-FM ( set aaJCBA=rtmpe://jcbasimul061-live1.sp1.fmslive.stream.ne.jp/jcbasimul061-live1/_definst_/jcbasimul061-live ) REM FM西東京 if %ch%==JOZZ3AU-FM ( set aaJCBA=rtmp://jcbasimul003-live1.sp1.fmslive.stream.ne.jp/jcbasimul003-live1/_definst_/jcbasimul003-live ) REM むさしのFM if %ch%==JOZZ3AG-FM ( set aaJCBA=rtmp://jcbasimul032-live1.sp1.fmslive.stream.ne.jp/jcbasimul032-live1/_definst_/jcbasimul032-live ) REM FMえどがわ if %ch%== JOZZ3AS-FM ( set aaJCBA=rtmp://jcbasimul033-live1.sp1.fmslive.stream.ne.jp/jcbasimul033-live1/_definst_/jcbasimul033-live ) REM 超A&G!の録音パラメータ if %ch%== AG ( set aaJCBA=rtmp://fms-base1.mitene.ad.jp/agqr/aandg22 ) 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=--stop %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 "%aaNHK_r%"=="" ( set RADI=%RTMPDUMP% -flashVer "WIN 15,0,0,152" --rtmp "%aaNHK_r%" --timeout 10 --playpath "%aaNHK_y%" --app ""live"" -W ""http://www3.nhk.or.jp/netradio/files/swf/rtmpe.swf"" --live -o "%argDirectory%%FLV%%FLV_loop%.flv" %STOPSEC% set RADI_PASS=1 ) REM JCBAの録音パラメータ if not "%aaJCBA%"=="" ( set RADI=%RTMPDUMP% --quiet -flashVer "WIN 15,0,0,152" --rtmp "%aaJCBA%" --timeout 10 --live -o "%argDirectory%%FLV%%FLV_loop%.flv" %STOPSEC% set RADI_PASS=1 ) if "%RADI_PASS%"=="" goto usage echo 録音開始%date%_%time%_"%~3" >> log.txt echo 「%ch%」の「%argOut%」を録音開始、録音時間は「%argSTOPSEC%」 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 (*.flv) 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%"*.flv *.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 "RajiruRec.bat JOAK 0:01:00 NHK深夜便" echo "RajiruRec.bat JOZZ3AU-FM 0:01:00 JCBA_FM西東京" echo "RajiruRec.bat AG 0:01:00 超A&G!" :end
D:\RajiruRec\にて実行する設定になっています
途中で回線が切断されても時間計算して再録音し最後にmp3に変換するようになっています。
-起動例-
RajiruRec.bat JOAK 1:00:00 NHK深夜便
RajiruRec.bat JOAK 録音時間1時間 録音番組名(ファイル名に含まれます)
コールサインが引数になってます。
R1東京はJOAK、R2東京はJOAB
JCBA系列のFM西東京はJOZZ3AU-FM
他のエリアは下記のURLを参考にバッチファイルを変更してください
参考URL https://radioserver2.jimdo.com/
超A&G!はAGです
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 (argDay = "") Then '引数で指定の録音時間を日時属性に変換 argDay = DateValue(argDay) if (argTime = "") Then argRecTime = argDay Else argRecTime = TimeValue(argTime) argRecTime = argDay + argRecTime End If '録音秒数を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
録音時間計算のスプリクトです。バッチファイルで時間計算は大変なのでWSHで処理します
2016年12月28日 修正しました
http://hanpen.lsv.jp/blog.hanpen.net/time-vbs%e3%81%ab%e3%83%90%e3%82%b0%e3%81%8c%e3%81%82%e3%82%8a%e3%81%be%e3%81%97%e3%81%9f/
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 "NHK今日は一日アニソン三昧" /TR "D:\RajiruRec\RajiruRec.bat JOAK-FM 16:04:00 NHK今日は一日アニソン三昧" /sd 2016/04/30 /st 08:58 /sc once :kome SCHTASKS /CREATE /TN "NHK深夜便0005" /TR "D:\RajiruRec\RajiruRec.bat JOAK 0:57:00 NHK深夜便" /SC WEEKLY /d * /ST 00:04 pause
タスクスケジューラを使って予約する為のバッチファイル
(schtasks.batは管理者として実行してください)
以上2つの実行ファイルと2つのバッチファイルと1つのvbsファイルと同じフォルダに置いて(上記の例ではD:\RajiruRec)
schtasks.batに録音したい番組を記入してタスクスケジューラに登録して実行する形になります。
タスクスケジューラにて実行するため後日動作確認する時用に実行フォルダにLOGを残す動きになっています。時々ファイルを削除してください
このスプリクトは試験的なもので要望など、いかなるサポートも行いません。 録音失敗や何らかの、いかなる損害が発生しても、苦情などを一切受け付けません。全て自己責任で利用してください。