2017年9月5日の記事「らじる☆らじる ~受信方法の変更 」におきましては、大勢の皆様に御閲覧頂き有難うございました。中でも、 rtmpdump を使用した録音、が突然できなくなったことに対して困っていらっしゃる方が多いような印象を強く受けました。
記事中に示したアドレス、例えば http://nhkradioikr1-i.akamaihd.net/hls/live/512098/1-r1/1-r1-01.m3u8 にはテキストで拡張子.tsのファイル名が列挙されています。これら.tsファイルをダウンロード→保存することができれば、このファイル自体が10秒程度の音声ファイルとなっています。
ダウンロードにあたっては、私はwgetを使用するのが便利と感じていますが、HTTP要求を送ることさえできればよいので、firefoxのようなブラウザでも不可能ではありませんでした。大量のアドレスを打ち込まないといけないので長時間にわたっての使用は手が疲れてしまうでしょうが・・・。
ダウンロードされた.tsファイルは、それ自体 WINDOWS MEDIA PLAYER で再生できます。しかし ffmpeg などを持っているならば、それを使って .wav 形式に変換した方が若干音質が良くなるような気がしています。
下に示したシェルスクリプトは、この「ダウンロード→wav形式変換」を ctrl+C などで強制終了するまで自動的に実行することを目的として作成してみました。.m3u8形式のリスト中には十数個のファイル名しか列挙されていませんので、概ね3分程度で音声ファイルが尽きてしまいます。そこで180秒後に同じ手順を再実行する無限ループとしています。パソコンやネットワークが遅い場合、sleep間隔が180秒ではファイルに「抜け」が生じる可能性もありますので、その場合は180を150とか少し小さな値にして下さい。30秒まで小さくしても一応動作することは確認していますが、不必要に小さいとネットワーク負荷が大きくなります。
以上、お悩み解決の参考になれば幸いに思います。
#!/bin/bash index=1-r1-01.m3u8 #URL="http://nhkradioikr1-i.akamaihd.net/hls/live/512098/1-r1" #札幌局第1 URL="http://nhkradiohkr1-i.akamaihd.net/hls/live/512075/1-r1" #仙台局第1 while true do wget ${URL}/${index} 2> /dev/null # .m3u8形式ファイルのダウンロード declare -a file=( `\ cat ${index} |\ sed -e "s/#.*$//g" |\ sed -e "/^$/d" |\ fromdos ` ) rm $index # これで音声ファイル名 .ts が配列変数 ${file[$i]} 中に収まった for (( i=0; i<${#file[*]}; i++ )) do echo ${URL}/${file[$i]} wget ${URL}/${file[$i]} 2>/dev/null # 音声ファイルのダウンロード tsfile=`basename ${file[$i]}` # .ts形式ファイル名の取得 wavfile=`echo $tsfile | sed -e "s/.ts/.wav/g"` # 作成したい.wav形式ファイル名の作成 ffmpeg -n -i $tsfile $wavfile 2> /dev/null # .ts形式を.wav形式に変換 rm $tsfile done sleep 180 # 3分間に1度実行 done