HOME | Linuxメモ

Linuxメモ

OS:CentOS Stream9 記:2025年09月30日

ffmpegでNHK語学講座を録音した

聞き逃し番組をダウンロードした

(経緯)2025年9月26日~9月30日の録音予約が失敗していたため、聞き逃し番組をダウンロードした。
公開元 https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/corners/new_arrivals
ここから聞き逃し番組の「series_site_id」を探す。

ラジオ英会話 PMMJ59J6N2
ビジネス英語 368315KKP8
英会話タイムトライアル 8Z6XJ6J415
エンジョイシンプルイングリッシュ BR8Z3NX7XM

聞き逃した番組の公開中の「stream_url」(m3u8ファイル)を表示する。
例「series_site_id: "PMMJ59J6N2"」を「series?site_id=PMMJ59J6N2」に指定する。
https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series?site_id=PMMJ59J6N2&corner_site_id=01
https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series?site_id=PMMJ59J6N2&corner_site_id=01
0	
id	4272566
program_title	"ラジオ英会話 ハートでつかめ!英語の極意 (118)"
onair_date	"9月24日(水)午前6:45放送"
closed_at	"2025年10月1日(水)午前7:00配信終了"
stream_url	"https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_05b8d6bf79521304a55dd26307accd14/index.m3u8"
aa_contents_id	"[radio]vod;ラジオ英会話 ハートでつかめ!英語の極意 (118);r2,130;2025092473898;2025-09-24T06:45:00+09:00_2025-09-24T07:00:03+09:00"
annotation_title	""
annotation_url	""
program_sub_title	"【講師】東洋学園大学教授…大西泰斗,【出演】デイビット・エバンス,秋乃ろーざ"
1	
id	4272771
program_title	"ラジオ英会話 ハートでつかめ!英語の極意 (119)"
onair_date	"9月25日(木)午前6:45放送"
closed_at	"2025年10月2日(木)午前7:00配信終了"
stream_url	"https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_42bd140d835338daffffb246a84d8dfd/index.m3u8"
aa_contents_id	"[radio]vod;ラジオ英会話 ハートでつかめ!英語の極意 (119);r2,130;2025092574145;2025-09-25T06:45:00+09:00_2025-09-25T07:00:03+09:00"
annotation_title	""
annotation_url	""
program_sub_title	"【講師】東洋学園大学教授…大西泰斗,【出演】デイビット・エバンス,秋乃ろーざ"
2
id	4272949
program_title	"ラジオ英会話 ハートでつかめ!英語の極意 (120)"
onair_date	"9月26日(金)午前6:45放送"
closed_at	"2025年10月3日(金)午前7:00配信終了"
stream_url	"https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_0503526630c5601b90107b5b29eb17d8/index.m3u8"
aa_contents_id	"[radio]vod;ラジオ英会話 ハートでつかめ!英語の極意 (120);r2,130;2025092674392;2025-09-26T06:45:00+09:00_2025-09-26T07:00:03+09:00"
annotation_title	""
annotation_url	""
program_sub_title	"【講師】東洋学園大学教授…大西泰斗,【出演】デイビット・エバンス,秋乃ろーざ"
3
...以下略

ffmpegでダウンロードする。(9月26日放送分のラジオ英会話)
ffmpeg -http_seekable 0 -i https://vod-stream.nhk.jp/radioondemand/r/PMMJ59J6N2/s/stream_PMMJ59J6N2_0503526630c5601b90107b5b29eb17d8/index.m3u8 nhk_kaiwa_20250926.mp3


聞き逃し番組のjsonからmp3のタグを取得して
ffmpegで録音する場合の引数の指定の例をphpに表示させた。
表示されたコマンドをコピペしてダウンロードした。

json_decodeで抽出した番組名(share_text_title)、タイトル(program_title)、放送日(onair_date)を自分好みに編集して、mp3のタグのアルバム名とタイトル、ファイル名に指定してffmpegでダウンロードする場合の、
ffmpegのオプション指定をphpで表示させた。
nhk_kaiwa.php
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
</head>
<body>
<?php
$pref = "nhk_kaiwa_".date("Y");
$site_id = "PMMJ59J6N2";

$url = "https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series?site_id=".$site_id."&corner_site_id=01";

$json_string = file_get_contents($url);
$arr = json_decode($json_string, true);
$episodes = $arr["episodes"];
echo "#".$arr["share_text_title"]."<br>\n";
$i = 0;
while ($i < count($episodes)) {
  //月を2桁に
  $month = preg_replace('/月.*/', "", $episodes[$i]["onair_date"]);
  $month = sprintf("%02d", $month);
  //日を2桁に
  $day = preg_replace('/.*[0-9]月/', "", $episodes[$i]["onair_date"]);
  $day = preg_replace('/日.*/', "", $day);
  $day = sprintf("%02d", $day);
  //タイトルとファイル名
  $title = $episodes[$i]["program_title"]." ".preg_replace("/午.*/", "", $episodes[$i]["onair_date"]);
  $filename = preg_replace("/\(/", "\\(", $episodes[$i]["onair_date"]);
  $filename = preg_replace("/\)/", "\\)", $filename);
  $filename = preg_replace("/午.*/", "", $filename);
  $filename = $pref."_".$month."月".$day.preg_replace("/.*日/", "日", $filename).".mp3";
  //リストを表示
  echo "ffmpeg -http_seekable 0 -i ".$episodes[$i]["stream_url"]." -metadata title='".$title."' -metadata album='".rtrim($arr['share_text_title'])."' ".$filename."<br>\n";
  $i++;
}
?>
</body>
</html>
サンプル
nhk_kaiwa.php
表示されたコマンドをコピペしてダウンロードした。