読者です 読者をやめる 読者になる 読者になる

きょこみのーと

元六本木でGo書いてました。今はVRでGo書いてます。

Webラジオのm3u8をdownloadしてffmpegでmp3に変換するツールをGoで書いた

Go tool ffmpeg アニメ ラジオ

2016/12/15 23:06 追記:

ちなみにffmpegでm3u8 -> mp3変換はできますが、実行時間が20分以上かかって待ってられなかったのでBulkDownloadが含まれてます。

あとm3u8のURLが推測難しく、いちいちブラウザ開いてplaylistをダウンロードして中身のmedia playlistのm3u8のURLを確認して〜がだるかったのでScrapingしてます。

Webラジオのm3u8をScrapingしてtsファイルをBulkDownloadしてffmpegでmp3に変換するツールをGoで書いた が正確なタイトルですかね。


今期は、ガーリッシュナンバーが結構お気に入りです。

www.tbs.co.jp

(ちーさまのダメ可愛さがなかなか癖になります)

f:id:kyokomi:20161215205231p:plain

(そして目玉焼きの服というセンス...圧倒的か...)

なんでこんな話から始まったかと言うと、面白いなーと思った作品のアニメのWebラジオとか結構聴くんですが、なんか専用のアプリがあって使いにくかったり、Webブラウザでしか再生できなかったりと中々不便なので結局ダウンロードすることにしてツールを作りました。

(たとえば、途中まで再生してブラウザ閉じたときに、続きから聴けない...とか)

sp.animatetimes.com


ここから本編

今回作ったツール

github.com

github.com

github.com

1つのツールにしても良かったんですが、用途考えると別々のほうが使いやすいかなと思って3つに分けました。

はじめに

今回必要なダウンロードの流れは以下になります。

流れ

  1. 指定したURLのWebページのCrawl
  2. CrawlしたHTMLから対象のURLをScrapingして抽出
  3. m3u8のPlaylistのURLを元にtsファイルをBulkDownload
  4. tsファイルをffmpegでつなぎ合わせてaacを作成
  5. aacffmpegを使ってmp3に変換

3〜5のあたり github.com/yyoshiki41/radigo こちらを参考にさせていただきました。

前提条件・事前準備

  • Macでしか試してません
  • 対象のWebページのURLを用意してださい
  • 対象のxpathを適当に調べておく(ChromeDeveloperToolとかで)
  • ffmpegをインストールしておく
  • Go環境用意しておく

インストールの仕方・それぞれの役割説明

インストール

go get github.com/kyokomi/xcrawl
go get github.com/kyokomi/m3u8go
go get github.com/kyokomi/ffmpego

役割

使い方

xcrawlのオプションで使えるconfig

スマートフォンサイトをCrawlしたいとかのときに使います。

headers:
  User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Mobile Safari/537.36

実行例

xargsでつなぐと一発で実行できて便利です。

$ xcrawl -c <configファイルのパス> \
         -i '<ラジオ再生ボタンがあるWebページのURL>' \
         -x '<master playlistのURLが抽出できるxpath>' \
         | xargs m3u8go -i \
         | xargs ffmpego -o <出力するファイル名> -i

デモ

冒頭にもリンク貼りましたが最近ハマっている、ガーリッシュナンバーの「クズらじ」で試してみます。

www.animatetimes.com

$ xcrawl -c config.yaml \
            -i 'http://sp.animatetimes.com/radio/details.php?id=gn&a=10&m=a' \ 
            -x '//*[@id="main-contents"]/ul[1]/li[3]/div/div[1]/div/a[1]/@href' \
            | xargs m3u8go -i \
            | xargs ffmpego -o kuzu3.mp3 -i

f:id:kyokomi:20161215203950p:plain

これでひとまず満足... ^q^

かなり雑に実装したので、もし自分以外に使う方がいましたら、バグとかあればお気軽に〜(対応するかはわからないが...)