小ネタ:ラジオの録音

そろそろ50歳の声も聞こえてくるようになりました。先日誕生日を迎え、名実ともに年男となりました。そんなお年頃。ラジオはいまでも友達です。ラジオ遍歴を語れば投稿2つ3つ埋められそうですが、今回はラジオの録音について、ライトな感じにお伝えしたいと思います(ちょっとラジオのディスクジョッキー風)。

ラジオの録音方法

ラジカセとかコンポとかを持っている場合、現実的かつ合理的な録音方法は録音可能なメディアにラジオの音声をそのまま録音させる方法でしょう。いわゆる「エアチェック」と呼ばれるやり方。こんなことを書きながら、でもカセットなんて録音できたとしても再生させられる場所少ないもんなぁと思う私はやっぱり古い。MD(MiniDisk)というのがあるじゃないですか。これならクルマでも聞けまっせ。と、ひたすら古い話を重ねていく私はやっぱり古い(むしろポンコツな)人間でございます。そろそろ本題に行ってもいいですか。

パソコンでラジオを聞くならコマンド一発で録音ができる

とりあえずラジオを聴く「機械(ラジカセだのコンポだの)」を持っていないということになると、パソコンやスマホを使った聴取方法を採用することになります*1。録音については(法的な可否を含んだ私の見解については別途述べますが)、基本的にアプリやWebサービス上では提供しておらず、代わりに『聞き逃し配信』的なサービスをしているところもあります*2スマホだと別の、というか非公式のアプリとして録音可能なものもあるようですが、パソコンの場合にも同様に非公式のアプリが存在し、録音ができます。 が、実はスマホアプリもPCアプリも、録音をする裏側の仕組みはほぼ同じものを採用していて、更に言うとその仕組みはオープンソースソフトウェアであり誰でも入手・利用が可能だったりするわけです。もちろん、使い方がそこそこ難しいので、その機能を使いやすくするために「アプリ」という形で第三者が提供しているわけです*3

コマンドを使うために

そのコマンド(OSS)はFFmpegというもので、音声や動画の再生・記録・変換ができるツールです。詳しくはWikipediaを見てね。

www.ffmpeg.org

(開発の)歴史も古く、サポートされるファイル形式や変換形式も多く、録音/録画と言えば、という印象を私も持っていますが、とりあえずはこれをインストールすればいいわけです。インストール方法は公式サイトをご確認ください(本体以外にも必須ライブラリのインストールも必要な場合があります)。 で、あとは録音です。公式でも、

$ ffmpeg -i input.mp4 output.avi

とある通り、コマンド名、オプション付けて、入力と出力を指定すればOK。簡単でしょ?

絶対にシロウトには使えない

オプション(例で-iとしている個所)は調べればわかるとして、出力はPCの中のファイルとして考えればいいんですが、問題なのは入力。まさかStdOut(標準出力:音声ならスピーカー出力)を使うわけでもなく、「ネットラジオのストリームデータ」、URLみたいなものを指定することになります。ではそれってどれ? 今でこそ、「ネットラジオ 録音」と検索すれば方法も含めてストリームのURL一覧も出てきますが、これを調べるためには、わかりやすいWebサービスであればブラウザの「開発ツール」を使って再生しているパーツが呼び出しているURLを探すとか、うまいこと隠している(Flashとかで隠してたりする)場合はパケットスニッフィングで調べたりとかするわけです。私は面倒なので先人たちの知識をそのまま利用させていただきます(つまりググる)。

ラジオ録音の醍醐味・予約録音の方法

実際にコマンドのテストをするとわかるのですが、録音は即時開始され、コマンドに録音時間を指定すればその時間が終われば終了、指定していなければコマンドを手動中止するまで延々と録音し続けることになります。とある番組を丸ごと録音、というパターンであれば、録音終了時間を「録音する時間」として指定(オプションの-tを秒で指定:60分の番組なら-t 3600と指定)すればいいのですが、問題は開始時間です。これはFFmpeg側では何ともならない(FFmpegはコマンド予約実行機能を持っていない)ので、外部のタイマー機能を併用するしかありません*4Windowsだと「タスクスケジューラー」、MacLinuxだとCronでしょうか。実行するコマンドをバッチファイルに書き込み、そのバッチをCronなりタスクスケジューラーで番組開始時間に実行すればよいわけです*5

