Tera Termを導入する
前回の記事ではSynology上のVitual Machine StationからUbuntuServerを構築し最終的にログインを行いましたが、ブラウザ接続でのCUIでは日本語を表示することが出来きないため、フリーのターミナルソフトであるTera TermをPC側に導入します。
SynologyのNASでRadikoを自動で録音する!というお話(前編)DSMでNFSを有効にする
Vitual Machine Station上のUbuntu Serverで録音した音声データは直接File Stationへ保存することができません。その為、共有フォルダを予め作っておき、そのフォルダをUbuntu SeverへNFSマウントする形で対応します。
DSM上でNFSサービスを有効にしておきます。
マウント用のフォルダを作成する
ひとつ前の手順で有効にしたNFSマウント用のフォルダを作成しておきます。私の場合はPodcast Serverで使用するフォルダをそのまま使用しています。
Ubuntu Serverへのマウント用にフルパスを把握しておく必要があります。マウント予定のフォルダを右クリックし、サブメニューからプロパティを選択し、フルパスを確認しておきましょう。
下記のような【/volume〇/×××/▲▲▲】となっていると思います。
/volume1/docker/radiko
Tera TermでUbuntu Serverにログインする
DSM上の設定を終えたらいよいよUbuntu ServerにログインしてrFriendを使えるように設定します。
Tera Termを起動すると接続するホスト、ユーザー、パスワードの入力画面が表示されますので、前記事内で設定したユーザー名とパスワード、Ubuntu ServerのローカルIPアドレスを入力して接続します。
先の手順で作成したマウント用のフォルダをUbuntu Serverにマウントします。前述した通り、私の環境では【/volume1/docker/radiko】がマウントするフォルダのフルパスになっています。
sudo mkdir /mnt/ds918
> [sudo] password for ubuntu-admin:
Ubuntu Server上に【/mnt/ds918】というディレクトリを作成します。/ds918としているのは私が使用しているNASがDS918+という機種であるためです。環境に応じて任意のディレクトリ名で構いません。
sudoコマンドを使用する為、パスワードを求められますので、入力してディレクトリ作成を確定させます。
sudo apt-get update
パッケージリストの更新を行います。
sudo apt-get install nfs-common
> Do you want to continue? [Y/n]
Y
インストールした時点でのUbuntu Serverではnfsコマンドが使用できない為、apt-getでnfs-commonをインストールします。
sudo mount -t nfs 192.168.xx.yyy:/volume1/docker/radiko /mnt/ds918
作成したディレクトリに対して、録音データの保存先をマウントします。【192.168.xx.yyy】にはNASのIPアドレスを入力します。
立ち上げたUbuntuは余程の事が無い限り起動したままになっていますが、NAS側のOSのアップデートや機器のクラッシュ等により再起動してしまうケースがあります。その場合、マウントが切断されてNAS側の共有フォルダに録音ファイルが吐き出されなくなってしまう事が分かりました。podcastが急に更新されなくなった場合、このケースに陥っている可能性が高いです。
以下、その対処方法を解説します。
マウントが切断されている状態にあっても、Cron処理で録音データをマウントフォルダに移動するというタスクは実行されてしまいます。その状態で共有フォルダを再マウントしても、既に移動してしまった録音データはNAS側に吐き出されませんので、まずはその録音データを別のディレクトリへ移動させる必要があります。
cd /mnt/ds918
cdコマンドでマウント用のディレクトリに移動します。
ls
> JUNK-おぎやはぎのメガネびいき_20230512.mp3
> ナインティナインのオールナイトニッポン_20230512.mp3
> ハライチのターン!_20230512.mp3
lsコマンドでディレクトリ内のファイルを確認すると、NASに吐き出されていない録音データが残っています。
sudo mv *.mp3 ~/rfriends2/usr/radiko
> [sudo] user のパスワード:
sudo権限でmvコマンドを使用して、rfriendsの録音ディレクトリへ録音データを移動させます。パスワードを求められるので、入力して移動を確定させます。
sudo umount -l /mnt/ds918
sudo mount -t nfs 192.168.xx.yyy:/volume1/docker/radiko /mnt/ds918
念の為、マウントを解除してから、再度NAS側の共有フォルダをマウントさせます。
ls
> JUNK-おぎやはぎのメガネびいき_20230428.mp3
> JUNK-おぎやはぎのメガネびいき_20230505.mp3
> JUNK-伊集院光・深夜の馬鹿力_20230502.mp3
> JUNK-伊集院光・深夜の馬鹿力_20230509.mp3
> JUNK-爆笑問題カーボーイ_20230503.mp3
> JUNK-爆笑問題カーボーイ_20230510.mp3
> あののオールナイトニッポン0(ZERO)_20230419.mp3
> ナインティナインのオールナイトニッポン_20230421.mp3
> ナインティナインのオールナイトニッポン_20230428.mp3
しばらく時間を置いて正常にマウントされているか確認する為にlsコマンドを打ってみると、NAS側に入っているファイルが確認できました。マウント直後にlsコマンドを打ってもファイルが確認できなかった事から、マウントが反映されるまで時間がかかるようです。
cd ~/rfriends2/usr/radiko
sudo mv *.mp3 /mnt/ds918
cdコマンドでrfriendsの録音ディレクトリに移動した後、sudo権限のmvコマンドで録音データをマウントディレクトリに移動させます。正常に処理がされていれば、NAS側の共有フォルダへ録音データが吐き出されたハズです。
rFriendsで録音されるファイルフォーマットは【m4a】となっています。私がPodcast配信をしているPodcast Serverの対応ファイルフォーマットは【mp3】のみである為、ubuntu上でトランスコードする必要があります。m4a形式でも問題ない方はこの手順を省略していも構いません。
sudo apt-get -y install ffmpeg
apt-getでffmpegをインストールします。
rFriendsを公開されているページのガイドに従ってインストールします。
cd ~/
公式のガイドではホームディレクトリへインストールする手順が公開されている為、同様に行います。
ホームディレクトリに移動します。
rm ./rfriends2_ubuntu.sh
ホームディレクトリ内に以前のバージョンのrFriendがある場合は削除します。
Ubuntu Serverをインストールした直後であれば、当然あるはずが無いので、省略可能です。
wget http://rfriends.s1009.xrea.com/files/rfriends2_ubuntu.sh
wgetでrFriendsのスクリプトファイルをダウンロードします。
sh rfriends2_ubuntu.sh
> [sudo] password for ubuntu-admin:
> Do you want to continue? [Y/n]
Y
ダウンロードしたスクリプトファイルを実行します。ダウンロードしたスクリプトファイル実行時にはパスワードを求められますので入力してインストールを確定します。
途中、何度か紫の画面なり、「Newer kernel available」と表示されますが、、「Enter」キーを押してカーネルをアップデートします。
ここまでの手順でホームディレクトリにrfriends2がインストールされ起動できる状態になっていますが、予めPodcast配信用に録音データのm4a形式をmp3形式へトランスコードするスクリプトを作成しておきます。
cd rfriends2/usr/radiko
cdコマンドでrfriendsの録音データが保存されるディレクトリへ移動します。
vi mp3encode.sh
「mp3encode.sh」というシェルスクリプトを作成します。上記のコマンドを入力すると、viエディタがTera Tem上に立ち上がりますので「i」キーを押下し、以下の文章を入力します。
#!/bin/sh
cd /home/ubuntu-server/rfriends2/usr/radiko
for x in *.m4a; do ffmpeg -i $x -ab 128k ${x%m4a}mp3; done
入力が完了したら、「esc」キーを押し、「:wq」と画面に入力して「Enter」キーを押せばシェルスクリプトが作成できたはずです。
「mp3encode.sh」の内容はrfriendsの録音ディレクトリ内のm4a形式ファイルをffmpegを使用してmp3形式ファイルへトランスコードすることです。
vi m4aremove.sh
さらにviコマンドで「m4aremove.sh」というシェルスクリプトを作成します。上記のコマンドを入力すると、viエディタがTera Tem上に立ち上がりますので「i」キーを押下し、以下の文章を入力します。
#!/bin/sh
cd /home/ubuntu-server/rfriends2/usr/radiko
rm *.m4a
入力が完了したら、「esc」キーを押し、「:wq」と画面に入力して「Enter」キーを押せばシェルスクリプトが作成できたはずです。
「m4aremove.sh」の内容はrfriendsの録音ディレクトリ内のm4a形式ファイルを削除することです。
「mp3encode.sh」でトランスコードを実行した後に不要になったm4a形式ファイルを「m4aremove.sh」で削除することが目的です。
UbuntuではCron処理(Windowsでいうところのタスクスケジューラー)で毎日定時に自動処理を行いますが、cronの設定に上記コードを入力しても何故か処理が実行されなかったため、シェルスクリプトを作成して実行させるようにしています。
cd ~/rfriends2
sh rfriends2.sh
rfriends2のディレクトリに移動した後に、shコマンドでrfriendsのシェルスクリプトを実行します。
Rfriends2 2.9.5 [23/03/07(Tue) 13:36:03]
radiko: JP13,東京都 radiru: tokyo
1. 管理 [残 2.4 GB / 10 GB]
2. ラジコ (0)
3. ラジコタイムフリー
4. らじる (0)
5. らじる聞き逃し
6. らじるゴガク
7. ポッドキャスト
8. キーワード
9. 設定
10. rfriends2について [!]
[ubuntu-server] メニューを選択(1-10,r,end=x) :
rfriendsの起動画面は上記の様な表示になっています。
8
コマンドラインに「8」を入力してキーワード設定画面へ移動します。
[8] キーワード
1. 放送局
2. 共通
3. ラジコ
4. らじる
5. 重複番組
6. 番組配送
7. 保存/復元/初期化
サブメニューを選択(1-7) :
管理設定画面は上記の様な表示になっています。
3
コマンドラインに「3」を入力してラジコのキーワード設定を行います。
ラジコキーワードの編集を行います。
1. ラジコ
2. タイムフリー
3. エリアフリー
番号を選択してください(1-3) :
1
コマンドラインに「1」を入力すると、Tera Tem上にテキストエディタが立ち上がります。ラジコのリアルタイム録音用に既にいくつかの番組キーワードが設定されていますが、自分の希望の番組を入力します。
テキストエディタの各行の始めに「#」が入力されていますが、「#」が入っているとコメントアウト(除外)されて録音対象になりません。既に入力されている番組の中で、録音対象に含めたいときは行始めの「#」を削除し、除外したいときは行始めに「#」を入力します。
編集を終了する時は「Ctrl + X」キーを押します。上書きするかどうかを聞いてきますので、上書きする場合は「Y」を入力して確定させます。タイムフリー、エリアフリーに関しても同様にテキストエディタでキーワードを設定していきます。ただし、リアルタイム録音とタイムフリー録音に同じキーワードが入っていると重複して録音されてしまうため、注意が必要です。
Rfriends2 2.9.5 [23/03/07(Tue) 13:36:03]
radiko: JP13,東京都 radiru: tokyo
1. 管理 [残 2.4 GB / 10 GB]
2. ラジコ (0)
3. ラジコタイムフリー
4. らじる (0)
5. らじる聞き逃し
6. らじるゴガク
7. ポッドキャスト
8. キーワード
9. 設定
10. rfriends2について [!]
[ubuntu-server] メニューを選択(1-10,r,end=x) :
9
トップメニューに戻ったら次は「9」を入力して録音関係の設定を行います。
[9] 設定
1. パラメータ設定
2. タグ設定
3. デイリー処理設定
4. 各種データ設定
5. メール設定
6. 録音ディレクトリ設定
7. ラジコプレミアム設定
8. 保存/復元/初期化
サブメニューを選択(1-8) :
録音設定メニューは上記の様な表示になっています。
3
コマンドラインに「3」を入力してデイリー処理設定を行います。
毎日自動で行う処理の設定を行います。
(1 -> 2 -> 3 の順で設定)
1. 読込
2. 編集
3. 書出
1
コマンドラインに「1」を入力すると、デイリー処理用のcrontabファイルの内容がtempファイルへ読み込まれます。
--------------------
# rfriends crontab template
#
#SHELL=/bin/sh
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
BASE_DIR=/home/ubuntu-admin/rfriends2
# m h dom mon dow command
#
25 05 * * * sh $BASE_DIR/script/ex_rfriends.sh
# second job
#
25 17 * * * sh $BASE_DIR/script/ex_rfriends.sh
--------------------
初期状態であれば上記の内容が読み込まれいるはずです。内容を簡単に説明すると、毎日AM5:25とPM17:25にシェルスクリプト「ex_rfriends.sh」を実行するというものです。この処理により、定時になればキーワード設定の内容に従って録音予約を入れてくれます。
9
3
3
デイリー処理の内容で問題なければ、トップメニューから上記のコマンドを入力してデイリー処理用のcrontabファイルの書出しを行います。
これで、rFriendでの自動録音が一応できるようになったはずです。Topメニューからコマンドラインに「x」を入力してrFriendsを終了させます。
crontab -e
cronファイルの編集を行います。
# rfriends crontab template
#
#SHELL=/bin/sh
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow command
#
25 05 * * * sh $BASE_DIR/script/ex_rfriends.sh
# second job
#
25 17 * * * sh $BASE_DIR/script/ex_rfriends.sh
直前のデイリー処理の設定が正常に終わっていれば、上記の内容がTera Tem上にテキストエディタで表示されます。ここにトランスコード用のシェルスクリプトを実行する設定を追加します。
# rfriends crontab template
#
#SHELL=/bin/sh
#PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow command
#
25 05 * * * sh $BASE_DIR/script/ex_rfriends.sh
# second job
#
25 17 * * * sh $BASE_DIR/script/ex_rfriends.sh
# 録音ファイル(m4a)をmp3へ変換する
15 3 * * * sh /home/ubuntu-server/rfriends2/usr/radiko/mp3encode.sh
# ファイル変換後にm4aファイルを削除する
00 4 * * * sh /home/ubuntu-server/rfriends2/usr/radiko/m4aremove.sh
下4行の処理を追加しています。JUNKやオールナイトニッポンはAM3:00に放送が終了するため、AM3:15にトランスコードを開始し、AM4:00にトランスコードが完了したm4a形式ファイルを削除します。
編集を終了する時は「Ctrl + X」キーを押します。上書きするかどうかを聞いてきますので、上書きする場合は「Y」を入力して確定させます。
mp3へのトランスコードが終われば最終的にPodcast Serverのフォルダへ録音ファイルを吐き出してやる必要があります。
sudo su
> [sudo] password for ubuntu-admin:
マウントフォルダへのファイル移動はroot権限でなければ実行されなかったので、root権限でログインします。
crontab -e
root権限でcronファイルの編集を行います。
#変換済み録音ファイルをNASへ移動
50 4 * * * mv /home/ubuntu-server/rfriends2/usr/radiko/*.mp3 /mnt/ds918
cronファイルの一番後ろに上記の二行を追加します。毎日AM4:50に録音フォルダ内のmp3形式のファイルのみをマウントフォルダに移動するという内容です。
編集を終了する時は「Ctrl + X」キーを押します。上書きするかどうかを聞いてきますので、上書きする場合は「Y」を入力して確定させます。
まとめ
これでRadikoの録音からPodcast配信まで全てをSynologyのNAS上で完結できるシステムを構築することができました。常時ONが前提のNASとの相性は非常に良くて、既に半年以上経っていますが安定して運用できています。
rfriendsの設定に関しては最低限のリアルタイム録音が行える範囲での解説に留めましたが、タイムリーやエリアフリー、らじるやpodcastにも対応している為、色々触ってみると良いでしょう。出力するファイル名やタグ付けなどもこなせる素晴らしいソフトウェアです。