エンコめも
~見習いエンコ師のメモ帳~
http://encmemo.blog.fc2.com/

 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
 
なんかブレンドエンコが流行ってたので関数作りました。
複数ソースブレンドではなくて、1ソースしか使わないフィールドブレンドです(´・ω・`)
 

more


無知ゆえにやってることめちゃくちゃかもしれんけど、それらしいモノにしたつもり、
1つのソースでしか試してないのでほぼ未テストです。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


function FieldBlend(clip c,float "thr1",float "thr2",float "thr3",float "weight",bool "show1",bool "show2")
{
global thr1=default(thr1,0.3)
global thr2=default(thr2,3.0)
global thr3=default(thr3,20)
weight=default(weight,0.5)
show1=default(show1,false)
show2=default(show2,false)

s=c.SeparateFields()
e0=s.SelectEven()
o0=s.Selectodd()

e_n=Loop(e0,0, 0, 0)
o_n=Loop(o0,0, 0, 0)
d_e_n=mt_lutxy(e0,e_n,"x y - abs",chroma="process").mt_deflate().mt_lut(expr="255 x "+String(thr1)+" * "+String(thr2)+" ^ /",u=1,v=1)
d_o_n=mt_lutxy(o0,o_n,"x y - abs",chroma="process").mt_deflate().mt_lut(expr="255 x "+String(thr1)+" * "+String(thr2)+" ^ /",u=1,v=1)
m_e_n=Merge(e0,e_n,weight)
m_o_n=Merge(o0,o_n,weight)
m_e_n=mt_merge(e0,m_e_n,d_e_n)
m_o_n=mt_merge(o0,m_o_n,d_o_n)
e1=ConditionalFilter(e0,m_e_n,e0,"YDifferenceToNext()","<","thr3")
o1=ConditionalFilter(o0,m_o_n,o0,"YDifferenceToNext()","<","thr3")
e1=(show1==false)?e1:e1.Subtitle("a",size=48)
o1=(show1==false)?o1:o1.Subtitle("b",size=48,y=96)
e1=ConditionalFilter(CombMask(interleave(e0,e1),thY1=10,thY2=10),e0,e1,"AverageLuma(SelectEven)","<","AverageLuma(SelectOdd)")
o1=ConditionalFilter(CombMask(interleave(o0,o1),thY1=10,thY2=10),o0,o1,"AverageLuma(SelectEven)","<","AverageLuma(SelectOdd)")

e_p=Loop(e1,2, 0, 0)
o_p=Loop(o1,2, 0, 0)
d_e_p=mt_lutxy(e1,e_p,"x y - abs",chroma="process").mt_deflate().mt_lut(expr="255 x "+String(thr1)+" * "+String(thr2)+" ^ /",u=1,v=1)
d_o_p=mt_lutxy(o1,o_p,"x y - abs",chroma="process").mt_deflate().mt_lut(expr="255 x "+String(thr1)+" * "+String(thr2)+" ^ /",u=1,v=1)
m_e_p=Merge(e1,e_p,0.5)
m_o_p=Merge(o1,o_p,0.5)
m_e_p=mt_merge(e1,m_e_p,d_e_p)
m_o_p=mt_merge(o1,m_o_p,d_o_p)
e2=ConditionalFilter(e1,m_e_p,e1,"YDifferenceFromPrevious()","<","thr3")
o2=ConditionalFilter(o1,m_o_p,o1,"YDifferenceFromPrevious()","<","thr3")
e2=(show1==false)?e2:e2.Subtitle("c",size=48,y=48)
o2=(show1==false)?o2:o2.Subtitle("d",size=48,y=144)
e2=ConditionalFilter(CombMask(interleave(e1,e2),thY1=10,thY2=10),e1,e2,"AverageLuma(SelectEven)","<","AverageLuma(SelectOdd)")
o2=ConditionalFilter(CombMask(interleave(o1,o2),thY1=10,thY2=10),o1,o2,"AverageLuma(SelectEven)","<","AverageLuma(SelectOdd)")

c1=Weave(Interleave(e2,o2))
return (show2==false)?c1:StackVertical(c,c1)
}


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


使い方:インタレソースをぶち込むだけ。

thr1 - ブレンド適用範囲その1。これを増やすと誤爆増えるよ!
Default:0.3
thr2 - ブレンド適用範囲その2。こっちはテキトウでも大丈夫。
Default:3.0
 thr1を小さくthr2を大きくするのがオススメだお(,,・ω・,,)
thr3 - シーンチェンジ判定の閾値。デフォルトより小さくてもいいと思う。
Default:20
weight - ブレンドする際の比率的な。
Default:0.5
show1 - どれくらいブレンドされたか確認。
show2 - 元のフレームと出力フレームを縦に並べて表示します。


前後のフィールドと比較して差分が一定値以下のとこだけブレンド、
そのあと元のフィールドと比較してノイズが減ってたら置き換え。
みたいなことをやりたかったんだと思う。

ノイズがなくなるのは確かだけど多少ボケるよ(笑)



スポンサーサイト
 

Comment

 

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

名前: | 2015.07.31(金) 14:02 | | [Edit]


非公開コメント

zantei。

Author:zantei。
エンコ歴2年くらい。
エンコ勉強中。

使用ソフト
Avisynth v2.6 SEt 32bit
x264 64bit
aviutl v99j2

PCスペック
win7 64bit
Core i7 2600 3.4GHz
GeForce GTX550 Ti 1GB
メモリ 4GB

このブログの記事はエンコ初心者による
ただのメモ書きです。
全く参考にならないのでご注意ください。
※特に2012年の記事

@twitter

未分類 (3)
雑記 (6)
aviutl (0)
avisynth (12)
エンコメモ (1)
エンコめも (8)
プログラミング (0)

このブログをリンクに追加する

この人とブロともになる

 
*Template By-MoMo.ka* Copyright © 2017 エンコめも, all rights reserved.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。