2009-12-02
■ 業務連絡

ISPとしていたiTSCOMを12/1で解約したので、greasemonkeyスクリプトの置場が現在存在していない状態です。次ISPのWeb領域サービスが開始され次第、再配置する予定です。
ご不便をお掛け致しますが、よろしくお願い致します。(_o_)
(2009.12.06)再配置しました。
2009-05-19
■ [ニコニコ][その他]「またニコニコ市場見てる」とtwitterに投稿するリンクを作成するGreasemonkeyスクリプト

まあ、いつものアレの市場版です。こんな感じ。
またニコニコ市場見てる : シムシティ4 デラックス (1,498人が購入しました) http://ichiba.nicovideo.jp/item/azB0000AKY8A
インストールは→http://homepage3.nifty.com/hide32767/mata_ichiba_nicovideo.user.js
いつものように自己責任でどうぞ。
■ [Ustream][その他]UstreamのChatで日本語入力を有効にするリンクを作成するGreasemonkeyスクリプト

(2009.12.06)今は普通に日本語入るようになってるので不要と思われ。
2年前に先駆者がいらっしゃった。俺速。
概要
ここの「ブラウザのチャットで日本語が入力できない場合」で使うブックマークレットをGreasemonkeyで動くようにしてみた。リンク作成部分とかまんま「また見てる」の流用ですね、わかります。
使い方
- まず「Chat」タブをクリックしてチャットを起動する。
- 「Recommended Live Shows:」の上にある「[IME enable]」をクリックする。
- チャットがリロードされて日本語が入力できるようになる。
インストール
こちらから→http://homepage3.nifty.com/hide32767/ustchat_ime_enable.user.js
いつものように自己責任でどうぞ。
ブックマークレットでいいんじゃね?
その通りでございます。
2009-04-29
■ [ニコニコ][その他]「またニコニコ動画見てる(0.3)」新プレイヤー向けパッチ

概要
上記が新プレイヤーでは動画時間が取れず、(00:00)のような出力になったり、またそもそも動かなくなったりしていたので、そのパッチ的なものを書いてみた。
(仮)インストール(5/20追記)
本家が修正されるまでは修正したものを置いておきます。自己責任でどうぞ。
こちらから→http://homepage3.nifty.com/hide32767/matanicovideo.user.js
説明
旧プレイヤーでは
document.getElementById('flvplayer').wrappedJSObject.GetVariable('ContentLength')
と言うコードで、Flashオブジェクトにセットされた動画の時間を取れていたが、これが新プレイヤーではnullが返ってくるようになった。
現在のwatchページでは、HTML内でVideoオブジェクトが定義されており、これのlength値に動画の時間が秒数で設定されているので、これを利用するようにした。
補記
greasemonkeyのユーザスクリプトから対象となるHTMLドキュメント内で定義されているオブジェクトを利用する際には、unsafeWindowオブジェクトまたはwindowオブジェクトの子オブジェクトとしてアクセスすればいいようです。以下参考リンク。
パッチ
*** matanicovideo.user.js 2009-04-30 02:56:22.000000000 +0900 --- matanicovideo.p.user.js 2009-04-30 02:56:40.000000000 +0900 *************** *** 6,11 **** --- 6,13 ---- // @version 0.3 // ==/UserScript== + var w = unsafeWindow || window; + (function(){ Number.prototype.z = function(len){ var s = '0'.fill(len) + this.toString(); *************** *** 49,55 **** var subject = h1.textContent; var url = location.href; ! var len = document.getElementById('flvplayer').wrappedJSObject.GetVariable('ContentLength').replace(/\D+/g, ''); var lmin = Math.floor(len / 60); var lsec = len % 60; --- 51,57 ---- var subject = h1.textContent; var url = location.href; ! var len = w.Video.length; var lmin = Math.floor(len / 60); var lsec = len % 60;
2009-01-03
■ [実験][AviSynth][編集][補助]AviSynthで差分合成する

内容としては「 ダンスの背景飛ばし……? - にわかな奴の砂場 - ニコニコ部」の応用となる訳ですが、AviSynth標準フィルタだと何かと使い辛いので関数を書いてみたりしたので、拙作をぺたり。自分用のローカルライブラリですが、公開する事で何かの役に立つかもしれませんので。
mylib.avs
#####
### AviSynth用ローカル関数
#
#
# EARTHSOFTDV : AviUtl用のPV3/4のDVファイルローダを使って読み込む為の関数.
# ※WarpSharpパッケージが必要.(cf.http://www.avisynth.info/?warpsharp%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8)
#
LoadAviUtlInputPlugin("C:\Program Files\EARTH SOFT\PV3 3.x\AviUtl\EARTH SOFT DV.aui", "EARTHSOFTDV")
#
# DiffMask : 2つのクリップの差分から生成した白黒256階調のクリップ(RGB32)を返す.
# ※VerticalCleanerが必要.(cf.http://www.avisynth.info/?niiyan%2F2008-02-27)
#
# s1, s2 … 差分抽出用のクリップ.同じ解像度である事が必要.
# tolerance … 差分の許容誤差.内部的にはColorKeyMask()のパラメータとして利用.
#
function DiffMask (clip s1, clip s2, int "tolerance") {
s1 = IsYUY2(s1) ? s1 : ConvertToYUY2(s1)
s2 = IsYUY2(s2) ? s2 : ConvertToYUY2(s2)
tolerance = default(tolerance, 0)
e = Overlay(s1, s2, mode="difference").ColorYUV(off_y=-128).ConvertToRGB32()
e = ColorKeyMask(e, $000000, tolerance)
e = e.ShowAlpha().VerticalCleaner().VerticalCleaner().Greyscale()
return e
}
#
# MaskedLayer : 前景にアルファチャネルを適用し,背景と重ねたクリップ(RGB32)を返す.
#
# bg … 背景となるクリップ.
# fg … 前景となるクリップ.アルファチャネルが適用される.
# mask … アルファチャネルとなるクリップ.基本的に白黒256色.
# ※3クリップとも同一の解像度である事が必要.
#
function MaskedLayer (clip bg, clip fg, clip mask) {
bg = IsRGB32(bg) ? bg : ConvertToRGB32(bg)
fg = IsRGB32(fg) ? fg : ConvertToRGB32(fg)
mask = IsRGB32(mask) ? mask : ConvertToRGB32(mask)
fg = Mask(ResetMask(fg), mask)
res = Layer(bg, fg, op="add")
return res
}
使用例

キュンキュンメガネと大正リボンを同時に付けてみると言う。これは以下のようなAviSynthスクリプトで合成しています。
#
# 大正リボンのクリップにキュンキュンメガネのクリップを合成してみる
# ※ColorItが必要.(cf.http://www.avisynth.info/?%B1%C7%C1%FC%B8%FA%B2%CC#bce2e312)
#
#外部スクリプトのインポート.同フォルダに置くか,或いはフルパス指定
Import("mylib.avs")
#大正リボンのクリップ
ribon=EARTHSOFTDV("ribon.dv")
#キュンキュンメガネのクリップ
megane=EARTHSOFTDV("megane.dv")
#セピアサングラスのクリップ
sepisan=EARTHSOFTDV("sepisan.dv")
#メガネとセピサンの差分からマスク作成
mask=DiffMask(megane, sepisan)
#穴が埋まるまでマスクを膨張させる
mask=mask.Morpher(type="dilate").Morpher(type="dilate").Morpher(type="dilate").Morpher(type="dilate").Morpher(type="dilate").VerticalCleaner()
#穴が埋まったらマスクを収縮させる.ついでにエッジぼかし
mask=mask.Morpher(type="erode").Morpher(type="erode").Morpher(type="erode").Morpher(type="erode").Morpher(type="erode").Blur(1)
#目元を合成
MaskedLayer(ribon, megane, mask).ConvertBackToYUY2()
リボンの動画にメガネの動画の目元部分だけを重ねる為、メガネとセピアサングラスの動画差分を利用してマスクを作っていますが、そのままだと穴ぼこだらけで使えないので、ColorItプラグインのフィルタMorpher()で穴を埋めています。
こんな感じ。で、後はこのマスクをメガネ動画のアルファチャネルとして適用し、リボンの動画と重ねてめでたく完成。1アングル作る為に3本録らなきゃいけないので時間も保管容量もバカになりません。それに加えて合成処理の遅い事と言ったら、8000フレームの処理が大体30分くらい。全自動なんで放っておけばいい訳でもありますが。
複数のアクセサリを合成する場合は同様の手順を重ねればいいだけですが、重ねて不自然の無い順番を探すのは結構めんどくさいです。*1
nukIM@S-2使えばいいんじゃね?
Exactly.
2008-12-23
■ [ニコニコ][アイマス][自炊]雪歩誕生日動画を

作ってみた……?
<iframe width="312" height="176" src="http://ext.nicovideo.jp/thumb/sm5639004" scrolling="no" style="border:solid 1px #CCC;" frameborder="0"><a href="http://www.nicovideo.jp/watch/sm5639004">【ニコニコ動画】アイドルマスター 雪歩『Virtual(Remix)』</a></iframe>
最近古いBMSやMODを聴き返してる時にイメージが膨らんで来たので、雪歩の誕生日が近かったと言う事もあり久しぶりに組んでみた。なんと9ヶ月ぶりらしい……もうちょっと活動しなさいと言うか何と言うかorz 雪歩を当てたのには何となく、ではなくそれなりに思うところがあったりした訳ですが、まあそれはそのうちに。
構想の段階ではBGAの漢字アニメとか取り入れて使ってみたかったのですが、主に技術的な問題等々あり断念。アップショットのところとか結構寂しいので何とかしたかったと言うのはあります。
あとnmlPの瞳ハイライト消しAviUtlプラグイン*1にはお世話になりました。これが無かったらまた違ったものになっていただろうなと。
