ランのお供にYouTube音声MP3保存プログラムを作る

ランのお供に!ニュース音声自動作成の要件定義


本エントリを書いてみたら長くなってしまったので、やりたいことをまずまとめておく。

ゴールは「毎朝ランニングするとき、自動で最新ニュース等の音声をスマホで再生できる」状態を実現すること。

この要件を分解するとこんな感じで、最後の4番目のみ手動、あとは自動となるのが望ましい。
  1. 毎朝自動でYouTubeを巡回して最新ニュースをチェック
  2. ランニング予定分(1時間~1時間半)の音声をダウンロード
  3. 音声をスマホで再生出来る状態にする
  4. スマホを開くと最新ニュースが入ってるのであとは走りながら聴くだけ
今回はその経緯と経過、特にYouTubeから音楽再生用のMP3ファイルを作成するところを掘り下げてみた。

外ランのお供に音楽と・・・


今月初に実走を初めてから最初はそれなりに飽きずに走れていた。

いろんなルートを開拓しながら違うコースを走ってみたりしたのも新鮮だった。

が、走りにくいコースと走りやすいコースがふるいにかけられ、ランニングルートが固定化されてくるとその新鮮さもなくなってくる

結局は安全面や走りやすさ、時間調整のしやすさでメリットが多いトラックが鉄板になりそうだが、それはそれで視覚的な刺激はないので新鮮さという点ではないに等しい



視覚の刺激がない中でランニングのお供になるのは聴覚だが、どんだけ好きな音楽でも毎回同じ曲を聴いていると飽きてくる

ランダム再生にしていない人は覚えがあるかもしれないが、毎回同じ順番でプレイリストなりスマホ内の音楽を流していると、今の曲が終わるときにもう次に何の曲が来るのかわかっていて頭の中でイントロが流れてきたり・・・

せっかくだから音声化したKindle本を聴きながら走ったりもした

それはそれで、ランニングフォームについての解説本とかだと、まさに走っている最中なので、リアルタイムにその場でコーチングしてもらってる感じで試せたりとなかなか良いのだが、やはりオーディオブック化した電子書籍も無限にあるわけではないのでネタも尽きてくる・・・。



だいたい一冊オーディオ化すると2時間半~4時間くらいにまとまるが、一週間もすれば数冊読み(聴き)終えてしまうので、習慣的に続けて行くにはマンネリ化するのは否めない。

ニュースを聴く方法


それに比べてルームランナーで走っている時はWiFiにつながったタブレットで完全装備なので、メールをチェックしたり、ニュースを読んだり、半沢直樹を見たり、漫画を読んだりとやりたい放題でマンネリ化の対極にあるのだが、その中で外ラン中にできそうなのはニュースを聴くことくらい

まずはラジオ的なアプリでニュースが聞けないか試してみるが、日本のものは音楽ラジオはあるもののニュースチャンネルがなく自分の用途としては使えなそう。



次に見つけたのは「ニュースを外出中に聞ける」というまさに自分の用途にぴったりなアプリなのだが、海外だからなのか、ネットの接続が悪いのか、自分のスマホでは再生できなかったりで使えない。



ちなみに日本のアプリや動画が海外からでは視聴制限がかかっていて再生できないのはよくあることで、たとえばTVerといった日本国内向けサービスはアメリカからではエラーになる。



もちろんVPNを使えば可能なのだが、その分回線速度は遅くなったりと弊害もあるし、そもそも専用アプリでは情報ソースの選択肢も限られてしまう(たとえば↑のアプリの場合、朝日新聞がアルキキ用に公開しているニュースのみになる)。

となると、選択肢が多く、最新のニュースも多いのはやはりYouTube

タブレットで視聴しているのもYouTube経由なので、YouTubeを音声化するのがコンテンツ的にも一番充実しそう。

YouTubeを音声化する


YouTubeの動画を音声ファイルとしてダウンロードしたいと考えると、まず出てくるのがそういうダウンロードサービスを行っているウェブサイトだろう。

