Plaggerを使って、ニコニコ動画のマイリストなどのRSSから、そのエントリにある動画をダウンロードし、iPod touch で見れるような形式に変換して、Podcast も吐いて iTunes 経由で iPod touch に読み込ませ、いつでもどこでもニコニコ動画を見れる方法を紹介。おそらく、現在、一番スマートなものです。
と、その前にこれにはいろいろ経緯があって、簡単に説明すると
- 俺がPlaggerのPlugin、Filter::FetchNicoVideo を作る。それを利用すると「Plaggerでニコニコ動画のFLVとコメントを一括ダウンロード!」ができる
- ニコニコ動画、認証の仕様変更、Filter::FetchNicoVideoがそのままでは使えなくなる
- iPod touch 発売
- hakobeさんが「iPod touch向けのニコニコ動画のPodcastを生成する - はこべにっき#」という記事を書く(hakobe++)
- その中ではFetchNicoVideoをニコニコ動画の仕様変更に対応させるパッチが掲載されている
- shinさんもhakobeさんの記事を見て「PoWer Station-WeBlog!:ニコニコ動画からPlaggerでPodcastを作りiTunesで見たいゼ」という記事を書く
- ところが、俺がメンテしてないせいもあり、FetchNicoVideoについてもPlaggerの設定ファイルについても割とカオス的状況になっている(shinさんも苦労している様子)
- そこで俺が、後述するCodeReposにhakobeさんのパッチをマージした最新のFilter::FetchNicoVideoと設定ファイルをアップする←今ここ
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 で楽しんだ。こんどは何をしようかな。
- エレクトロニクス / アップルコンピュータ (2007/09/25)
- Amazon 売り上げランキング: 14
- エレクトロニクス / アップルコンピュータ (2007/09/25)
- Amazon 売り上げランキング: 52