ça va ?! 缶

さばかん

SynologyでNHKラジオ(らじるらじる)の録音

NHKラジオで英語の勉強をするから忘れずに録音するように、と妻が言うので、いくつかのサイトを軽く眺めたところ、家にある Synology DS218j が常時起動なので、便利に使えそう、と。 以下、やったことのメモ。

$ 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
  • むむと思いつつ、もう少し調べると、 SynoCommunityffmpeg パッケージがあるので、これを試してみることにした。
    • 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 に落とせて、再生できることまでは確認。あとは、番組スケジュールにあわせて、決まった曜日の決まった時間から、決まった秒数を録音すればいい。(NHKAkamai 使ってるんですな)
  • まあ、 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 と置き換えを。シェルスクリプトのところだけ置換済み。