実際、「YouTube 音声 ダウンロード」などで検索すると、海外のサイトを紹介しているものを多く見かける

自分も使ったことがあるが、広告が多かったり、ブラウザのセキュリティ警告が出て怪しかったり、うまくダウンロードできなかったり、ダウンロードできてもしばらく経つと(YouTube側の仕様変更などで)使えなくなったりと、継続して使うには信頼性という面で厳しい

外部の(あやしい)サイトに頼らずに、自分で直接YouTubeからダウンロードできないかと思って調べて見ると、PythonのPytubeというライブラリを使えばダウンロードできるらしい。

解説動画も出ているので解説動画を見ながら・・・



解説動画自体をダウンロードできるか試してみると保存できた。



ファイルをダブルクリックしてみるが問題なく再生できた。



まさかコード3行で保存できるとは思わなんだ。



YouTubeを保存さえできればあとはPythonの他のライブラリを使って適当に音声化できる。

こちらのお昼のニュース(31分のまとめ動画)を使って試すことに。



無事にMP3ファイルで保存完了。



こちらが全プログラムだが、インポートや変数定義、作業完了を知らせる用のPrint文を除けば、実質4行でYouTubeのダウンロードからMP3変換までできている。20年以上Javaばっかり使っていた自分としては目から鱗だった。



蛇使いの方には釈迦に説法だが、興味のある方用に書いておくと中身はこんな感じ。
  • 1-3行目:必要なライブラリをインポート
  • 5行目:YouTubeの動画のアドレスを指定
  • 7-9行目:変数定義(保存場所やファイル名等を設定)
  • 11-12行目:YouTube動画を音声のみダウンロードしてMP4ファイルで一時保存
  • 14-15行目:MP4ファイルをMP3ファイルに変換
  • 16行目:一時保存のMP4ファイルを削除
ファイルの保存フォルダをクラウドと同期設定すればスマホからクラウド経由で再生できるようになるだろうし、Pythonなら各種クラウドに直接アップロードするようなこともできるんだろう。知らんけど。

もっと掘り下げれば一時保存ファイルを作らずに直接MP3にできたりもするんだろうが、とりあえず自分の用途としてはこれで問題なし。

30分程度の動画であれば、2,3個ダウンロードすれば10km~15kmのランニングには十分。

たいした手間でもないので最初は自分で見たい(聴きたい)ものをチェックして音声化、それをYouTube Musicなりのクラウドに保存すればスマホから再生できる。



将来的には特定のチャンネルや、サブスクライブしているものや、プレイリストから複数動画を自動で音声ファイルで保存できれば言うことなし。

試しにFNNチャンネルの動画リストを取得できるかやってみるとタイトル一覧が取れた。



単純にウェブサイトのスクレイピングでいけそうだが、Pytubeのライブラリでも取れそうなので方法はいろいろありそう。

動画リンクに必要なv(ビデオ)パラメータも一覧が取れるので、まとめて自動保存といったバッチ処理もできる。



タイトルや動画の長さ、公開日時等々で判定してやれば、「昨夜~今朝までにアップロードされた何分以上(以内)の動画」とかの条件で、まとめてMP3ファイルで保存することもできそうで夢が広がりんぐである。

ただちょこちょこ試したところでは動画によっては保存できないものもあるようで、Githubにも報告されていたりで完璧ではないらしい。

とはいえ選択肢が多いのがYouTubeの強みなので、複数のニュース配信動画から使えるものを音声化すればネタが尽きることはなさそう。それも含めて複数チャンネルリストなりの候補一覧をもとに「1時間半分になるまで最新ニュースを音声保存する」なりの処理にしてやればいい。

なにはともあれYouTubeから音声ファイルを作る処理さえできてしまえば、あとはスマホでPythonを実行して端末内に直接保存したり、パソコンで毎朝バッチ処理で実行して保存フォルダをYouTube Musicなりのクラウドと同期させてやったりすれば、冒頭で触れた「毎朝ランニングをするとき、自動で最新のニュース等の音声をスマホで再生できる」状態を実現できるだろう。


0 件のコメント :

コメントを投稿