Raspberry Pi × ffmpegでネットラジオ録音を自動化する 但し、ラジコには手を出すな。

はじめに

以前にラズパイ3bにvolumioを作成したのですが、あんまり活躍する機会がないので、ラジコを録音するような仕組みにしようとチャレンジしました。

ですが、色々なDockerを試してみましたが、全く上手く行きません。

結論として分かったのは、ラジコは運営側とのイタチごっこなようで。。

果てしない追いかけっことなるようです。

「あぁ、それじゃ、だめだなぁ。」となった訳ですが、

なにか、音楽番組が録音できればいいのだけど?と思って、調べると、

ネットラジオがあるので、それを定期的に録音させてもらおうと思ったわけです。

しかも、ログは明瞭に、スクリプトは保守しやすく、録音ファイルは整理されていてほしい。

そんな思いから始まった、Raspberry PiによるRadiko録音システムの構築の巻です。

良かったら、読んでみてください。

構成概要

ラズパイ3Bを有効活用したいので、システム(アプリ)だけラズパイ3Bで録音とスケジュールファイルはSynologyのNASで管理します。

ラジオ日本の画像、色んなジャンルがあるので、凄く助かります。感謝
  • 録音対象:ネットラジオ(例:DanceMachine:https://www.radiojapan.org/ae/dance-machine)
  • 録音方式:ffmpegによるストリーム録音
  • スケジュール管理:NAS上のconfig.json
  • 実行環境:Raspberry Pi 3(IP: 192.168.0.74)
  • 保存先:Synology NAS(/volume1/radiko)をラズパイにマウント(/mnt/music/radiko)

ストリームURLの取得方法
対象サイト(例:https://www.radiojapan.org)でF12 → ネットワークタブ → 「radio.aac」などを右クリック → URLをコピー。
例:https://ice1.streeemer.com:8030/radio.aac

マウント設定(ラズパイ側)

sudo mkdir -p /mnt/music/radiko
sudo mount -t cifs -o username=user,password=yourpass,vers=3.0,uid=1000,gid=1000 //192.168.0.4/radiko /mnt/music/radiko

自動マウントは /etc/fstab に記述。

録音予約(config.json)

[
  {
    "title": "DanceMachine",
    "url": "https://ice1.streeemer.com:8030/radio.aac",
    "start": "2025-09-13T07:00:00+09:00",
    "duration": 3600
  }
]

録音スクリプト(record_radio.sh)

#!/bin/bash
CONFIG="/mnt/music/radiko/config.json"
SAVE_DIR="/mnt/music/radiko"
NOW_EPOCH=$(date +%s)

jq -c '.[]' "$CONFIG" | while read -r entry; do
  title=$(echo "$entry" | jq -r '.title')
  url=$(echo "$entry" | jq -r '.url')
  start=$(echo "$entry" | jq -r '.start')
  duration=$(echo "$entry" | jq -r '.duration')

  start_epoch=$(date -d "$start" +%s)
  end_epoch=$((start_epoch + duration))

  if [ "$NOW_EPOCH" -ge "$start_epoch" ] && [ "$NOW_EPOCH" -le "$end_epoch" ]; then
    timestamp=$(date -d "$start" +"%Y%m%d_%H%M")
    filename="${SAVE_DIR}/${title}_${timestamp}.m4a"
    ffmpeg -i "$url" -t "$duration" -c copy "$filename"
  fi
done

cron設定(毎分チェック)

crontab -e
* * * * * /home/volumio/record_radio.sh

トラブルシューティング

  1. Permission denied → マウント時にuid/gid指定 or chown
  2. ffmpegエラー → URLが音声ストリームでない可能性。.aac, .mp3, .m3u8 を探す
  3. crontabが使えない → sudo apt install cronsystemctl enable/start cron
  4. 録音されない → start時刻が過去 or 未来すぎる。±60秒の範囲で判定
  5. 再生できない → 拡張子を.m4aにすると互換性向上

改善と運用美の実践

  • ロケールを ja_JP.UTF-8 に設定し、日本語ログの文字化けを解消
  • nano の代わりに micro エディタを導入し、日本語表示を安定化
  • 過去のスクリプトが吐いていた rec.log を整理し、ログを record_log.txt に統一
  • スクリプトに録音成功・失敗・スキップのログ出力を追加し、透明性を確保

■ microエディタの使い方(推奨)

  1. インストール(1行でOK)
    curl https://getmic.ro | bash
  2. micro 実行ファイルがカレントディレクトリに作成される
  3. スクリプトを開く  ./micro record_radio.sh
  4. 基本操作
    • 保存:Ctrl + S
    • 終了:Ctrl + Q
    • 検索:Ctrl + F
    • 行番号表示:Alt + G(ジャンプも可能)
  5. 特長
    • 日本語表示が安定(文字化けしない)
    • カラー表示で見やすい
    • nano と同じ感覚で使えるが、操作性はより快適
    • 設定ファイルでカスタマイズも可能(~/.config/micro)
  6. 補足
    • micro はインストール不要で、実行ファイルだけで動作
    • 必要なら /usr/local/bin に移動して、どこからでも呼び出せるようにできる sudo mv micro /usr/local/bin/

今後の拡張案

  • weekdayベースの繰り返し録音
  • StreamTitleのログ化(曲名履歴)
  • n8nやNode-REDによるGUIスケジューリング
  • Grafanaで録音成功率や容量を可視化

まとめ

録音が成功したときに走ったログに「録音成功」と出たときは気持ちよかったなぁ。

これで色んな音源を聞くことが出来るようになって嬉しいです。

録音したファイルはダウンロードして、通勤時に車で聞くつもりです。

参考になれば幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください