PlaggerでニコPodを作る
カッとなってiPod touch 16GBを買った。今は超wktkしている──本当に衝動買いでした。俺は悪くありません。ネイティブソフト開発用のSDKを出すなんて言うAppleが悪いんです。まだまだ在庫は沢山あるという大学生協が悪いんです。なーに、nano 8GBを2つ買って16GBにする事を考えたら、touch 16GBだってそんなに高いものじゃありませんよ。うん、そうなんですよ。そうそう。そうじゃないと困ります。………カードの支払いどうしようorz
そんなこんなで買ってしまいました、iPod touch 16GB。
折角動画が見れるんだからと、何かいい活用方法はないかと探していたら、Plaggerというツールを使う事でニコニコ動画の動画を自動で取り込めるらしいです。「自動」ってのがとても素晴らしいです。という訳で早速、ニコニコ動画ランキング取込システム、その名も「ニコPod」を構築してみました。
インストール
PPC Mac mini 1.4GHz(M9687LL/A)+ Mac OS X v10.4.10上に構築しました。
インストール方法は「ニコニコ動画からPlaggerでPodcastを作りiTunesで見たいゼ」で丁寧な解説がなされているので、この通りに進めて行きます。ただし、設定ファイル(.yaml)には独自のものを用い、その関係でFilter::FFmpegへのパッチも独自のものを当てます(後述)。また、二コPlaTunesの補足のDB_File_URL.pm関連の設定も一緒に行います。
FFmpegは、上記サイトで紹介されているバイナリではなく、MacPortsでビルドしたものを用いました。
設定ファイル
global:
assets_path: assets/
plugins:
- module: Subscription::Config
config:
feed:
- url: マイリストのアドレス
- module: Filter::FetchNicoVideo
rule:
- module: RecentN
count: 10
- module: Deduped
engine: DB_File_URL
path: /Users/Decomo/Sites/nicopod/nicoPod.db
config:
mail: アカウント
password: パスワード
id_as_filename: 1
dir: /Users/Decomo/Sites/nicopod
- module: Filter::FFmpeg
config:
dir: /Users/Decomo/Sites/nicopod
ext: MP4
command: /opt/local/bin/ffmpeg
encoding: utf8
option_string: '-y -threads 2 -s <size> -r 29.97 -vcodec h264 -g 500 -aspect <aspect> -level 13 -loop 1 -sc_threshold 800 -flags loop+qpel -flags2 bpyramid+wpred+mixed_refs+brdo -trellis 2 -subq 6 -me umh -partitions parti4x4+parti8x8+partp4x4+partp8x8+partb8x8 -rc_eq blurCplx^(1-qComp) -refs 6 -mbd 2 -cmp 2 -subcmp 2 -b 10k -minrate 0 -qmax 27 -qmin 20 -acodec aac -ar <ar> -ac <ac> -ab 128k'
- module: Filter::RewriteEnclosureURL
config:
rewrite:
- local: /Users/Decomo/Sites/nicopod
url: http://Freyja.local/~Decomo/nicopod
- module: Publish::Feed
config:
dir: /Users/Decomo/Sites/nicopod
filename: _nicoPod_weeklyAddCount.xml
format: RSS
お手本とした設定ファイルと比べて、特にFFmpegのエンコードオプションにかなり手を加えています。画質重視の設定なので、PPC Mac miniには結構荷の重い仕事です。エンコード所要時間は実時間の2.5〜4倍と言った所です。
注意点として、iPod touch(現時点での動画対応iPod全て)のH.264はベースプロファイルなので、BフレームとCABACが使えません。つまり、-bfオプションと-coder 1を指定しても、再生出来ない動画になってしまいます。また、最大参照フレーム数(-refs)は6が最大です(これより大きい値だとブロックノイズが出ます)。しかし、BフレームとCABACが使えないH.264なんてゴm(ry
FFmpegのバージョンによって、ビットレート指定の単位が違います。昔はkbpsだったのですが、最近はbpsになったようです。SVN-r9102ではkbpsでした。
Filtter::FFmpegに手を入れる
可能な限り小さい容量で高品質を目指すべく、Filter::FFmpegに手を入れます。
はこべにっき#さん作のパッチは、動画のアスペクト比によって出力動画サイズを640×480と640×360に切り替えていますが、ニコニコ動画の最大サイズは512×384なので、そのサイズで出力しても旨みがありません。
ここではiPod touchの画面解像度に合わせて、アス比が4:3の時は432×320、16:9の時は480×272で出力する事にします。
また、元動画の音声トラックの仕様(サンプリング周波数/チャンネル数)をそのまま継承して、音声のエンコードを行うようにしました。まぁ、これは気休め程度です。本当は元のビットレートを元に、エンコードのビットレートを変えたかったのですが、生憎、元ビットレートを取得する手段が無いようなので……。
差分:FFmpeg.diff はこべ日記さんの差分も取り込んであるので、FFmpeg.pmにそのまま適用する事が出来ます。
- 出力動画サイズの変更:4:3→432x320、16:9→480x272、元が320x240だったらそのまま
- 出力音声のサンプリング周波数とチャンネル数を、元動画の音声のそれを継承するようにした
cronの設定
自動的に動画の取得&変換が行われるように、cronの設定を行います。Tigerなので本来ならばlaunchdを使うべきなのでしょうが、詳しい設定方法が分からなかったのでcronに逃げました
。参考までに、私の設定を晒しておきます。
0 2 * * 1-6 /Users/Decomo/Tools/plagger/nicoPodDailyUpdate.sh 0 2 * * 0 /Users/Decomo/Tools/plagger/nicoPodWeeklyUpdate.sh
まとめ
全て上手く行けば、iTunesにPodcastとして動画を取り込め、それを転送すればiPod touchで見る事が出来ます。
私は、週間マイリスト登録数TOP10の動画を自動的に取得&変換するようにしています。これで流行りの動画チェックもバッチリです。
生成した動画は、動画の内容にもよりますが、元ファイルと比べて150〜200%ほどの大きさになる事が多いようです。品質犠牲にすればより小さくすることも可能ですが、私的には今以上の品質低下は避けたい所です。欲を言えばもう少し画質を上げたいのですが、容量とのトレードオフを考えると、今の設定が丁度いいかなと。
参考サイト
PoWer Station-WeBlog!
ゆーすけべー日記
pss2wave
PlayStation 2のPSS動画ファイルの音声部分を、WAVEファイルとして保存するツールです。
Mac OS X用ですが、Mac特有の機能は使用していないのでソースからビルドすれば各環境で使えると思います。詳細は同梱のREADMEをご覧下さい。
ダウンロード:
pss2wave 1.00
更新履歴
2007-10-17
・Version 1.00完成。
char型配列に格納されてる値を整数型値に変換するマクロ
unsigned char hoge[] = { 0x00, 0x00, 0x00, 0x01 };なんて配列があった時にCHAR_TO_INT32(hoge)のようにすると、unsigned intで1を返してくれるマクロを作ってみました。
// バイトスワップ関連 #define BS_BYTE1(x) ( (x) & 0xFF ) #define BS_BYTE2(x) ( ( (x)>> 8 )& 0xFF ) #define BS_BYTE3(x) ( ( (x)>>16 )& 0xFF ) #define BS_BYTE4(x) ( ( (x)>>24 )& 0xFF ) #define BYTESWAP_INT16(x) ( (unsigned short)( (BS_BYTE1(x)<<8) | BS_BYTE2(x) ) ) #define BYTESWAP_INT32(x) ( BS_BYTE1(x)<<24 | BS_BYTE2(x)<<16 | BS_BYTE3(x)<<8 | BS_BYTE4(x) ) #ifdef ビッグエンディアン用 #define INT16_TO_LE(x) ( BYTESWAP_INT16(x) ) #define INT32_TO_LE(x) ( BYTESWAP_INT32(x) ) #define INT16_TO_BE(x) (x) #define INT32_TO_BE(x) (x) #endif #ifdef リトルエンディアン用 #define INT16_TO_LE(x) (x) #define INT32_TO_LE(x) (x) #define INT16_TO_BE(x) ( BYTESWAP_INT16(x) ) #define INT32_TO_BE(x) ( BYTESWAP_INT32(x) ) #endif // 2/4バイトのchar配列型ビッグ/リトルエンディアン値をshort/int値に変換する #define BE_ARRAY_TO_INT16(x) (unsigned short)( INT16_TO_BE( *(unsigned short*)x ) ) #define BE_ARRAY_TO_INT32(x) (unsigned int)( INT32_TO_BE( *(unsigned int*)x ) #define LE_ARRAY_TO_INT16(x) (unsigned short)( INT16_TO_LE( *(unsigned short*)x ) ) #define LE_ARRAY_TO_INT32(x) (unsigned int)( INT32_TO_LE( *(unsigned int*)x ) )
ビッグエンディアン値用(BE_〜)とリトルエンディアン値用(LE_〜)があります。freadなどでchar配列に読み込んだ値を、整数値に変換するのに便利かなぁと。
処理の都合上、バイトスワップ用のマクロも入ってますが、気にしないで下さい。これらもどっかで使えると思います。
動作はMac OS X v10.4.10(gcc 4.0.1)でしか確認していません。VC++2005でも確認プログラムは作ったのですが「ランタイムがねーよ」と言われて実行できなかったので、そこでやる気を無くしました。
Mac OS X v10.5 "Leopard"のアカデミック版は13400円
待望のMac OS X v10.5 “Leopard”の発売日が遂に発表されましたー!!10/26発売とは噂されていましたが、こうして公式発表もあり感動も一入(?)ですね。 (2007/10/23 追記:大学生協だと8800円で買える模様)
さてさて、気になるお値段は14800円と従来通り。ただ、アカデミック版は13400円と、Tigerの8800円から大幅値上がり……。念のためAppleに電話して聞いてみましたが、同じ値段で返答を頂きました。くそぅ、Appleめ、業績がいいからって強気で来たな!?(違
まぁ、逆にこれで、当日は気兼ねなくApple Store Ginzaに並べるってものですがw
エースコンバット2の曲リスト
エースコンバット2の曲はシリーズ屈指の出来だと思うのですが、なぜかサントラが発売されてません。ネット上でも「サントラマダー?」という声が散見され、たのみこむでも発案がなされているのですが、一向に実現の気配がありません。
幸いにしてAC2の音楽はXA形式で収められているので、吸い出して44.1kHzのWAVEに変換すれば、CDなりAACなりにする事が可能です。そんな時、曲名等が不明のままだと気持ち悪いので、ゲーム本編のMusic Playerやネット上の情報を元にまとめてみました。
以下の表は入手可能な情報を元に、一部私の推測も含めて作成したものです。従って情報の正確性については一切保証致しかねます。悪しからずご了承下さい。
| STR番号 | Music Player の順番 | 曲名 | 作曲者 | 備考 |
|---|---|---|---|---|
| 0001 | 14 | Warning Line | 高橋弘太 | |
| 0002 | 10 | Bear Tracks | 諌山亘秀 | |
| 0003 | 19 | Aerial Hawk | 大久保博/中西哲一/諌山亘秀 | |
| 0004 | 18 | Blow Away | 大久保博/中西哲一/諌山亘秀 | |
| 0005 | 17 | Elemental Particle | 大久保博/中西哲一/諌山亘秀 | |
| 0006 | 8 | El Dora do | 高橋弘太 | 曲名は高橋氏のサイトの表記に準拠 |
| 0007 | 15 | Melt Down | 大久保博/中西哲一/諌山亘秀 | |
| 0008 | 22 | Sunset Glow | 高橋弘太 | |
| 0009 | 12 | On The Sly | 大久保博/中西哲一/諌山亘秀 | |
| 0010 | 21 | Night And Day | 大久保博/中西哲一 | |
| 0011 | 16 | Fire Youngman | 諌山亘秀 | |
| 0012 | 9 | Fire Away | 高橋弘太 | |
| 0013 | 13 | Dead End | 大久保博/中西哲一/諌山亘秀 | |
| 0014 | 3 | Dystopia | 高橋弘太 | |
| 0015 | 23 | Dynapolis | 大久保博/中西哲一/諌山亘秀 | |
| 0016 | 11 | Rising High | 高橋弘太 | |
| 0017 | - | Extra Ending | 諌山亘秀 | |
| 0018 | 6 | Lodestone | 高橋弘太 | 曲名は高橋氏のサイトの表記に準拠 |
| 0019 | 7 | Aim High | 諌山亘秀 | |
| 0020 | - | Normal Ending | 高橋弘太 | 曲名は高橋氏のサイトの表記に準拠 |
| 0021 | 20 | Into The GEO | 大久保博/中西哲一/諌山亘秀 | |
| 0022 | 4 | Invoke | 高橋弘太 | |
| 0023 | 26 | A Fresh Youngster | 諌山亘秀 | |
| 0024 | 31 | Ending Bad | 大久保博/中西哲一/諌山亘秀 | 曲名は自信無し |
| 0025 | 2 | Lighting Speed | 諌山亘秀 | |
| 0026 | - | Ending Attract Normal | 大久保博/中西哲一/諌山亘秀 | ノーマルエンディング時のAWACS音声 |
| 0027 | - | Ending Attract Extra | 大久保博/中西哲一/諌山亘秀 | エクストラエンディング時のAWACS音声 |
| 0028 | 28 | Ending Attract | 大久保博/中西哲一/諌山亘秀 | |
| 0029 | 1 | Title | 高橋弘太 | |
| 0030 | - | 不明 | - | 謎の音声(ゲーム未使用?) |
| 0031 | 24 | Completion | 高橋弘太 | |
| 0032 | 25 | Failure | 高橋弘太 | |
| 0033 | 5 | Briefing | 高橋弘太 | |
| 0034 | 27 | Hangar | 高橋弘太 | |
| 0035 -0064 | - | ミッション解説音声 |
STR番号はPsxMCのそれに対応し、Music Playerの順番はゲームのおまけで用意されているMusic Playerの曲順に対応しています。Music Playerで聴けない曲に関しては「-」表記です。作曲者が連名になっている曲は、詳しい作曲者が分からなかった(絞り込めなかった)曲です。
参考
- SOLID STATE JAPAN - 高橋弘太氏のサイト
(2015-03-05 追記) 旧blogからのデータ移行で久々に高橋弘太氏のサイトを見に行ったら、当時のままのページが存在してて少し感動。

