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
表示されたコマンドをコピペしてダウンロードした。