昨日、FreeBSD上で radish を使って、ラジコのリアルタイム録音を行う方法に関して記録しました。
本番二日目ですが、本日もサーバー上で自動録音してくれています。これに気をよくして、Linux環境でも自動録音実行出来るようにしたいと思います。
とはいえ、現時点で常時稼働させている Linuxマシンを持っていないので、Windows subsystem for Linux でDebian Linuxを動かして Windows10 上でエミュレーションすることにします。
と、以前、WSL上でラジコをリアルタイム録音するメモを残しました。約5年前の話。
当時の課題と環境の変化は、以下の通り。
- ラジコサーバーがFlashストリームを中止し、HTML5 Live Streamになった。
- インストール可能なLinuxのレパートリーが増えた。
- 当時はWSLでcronが動かなかったので、Windows側のタスクマネージャからシェルスクリプトをキックして起動していた。
- WSLに、ffmpegをインストール出来なかったので、.flv を m4a に自動フォーマット変換するのが困難だった。
Linux環境の構築
- 前提条件として、WSLを使えるx64 Windows10 で実施する必要があります。
- コントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化 から、「Linux用Windowsサブシステム」を有効にする。(OS再起動が必要)
- その後、Microsoft Store から、Linuxを検索してインストール。Linuxには様々なディストリビューションがありますので、私はDebianを選択してインストール。
これで、Linux もどき環境が構築できました。VMや実機を使って、フルのLinuxを構築することも可能ですが、これだけでLinuxコマンドが使えるようになるので WSLって便利。
Microsoft Store からDebian を起動するか、Windowsメニューからbashとタイプして、シェル画面を起動。
必要なパッケージを入れる
続いて、https://github.com/uru2/radish に書かれているとおり、curl、xmllint、jq、ffmpeg コマンドが必要になりますので、これらを入れますが、xmllintはコマンド名と入っているパッケージが異なるので、libxml2ではなく、libxml2-utils をインストールします。
コマンドラインで、
$ sudo apt-get install curl jq ffmpeg libxml2-utils
でいいと思います。(libxml2を入れたけど、xmllint が入らなかったので、調べて libxml2-util が必要と判明。)
OS側のテスト環境準備は以上で完了。ffmpegコマンドが使えるようになっていました。コマンド不足の問題は解決していました。
ラジコリアルタイム録音コマンドを準備する
続いて録音テスト。まずは、https://github.com/uru2/radish から、radi.sh コマンドをダウンロード。
それを、自分のDebian環境下に bin ディレクトリを作成して、コピー。実行権を与えておきます。
それから、録音するファイルの保存フォルダーを準備しておきます。私の場合は bin 同様に、radish フォルダーを作成しておきます。
録音テスト
受信エリアが関係ないNHKで録音テストしてみます。ファイル名は自動生成。
(行先頭の$はBashのプロンプト。)
$ cd radish $ $HOME/bin/radi.sh -t nhk -s tokyo-r1 -d 1
まず、録音ファイル保存場所にcdしたあと、radi.sh コマンド発行。東京R1 を1分間録音してみます。
353931 Mar 17 23:41 tokyo-r1_20210317234039.m4a
成功。続いてTBS。
$ $HOME/bin/radi.sh -t radiko -s TBS -d 1
こっちもうまくいきました。
356863 Mar 17 23:44 TBS_20210317234358.m4a
radishのテスト完了。
インストールするだけなら超簡単。しかし、これでは、自動録音出来ません。
自動録音
FreeBSDで作ったコマンド同様、自動実行するためのコマンドを作ります。
いつものように、平日13:00からのTBSたまむすびを録音するためのコマンド。
<録音コマンド>
#!/bin/sh cd $HOME/radish $HOME/bin/radi.sh -t radiko -s TBS -d 150
これを例えば、tbs1300.sh として、$HOME/bin 下に保存して、実行権を与えておきます。
次に、crontab へ自動実行登録。こんな感じ。(赤の行)
# m h dom mon dow command
0 13 * * 1-5 $HOME/bin/tbs1300.sh
これで、13時まで待ってみたものの、自動録音は開始されず。
あれれ????
crontab はサポートされるのに、実行はされないのか?5年前は、cronが使えなかったので、Windows側からLinuxコマンドをキックしましたけど、Web検索してみると、cron デーモンが自動起動しないだけのようです。
$ sudo service cron start
これで、WSLの crontab に登録されたコマンドが自動実行されるようになりました。タスクスケジューラを使う必要は無さそう。
短時間のテストには成功したので、本番に関して、次回の指定時刻を待つことにします。
とは言っても、今のところ、タイムフリー録音を聴取のメインにしているので、リアルタイム録音はあくまでもバックアップと、タイムフリー未対応番組の自動録音。
注意点
その他、Windows OS再起動後に行うべき自動録音のための準備ポイントは、
- OS起動後にDebian Linux(ウィンドウ)は自動起動しませんが、WSLはバックグランドで自動起動します。
- bashやDebianを手動で起動する必要はありませんが、
- cronデーモンは自動起動しないので、cronデーモンを自動起動するように設定する(今のところ方法未調査)か、Debianを手動起動した後、「sudo service cron start」を行わないと、自動録音してくれません。
- Windows更新を行った後、再起動→ログインを待ちきれず放置していると痛い目を見ます。
定常的に使うなら、LinuxのVMを準備するか、ラズパイを使う方が安全そう。