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

ゆーすけべー日記

はてなBlogってどーなの!?

Plaggerでニコニコ動画を一括ダウンロード&変換 Podcast を生成して iPod touch で見る - 2007年11月最新版

Plaggerを使って、ニコニコ動画のマイリストなどのRSSから、そのエントリにある動画をダウンロードし、iPod touch で見れるような形式に変換して、Podcast も吐いて iTunes 経由で iPod touch に読み込ませ、いつでもどこでもニコニコ動画を見れる方法を紹介。おそらく、現在、一番スマートなものです。

ニコプラ

と、その前にこれにはいろいろ経緯があって、簡単に説明すると

hakobeさんの記事とかなりかぶり気味ですが、最初にとりあえず、どんな具合かをお見せします。 あ、ちなみにニコニコ動画側では最近、「ツールによるダウンロードは遠慮願いたい」なる警告を出しているので、 自己責任でお願いします。

まず、マイリストに iPod touch で見たい動画を追加していきます。

俺もhakobe氏に習ってあやしげなマイリストを作った
ニコプラ

公開状態のマイリストはRSSを出力するので、 Plaggerで読み込ませて動画をダウンロード&iPod touch 向けに変換し、 さらに Podcast のXMLを出力させます。 しばらく待つと(動画の変換に結構時間かかります)その作業が終わるので、iTunes の Podcast に読み込ませて動画をダウンロードさせます。

マイリストを公開にすると外部からRSSを読むことができる
ニコプラ

Plaggerが生成したRSSをiTunesに読み込ませるとPodcastのところから動画が見れる
ニコプラ

そしていよいよ iPod touch をつないで同期させると、 iPod touch の「ビデオ」→ Podcast のところに映像が入っているようになります。

iPod touch の動画一覧
ニコプラ

うほぉー、これで今まで追いつけてなかった「灼眼のシャナ2期」が電車の中でもモノレールの中でも見れるぜ。 でもニヤニヤしててまじ俺きもい。

やり方

Plagger のフェーズとしては、

  • マイリストのRSSをSubscription、つまりとってくる
  • Filter::FetchNicoVideo でニコニコ動画のflv形式のファイルをダウンロードする
  • Filter::FLVInfo でアスペクト比を判定する(ニコニコ動画のflvはアスペクト比が4:3のものと、16:9のものが混在しているので、hakobeさん作GJ!)
  • Filter::FFmpeg でflvをH.264という iPod touch で見れる映像形式に変換する
  • Filter::RewriteEnclosureURL で動画のパスと Podcast 用のURLとのマッピングを行う
  • Podcast のRSSを出力する

という具合です。もし、もっとお手軽にやりたかったら、Filter::FLVInfoの部分を省くと、config.yamlが小さくなるのでPlaggerにあまり詳しくない方でもできるかもです。 以下に、その config.yaml のサンプルを2種類掲載しておきます。

Filter::FLVInfo 有版

