Plaggerでニコニコ動画を一括ダウンロード&変換 Podcast を生成して iPod touch で見る - 2007年11月最新版うちでは臨時予算案は可決されそうにありません。宝くじが当たるま携帯で我慢したいと思います。
今日は、ゆーすけべさんの所に置いてあるYAMLをちょこっと弄って、携帯向け変換をやろうかと思います。ちょっとだけオリジナリティを出そうとニコニコではなく、YouTubeから...
まず、こんなYAMLを用意します。
youtube_hatena_tagged.yaml
global:
assets_path: /home/user/plagger/assets/
timezone: Asia/Tokyo
log:
evel: info
plugins:
- module: Subscription::Config
config:
feed:
- url: http://b.hatena.ne.jp/t/youtube?mode=rss&sort=hot&threshold=3
- module: Filter::FindEnclosures
- module: Filter::FetchEnclosure
config:
dir: /home/user/plagger/out
- module: Filter::FLVInfo
- module: Filter::FFmpeg
config:
command: /usr/bin/ffmpeg
ext: 3gp
dir: /home/user/plagger/out
encoding: utf-8
options:
video_codec: mpeg4
audio_codec: libamr_nb
audio_sampling_rate: 8000
audio_bit_rate: 12.2k
frame_size: 176x144
extra_options: -ac 1 -f 3gp
- module: Publish::Feed
config:
format: RSS
dir: /home/user/plagger/out
filename: youtube_hatena_tagged.xml
はてなで「youtube」タグが付いているフィードを取ってきて、Enclosureをフェッチ&解析。最後にFFmpegで変換というフェーズになります。Feed作成は意味なさそうですが、この後役に立ちます。私の携帯SB810T向けには、映像コーデックにmpeg4、音声コーデックにamr-nb(libamr_nb)を指定します。メーカーの仕様によると、AACでも行けそうな事が書いてありますが、どうやら動画でない音声ファイルの場合のみAACが再生出来るようです。
また、サンプルレート8000はamr-nbの標準値で、オーディオチャネル(ac)は1にしないといけない様です。 もちろん
- lib/Plagger/Plugin/Filter/FFmpeg.pm
- lib/Plagger/Plugin/Filter/FLVInfo.pm
殆んどyusukebeさん(yousukebeさんではありません。ここ大事)のと同じです。大概はffmpegのオプションでなんとか出来るかと思います。ただ現状Plaggerのtrunkに入ってるFind-Enclosuresのyoutube.plでは、jp.youtube.comドメインのリソースが対象外になっていますので、以下のパッチを当てます。
Index: assets/plugins/Filter-FindEnclosures/youtube.pl
===================================================================
--- assets/plugins/Filter-FindEnclosures/youtube.pl (revision 1988)
+++ assets/plugins/Filter-FindEnclosures/youtube.pl (working copy)
@@ -3,7 +3,7 @@
sub handle {
my ($self, $url) = @_;
- $url =~ qr!http://(?:www.)?youtube.com/(?:watch(?:\.php)?)?\?v=.+!;
+ $url =~ qr!http://(?:www.|jp.)?youtube.com/(?:watch(?:\.php)?)?\?v=.+!;
}
sub find {
※パッチが当たった物はCodeReposに入れてあります。チンして食べてください。ただGData APIでないのでカッコよくはありませんが。あとは
# plagger -c youtube_hatena_tagged.yaml
を実行すると、上のYAMLで指定している「out」フォルダにゴッチョリと3gpファイルが出来上がっている筈です。携帯の場合はPodcast出来ませんし、動画のサイズが大きくなるとメールで送ったりHTTPでダウンロードする事も出来ません。結局はメモリ転送になりますが、Feed.pmにちょっとだけ手を加えて...
Index: lib/Plagger/Plugin/Publish/Feed.pm
===================================================================
--- lib/Plagger/Plugin/Publish/Feed.pm (revision 1988)
+++ lib/Plagger/Plugin/Publish/Feed.pm (working copy)
@@ -122,6 +122,15 @@
open my $output, ">:utf8", $filepath or $context->error("$filepath: $!");
print $output $xml;
close $output;
+
+ if ($self->conf->{command_after}) {
+ my $command = $self->conf->{command_after};
+ my $dir = $self->conf->{dir};
+ $filepath =~ s!\\!/!g;
+ $command =~ s!\$\(filename\)!$filepath!g;
+ $command =~ s!\$\(dir\)!$dir!g;
+ system($command);
+ }
}
sub make_author {
こんなパッチを当てると、フィード出力時に「command_after」が実行されますので
- module: Publish::Feed
config:
format: RSS
dir: /home/user/plagger/out
filename: youtube_hatena_tagged.xml
command_after: find $(dir) -name "*.3gp" -exec cp \{\} /media/usbdisk/private/myfolder/My Items/Video
こんなYAMLにしておけば、出来上がった3GPがUSB越しに携帯のmicroSDカードにズコーーーーンと転送されるって仕組です。まぁ、Podcastと違って出来上がるまで、良い子ちゃんで待ってなきゃいけないですが...
ズゴーーーーン
追記
plagger流儀で言えば、Notify::Commandを使うべきですね。