本当は(インターネット)ラジオの録音アプリを作りたいのだけれど

この仕組みはずっと前から知っていて、(ラッパー:Wrapper)アプリを作りたいというのもフリーランスになってからの目標の一つなのですが*6、ライフスタイルが変わることでラジオの録音の必要性が自分の中でその時々で変わっていることもあり、本当に手が空いた時にでもやろうかな、くらいな優先度の低いプロジェクトです。 ラジオにせよテレビにせよ、聞きたいけど/見たいけどその時間は別の何かをしているので、録音・録画してあとで聞こう/見ようとするのが録音・録画する理由の一つ(かつメインの理由)だと思うのですが、あとで聞く/見る時間は意外と取れなかったりします。録り溜めて、溜まっていく一方聞く/見ることができずに未再生のファイルが大量に増えていくと、徐々にファイルを録り溜める「罪悪感」に苛まれるようになっていき、でもファイルは溜まる一方なので、録り溜める、という行為自体をしなくなってしまうようになってしまうんです。そういう生活をしていると、録り溜めるアプリを作ること、それは自分が欲しかった「はず」のアプリなのですが、今は必要のないアプリなのに作る必要があるのだろうか、というモチベーションの劇的な低下が起こるわけです。 なので、作ってほしい、という声が多ければ作りたいと思いますが、そもそもラジオって聞く?録音(エアチェック)してまで聞く?というニーズが読めないですよね。しかも先発アプリは多数あるわけで*7

余談:なんでこんなことを今さら書いたのか

きっかけは、ラジオ(番組)の予約録音をしたくなり、そのために手元のリソースを使って簡単にできないかと考えたからです。たまたまLinuxを使っていたときに思いついたので、アプリのインストールをするより「FFmpegを入れてコマンド一発」が早いよな、と感じたのでそのままやってみたということだったのですが、その顛末を書きながら、録音した番組を聞きなおしてみると、もちろん自分が聞きたいから録音したものですし、聞いたら楽しいのですが、録音後1週間以上経ってから聞いているという事実を考えると、「ラジオから離れた生活になっちゃったなぁ」と感じ、以前から作りたかったラジオ(録音)アプリにしても、自分の中のモチベーションが今一つ上がらないまま録音を手作業で行っているのはなぜだろう、と考えをまとめてみたのですがどうでしょう。

*1:ちなみに私の母(79)はスマホを持っていますが、最近友人に「『らじこ』を入れるといつでもラジオが聞けるのよ」と言われたらしく、私にインストールしろと頼んできやがったのでインストールしてやりました。AFN Pacificでも入れてやった方がよかったかな...。

*2:と言ってもRadikoだけなんですが。らじるらじるも一応似たようなサービス提供をしていますが、Radikoに比べると聞くことのできる番組数が圧倒的に少なく、どちらかというと「デジタルアーカイブ」的な印象です。

*3:システム屋的には当該オープンソースソフトウェアの「ラッパー(Wrapper)」という言い方をします。

*4:だからラッパー(Wrapper)アプリが作られるわけですが。

*5:たった1行のコマンドをそのまま指定すればいいのでは?と思うのですが、タスクスケジューラーにせよCronにせよ、実行させられるのは一つのプログラムの塊、WindowsとかのGUIで言うところの「1アイコン」が実行単位なので、今回の録音のようにオプション指定などができないんです。そこで、オプションも含めたコマンド全体をバッチファイルという塊にして(Windows上ではアイコンとして見える)それを予約実行させる、という手順が必要になります。これまたシロウトには難しい世界なのか...。

*6:企画として5~6年温めています。温めすぎて発酵しかけてる気もしますが...。

*7:先発アプリがありそれなりのシェアを確保しているということもモチベーションが下がる一つの理由です。そんなアプリを使ったこともあって、使いにくさを感じたこともありますが、自分が使いやすくするためにアプリを作るくらいなら、使いにくいアプリの作者に改善依頼でもしたほうが圧倒的に楽ですから。