「朗読一語一絵」を録音するPowerShellスクリプトを書いたよ
tl; dr
【2017.03.29追記】2017年4月より再放送の時間が変更になるため、諸々変更。
WindowsのPowerShellの勉強がてら、書いた。
Radikoolでのサイマルラジオ録音が失敗しがちなので、VLCで録音すればいいじゃない、と思ったので、書いてみた。VLCメディアプレーヤーがインストールされていることが前提。
「motrec.ps1
ファイルを右クリック」>「PowerShellで実行」で、次回のエフエムモットコム「朗読一語一絵」の録音予約をする(再放送も含む)。
「スクリプトの実行がシステムで無効になっているため~」どうのこうの、と言われて実行できなかったら、「motrec.bat
」をダブルクリックで行けるかもしれない。
いずれにしてもmotrec.ps1
ファイルの中の、MP3ファイルを保存するディレクトリの部分を、自分の環境に合わせて書き換える必要がある。
目的
本宮市のローカルFM局、エフエムモットコムでふくしま現代朗読会の朗読番組がはじまった。
- 金曜08時15分~28分
再放送が火曜17時45分~- 4月から再放送は月曜18時45分~
エフエムモットコムはCSRA(Community Simul Radio Alliance)で配信されているので、インターネットで聴ける(上記「リスラジ」はフラッシュプレイヤーが必要)。
録音にはしばらくRadikoolを使っていたのだけど、さいきんエラーが頻発してまともに録音できなくなったので、VLC Media Playerを使って録音することにした。ついでに、Power Shellを敬して遠ざけてきたので、このさい勉強しようと思って、PowerShellスクリプトで書いた。
手っ取り早い使い方
VLCメディアプレーヤーがインストールされていなければ、する。
https://github.com/hidex7777/motrecbatからZIPでダウンロード、解凍。
PS1ファイルをテキストエディタ(メモ帳など)で開いて、
#MP3ファイルを保存するディレクトリ $destdir = 'E:\music\fm-mot\'
この部分を自分の環境に合わせて書き換える。C:\Users\ユーザー名\Music\fm-mot\
など(たぶん、あらかじめディレクトリを作っておく必要がある)。
motrec.ps1
を右クリック、「PowerShellで実行」を選択。うまくいけば、次回放送(再放送も含む)の録音予約がなされる(パソコンの電源をオフにしたり、Windowsからログアウトしてしまうと、予約は取り消され、録音もされません)。
「スクリプトの実行がシステムで無効になっているため~」どうのこうの、と言われて怒られたら、motrec.bat
をダブルクリックで実行できる(この方法が一番楽かも)。
もしくは、PowerShellでスクリプトの実行を許可するよう、ポリシーを変更する。
- Windows 7の場合 「アクセサリ」
- Windows 8の場合 「管理ツール」
- Windows 10の場合 「すべてのアプリ」
から、「Windows PowerShell」もしくは「Windows PowerShell ISE」で右クリック>「管理者として実行」。
> Set-ExecutionPolicy RemoteSigned
と入力して、「はい(Y)」。
ポリシー変更後は、ps1ファイルを直接実行できる。
放送時間になったら、VLCがコマンドプロンプトみたいなのを開いてログを表示するかもしれないけれど、閉じないでください。録音が終わったら自動的に閉じます。
そもそもこのスクリプトの実行自体を忘れてしまう、という場合、スタートアップフォルダにbatファイル(motrec.bat
)のショートカットを入れておけば、パソコン起動時に実行されます。Win+R
で「ファイル名を指定して実行」を開き、shell:startup
でスタートアップフォルダが開きます。
motrec.bat
を(ダブルクリック、またはスタートアップに入れて自動的に)実行すると、コマンドプロンプトが開く。
そのまま録音予約をしておきたい場合は最小化しておく。閉じたい場合はCtrl+C
で「バッチジョブを終了しますか?」と聞かれるので「Y
」と入力してEnter
。
ストリーミングとVLCとPowerShell。詰まったところ。
CSRAの「STATION LIST」>「東北」にある「放送を聞く」をクリックすると、ASXファイルがダウンロードされて、それを読み込んだWindows Media PlayerやVLC Media Playerなどがストリーミングを受信する。
このASXファイルをテキストエディタなどで開くと、ストリーミングがなされているURLが記述してある。このURLをVLCに直接引数として渡せば、再生される。で、VLCはストリーミングの録音・録画もかんたんにできる。
URLが変更になったら、スクリプトも書き換えなければならない。ASXファイルを直接読みに行くように改造する必要があるかも。
PowerShellの書き方については下記記事が参考になった。ありがとうございます:
PowerShellで詰まったところ:Functionの返り値がオブジェクト配列になってしまう問題。
たとえば、こういう部分:
function getNextCast{ if ($yobi -eq "土曜日") { echo "次回は3日後の火曜日" [DateTime]$val = (Get-Date $date.AddDays(3) -Hour 17 -Minute 44 -Second 30) return $val } elseif ($yobi -eq "日曜日") { 以下略
これ、普通に考えると、DateTime型のオブジェクトが返ってくると思うじゃないですか。しかしながら、関数内にecho
があると、その出力もまとめて返してくる。結果として、オブジェクト配列がリターンされる。ここで詰まった。echo
の行をコメントアウトして解決。
ばいにー。