iPod touch向けのニコニコ動画のPodcastを生成する

iPod touchが届いたー!

IMG_0194.JPG

この連休は家から出られなくなったので、iPod touchをいじり倒す予定です。

せっかくなので、Plaggerを使って、ニコニコ動画のマイリストから動画Podcastを生成してみました。ニコニコ動画 => Podcast => iTunes => iPod touch が自動できるようになるので、いつでも素敵動画が持ち歩けるように!

実際にやってみた

ではまず、おもむろにお気に入りの動画をマイリストに登録します。いかにも怪しげなマイリストです。

touroku.jpg


このマイリストのRSSをもとにPlaggerで動画Podcastを生成します。Plaggerの野良プラグインに、Filter::FetchNicoVideoとFilter::FFmpegがあるのでこれを利用します。詳しくは後述。

できあがったPodcastはiTunesではこんな感じに見えますよ。

ニコニコ動画Podcast


ここまでくれば、あとは、これをiPod touchに同期させるだけですね。しばし待ちます。

IMG_0189.JPG


ちゃんと読み込めたー!iPod touchではこんな感じで表示されます。

IMG_0192.JPG


最近のヒットは「お嫁にしなさい!」

IMG_0195.JPG


iPod touchサイコウサイコウ。

どうやるの?

このアイディア自体はゆーすけべーさんがやっていたものを参考にさせてもらいました。ありがとうございます。yusukebe++。参考: Plaggerでニコニコ動画のFLVとコメントを一括ダウンロード!

というか、ほとんどそのまんまで、ゆーすけべーさんの作ったモジュールを利用してたり。ただ、動作しないところもあったので、ちょっとだけ手を入れています。

Filter::FetchNicoVideoはニコニコ動画の新認証方式に対応してなかったので、perl - ニコニコ動画ダウンローダー新認証対応版のコードをマージして対応させました。

mizzyさん作のFilter::FFmpegはオプションの指定方法が手元のffmpegと違ったので、とりあえず、強引にオプションをそのまま渡せるようにしてあります。また、ニコニコ動画のFLVは動画のアスペクト比が4:3のものと、16:9のものが混在しているのでFLV::Infoモジュールをつかってその判定だけやっています。以下のようなコードになりました。

# アスペクト比によって出力サイズを変える
use FLV::Info;
my $reader = FLV::Info->new();
$reader->parse($flv_path);

my %info =  $reader->get_info;

my $height = $info{video_height} || $info{meta_height};
my $width  = $info{video_width}  || $info{meta_width};

my $s;      # ffmpegに渡すサイズ
my $aspect; # ffmpegに渡すアスペクト比
if ($width/$height > 1.5) { # 16:9
    $s = "640x360";
    $aspect = '16:9';
}
else {                      # 4:3
    $s = "640x480";
    $aspect = '4:3';
}

あとは、YAMLを書いてcronに仕込んでおくだけです。マシンの性能にもよりますが、作業用BGM120分とかをエンコードしない限り、夜に始めれば朝にはPodcastのできあがり。マイリスト登録をぽちぽちとするだけで、できあがるというのは、ちょっと楽しいですね。

一応、修正したプラグインのdiffとYAMLの例を置いておくので参考にやってみてください。変更後のこととか考えずに、修正しているのでひどいdiffになってます。Filter::FFmpegがflvからの変換専用になってるのも注意が必要です。微妙にうまく動いていないという報告も受けているので、問題を発見したらぜひ教えてください。勝手に直してもらってもかまいませんよー。

Apple iPod touch 8GB MA623J/A

Apple iPod touch 8GB MA623J/A