2009/10/16

Plagger / ニコ動をlibx264でエンコ(プリセット使用)

Plaggerでニコニコ動画のplaylistをひっぱってきて、iTunesまで登録する、という事をやっていたのだけれども、h.264を指定していたつもりが、mp4に変換されてしまっていた。Plagger::Plugin::Filter::FFmpegがどうも原因のような気がしてきた。

[現象]
yamlの module: Filter::FFmpeg内の config:で、video_codec: libx264 を指定しても、mp4で変換されてしまう。

[原因]
FFmpeg.pm 内で device: を指定しない場合、無条件に device: ipod を指定した事になる為。

device: ipod は、mp4で変換するプリセットになるので、deviceを指定しないと、自動的にmp4で変換されてしまう。deviceに ipod / psp 以外を指定すると、hashエラーになる。なので、とりあえず、plagger/lib/Plagger/Plugin/Filter/FFmpeg.pm を以下のように変更。

--- plagger/lib/Plagger/Plugin/Filter/FFmpeg.pm.orig 2007-10-30 15:01:02.000000000 +0900
+++ plagger/lib/Plagger/Plugin/Filter/FFmpeg.pm 2009-10-15 05:12:25.000000000 +0900
@@ -51,7 +51,7 @@
my $output_file = File::Spec->catfile($self->conf->{dir}, "$file");
my $output_options = {
file => $self->convert($output_file),
- device => $self->conf->{device} || 'ipod',
+ device => $self->conf->{device},
title => $self->convert($entry->title),
author => $self->convert($entry->author),
comment => $self->convert($entry->summary),

本題。
最近のffmpeg で libx264 でエンコードする場合、プリセットが用意されているのであまり考えなくても高画質にh.264に変換してくれる(拘る人は拘りそうだ...)
現時点で私が使っているのは macports 最新の version 0.5

こちらの iPod Video Encoding Guide を参考に、-vpre を使った変換用yamlは以下みたいな感じに。


global:
plugin_path:
- /Plagger/Plugin/Path
log:
level: debug

plugins:

- module: Subscription::Config
config:
feed:
- url: http://www.nicovideo.jp/mylist/_YOURID_?rss=atom

- module: Filter::FetchNicoVideo
config:
mail: _YOURMAIL@ADDRESS_
password: _YOUROUTPUT_
dir: /output/path
id_as_filename: 1

- module: Filter::FLVInfo
rule:
expression: $args->{entry}->enclosure->type eq 'video/x-flv'
expression: "not -e File::Spec->catfile('/output/path', $args->{entry}->enclosure->filename . '.mp4')"

- module: Filter::FFmpeg
config:
command: /opt/local/bin/ffmpeg
ext: m4v
dir: /output/path
encoding: utf8
options:
format: ipod
video_codec: libx264
audio_codec: libfaac
audio_sampling_rate: 44100
audio_bit_rate: 128k
extra_options: -vpre libx264-hq -vpre libx264-ipod320 -threads 0


- module: Filter::RewriteEnclosureURL
config:
rewrite:
- local: /output/path
url: http://_YOURWEBSERVER_

- module: Publish::Feed
config:
format: RSS
dir: /output/path
filename: nicopla.xml


/output/pathや_HOGEHOGE_は便宜書き換えてくだはい。