SynologyでNHKラジオ(らじるらじる)の録音
NHKラジオで英語の勉強をするから忘れずに録音するように、と妻が言うので、いくつかのサイトを軽く眺めたところ、家にある Synology DS218j が常時起動なので、便利に使えそう、と。 以下、やったことのメモ。
- らじるらじる m3u8 を ffmpeg で録音する(8放送局)2021/4 以降対応 · GitHub や 第95回 「らじる☆らじる」をHLS経由で:玩式草子─ソフトウェアとたわむれる日々|gihyo.jp … 技術評論社 を読めば、必要なことはおおよそ把握できると思います。ここでは Synology を使って録音する方法について。
- synology で ssh アクセスを有効化(コントロールパネル > 端末とSNMP > SSHサービスを有効化する)し、ログイン。
- 作業後は無効化
- 最初から ffmpeg (/bin/ffmpeg と /usr/ffmpeg) は入っていたが、このバイナリでらじるらじるの録音を試すと、以下のとおり、HTTPS 対応がないとのエラーで動作せず。
$ ffmpeg -i https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8 -t 10 a.mp3 ffmpeg version 2.7.1 Copyright (c) 2000-2015 the FFmpeg developers built with gcc 4.9.3 (crosstool-NG 1.20.0) 20150311 (prerelease) ... https protocol not found, recompile FFmpeg with openssl, gnutls, or securetransport enabled. https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8: Protocol not found
- むむと思いつつ、もう少し調べると、 SynoCommunity に ffmpeg パッケージがあるので、これを試してみることにした。
- SynoCommunity のパッケージを使えるようにするのは、SynoCommunityサイトのトップページに書いてあるとおりで、ごく簡単。あとは、通常通りパッケージマネージャーから ffmpeg をインストール。
- インストールした ffmpeg がどのパスに入ったのか行方不明になったが、、
/volume1/@appstore/ffmpeg/bin/ffmpeg
にいた。
$ /volume1/@appstore/ffmpeg/bin/ffmpeg ffmpeg version 4.1 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 4.9.3 (crosstool-NG 1.20.0) 20150311 (prerelease)
$ /volume1/@appstore/ffmpeg/bin/ffmpeg -i https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8 -t 10 a.mp3 ... [hls,applehttp @ 0x1d28f90] Opening 'https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-20190730T172718-01-162/870.ts' for reading [hls,applehttp @ 0x1d28f90] Opening 'https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-20190730T172718-01-162/871.ts' for reading Input #0, hls,applehttp, from 'https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8': Duration: N/A, start: 35366.160411, bitrate: N/A Program 0 Metadata: variant_bitrate : 0 Stream #0:0: Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp Metadata: variant_bitrate : 0 Stream mapping: Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame)) Press [q] to stop, [?] for help Output #0, mp3, to 'a.mp3': Metadata: TSSE : Lavf58.20.100 Stream #0:0: Audio: mp3 (libmp3lame), 48000 Hz, stereo, fltp Metadata: variant_bitrate : 0 encoder : Lavc58.35.100 libmp3lame size= 157kB time=00:00:10.00 bitrate= 128.5kbits/s speed=3.08x video:0kB audio:157kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.147653%
- というわけで、ひとまずは mp3 に落とせて、再生できることまでは確認。あとは、番組スケジュールにあわせて、決まった曜日の決まった時間から、決まった秒数を録音すればいい。(NHK、Akamai 使ってるんですな)
- まあ、 cron だよなと思い、 crontab を実行すると not found. おお。。落ち着いて見てみると、 /etc/crontab は存在していて、 crond も動いているようなので、system wide なのはどうかという気もしつつ、気にせず /etc/crontab に直接書くことに。
- 妻からのオーダーは、「エンジョイシンプルイングリッシュ」と「ラジオ英会話」の2つ。放送時間は、、
- エンジョイシンプルイングリッシュ: 月~金曜日 午前9:10~9:15
- ラジオ英会話: 月~金曜日 午前6:45~7:00
- cron の設定
- 月から金は 1-5 (Sunが0、7 なので)。
- 起動時間は、番組開始の1分前くらいか、と最初は思ったが、試してみると30秒くらい遅れている。例えば、9:10 開始の番組なら9:10 + 30秒くらいに開始してる。
- 5分番組は 300 sec だが後ろに1分のbuffer入れることにして、6分で 360 sec か。30秒くらいでいいのかもだけれど、crontab に小数点かけないようなので(細かくやるのなら ffmpeg 側でトリミングはできそう)。
- 保存場所は適当なとこ。今回は /var/services/music/NHK/
- Boxと連携させて、上記に保存すると自動的にBox側に同期されるようにして、スマホの Box アプリから聞けるようにしている。
$ cat /etc/crontab MAILTO="" PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin #minute hour mday month wday who command ... 10 9 * * 1-5 root /var/services/homes/kenishi8/radiru.sh 360 EnjoySimpleEnglish 45 6 * * 1-5 root /var/services/homes/kenishi8/radiru.sh 960 RadioEIKAIWA
crontab から呼んでいるシェルスクリプト。いろいろと決め打ちで。
$ cat radiru.sh #!/bin/bash DATE=`date '+%Y%m%d'` R2='https://radio-stream.nhk.jp/hls/live/2023501/nhkradiruakr2/master.m3u8' OUT='/var/services/music/NHK' if [ $# -ne 2 ]; then echo "Usage: $0 [duration in sec] [program name]" exit 1 fi /volume1/@appstore/ffmpeg/bin/ffmpeg -y -i $R2 -t $1 $OUT/$2_$DATE.mp3
Crond の設定ファイル(crontab)をリロード。
$ sudo synoservice --reload crond $ sudo synoservice --status crond Service [crond] status=[enable] required upstart job: [crond] is start. =======================================
Cronの時間を変えてテストすると、
$ ls -lh /var/services/music/NHK/ total 6.5M -rwxrwxrwx+ 1 root root 6.5M Sep 7 15:54 EnjoySimpleEnglish_20190907.mp3
まあ、取れていそう。ただ、ファイルサイズが随分と大きいのと、iTunes で再生してみると、録音したはずの時間よりも長い時間が表示される?? 再生してみると、実際は再生の最後のほうで飛ぶので、iTunes の表示上の問題(かファイルの問題)のようだが、なんか変。
Encode/MP3 – FFmpeg でサンプリングレートを指定すればいいという情報があったので、変えてみる。どうせAMラジオなんで、-q:a 6
という低めのビットレート指定で試すと、無事 iTunes の表示問題も解消。
/volume1/@appstore/ffmpeg/bin/ffmpeg -y -i $R2 -q:a 6 -t $1 $OUT/$2_$DATE.mp3
あとは、mp3 のタイトルなどのメタデータですかね。 ffmpegを使ったメタデータの追加・変更 - 脳内メモ++ とか FFmpeg Metadata - MultimediaWiki とか参考に、とりあえずタイトルとか適当にいくつか設定するようにしたのが以下。
TITLE=$2_$DATE ARTIST=NHK ALBUM=$2 GENRE=Radio /volume1/@appstore/ffmpeg/bin/ffmpeg -y -i $R2 -q:a 6 -metadata title=$TITLE -metadata artist=$ARTIST -metadata album=$ALBUM -metadata genre=$GENRE -t $1 $OUT/$2_$DATE.mp3
ファイルサイズもぐっと小さくなった。
$ ls -lh /var/services/music/NHK/ total 3.4M -rwxrwxrwx+ 1 root root 3.4M Sep 7 16:52 EnjoySimpleEnglish_20190907.mp3
あとは、前後のバッファーの調整だろうか。ffmpeg のオプション、-ss や -to, -t あたりを組み合わせてもう少し調整はできそう。(参考 ffmpeg で指定時間でカットするまとめ | ニコラボ)
追記。 2022.02 末ごろに URL が変更されていた。 https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8 となっている箇所は https://radio-stream.nhk.jp/hls/live/2023501/nhkradiruakr2/master.m3u8 と置き換えを。シェルスクリプトのところだけ置換済み。