NHKネットラジオ(らじる)の録音

November 15, 2017 – 10:58 pm

9月初旬からNHKネットラジオ(らじる)の配信方法が変更になっている。これまでのRTMPをベースとした配信に代え、HLS(HTTP Live Streaming)をベースとするものに変更された。

この変更に対応するため、我がサーバー上の録音用shellスクリプト(RTMPUumpによるNHKラジオ放送の録音(現状メモ)参照)を書きなおした。

関連する技術情報をメモしておいた。

HLS(m3u8)ストリームのmp3ファイルに変換保存
HLSストリームはffmpegにより次のようにmp3ファイルに変換保存することができる。

ffmpeg -i url_stream.m3u8 -t duration outputfile.mp3

ここで、

url_stream.m3u8 : ストリームURL
duration : 録音時間(秒)
outputfile.mp3 : mp3 出力ファイル

NHKらじるのURL
NHKらじるのストリームURLは以下(東京キー局の放送に対応)

  NHK第一放送:
  https://nhkradioakr1-i.akamaihd.net/hls/live/511633/1-r1/1-r1-01.m3u8

  NHK第二放送:
  https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8

  NHKFM:
  https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8

NHK第一放送録音時のログ
ffmpegコマンドで上述したNHK第一放送のストリームURLを用いて録音した際のログを以下に示す。なお、出力ファイルを testaudio.mp3 とし、120秒間の録音を行っている。また、時間データを正確に取得するため、パラメータ -write_xing 0 を与えている。

$ ffmpeg -i "https://nhkradioakr1-i.akamaihd.net/hls/live/511633/1-r1/1-r1-01.m3u8" -write_xing 0 -t 120 testaudio.mp3
ffmpeg version 2.6.8 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-4)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfaac --enable-nonfree --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, hls,applehttp, from 'https://nhkradioakr1-i.akamaihd.net/hls/live/511633/1-r1/1-r1-01.m3u8':
  Duration: N/A, start: 60832.425367, bitrate: 45 kb/s
  Program 0 
    Metadata:
      variant_bitrate : 0
    Stream #0:0: Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 45 kb/s
File 'testaudio.mp3' already exists. Overwrite ? [y/N] y
Output #0, mp3, to 'testaudio.mp3':
  Metadata:
    TSSE            : Lavf56.25.101
    Stream #0:0: Audio: mp3 (libmp3lame), 48000 Hz, stereo, fltp
    Metadata:
      encoder         : Lavc56.26.100 libmp3lame
Stream mapping:
  Stream #0:0 -> #0:0 (aac (native) -> mp3 (libmp3lame))
Press [q] to stop, [?] for help
size=    1875kB time=00:02:00.00 bitrate= 128.0kbits/s    
video:0kB audio:1875kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.002343%

NHKらじる 録音用shell:
shell スクリプトを以下に示しておく:

#!/bin/sh
date=`date '+%Y-%m-%d-%H:%M'`
echo "date = ${date}"

DURATION=`expr ${2} \* 60`

if [ "${1}" = "NHK01" ]; then
   S1="https://nhkradioakr1-i.akamaihd.net/hls/live/511633/1-r1/1-r1-01.m3u8"
elif [ "${1}" = "NHK02" ]; then
   S1="https://nhkradioakr2-i.akamaihd.net/hls/live/511929/1-r2/1-r2-01.m3u8"
elif [ "${1}" = "NHKFM" ]; then
   S1="https://nhkradioakfm-i.akamaihd.net/hls/live/512290/1-fm/1-fm-01.m3u8"
else
   exit
fi

if [ "${1}" = "NHK01" -o  "${1}" = "NHK02" -o  "${1}" = "NHKFM" ]; then
   ffmpeg -i "$S1" -t $DURATION -write_xing 0 "/var/www/test/audio/${1}_${date}.mp3"
else
   exit
fi

参考にしたサイト
上述の技術情報は次のサイトを参考にした:
  らじるらじる m3u8 を ffmpeg で録音する(8放送局)2017/9 以降対応


Post a Comment