Skip to content

Instantly share code, notes, and snippets.

  • Save gerowave/b6823a89a3c8f6e96b4aef1fde091d77 to your computer and use it in GitHub Desktop.
Save gerowave/b6823a89a3c8f6e96b4aef1fde091d77 to your computer and use it in GitHub Desktop.
らじるらじる m3u8 を ffmpeg で録音する(8放送局)2017/9 以降対応
#!/bin/bash
## NHKのネット配信サービスであるらじる★らじる。
# 従来は https://gist.github.com/riocampos/5656450 のように rtmpdump を使う必要がありましたが、
# 2017年9月から m3u8 による配信へ変更になったようです。m3u8 なので10秒単位での録音になります。
## 録音コマンド(m4a)
#ffmpeg -i M3U8URL -c copy outputfilename.m4a
# ファイルサイズ的に m4a が最も小さくなる
# m4a ファイルのときだけ "-c copy" オプションが使える。
## 録音コマンド(mp3)
#ffmpeg -i M3U8URL -write_xing 0 outputfilename.mp3
# Mac かつ保存形式が mp3 ファイルの場合には、ファイルの
# 時間表示を正しくさせるために "-write_xing 0" オプション必須。
# (参考: https://trac.ffmpeg.org/ticket/2697 )
# ffmpeg の各種オプションに関しては https://ffmpeg.org/ffmpeg.html を見てください。
# 日本語だと http://www.cagylogic.com/archives/2017/06/04125209.php 辺りで充分かと。
# -t オプションと -to オプションだけで済むと思いますが。
##### 以上の情報を元に、cronに登録しやすいように、シェルスクリプトを書いてみた。
LANG=ja_JP.utf8
date=`date -d '1 minute' '+%Y%m%d-%H%M'`
outdir="."
#引数:[Ch.名] [録音秒数] [出力先,さいごに/] [ファイル名]
# [録音秒数]は120秒増しに録られるので1分前からcronに登録する。
# [ファイル名]はYYYYMMDD-HHmm_[ファイル名].m4aで保存される。デフォルトは[Ch.名]
# [Ch.名]は下の分岐のとおり。
#
# 使うためにはffmpegのビルドオプションに--enable-opensslが付いてないとダメ。
# 例えばUbuntuだと、libssl-devをaptで入れた後、ビルドしなおしたら、いいのでは…。
# ディストリビューションのffmpegにそれが付いているかは知りません。
#
#引数が足りないときは、使用方法を表示して戻り値1でバイバイ。
if [ $# -le 1 ]; then
echo "usage : $0 channel duration(seconds) [outputdir] [filename]"
exit 1
fi
#引数が2つ以上あるときは、1個目をCh.名に、2個目を録音時間に指定。
if [ $# -ge 2 ]; then
channel=$1
DURATION=`expr $2 + 120`
fi
#引数が3つ以上あるときは、3個目を出力先ディレクトリに指定。
if [ $# -ge 3 ]; then
outdir=$3
fi
#引数が4つあるときは、4個目をファイル名の固定値に指定する。指定しなければ固定値はCh.名。
FILENAME=${channel}
if [ $# -ge 4 ]; then
FILENAME=$4
fi
#Ch.名による条件分岐
# M3U8URLは http://www.nhk.or.jp/radio/config/config_web.xml に記載されています。
case "$channel" in
"R1" )
# 東京放送局ラジオ第1
M3U8URL="https://nhkradioakr1-i.akamaihd.net/hls/live/511633/1-r1/1-r1-01.m3u8"
;;
"R2" )
# ラジオ第2(各放送局共通)
M3U8URL="https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8"
;;
"FM" )
# 東京放送局NHK-FM
M3U8URL="https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8"
;;
"HKR1" )
# 仙台放送局ラジオ第1
M3U8URL="https://nhkradiohkr1-i.akamaihd.net/hls/live/512075/1-r1/1-r1-01.m3u8"
;;
"HKFM" )
# 仙台放送局NHK-FM
M3U8URL="https://nhkradiohkfm-i.akamaihd.net/hls/live/512076/1-fm/1-fm-01.m3u8"
;;
"CKR1" )
# 名古屋放送局ラジオ第1
M3U8URL="https://nhkradiockr1-i.akamaihd.net/hls/live/512072/1-r1/1-r1-01.m3u8"
;;
"CKFM" )
# 名古屋放送局NHK-FM
M3U8URL="https://nhkradiockfm-i.akamaihd.net/hls/live/512074/1-fm/1-fm-01.m3u8"
;;
"BKR1" )
# 大阪放送局ラジオ第1
M3U8URL="https://nhkradiobkr1-i.akamaihd.net/hls/live/512291/1-r1/1-r1-01.m3u8"
;;
"BKFM" )
# 大阪放送局NHK-FM
M3U8URL="https://nhkradiobkfm-i.akamaihd.net/hls/live/512070/1-fm/1-fm-01.m3u8"
;;
"IKR1" )
# 札幌放送局ラジオ第1
M3U8URL="https://nhkradioikr1-i.akamaihd.net/hls/live/512098/1-r1/1-r1-01.m3u8"
;;
"IKFM" )
# 札幌放送局NHK-FM
M3U8URL="https://nhkradioikfm-i.akamaihd.net/hls/live/512100/1-fm/1-fm-01.m3u8"
;;
"FKR1" )
# 広島放送局ラジオ第1
M3U8URL="https://nhkradiofkr1-i.akamaihd.net/hls/live/512086/1-r1/1-r1-01.m3u8"
;;
"FKFM" )
# 広島放送局NHK-FM
M3U8URL="https://nhkradiofkfm-i.akamaihd.net/hls/live/512087/1-fm/1-fm-01.m3u8"
;;
"ZKR1" )
# 松山放送局ラジオ第1
M3U8URL="https://nhkradiozkr1-i.akamaihd.net/hls/live/512103/1-r1/1-r1-01.m3u8"
;;
"ZKFM" )
# 松山放送局NHK-FM
M3U8URL="https://nhkradiozkfm-i.akamaihd.net/hls/live/512106/1-fm/1-fm-01.m3u8"
;;
"LKR1" )
# 福岡ラジオ第1
M3U8URL="https://nhkradiolkr1-i.akamaihd.net/hls/live/512088/1-r1/1-r1-01.m3u8"
;;
"LKFM" )
# 福岡放送局NHK-FM
M3U8URL="https://nhkradiolkfm-i.akamaihd.net/hls/live/512097/1-fm/1-fm-01.m3u8"
;;
esac
#
# ffmpeg
#
ffmpeg_path=`which ffmpeg`
${ffmpeg_path} -i ${M3U8URL} -t ${DURATION} -c copy "${outdir}/${date}_${FILENAME}.m4a"
@gerowave
Copy link
Author

riocamposさんのところの情報を元に自分が使う用のシェルスクリプトを書いてみた。
というか、元のシェルスクリプトもどっかからぱくってきたやつなので、アレで済みません。
どっちかというと、opensslが扱えるffmpegを用意するところまでが大変でした。

https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
ここを見るか、ここに基づいた自分に負けないラボさんのシェルスクリプトを使って導入するといいと思いました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment