http://code.google.com/p/vapoursynth/issues/detail?id=52
「LutとLut2なんだけど、いちいちlook up tableを作ってから渡すのってメンドイから、生成用関数渡したらフィルタ側で作るようにしたいんだけど、誰かやらんかね?」
たしかにあれはめんどくさい。
特にLut2の場合は二重ループ必須だから、余計に書くのがめんどくさい。
というわけで、パッチ書いて送ったのが昨日mergeされました。
core.std.Lut(clip:clip;planes:int[];lut:int[]:opt;function:func:opt;) core.std.Lut2(clips:clip[];planes:int[];lut:int[]:opt;function:func:opt;bits:int:opt;)
例:クリップのすべてのYの値を50下げたい場合。
clip = something #これまでの書き方 lut = [max(x - 50, 0) for x in range(2 ** clip.format.bits_per_sample)] clip = core.std.Lut(clip, lut=lut, planes=0) #改良後 def func(x): return max(x - 50, 0) clip = core.std.Lut(clip, function=func, planes=0) #または clip = core.std.Lut(clip, function=lambda x: max(x - 50, 0), planes=0)
例:二つのクリップを平均化して新しいクリップを作りたい。
clipx = something clipy = something #これまでの書き方 lut = [] for y in range(2 ** clipy.format.bits_per_sample): for x in range(2 ** clipx.format.bits_per_sample): lut.append((x + y) // 2) clip = core.std.Lut2([clipx, clipy], lut=lut, planes=[0, 1, 2]) #改良後 clip = core.std.Lut2([clipx, clipy], planes=[0, 1, 2], function=lambda x, y: (x + y) // 2)
functionの引数名はmasktools2のmt_lut/mt_lutxyに合わせて、xとyで固定です。
今までのようにlutをPython側で作って渡すこともできますが、lutとfunctionの両方を渡したらfunctionは無視されます。
次のリリース(多分r19test5)から使えるようになります。
0 件のコメント:
コメントを投稿