(*Filter::FFmpegの部分をもっとDRYに書きたくて#plagger-jaでいろいろ教わってYAML1.1のKey Mergeってのを使えばできそうなんですが、現行のYAML.pmではそれに対応していないのでこんな感じになりやした)

plugins:

  - module: Subscription::Config
    config:
      feed:
          - url: http://www.nicovideo.jp/mylist/522600/1880610
          
  - module: Filter::FetchNicoVideo
    config:
      mail: your@mailaddress
      password: password
      dir: /home/user/dir
      id_as_filename: 1

  - module: Filter::FLVInfo
  
  - module: Filter::FFmpeg
    rule:
      expression: "$args->{entry}->meta->{flvinfo}->{aspect} eq '4:3'"
    config:
      command: /usr/local/bin/ffmpeg
      ext: mp4
      dir: /home/user/dir
      encoding: utf8
      options:
        video_codec:         h264
        bitrate:             600
        audio_codec:         aac
        audio_sampling_rate: 44100
        audio_bit_rate:      128
        frame_size:          432x320
      extra_options: -coder 0 -level 13 -ac 2 # 環境によっては必要ないかも
      
  - module: Filter::FFmpeg
    rule:
      expression: "$args->{entry}->meta->{flvinfo}->{aspect} eq '16:9'"
    config:
      command: /usr/local/bin/ffmpeg
      ext: mp4
      dir: /home/user/dir
      encoding: utf8
      options:
        video_codec:         h264
        bitrate:             600
        audio_codec:         aac
        audio_sampling_rate: 44100
        audio_bit_rate:      128
        frame_size:          480x272 
      extra_options: -coder 0 -level 13 -ac 2

  - module: Filter::RewriteEnclosureURL
    config:
      rewrite:
        - local: /home/user/dir
          url: http://localhost/~user/dir

  - module: Publish::Feed
    config:
      format: RSS
      dir: /home/user/dir
      filename: nicopla.xml


簡易版
plugins:

  - module: Subscription::Config
    config:
      feed:
          - url: http://www.nicovideo.jp/mylist/522600/1880610
          
  - module: Filter::FetchNicoVideo
    config:
      mail: your@mailaddress
      password: password
      dir: /home/user/dir
      id_as_filename: 1

  - module: Filter::FFmpeg
    config:
      command: /usr/local/bin/ffmpeg
      ext: mp4
      dir: /home/user/dir
      encoding: utf8
      options:
        video_codec:         h264
        bitrate:             600
        audio_codec:         aac
        audio_sampling_rate: 44100
        audio_bit_rate:      128
        frame_size:          480x272 
      extra_options: -coder 0 -level 13 -ac 2

  - module: Filter::RewriteEnclosureURL
    config:
      rewrite:
        - local: /home/user/dir
          url: http://localhost/~user/dir

  - module: Publish::Feed
    config:
      format: RSS
      dir: /home/user/dir
      filename: nicopla.xml

また、CodeReposにもアップしてあります→/config/plagger/yusukebe/yusukebe-config-nicopla.yaml - CodeRepos::Share - Trac

ちなみに、マイリストのRSSじゃなくても、リンク先がニコニコ動画の映像であればどんなフィードでもいけるので、例えば、はてなブックマーク - www.nicovideo.jp の注目エントリーなんてページのRSSからも動画を取得できます。 また、複数のフィードからとってくる場合はSmartFeedを使って一つのフィードにまとめた方がいいかもしれませんね。

で、肝心の Filter::FetchNicoVideo の最新版はどこにあるかというとCodeReposにあげてあります。

lang/perl/plagger/lib/Plagger/Plugin/Filter/FetchNicoVideo.pm

がそれにあたります。

また、Filter::FLVInfo も同じ階層の

lang/perl/plagger/lib/Plagger/Plugin/Filter/FLVInfo.pm

にあります。

subversionが入っていれば

$ svn co http://svn.coderepos.org/share/lang/perl/plagger/lib/Plagger/Plugin/Filter/

とでもすればFilter以下のモジュールを持ってくることができます。 それをPerlの@INCディレクトリなどに適切に配置するか、別個にディレクトリを作ってPlaggerのconfigファイルで指定するパスを指定すればOKです。 めんどくさかったら、ホームディレクトリで

$ svn co http://svn.coderepos.org/share/lang/perl/plagger/lib/

ってやって config.yaml の先頭に

global:
  plugin_path:
    - /home/user/perl/plagger/lib/Plagger/Plugin

とするかシェルの設定ファイルにPERL5LIBのパスを足せばいいと思います。bashの場合はこんな感じ

export PERL5LIB=/home/user/lib/perl

この、ニコニコ動画の映像を最終的には iPod touch で見れるようにするというレシピ。使うためには、まず当たり前ですが、Plaggerが動く環境ないといけないのと、Podcastを読み込むためapacheなどのWebサーバーを持つ必要があります。 最近ではapacheがOSXに付属しているとはいえ、このように結構敷居の高い障壁=キャズム(?)が存在していることは確かです。 他にも、便利なツール・ソフトは出ているとは思いますが、もしよかったら、これを機会にこのキャズムを超えてみたらいかがでしょうか。ちなみに、俺はリビドーでキャズム超えをしてきましたけどね。

CodeReposってやっぱいいと思う

ところで、Filter::FetchNicoVideoやconfigファイルはCodeReposに置いていて、まだあんま使えてないかもしれませんが、これがすごくいいと改めて思いました。 当初は上記した通り、俺のブログにソースべた張り、みんなコピペで持ってて、という放任的で、 かつメンテもしてないという状況。そこでhakobeさんがパッチ作ってくれたという展開に。 それを改善すべく、そのまんまのことがCodeReposのWikiのトップページに書かれています。

パッチ送られてくる代わりに「後で見とくからコミットしといて」とかいえたりとか、つくりかけで放置したもので他の人が興味もったら続き作ってもらうとか、メンテするのめんどくなったのだれかにやってもらうとか、突発的に誰かと一緒にプロジェクト始めたりとか、できる!

そう、これが「できる!」んです。 つまり、最初からCodeReposにあげていたら、hakobeさんがパッチ作る代わりに、彼自身でチェックアウトし修正を加えて、新しいヴァージョンをコミットしてみんなに公開しておく、ってのができたのよ。 そうしたら、このコードを使う人はわざわざパッチあてなくてもいいし、他の人がもっと綺麗にソース直してくれたりできたかもしれないし。 というわけで、今回、hakobeさんのパッチを若干修正加えてマージして、CodeReposにあげてあるので、 「ニコニコの仕様変更があって動かねーよ」という場合や「ここをこうすればもっとかっこよくコード書けるよ」という場合には是非、コミッターの方は直してください。そしてコミッターじゃないけど、コミッターになりたい人はYappoさんにコミット権もらってコミッターになって、修正だけじゃなく、自分で書いたコードとかをあげたら面白いと思いますよー。

さぁおっぱいもニコニコ動画も iPod touch で楽しんだ。こんどは何をしようかな。

Apple iPod touch 16GB MA627J/A
posted with yusukebe.com::AmazonSearch on 2007.11.6
  • エレクトロニクス / アップルコンピュータ (2007/09/25)
  • Amazon 売り上げランキング: 14
Amazon.co.jpで詳細を見る

Apple iPod touch 8GB MA623J/A
posted with yusukebe.com::AmazonSearch on 2007.11.6
  • エレクトロニクス / アップルコンピュータ (2007/09/25)
  • Amazon 売り上げランキング: 52
Amazon.co.jpで詳細を見る