お前らのショボイAvisynthスクリプト貼ってくださいpart2
ごめんなさい貼ってください
立ったのか次スレ あれだけ遅かったスレが1000近くまで行くとは感無量ですぞ
前スレの962さんが指摘してる端数切捨て問題解決してくださいよぉ
にーやんのところでは a = src.Trim(0,100).IT(fps=24, ref="TOP") b = src.Trim(101,200).IT(fps=30, ref="TOP") c = src.Trim(201,300).IT(fps=24, ref="TOP") tcpath = "c:\tmp\timecode.txt" all = EasyVFR_Create(src, a, tcpath) all = all.EasyVFR_Append(b, tcpath) all = all.EasyVFR_Append(c, tcpath) all だけど以下のようにすることにした Function mod_FPS(clip clip,string "IVTC"){ sf=clip.framecount clip=Eval("clip."+IVTC) ff=clip.framecount clip=Eval("clip.assumefps("+string(ff*sn)+","+string(sf*sd)+",False)") return clip } a = src.Trim(0,100).mod_FPS("""IT(fps=24, ref="TOP")""") b = src.Trim(101,200).mod_FPS("""IT(fps=30, ref="TOP")""") c = src.Trim(201,300).mod_FPS("""IT(fps=24, ref="TOP")""")
6 :
1 :2006/07/22(土) 00:17:36 ID:y6VUOZnw
tcpath = "c:\tmp\timecode.txt" all = EasyVFR_Create(src, a, tcpath) all = all.EasyVFR_Append(b, tcpath) all = all.EasyVFR_Append(c, tcpath) all これで解決か?
お・・・assumefpsのところEvalいらねぇやw
お・・・www 阿呆だ('A`)こっちじゃないと動かんね Function mod_FPS(clip clip,string "IVTC"){ sf=clip.framecount sn=clip.FramerateNumerator sd=clip.FramerateDenominator clip=Eval("clip."+IVTC) ff=clip.framecount clip=Eval("clip.assumefps("+string(ff*sn)+","+string(sf*sd)+",False)") return clip }
なくて寂しかった。
>>1 乙
前スレには大いに助けられたなあ
AE並みの編集が可能なスクリプト群を暇な時に作ってください
新スレおめ
EasyVFR作ってくれたヒトアリガトー マジ重宝してまつ
ffunction KeepAspectResize1(clip clip, int newW, int newH, int "bcolor") { aspect = (float(clip.width) / float(clip.height)) w = int(newH * aspect) b = newW >= w w = b ? w : newW h = b ? newH : int(newW / aspect) h = int(h / 2) * 2 c = clip.Lanczos4Resize(w, h) borderW = newW - w borderH = newH - h c = c.AddBorders(borderW/2, borderH/2, \ borderW-borderW/2, borderH-borderH/2, bcolor) return c }
。 ο ,.。 ο ο ,. ゚ ο o 。 o ο 。 ゚ ο ,ヘ、 ,.:-一;:、ο人がまるでいない・・・ _,.-';: ミ;;:;,. _,.;:゙ミ '^ー、 ο 。 ,r( ´・ω・) ,.*。\,r'! ο .,。 ツィー=ニ彡' ,.。 _j 〜'l つとノ '" {-' ,.;:;u‐―u' ,.。* ._,.-! -=、,r' ,r='i:,ィ' ,.*。 ,__,.-=':トー' ヘ_,、 /;;::-一' ‐-、`-'iニレ'^'
EasyVFRでタイムコードだしてtc2cfrに投げると Number of data chunks does not match frame count. とかでて止まる。ナニコレ。誰か助けて。 # timecode format v1 Assume 29.970030 0,4649,23.976025 4650,7341,29.970030 7342,35289,23.976025 タイムコードが↑でaviは29.97fpsでできてる模様。
前スレのdatキボンヌ
に〜やんのところ池
19 :
sage :2006/10/29(日) 23:24:45 ID:FuQtmUD3
>>15 それ多分、端数問題で引っかかってる。
俺もそのエラー出たけど
Function mod_FPS(clip clip,string "IVTC"){
sf=clip.framecount
sn=clip.FramerateNumerator
sd=clip.FramerateDenominator
clip=Eval("clip."+IVTC)
ff=clip.framecount
clip=Eval("clip.assumefps("+string(ff*sn)+","+string(sf*sd)+",False)")
return clip
}
a = src.Trim(0,100).mod_FPS("""IT(fps=24, ref="TOP")""")
b = src.Trim(101,200).mod_FPS("""IT(fps=30, ref="TOP")""")
c = src.Trim(201,300).mod_FPS("""IT(fps=24, ref="TOP")""")
tcpath = "c:\tmp\timecode.txt"
result = EasyVFR_Create(src, a, tcpath)
result = all.EasyVFR_Append(b, tcpath)
result = all.EasyVFR_Append(c, tcpath)
result
ってな具合に
>>8 のをEasyVFRに加えたら出来た。
うぉ・・・・ あまりに久しぶりだったからsageの書く場所間違えてしまった。 スミマセン・・・・。
♪ ∧,_∧ (´・ω・`) )) (( ( つ ヽ、 ♪ 〉 とノ ))) (__ノ^(_)
ITで30fpsのインタレ解除って出来ない? 6フレームに1フレームミスるんだけど・・・
23 :
22 :2006/11/13(月) 14:31:54 ID:O7l1lOuS
ごめん場所間違えた
#ASYNTHER QuickTime 30.00fps LoadVFAPIPlugin("C:\Program Files\AviSynth 2.5\plugins\QTReader.vfp","QTReader") [QTReader("%f")] ChangeFPS(30.00) FlipVertical でquicktimeをvirtualdubで読み込めたんですが。 ついでにwavで出力してる音声を読み込むのってどう書きますか?
ここは自慢のスクリプトを貼り付けてそれを肴に語らうところらしいよ。 どこかで聞いた話じゃ2chのAviSynth関連スレは初心者お断りなんだって。
とゆうかVDスレでも似たようなこともうきいてるじゃんか
AudioDub(QTReader(), WaveSource() )
WAVSource()
>25 勉強する意欲があり、向上心があり、独力でできるところまでやっている事が伝わってくる そんな初心者はとても歓迎されてるよ。 自分では調べもしない、試しもしない、他人を利用することしか頭に無い そんな奴は初心者とは呼べない。synth関連スレに限らずね。 ま、ここはショボスクでも何でもいいからとにかく貼るスレだから、とりあえず貼れ。とっとと貼れ。
>>29 だったら本スレで質問しろってことだ
それより早く貼ってくだちい
手動逆テレシネフィルタ function ITC(clip, order){ var a, l; //Declare variables. a = new Array((1+2*order)%10 ,(4+2*order)%10 ,(6+2*order)%10, (8+2*order)%10); l = a.sort() ; AVS.inc=doubleweave(clip);//Sort the array. AVS.inc=selectevery(inc,10,l[0],l[1],l[2],l[3]) ; return AVS.inc; }
要warpsharp もっと簡単なのあったらオシエテ こんな感じでツカウ ITCws = WScript("C:\Program Files\AviSynth 2.5\script\ITC.js", "JScript") source=avisource("test.avi") ITCws.WSInvoke("ITC",source,1)
オレはReena!->tbl->timecodev2->MP4ッス
単に長いことだけが理由なら、ここにも貼ってほしいね。 寂しいスレだし。
問題ないようなんで貼ってみる function inittimecode ( clip c, string "filename" ) { global timecode_filename = default( filename, "default-timecodes.txt" ) global sourceclip = c global prevframe = -1 global tc_implicit = false WriteFileStart( BlankClip(length=0), timecode_filename, """ "# timecode format v1"+chr(10)+"Assume "+string(sourceclip.framerate) """ ) } function tcimplicit ( int a, int b, string "filter", bool "avg" ) { global tc_implicit_filter = default( filter, "noop()" ) global tc_implicit_avg = default( avg, false ) global tc_implicit = true global tc_implicit_st = a global tc_implicit_ed = b } global a24d = """Auto24FPS( drop=false,mode="blend" )""" global it = "IT( diMode=0 )"+a24d global a24 = """Auto24FPS( mode="blend" )""" global a602 = "DoubleWeave().a60224()" global pd = "DoubleWeave().Pulldown( 1,3 )" global td = "TDeint( mode=1 )" global bd = """AutoDeint( "blend" )""" global tf = "TFM().TDecimate()"+a24d global ed = "SeparateFields() EEDI2(field=-2) merge(SelectEven(),SelectOdd())"
function tc ( int a, int b, string "filter", bool "avg", bool "ignore" ) { tc_implicit && (a >= tc_implicit_st) && (a <= tc_implicit_ed) && (tc_implicit_st != a) ? \ tc_main( tc_implicit_st,a-1,tc_implicit_filter,tc_implicit_avg ) : nop() global tc_implicit_st = tc_implicit ? b+1 : 0 tc_main( a,b,filter,avg,ignore ) return last } function tc_main ( int a, int b, string "filter", bool "avg", bool "ignore" ) { init = prevframe < 0 ? true : false global prevframe = init ? a-1 : prevframe ignore = default( ignore, false ) avg = default( avg, false ) ignore ? nop() : Assert( prevframe+1 == a, "tc: framenumber no much, "+string(a)+" - "+string(b) ) global prevframe = b filter = default( filter, "noop()" ) orig = sourceclip.trim( a,b ) proc = eval( "orig."+filter ) proc.framecount > 1 && (avg ? false:true) ? \ maketimecode( init ? BlankClip(length=0) : cur, orig, proc ) : \ maketimecode2( init ? BlankClip(length=0) : cur, orig, proc ) global cur = init ? proc.AssumeFPS( sourceclip.framerate ) : cur + proc.AssumeFPS( sourceclip.framerate ) global audiosource = init ? orig : audiosource + orig return sourceclip.HasAudio() ? AudioDubEx( proc,audiosource ) : proc }
function tcdraw () { tc_implicit && (tc_implicit_st <= tc_implicit_ed) ? \ tc_main( tc_implicit_st,tc_implicit_ed,tc_implicit_filter,tc_implicit_avg ) \ : nop() global tc_implicit = false return sourceclip.HasAudio() ? AudioDubEx( cur,audiosource ) : cur } function noop ( clip c ) { return c } function maketimecode (clip base, clip orig, clip ivtc) { fps = ivtc.framerate section = base.framecount + ivtc.framecount-2 fraction = fracivtc( orig, ivtc ) tc = string(base.framecount) + "," + string(section) + "," + string(fps) + chr(10) + string(section+1) + "," + string(section+1) + "," + string(1000 / (1000/fps + fraction)) WriteFileStart( orig, timecode_filename, "tc", append=true ) } function fracivtc ( clip orig, clip ivtc ) { originaltime = 1000 / orig.framerate * orig.framecount ivtctime = 1000 / ivtc.framerate * ivtc.framecount return originaltime - ivtctime }
function maketimecode2 (clip base, clip orig, clip ivtc) { fps = ivtcfps( orig, ivtc ) tc = string(base.framecount) + "," + string(base.framecount+ivtc.framecount-1) + "," + string(fps) WriteFileStart( orig, timecode_filename, "tc", append=true ) } function ivtcfps ( clip orig, clip ivtc ) { originaltime = 1000 / orig.framerate * orig.framecount return 1000 / (originaltime / ivtc.framecount) } ここまで ユーザ側で使うのは inittimecode, tc, tcimplicit, tcdraw の4つ inittimecode ( clip c, string "filename" ) c ソースクリップ.このクリップが操作対象になる filename 出力されるタイムコードファイル名 tc ( int a, int b, string "filter", bool "avg", bool "ignore" ) a 開始フレーム番号 b 終了フレーム番号 filter 区間(a から b)に掛けるフィルタ.主にIVTC フィルタ後のフレーム数に合わせたタイムコードが出力されるので,ある程度自由にフレーム数を変えられる "DoubleWeave().SelectEvery( 10, 0,5 )" とか,動かない場面なら "trim(0,-1)" でもいい フィルタ後のクリップは勝手に保存される tcdraw () tc() で保存してたクリップを引き出す.とりあえず最後に置く
使用例 -- prefix="foo" episode="1" file=prefix+".d2v" wav = prefix+" T01 48K 16bit 2ch.wav" v = mpeg2source( file ).AssumeTFF() a = WavSource( wav ) AudioDub( v,a ) inittimecode( prefix+episode+"-timecodes.txt" ) tc( 0,432,tf ) tc( 433,976,td ) tc( 977,1324,tf ) tc( 1325,1403,pd ) tc( 1404,1500,tf ) tcdraw() crop( 8,0,-8,0 ) KenKunNRT() return last -- tcimplicit を使うと上のはこう書ける -- inittimecode( prefix+episode+"-timecodes.txt" ) tcimplicit( 0,1500,tf ) tc( 433,976,td ) tc( 1325,1403,pd ) tcdraw() --
長いって言うから100レスくらい使うのかと思ってたのに
44 :
名無しさん@編集中 :2006/12/08(金) 01:05:46 ID:PxLpWLrv
" " ヾ ; " ; " ; ; ヾ ⊂⊃ "ゞ ; ; ; ;;ヾ;;ヾ;ゞ..。 ゙ /~~\ ⊂⊃ ヾ ; ;";;/" ;;ヾ...;ヾ||〜'i " / /~~\ ; "i "; ;ヾ;.;ヾ;;メヾ.|| .| _________ ii;, メソ ヾ; ;ゞ." ..||茶.| /丶丶丶丶丶丶丶丶.\ |i;, |ソ .|| .|//\丶丶丶丶丶丶丶 ..\ Il;: | ..||店.|/ 田 \丶丶丶丶丶丶丶丶\ !i;: | || .| ̄ ̄ ̄ ̄|  ̄  ̄  ̄ ̄ ̄ ̄ ̄.‖ |!;; | ||〜'i | ̄ ̄ ̄|!| ∧ .∧ . ‖ II;; | || .|!|___|!| .(,,・ω・)<誰もいない・・・ II;; | || .| ...| ̄ ̄ ̄| ..(つ旦). ..‖ 从 ゝ.,..., . l ̄i....|__. . |_ |i ̄i|| ̄∪∪ ̄l| | """"''""" ""''"""'' ''""""""'' ''""" """"''
" " ヾ ; " ; " ; ; ヾ ⊂⊃ "ゞ ; ; ; ;;ヾ;;ヾ;ゞ..。 ゙ /~~\ ⊂⊃ ヾ ; ;";;/" ;;ヾ...;ヾ||〜'i " / /~~\ ; "i "; ;ヾ;.;ヾ;;メヾ.|| .| _________ ii;, メソ ヾ; ;ゞ." ..||茶.| /丶丶丶丶丶丶丶丶丶\ |i;, |ソ .|| .|//\丶丶丶丶丶丶丶丶 ..\ Il;: | ..||店.|/ 田 \丶丶丶丶丶丶丶丶丶\ !i;: | || .| ̄ ̄ ̄ ̄|  ̄  ̄  ̄ ̄ ̄ ̄ ̄ ̄‖ |!;; | ||〜'i | ̄ ̄ ̄|!| ∧ .∧ ‖ II;; | || .|!|___|!| (,,・ω・) (´ー`)<いないねー II;; | || .| ...| ̄ ̄ ̄(つ旦) (つ旦) ‖ 从 ゝ.,..., . l ̄i....|__. . |_ |i ̄i||∪∪ ̄∪∪l| | """"''""" ""''"""'' ''""""""'' ''""" """"'' """''
" " ヾ ; " ; " ; ; ヾ ⊂⊃ "ゞ ; ; ; ;;ヾ;;ヾ;ゞ..。 ゙ /~~\ ⊂⊃ ヾ ; ;";;/" ;;ヾ...;ヾ||〜'i " / /~~\ ; "i "; ;ヾ;.;ヾ;;メヾ.|| .| _________ ii;, メソ ヾ; ;ゞ." ..||茶.| /丶丶丶丶丶丶丶丶.\ |i;, |ソ .|| .|//\丶丶丶丶丶丶丶 ..\ Il;: | ..||店.|/ 田 \丶丶丶丶丶丶丶丶\ !i;: | || .| ̄ ̄ ̄ ̄|  ̄  ̄  ̄ ̄ ̄ ̄ ̄.‖ |!;; | ||〜'i | ̄ ̄ ̄|!| ‖ II;; | || .|!|___|!|| ‖ II;; | || .| ...| ̄ ̄ ̄| ‖ 从 ゝ.,..., . l ̄i....|__. . |_ |i ̄i|| ̄ ̄ ̄ ̄l| | """"''""" ""''"""'' ''""""""'' ''""" """"''
いるお
ファイル読み込み関数。 一回作ればあとは楽出来るかな、と。 function LoadFile(string filename) { _len = Findstr(RevStr(filename), ".") - 1 _ext = RightStr(filename, _len) clip = \ ((_ext == "avi") \ ? LoadAvi(filename) \ :(_ext == "d2v") \ ? LoadD2v(filename) \ :(_ext == "mpeg" || _ext == "mpg" || _ext == "vob") \ ? LoadMpeg(filename) \ :(_ext == "aup") \ ? LoadAup(filename) \ :(_ext == "tpr") \ ? LoadTpr(filename) \ :(_ext == "mov" || _ext == "3gp" || _ext == "3gp2") \ ? LoadQt(filename) \ :(_ext == "wav") \ ? LoadWav(filename) \ :(_ext == "mpa" || _ext == "mp3") \ ? LoadMpa(filename) \ : LoadDs(filename) \ ) return clip }
function LoadDs(string filename) { return DirectShowSource(filename) } function LoadAvi(string filename) { LoadAviUtlInputPlugin(dir + "ds_input.aui", "DSInput") return DSInput(filename) } function LoadD2v(string filename) { LoadPlugin(dir + "DGDecode.dll") return MPEG2Source(filename) } function LoadMpeg(string filename) { LoadAviUtlInputPlugin(dir + "m2v.vfp", "MPEGInput") return MPEGInput(filename) }
function LoadAup(string filename) { LoadVFAPIPlugin(dir + "aviutl.vfp", "AUPInput") return AUPInput(filename) } function LoadTpr(string filename) { LoadVFAPIPlugin(dir + "TMPGEnc.vfp", "TPRInput") return TPRInput(filename) } function LoadQt(string filename) { return QTInput(filename, audio = true) } function LoadWav(string filename) { return WavSource(filename) } function LoadMpa(string filename) { LoadPlugin(dir + "NicAudio.dll") return NicMPASource(filename) }
LoadAviでDSInput使う意味は?AVISourceじゃだめなん?
52 :
48 :2006/12/23(土) 20:00:56 ID:RI79Kt7w
LoadFile作ったのが半年ぐらい前で、 LoadAviは更にその半年前ぐらいに作ったでしょうか。 もう作った当時の思考が思い出せません。 擬似VFRでおかしかったか音ズレが起きたか、とかだったと思い、 由来をちょっと探してみました。 推測するに、携帯動画変換君Wikiの、 “可変フレームレートや120fpsのWMVファイルを読み込む”項を参考に作ってそのまま、 でしょうか。 下記の様に変えて様子みてみます。 function LoadDs(string filename) { LoadAviUtlInputPlugin(dir + "ds_input.aui", "DSInput") return DSInput(filename) } function LoadAvi(string filename) { return AVISource(filename) }
もう一つのFilterRange function FilterRange2(clip clip,int "start",int "end",string "filter"){ global start=start global end=end clip=conditionalfilter(clip,Eval("clip."+filter),clip,"current_frame>=start&¤t_frame<=end","=","true",false) return clip }
#for…繰り返し処理を行う # start 値の初期値 # end 値の終了値 # step 刻み値 # filter 繰り返し分適応させるフィルタ(省略すると何もしません、“""”でも省略扱いです。) # 繰り返しの値は“i”もしくは“crnt”で取得出来ます # merge クリップ結合関数(省略すると最後に作成したクリップを返します、“""”でも省略扱いです。) # 繰り返し途中に作成したクリップは早めに生成されたクリップが“c1”、 # 遅めに生成されたクリップが“c2”になります # この2つのクリップを1つのクリップに結合します。 function for(clip clip, int start, int end, int step, string "filter", string "merge") { filter = default(filter, "") merge = default(merge, "") merge = (("" != merge)? merge: "c2") i = start crnt = start next = crnt + step c1 = clip c2 = (("" != filter)? Eval("clip." + filter): clip) c2 = ((next < end) ? c2.for(next, end, step, merge, filter): c2) return ((next < end)? Eval(merge): c2) }
#OffsetFrame…現在のフレームとは違うフレームの画像を表示する # ofst 表示するフレームの位置(+1なら次のフレーム、-1なら前のフレーム) function OffsetFrame(clip clip, int ofst) { return ((0 < ofst) \ ? clip.Trim(ofst+1,0) \ :(ofst < 0) \ ? clip.Loop((-ofst)+1, 0, 0) \ : clip \ ) } #MovieThumbnail…サムネイルを作成する # size_x 1画面の横サイズ # size_y 1画面の縦サイズ # rpt_x 横に敷き詰める個数 # rpt_y 縦に敷き詰める個数(0なら動画が終わるまで) # itvl 表示する時間間隔(フレーム) function MovieThumbnail(clip clip, int size_x, int size_y, int rpt_x, int rpt_y, int itvl) { itvl = ((0 < itvl)? itvl: 30) size_x = ((0 < size_x)? size_x: 40) size_y = ((0 < size_y)? size_y: 30) rpt_x = ((0 < rpt_x)? rpt_x: 4) rpt_y = ((0 <= rpt_y)? rpt_y: 4) rpt_y = ((0 != rpt_y)? rpt_y: clip.FrameCount() / (itvl * rpt_x)) clip = clip.LanczosResize(size_x, size_y) return clip.for(0, rpt_y, 1, "StackVertical(c1, c2)" \ , "OffsetFrame(" + String(rpt_x * itvl) + ")") \ .for(0, rpt_x, 1, "StackHorizontal(c1, c2)" \ , "OffsetFrame(" + String(itvl) + ")") }
>>54 あまり考えずにレスするけど、Loopじゃダメなん?
関数名がforってのは若干違和感が
flvやasfとかの音ズレ対策にフレームレート設定にAssumeFPS使うのだけ 覚えて関数とかはいまいちわからんけどとりあえず保存しときたい汚いファイル があんまりないからアニメのOPやCM(実写)ぐらいにしか使っていないのがむなしい
# 使用例: EEDI2Bob(type=3, mthreshL=8, mthreshC=6, mthresh=0, lthresh=0, vthresh=0, estr=0, dstr=0, maxd=24, nt=76, pp=1, ColorMatrix="Rec.709->Rec.601") function EEDI2Bob(clip i, int "type", int "cthresh", int "MI", int "blockx", int "blocky", int "mthreshL", int "mthreshC", \ int "mthresh", int "lthresh", int "vthresh", int "estr", int "dstr", int "maxd", int "nt", int "pp", string "ColorMatrix") { TYPE = default(type, 0) CTHRESH = default(cthresh, 6) MI = default(MI, 64) BLOCKX = default(blockx, 16) BLOCKY = default(blocky, 16) MTHRESHL = default(mthreshL, 6) MTHRESHC = default(mthreshC, 6) MTHRESH = default(mthresh, 10) LTHRESH = default(lthresh, 20) VTHRESH = default(vthresh, 20) ESTR = default(estr, 2) DSTR = default(dstr, 4) MAXD = default(maxd, 24) NT = default(nt, 50) PP = default(pp, 1)
#CM = default(ColorMatrix, string("Rec.709->Rec.601")) CM = default(ColorMatrix, string("")) TDeint_Bob_Ovrfile = "TDeint_bob_OvrFile.txt" i Exist("TDeint_bob_OvrFile.txt") == false ? WriteFileStart(TDeint_Bob_Ovrfile, """ "#TDeint v1.1 by tritical" """, append=false) : nop() AssumeFrameBased() GetParity(i) ? AssumeTFF() : nop() interp = SeparateFields(i).EEDI2(field=-2, mthresh=MTHRESH, lthresh=LTHRESH, vthresh=VTHRESH, estr=ESTR, dstr=DSTR, maxd=MAXD, nt=NT, pp=PP) TDeint(mode=1, order=-1, type=TYPE, cthresh=CTHRESH, MI=MI, \ blockx=BLOCKX, blocky=BLOCKY, mthreshL=MTHRESHL, mthreshC=MTHRESHC, edeint=interp, ovr="TDeint_bob_OvrFile.txt") vinverse() (CM != "") ? ColorMatrix(mode=CM) : nop() return last }
× interp = SeparateFields(i) ○ interp = SeparateFields()
Repairのうまい使い方、何かないでしょうか
| \ __ / _ (m) _ピコーン |ミ| / `´ \ ∧ ∧ (・∀ ・) ノ( )ヽ < > \ / _ `゙`・;`' _バチュ--ン `゙`・;` / `´ \ ∧ ∧ (・∀ ・) ノ( )ヽ < > ∧ ∧ (・∀ ・) <何だっけ ノ( )ヽ < >
| \ __ / _ (m) _ピコーン |ミ| / `´ \ ('A`) ノヽノヽ くく | \ __ / _ (m) _ |ミ| / `´ \ `゙`・;`' `゙`・;` バチュ--ン `´ __ (m) |ミ| `´
66 :
名無しさん@編集中 :2007/04/22(日) 07:08:24 ID:7JqcyONa
/::.::.::/:// .::.::.::.::.::.:./ ! .::.::.::.::.::.::.::.::.::.:|::.::.::.::.::.::.::.::. \ ゝ‐<::./::./ .::.::.::.::\/ | .::.::.::.::.::.:: /::.::.:|::.::.::.::.::.::.::.::: \ 〃 / _ ヽ:/::.::.::.::.::.:/\ |::.::.::.::.::.:: /::.::.:: |::.::.::.::.::.ヽ::.:: {{ / / __ ヽ ',.::/::./ `ー |::.::.::.::.:: / |::.::.:/|_::.::.::.::.:l::.:: . ── | ! /r ) } |イ斤テ左≡ォz /::.::.::.::/ 斗七 !::.::.::.::.::.::.|::.:: . ∧ ヽヽ _/ /::! レヘ :::::::::/ /::.::. / j / | .::.::.::.::.:: |::.:: . , -―ヘ `ー /.::.| rー'゚:::::::/ /::.:/ テ左≠=ヵ::.::.::.::.::. |::.:: ____/ { /.::.::.| ゞ辷zン // う。::::::7 /イ .::. |::.::.::.|::.:: 彡_/ ヽ イ ::.::. | /ヘ:::::::/ |.::.::.:|::.::.:∧::. 〃 V ヽ ヽ.::.: | ヾ辷:ン /:l::.::./!::.:/ l { ∨ }__.::.|\ <! ・ /::.l::|::./│/ DADADADADA!! ヽ ヽ {  ̄ ̄ ̄`ヽ _ イ::.: l::|:/ j/ 、 \ \ } ) / ̄ ̄ ̄l7::.:|::.::.j::l′ /
ここはAAじゃなくてAvisynthのスクリプトを貼るスレだと思うんだw
エエ アア
| \ __ / _ (m) _ピコーン |ミ| / `´ \ ('A`) ノヽノヽ くく \ / _ `゙`・;`' _バチュ--ン `゙`・;` / `´ \ ('A`) ノヽノヽ くく `゙`・;`' `゙`・;` バチュ--ン `´
70 :
名無しさん@編集中 :2007/04/29(日) 09:35:43 ID:ig/9U22n
__ / -―‐- 、:丶 〃´ \:ヽ {{ __ }.::} _, - ―‐‐┤ \ー‐――'< /.::_/.::.::.::.::|.::.::.::.::.::.::.::.::.::.::.::\ ______//_/____::/|.::{.::.::.::.::.::.::.::.::.ヽ::.::ヽ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ~|lll|'.::|.::|.::.::.:|.::.::.::.::.::.::.l.::.::. ', _ |lll「.::j.::l::.::.::l\⌒.::.::.::|.::.::.::l │ |lll|::ハ.l:.::.:: | ヽ.::.::.: |.::.::.::| │ |lll| ',.::.::.│ \.::.|.::.::. | │ |lll|三 ヽ ::.:|三三7:ヽ|.::.::.`ヽ │ |lll|" \| ""・l.::.::|⌒l:ド、l │ |lll|、 ‘ー'ー' j.::.::|-イ.:| │ |lll|:l>ー‐rーt< リ .::|.: l :| │ |lll|:|_j;斗<_,>/.:: /! ::.: | │ |lll|:| >、 __/.:: / ヽ.::. | ├‐tュ‐‐┬‐tュ――|lll|:| / /.:: / i.::.| │ ‖ ‖ ll |lll|:V ,'.::.:/ .|.::.| │ ‖ ‖ |!____ |lll|.::ヽ i/.:/l |.::.| _j ̄|! ̄`|! ̄|! /  ̄ l\{ W / |.::.|
71 :
名無しさん@編集中 :2007/05/19(土) 18:30:33 ID:VgCuQEq9
保守
HOSYU
73 :
名無しさん@編集中 :2007/06/15(金) 23:03:39 ID:5b6j2Ot3
ho
| | | |∧_∧ | |´・ω・`) | | o保守o | |―u' """""""""""""""""" | | | |∧_∧ | |´・ω・`) | | o ヽコト | |―u' 保守 """""""""""""""""" | | | | | | | |ミサッ | | 保守 """"""""""""""""""
function residue(int "a", int "b") { return ( a -(floor(a/b) * b) ) } # 剰余 r = a - q * b function quotient(int "a", int "b") { return floor(a/b) } # 商 function lcm(int "a", int "b") { return ( (a * b) / gcm(a,b) ) } # 最小公倍数 a * b = gcm(a, b) * lcm(a, b) # 最大公約数 gcm(a, b) = gcm(b, r) function gcm(int "a", int "b", int "to") { to = default(to, 30) _a = (a > b) ? a : b _b = (a > b) ? b : a r = residue(_a, _b) return (r == 0) || (to == 0) ? b : gcm2(_b, r, to) } function gcm2(int "a", int "b", int "to") { to = to - 1 r = residue(a, b) a = (r != 0) ? b : a b = (r != 0) ? r : b return gcm(a, b, to) }
function PARCrop(clip clip, int "mode", int "sar", string "crop_opt", string "dar", int "n", int "offset", \ bool "interlaced", int "PAR_width",int "PAR_height", int "DAR_width", int "DAR_height", bool "show") { mode = default(mode, 1) sar = default(sar, 14) crop_opt = default(crop_opt, "0,0,0,0") dar = default(dar, "16:9") n = default(n, 2) offset = default(offset, 0) interlaced = default(interlaced, false) show = default(show, true) w = ( (sar == 3) || (sar == 5) ) && ( (dar == "4:3") || (dar == "16:9") ) ? 22 * n : 1 h = ( (sar == 3) || (sar == 5) ) && ( (dar == "4:3") || (dar == "16:9") ) ? 15 * n : 1 w = (sar == 14) && (dar == "16:9") ? 4 * n : w h = (sar == 14) && (dar == "16:9") ? 3 * n : h w = (sar == 14) && (dar == "4:3") ? 1 * n : w h = (sar == 14) && (dar == "4:3") ? 1 * n : h w = (sar == 1) && (dar == "16:9") ? 16 * n : w h = (sar == 1) && (dar == "16:9") ? 9 * n : h w = (sar == 1) && (dar == "4:3") ? 4 * n : w h = (sar == 1) && (dar == "4:3") ? 3 * n : h w = (sar == 11) && (dar == "16:9") ? 176 * n : w h = (sar == 11) && (dar == "16:9") ? 135 * n : h w = (sar == 11) && (dar == "4:3") ? 44 * n : w h = (sar == 11) && (dar == "4:3") ? 15 * n : h w = (sar == 17) && (dar == "16:9") ? 704 * n : w h = (sar == 17) && (dar == "16:9") ? 405 * n : h w = (sar == 17) && (dar == "4:3") ? 176 * n : w h = (sar == 17) && (dar == "4:3") ? 135 * n : h
w = ( defined(PAR_width) == true) ? n * ( (DAR_width * PAR_height) \ / gcm(DAR_width * PAR_height, DAR_height * PAR_width) ) : w h = ( defined(PAR_width) == true) ? n * ( (DAR_height * PAR_width) \ / gcm(DAR_width * PAR_height, DAR_height * PAR_width) ) : h Clip = (clip.isYV12 == true) && (interlaced == true) && (n == 1) \ ? clip.ConverttoRGB24(interlaced=true) \ : (n == 1) ? clip.ConverttoRGB24 \ : clip clip = Eval( "clip.Crop(" + string(crop_opt) + ")" ) x = (mode == 1) ? clip.width : clip.height z = (mode == 1) ? w : h q = quotient(x, z) r = residue (x, z) x = x - r # new_x xが wの倍数になるよう修正 x_q = quotient(r, 2) x_r = residue (r, 2) # 1 or 0 y = (mode == 1) ? h * q : w * q # new_y _y = (mode == 1) ? clip.height - y : clip.width - y y_q = quotient(_y, 2) y_r = residue (_y, 2)
clip = (mode == 1) ? clip.Crop( x_q + x_r, y_q + y_r - offset, -x_q, -(y_q + offset) ) \ : clip.Crop( y_q + y_r -offset, x_q + x_r, -(y_q + offset), -x_q ) clip2 = clip.Subtitle("DAR_width x PAR_height " + string(w) + " / " + string(h) + " DAR_height x PAR_width", align=2) (mode == 1) ? Clip2.Subtitle( string(x) + " x " + string(y) + ": Crop(" + string(int(x_q + x_r)) +", " \ + string(int(y_q + y_r - offset)) + ", -" + string(x_q) + ", -" + string(y_q + offset) + ")", align=5) \ : clip2.Subtitle( string(y) + " * " + string(x) + ": Crop(" + string(int(y_q + y_r -offset)) +", " \ + string(int(x_q + x_r)) + ", -" + string(y_q + offset) + ", -" + string(x_q) + ")", align=5) return (show == false) ? clip : last } Cropで整数解を求めるための関数。
w = ( (sar == 3) || (sar == 5) ) && ( (dar == "4:3") || (dar == "16:9") ) ? 22 * n : 1 h = ( (sar == 3) || (sar == 5) ) && ( (dar == "4:3") || (dar == "16:9") ) ? 15 * n : 1 この2行を消して下と交換 (計算間違いしてなければ正しいはず。PAR,DARを直接指定すれば常に正しい。) w = (sar == 3) && (dar == "4:3") ? 22 * n : 1 h = (sar == 3) && (dar == "4:3") ? 15 * n : 1 w = (sar == 3) && (dar == "16:9") ? 88 * n : w h = (sar == 3) && (dar == "16:9") ? 45 * n : h w = (sar == 5) && (dar == "16:9") ? 22 * n : w h = (sar == 5) && (dar == "16:9") ? 15 * n : h w = (sar == 5) && (dar == "4:3") ? 11 * n : w h = (sar == 5) && (dar == "4:3") ? 10 * n : h w = (sar == 19) && (dar == "16:9") ? 3 * n : w h = (sar == 19) && (dar == "16:9") ? 2 * n : h w = (sar == 18) && (dar == "4:3") ? 9 * n : w h = (sar == 18) && (dar == "4:3") ? 8 * n : h
720*480 PAR 40:33を縦の解像度を保持して横を削って、PAR 40/33にしたとき DAR 4/3にする。(16/9の額縁 4/3) これを640*480にresizeすればDAR 4/3 PARCrop(mode=2, sar=5, crop_opt="0,0,0,0", dar="4:3", n=2, show=true) 1440*1080 PAR 4:3 額縁 16/9 横のCropだけ指定すると、一番近い整数解で縦も自動でcropする PARCrop(mode=1, sar=14, crop_opt="186,0,-190,0", dar="16:9", n=2, show=true) または、直接指定。このとき、modeとsarは書式に書かない。 PARCrop(mode=1, crop_opt="186,0,-190,0", PAR_width=4, PAR_height=3, DAR_width=16, DAR_height=9, n=1, offset=0, show=true) mode 1 横はそのまま縦をCrop, mode 2: 縦はそのまま横をCrop sar ソースのPARを指定 H.264のレファレンスで決められてるもの。 17,18,19は空き番号。 下のものだけ指定できる。 1: PAR 1/1 1920*1080, 3: PAR 10/11 720(704)*480 5 PAR 40/33 T720(704)*480, 11: PAR 15/11 1440*1080 14: PAR 4/3 1440*1080, 17: PAR 45/44 1920*1080 18 PAR 8/9 BT878A 720*480 19 PAR 32/27 BT878A 720*480 dar "16:9" or "4:3" 目標とするDAR crop_opt Cropのオプションを入力。縦横をどちらかCropする。それに併せて、のこりのCropする量を決める。 n: 1, 2, 4, 8, 16 ,32 ... 縦横がどの倍数になるか指定。 n=1 のときはConverttoRGB24するので注意。 resizeするなら 1か2, インタレエンコなら 16(xvid)か32(x264)(cropのあとresizeはしない) そのままの大きさでエンコするなら 8 か 16。 show 情報を表示するかしないか。 true or false
使いにくかったので変更。
デフォルトでCropせずに情報だけ表示。
, bool "show" のあとに , bool "debug")
show = default(show, true)を
show = default(show, false)
debug = default(debug, true)
show = (debug == true) ? true : show
_clip = clip
clip2 = clip.Subtitle("DAR_width x PAR_height " を
clip = (debug == true) ? _clip : clip
clip2 = clip.Subtitle("DAR_width x PAR_height " + string(w) + " / " + string(h) + " DAR_height x PAR_width", align=5, y=clip.height/2+16)
ttp://www.uploda.net/cgi/uploader4/index.php?file_id=0000015101.txt
>>75 > return (r == 0) || (to == 0) ? b : gcm2(_b, r, to) }
_b にしないと a < b かつ gcm(a, b) = a の場合に結果を誤るかと
最大公約数を求めるならそんなに複雑に書かなくても
これだけで十分じゃないかな
function gcm (int a, int b) {
c = a % b
return c == 0 ? b : gcm(b, c)
}
何言ってるかまったくわからんぜ
(・∀・)人(・∀・)人(・∀・)
(・∀・)人(・∀・)人(・∀・)人(・∀・)
#24FPSと30FPSが混合された動画を60FPS化する LoadPlugin("Decomb521VFR1.3_P4-Athlon.dll") #ここで動画を読み込む #DirectShowSource以外でもいいが↓の逆テレシネで支障が出ないようにpixel_typeをYV12にしておくこと DirectShowSource("*******.***",pixel_type="YV12") AssumeTFF DoubleWeave Top=SelectEven Bottom=SelectOdd #とりあえず逆テレシネ pixel_typeをYV12以外にするとゴミが出る Interleave(Top.Telecide(order=1,guide=0,post=0,show=false),Bottom.Telecide(order=0,guide=0,post=0,show=false))
## {{{ PARCrop2 function PARCrop2(clip clip, int "mode", string "crop_opt", int "PAR_width",int "PAR_height", int "DAR_width", int "DAR_height", int "n", \ int "offset", int "r_mode", int "resize_n", int "resize_m", bool "r_int", string "r_method", \ string "dvd", int "border", bool "blank", bool "show", bool "debug") { mode = default(mode, 1) crop_opt = default(crop_opt, "0,0,0,0") PAR_width = default(PAR_width, 1) PAR_height = default(PAR_height, 1) DAR_width = default(DAR_width, 16) DAR_height = default(DAR_height, 9) n = default(n, 1) resize_n = (clip.width <= 720) ? default(resize_n, 8) \ : default(resize_n, 16) resize_m = default(resize_m, 0) offset = default(offset, 0) r_mode = default(r_mode, 0) show = default(show, false) debug = default(debug, true) r_mode = (debug == true) ? 0 : r_mode show = (debug == true) ? true : show show = (r_mode > 0) ? false : show r_int = default(r_int, true) dvd = default(dvd, "non") r_method = (dvd == "non") && ( (r_mode == 1) || (resize_m > 0) ) \ ? default(r_method, "Lanczos4Resize") : default(r_method, "LanczosResize") border = (dvd == "16/9") && ( ((DAR_width == 4) && (DAR_height == 3)) || ((DAR_width == 15) && (DAR_height == 11)) ) \ ? default(border, 1) : default(border, 0) blank = default(blank, true) _clip = clip
# {{{ crop w = (DAR_width * PAR_height) / gcm(DAR_width * PAR_height, DAR_height * PAR_width) h = (DAR_height * PAR_width) / gcm(DAR_width * PAR_height, DAR_height * PAR_width) _n = 32 / gcm(h, 32) n = (clip.isYV12 == true) && (n == 1) ? 2 : n n = (clip.isYUY2 == true) && (n == 1) && (w%2 != 0) ? 2 : n n = (n == -32) && (_n != 32) ? _n * (16 / _n) : abs(n) # H.264 MBAFF w = n * w h = n * h clip = Eval( "clip.Crop(" + string(crop_opt) + ")" ) x = (mode == 1) ? clip.width : clip.height z = (mode == 1) ? w : h q = quotient(x, z) r = residue (x, z) x = x - r # new_x xが wの倍数になるよう修正 x_q = quotient(r, 2) x_r = residue (r, 2) # 1 or 0 y = (mode == 1) ? h * q : w * q # new_y _y = (mode == 1) ? clip.height - y : clip.width - y y_q = quotient(_y, 2) y_r = residue (_y, 2) xx = (mode == 1) ? x : y yy = (mode == 1) ? y : x # }}}
# {{{ DVD dvd_DAR_width = (dvd == "4/3") ? 4 \ : (dvd == "16/9") ? 16 : DAR_width dvd_DAR_height = (dvd == "4/3") ? 3 \ : (dvd == "16/9") ? 9 : DAR_height dvd_DAR_width = (dvd == "4/3") && (DAR_width == 15) && (DAR_height == 11) ? 15 \ : (dvd == "16/9") && (DAR_width == 20) && (DAR_height == 11) ? 20 : dvd_DAR_width dvd_DAR_height = (dvd == "4/3") && (DAR_width == 15) && (DAR_height == 11) ? 11 \ : (dvd == "16/9") && (DAR_width == 20) && (DAR_height == 11) ? 11 : dvd_DAR_height dvd_w = (dvd_DAR_width * PAR_height) / gcm(dvd_DAR_width * PAR_height, dvd_DAR_height * PAR_width) dvd_h = (dvd_DAR_height * PAR_width) / gcm(dvd_DAR_width * PAR_height, dvd_DAR_height * PAR_width) _dvd_width = (border == 0) ? xx : float(yy * dvd_w) / dvd_h _dvd_height = (border == 0) ? float(xx * dvd_h) / dvd_w : yy dvd_width = int(_dvd_width) dvd_height = int(_dvd_height) dvd_width_border = (border == 0) ? 0 : abs(dvd_width - xx) dvd_height_border = (border == 0) ? abs(dvd_height - yy) : 0 dvd_width_border = dvd_width_border / 2 dvd_height_border = dvd_height_border / 2 # }}}
# {{{ resize resized_y = yy - residue( yy, lcm(DAR_height, resize_n) ) + ( lcm(DAR_height, resize_n) * resize_m ) resized_y = (r_int == false) ? yy - residue(yy, resize_n) + (resize_n * resize_m) : resized_y resized_x2 = xx - residue( xx, lcm(DAR_width, resize_n) ) + ( lcm(DAR_width, resize_n) * resize_m ) resized_x2 = (r_int == false) ? xx - residue(xx, resize_n) + (resize_n * resize_m) : resized_x2 resized_y = (resize_n == -32) ? yy - residue( yy, lcm(DAR_height, 32) ) + ( lcm(DAR_height, 32) * resize_m ) : resized_y resized_y = (r_int == false) && (resize_n == -32) ? yy - residue(yy, 32) + (32 * resize_m) : resized_y resized_x2 = (resize_n == -32) ? xx - residue( xx, lcm(DAR_width, 16) ) + ( lcm(DAR_width, 16) * resize_m ) : resized_x2 resized_x2 = (r_int == false) && (resize_n == -32) ? xx - residue(xx, 16) + (16 * resize_m) : resized_x2 #_new_PAR_W = resized_y / DAR_height #_new_PAR_H = resized_x2 / DAR_width _new_PAR_W = resized_y * DAR_width _new_PAR_H = resized_x2 * DAR_height new_PAR_W = _new_PAR_W / gcm(_new_PAR_W, _new_PAR_H) new_PAR_H = _new_PAR_H / gcm(_new_PAR_W, _new_PAR_H) resized_x1 = (r_int == false) ? float(resized_y * DAR_width) / float(DAR_height) : (resized_y * DAR_width) / DAR_height _resized_x3 = float(resized_y * w) / h resized_x3 = int(_resized_x3) resized_x = (r_mode == 2) ? resized_x2 \ : (r_mode == 3) ? resized_x3 \ : resized_x1 # }}}
clip = (mode == 1) ? clip.Crop( x_q + x_r, y_q + y_r - offset, -x_q, -(y_q + offset) ) \ : clip.Crop( y_q + y_r - offset, x_q + x_r, -(y_q + offset), -x_q ) AddBorders_opt = (border == 0) ? "0, " + string(dvd_height_border) + ", 0, " + string(dvd_height_border) \ : string(dvd_width_border) + ", 0, " + string(dvd_width_border) + ", 0" clip = (dvd == "4/3") || (dvd == "16/9") ? Eval( "clip.AddBorders(" + string(AddBorders_opt) + ")" ) : clip dvd_x = ( (DAR_width == 15) && (DAR_height == 11) ) || ( (DAR_width == 20) && (DAR_height == 11) ) ? 720 : 704 AddBorder = ( (DAR_width == 15) && (DAR_height == 11) ) || ( (DAR_width == 20) && (DAR_height == 11) ) ? 0 : 8 AddBorder = (blank == false) ? 0 : AddBorder dvd_clip = clip clip = (debug == true) ? _clip : clip clip = (dvd == "4/3") || (dvd == "16/9") ? Eval( "clip." + r_method + "(dvd_x, 480).AddBorders(AddBorder, 0, AddBorder, 0)" ) \ : (r_mode > 0) ? Eval( "clip." + r_method + "(resized_x, resized_y)" ) : clip
clip2 = clip.Subtitle("DAR_width x PAR_height " + string(w) + " / " \ + string(h) + " DAR_height x PAR_width", align=5, y=clip.height/2+16) clip2 = (n != -32) ? clip2.Subtitle("Resize mode 1 " + string(resized_x1) +" x " + string(resized_y) \ + " PAR 1:1", align=5, y=clip.height/2+48) : clip2 clip2 = (n != -32) ? clip2.Subtitle("Resize mode 2 " + string(resized_x2) +" x " + string(resized_y) \ + " PAR " + string(new_PAR_W) + ":" + string(new_PAR_H), align=5, y=clip.height/2+64) : clip2 clip2 = (n != -32) ? clip2.Subtitle("Resize mode 3 " + string(_resized_x3) +" x " + string(resized_y) \ + " PAR " + string(PAR_width) + ":" + string(PAR_height), align=5, y=clip.height/2+80) : clip2
(mode == 1) ? Clip2.Subtitle( string(x) + " x " + string(y) + " : Crop(" + string(int(x_q + x_r)) +", "
\ + string(int(y_q + y_r - offset)) + ", -" + string(x_q) + ", -" + string(y_q + offset) + ")", align=5)
\ : clip2.Subtitle( string(y) + " * " + string(x) + " : Crop(" + string(int(y_q + y_r - offset)) +", "
\ + string(int(x_q + x_r)) + ", -" + string(y_q + offset) + ", -" + string(x_q) + ")", align=5)
(dvd == "4/3") || (dvd == "16/9") ? dvd_clip.Subtitle( string(x) + " x " + string(y) + " : Crop(" + string(int(x_q + x_r)) +", "
\ + string(int(y_q + y_r - offset)) + ", -" + string(x_q) + ", -" + string(y_q + offset) + ")", align=5 )
\ .Subtitle( "AddBorders(" + AddBorders_opt + ")", align=5, y=dvd_clip.height/2+16 )
\ .Subtitle( " DVD " + string(dvd), align=5, y=dvd_clip.height/2+32 )
\ .Subtitle( "x PAR " + string(dvd_w) + ":" + string(dvd_h), align=5, y=dvd_clip.height/2+48 )
\ .Subtitle( string(_dvd_width) + " x " + string(_dvd_height), align=5, y=dvd_clip.height/2+64 ) : last
return (show == false) ? clip : last
}
## }}}
### }}}
ttp://www.uploda.net/cgi/uploader4/index.php?file_id=0000015685.txt
ぜんぜんショボくないぞ、このスレどうしちゃったんだ?
AVIRead(C:\おれおれ.avi)
('A`)
LoadAviUtlInputPlugin("C:\Program Files\EARTH SOFT\PV3 3.x\AviUtl\EARTH SOFT DV.aui", "EARTHSOFTDV") EARTHSOFTDV(F:\動画.dv) Auto24FPS(true,24,200,"",false) Lanczos4Resize(704,396,190,144,-190,-144) return last 超適当
ぜんぜんショボイな、このスレどうしちゃったんだ?
MPEG2Source(d2v="__vid__",idct=5) ColorMatrix(scaling=2,interlaced=false,d2v="__vid__") IT(fps = 24,ref="TOP",diMode=3) FrameCache(6).FFT3DFilter(sigma=1.5,plane=4,bw=48,bh=48,bt=3,ow=24,oh=24,svr=0,sharpen=0,interlaced=false,wintype=1) FrameCache(6)._2DCleanYUY2(interlaced=0,thresholdY=6,thresholdU=2,thresholdV=2,radiusX=2,radiusY=2,dmode=0) FrameCache(6).hqdn3d(2) 俺様愛用
#24,30FPSの分割が面倒な時用。全部60FPS化で片づける。 function VD_SmartSmoothHiQ(clip, int "diameter", int "threshold", int "amount", string "mode", \ bool "grayscale", bool "weighted_difference", int "maintain_diffweight") { LoadVirtualdubPlugin("D:\data\AVI\Virturaldub\plugins\SmoothHiQ.vdf", "_VD_SmartSmoothHiQ") mode = default(mode, "weighted") mode = (mode=="average") ? 0 : (mode=="weighted") ? 1 : -1 Assert(mode>=0, """VD_SmartSmoothHiQ: "mode" parameter must be "average" or "weighted"""") return clip._VD_SmartSmoothHiQ(default(diameter,5), default(threshold,50), 0, default(amount,254), \ mode, default(grayscale,false)?1:0, default(weighted_difference,true)?1:0, default(maintain_diffweight,0)) } LoadPlugin("MSharpen.dll") LoadPlugin("BruteIVTC.dll") #読むのはMPEG2だよね DirectShowSource("**********", fps=29.97,audio=false,convertfps=true,pixel_type="YV12") AssumeTFF DoubleWeave #とりあえず逆テレシネ BruteIVTC() #ブロックノイズ取り 非常に重い ConvertToRGB() VD_SmartSmoothHiQ(5,50,254,"weighted") ConvertToYV12() #シャープネスフィルタ MSharpen(25,50,true,false,false)
#ChangePlaySpeed…再生速度を変更する # speed 再生する速度(倍速指定、“1.0”なら変化無し) # fps 速度変更後のFPS設定(省略・負数なら変化無し) # “0”ならspeedで変化した分だけFPSも変化する # 正数ならその値になる # pitch 音程を変化させるか(省略・偽なら変化なし、trueなら変化する) function ChangePlaySpeed(clip clip, float speed, float "fps", bool "pitch") { fps = default(fps, -1.0) pitch = default(pitch, false) clip = \ ((pitch) \ ? clip.TimeStretch(rate=100.0*speed) \ : clip.TimeStretch(tempo=100.0*speed) \ ) rate = clip.Framerate() clip = \ ((0.0 == fps) \ ? clip.AssumeFPS(rate*speed) \ :(fps < 0.0) \ ? clip.AssumeFPS(rate*speed).ChangeFPS(rate) \ : clip.AssumeFPS(rate*speed).ChangeFPS(fps) \ ) return clip }
絶讃の方でちょうど再生速度が話題になってたので、依然作った関数をUP。 clip_29970fps_60m00s = ColorBars() clip_29970fps_30m00s = clip_29970fps_60m00s.ChangePlaySpeed(2.0) clip_59940fps_30m00s = clip_29970fps_60m00s.ChangePlaySpeed(2.0, fps=0) clip_23976fps_30m00s = clip_29970fps_60m00s.ChangePlaySpeed(2.0, fps=24000.0/1001.0)
105 :
名無しさん@編集中 :2007/07/30(月) 08:11:25 ID:koRkCv2W
期待age
Import("aufilters.avs") LoadAviUtlInputPlugin("C:\EARTH SOFT DV.aui","EARTHSOFTDV") EARTHSOFTDV("%V") %t #SwapUV() #トップフィールド指定 AssumeFrameBased().ComplementParity() ConvertYUY2ToAviUtlYC() AU_afs(16,16,32,32,0,192,128,24,128,256,3,2,true,true,true,false,false,false,false,true,false,false,true,false) ConvertAviUtlYCToYUY2() Lanczos4Resize(1280,720) ConvertToYV12() #crop( 0, 0, 0, 0) fft3dGPU(mode=1,precision=2) x264afs用
>>102 一ヶ月近くも前にレスするのも何だが
全部60fps化するくらいならインタレ保持でよくない?
よーし張っちゃうぞー、EasyVFR汎用avs_export用 Filename = "%V" Import("C:\Program Files\AviSynth 2.5\easyvfr.avs") LoadAviUtlInputPlugin("C:\Program Files\AviSynth 2.5\plugins\m2v.aui" ,"Marumo") src = Marumo(Filename) SETMTMODE(2,2) src = src.AssumeTFF().crop(8,0,-8,-0) #a =src.trim(0 , ).IT(fps = 30, ref = "TOP", diMode = 1) #a =src.trim(0 , ).IT(fps = 24, ref = "TOP", diMode = 1) #a =src.trim(0 , ).Doubleweave().Autodeint() a = a.Converttoyv12() #b =src.trim(,).IT(fps = 30, ref = "TOP", diMode = 1) #b =src.trim(,).IT(fps = 24, ref = "TOP", diMode = 1) #b =src.trim(,).Doubleweave().Autodeint() b = b.Converttoyv12() #c =src.trim(,).IT(fps = 30, ref = "TOP", diMode = 1) #c =src.trim(,).IT(fps = 24, ref = "TOP", diMode = 1) #c =src.trim(,).Doubleweave().Autodeint() c = c.Converttoyv12() tcpath = "%u.txt" result = EasyVFR_Create(src, a, tcpath) result = result.EasyVFR_Append(b, tcpath) result = result.EasyVFR_Append(c, tcpath) result return last これだとavsのあるフォルダに同ファイル名でタイムコードが吐き出されて便利
('A`) LoadPlugin("Decomb521VFR1.3_P4-Athlon.dll") LoadPlugin("BruteIVTC.dll") AssumeTFF DoubleWeave Top=SelectEven Top=Top.AssumeTFF Top=Top.Telecide(order=1,post=0) Top=Top.BruteIVTC() Bottom=SelectOdd Bottom=Bottom.AssumeBFF Bottom=Bottom.Telecide(order=0,post=0) Bottom=Bottom.BruteIVTC() Interleave(Top,Bottom)
実用性はともかく、そこそこ綺麗な希ガス function upconvByEedi2(clip c){ c function upconvByEedi2_temp(clip c){ c eedi2(field=0) stackvertical(last,flipvertical) try{ spline64resize(width,height/2,0,0.5,0,0.5-height/2) } catch(err_msg){ spline36resize(width,height/2,0,0.5,0,0.5-height/2) } } upconvByEedi2_temp turnright upconvByEedi2_temp turnleft }
二倍程度なら普通のリサイズで十分綺麗な気がしたんで作り直し、使う気は無いけど綺麗だと思うよ。 function eedi2upconv(clip clip,int "target_width",int "target_height",string "eedi2_arguments",string "resizer",string "resizer_arguments"){ clip i0=default(target_width,width*4) i1=default(target_height,round(height*33/40)*4) s0=default(eedi2_arguments,",mthresh=0,lthresh=0,vthresh=0,estr=0,dstr=255,maxd=29,pp=3") s1=default(resizer,"lanczosresize") s2=default(resizer_arguments,",taps=17") eval("eedi2(field=0"+s0+")") turnright eval("eedi2(field=0"+s0+")") turnleft function eedi2upconv_temp(clip c,int "i0",int "i1",string "s"){ c eval("eedi2(field=1"+s+")") turnright eval("eedi2(field=1"+s+")") turnleft return (width<i0)||(height<i1)?eedi2upconv_temp(i0,i1,s):last } (width<i0)||(height<i1)?eedi2upconv_temp(i0,i1,s0):last stackvertical(last,flipvertical) eval(s1+"(width,height/2,0,0.5,0,0.5-height/2"+s2+")") turnright stackvertical(last,flipvertical) eval(s1+"(width,height/2,0,0.5,0,0.5-height/2"+s2+")") turnleft eval(s1+"("+string(i0)+","+string(i1)+s2+")") return last }
eedi2を使って拡大するのか。なるほど。 鼻血が出るほど遅いが、綺麗と云えば綺麗だ。 アイディアは、気に入った。(;´Д`)ハァハァ
doomで紹介されてるeedi2のサンプル映像見て吹いた すごいなこのフィルタ。漏れも弄ってみるわ。(;´Д`)ハァハァ
>>113 おいおい、そこまで言っておいてURL貼らないのかよ。
生殺しじゃねえか。俺にも(;´Д`)ハァハァさせろ。
>>113 漏れもずっと探してたんだが見つからない(;´Д`)
URLplz
>>116 THX!
ん〜・・・、なんか微妙じゃない?
そこまで綺麗じゃないきがする。
綺麗にアプコンできるスクリプトorフィルタ随時募集中
なんとなく修正
function eedi2upconv(clip clip,int "target_width",int "target_height",string "eedi2_arguments",string "resizer",string "resizer_arguments"){
clip
i0=default(target_width,width*2)
i1=default(target_height,height*2)
s0=default(eedi2_arguments,"")
s1=default(resizer,"spline16resize")
s2=default(resizer_arguments,"")
eval("eedi2(field=0"+s0+")")
turnright
eval("eedi2(field=0"+s0+")")
turnleft
function eedi2upconv_temp(clip c,int "i0",int "i1",string "s"){
c
eval("eedi2(field=1"+s+")")
turnright
eval("eedi2(field=1"+s+")")
turnleft
(width<i0)||(height<i1)?eedi2upconv_temp(i0,i1,s):last
}
(width<i0)||(height<i1)?eedi2upconv_temp(i0,i1,s0):last
stackhorizontal(last,fliphorizontal)
stackvertical(last,flipvertical)
eval(s1+"("+string(i0)+","+string(i1)+",0.5,0.5,0.5-width/2,0.5-height/2"+s2+")")
}
使用例
eedi2upconv(1920*2,1088*2,",mthresh=0,lthresh=0,vthresh=0,estr=0,dstr=0,maxd=29,nt=256,pp=3","lanczosresize",",taps=100")
アーティファクトなんて気にしないで補間重視+最強の縮小lanczos100、0.1fpsくらいは出るといいなぁww
>>118 EDIUpsizerとかって糞重いフィルタがあるよ、けっこう綺麗な感じ
ただ、素直にps3にやってもらった方がいいとは思うけどね
ps3にやってもらうって選択肢はあまり素直ではないと思うw
>>121 超既出だったんだねw
spline64resize(width,height,width/2,0,width,height)
↑みたいな事できるって知らなかった、教えてくれてアリガト
また誰もが思いつきそうなの張ってみる
function eedi2blend_sharp(clip c){
c
subtract(last,subtract(eedi2blend,last))
eedi2blend
}
function eedi2blend(clip c){
c
getparity==true?assumetff:assumebff
separatefields
eedi2(field=-2)
merge(selecteven,selectodd)
}
subtract(last,subtract(foo,last))
foo
↑二重化みたいな必ず成果の出る処理に使うと良い感じ、重さは二倍だけどね。
ふむ
avis [error]: unsupported input format (DIB ) ('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)('A`)
これで最終版としてみるか。 #とりあえず逆テレシネ DoubleWeave Top=SelectEven Top=Top.AssumeTFF Top=Top.Telecide(Order=1,Guide=0,Post=0) Top=Top.BruteIVTC Bottom=SelectOdd Bottom=Bottom.AssumeBFF Bottom=Bottom.Telecide(Order=0,Guide=0,Post=0) Bottom=Bottom.BruteIVTC Interleave(Top,Bottom) BruteIVTC #60i部分がなければ省略 Deinterlaced=Interleave(Top.TomsMoComp(1,5,0),Bottom.TomsMoComp(0,5,0)) ConditionalFilter(Telecided,Deinterlaced,Telecided,"IsCombed(40)","equals","true")
126 :
名無しさん@編集中 :2007/10/06(土) 20:18:19 ID:g9yBKZs6
超初心者です # プラグインは C:\Program Files\AviSynth 2.5\plugins へ # ソースの読み込み # DVD2AVI 1.76 MPEG2Source("D:\AviSynth\test.d2v") # インタレース解除 TomsMoComp(1, 5, 0) # ノイズ除去 Convolution3D(preset="movieHQ") LanczosResize(640, 480, 0, 8, 704, 480) #Crop(8,0,-8,0) #Lanczos3Resize(640,480) ここまでできたけど・・・ これから、どう発展すればいいの? ちなみにエロDVDをx264でエンコードするつもりです
自分がやりたいように発展させればいいの
スレ死骸
>>129 アドバイス、ありがとうございます
> 60FPSになって動きがなめらかになる。
サイズが増えると困るんだけど・・・
とりあえずスレを移動します
本スレでMCbobを知りめちゃ良かったけど、重くて挫折。0.75fps orz MVbob1をちょこっち改造。 function MVbob2(clip c) { order=(c.getparity==true)? 1:0 bobd=c.leakkernelbob(order=order).verticalreduceby2() fields=c.separatefields() mvf=bobd.mvanalyse(blksize=4,pel=1,isb=false) mvb=bobd.mvanalyse(blksize=4,pel=1,isb=true) even1=c.separatefields().selecteven() odd1a=fields.mvcompensate(mvf,mode=1,thscd1=300).selecteven() odd1b=fields.mvcompensate(mvb,mode=1,thscd1=300).selecteven() odd1=mergeluma(odd1a,odd1b,0.5).mergechroma(odd1b,0.5) even2=c.separatefields().selectodd() odd2a=fields.mvcompensate(mvf,mode=1,thscd1=300).selectodd() odd2b=fields.mvcompensate(mvb,mode=1,thscd1=300).selectodd() odd2=mergeluma(odd2a,odd2b,0.5).mergechroma(odd1b,0.5) even=interleave(even1,odd1).weave() odd=interleave(even2,odd2).weave() interleave(even,odd) } AutoDeintよりはジャギとか消えたけど、格子模様とかはやっぱAutoDeintがいいかも。 4.00fpsに上がった。
ボケないデハロを目指してmasktoolsいじってたら、なぜかアニメ向け2DNRができましたww function SevenFourThreeNR(clip c,int "i0",int "i1",int "i2",string "s",bool "b0",bool "b1"){ i0=default(i0,8)chr(13)i1=default(i1,1)chr(13)i2=default(i2,8)chr(13)s=default(s," 4 3 / ^")chr(13)b0=default(b0,true)chr(13)b1=default(b1,true) function SevenFourThreeNR_f0(clip c,int "i0",int "i1"){mt_average(SevenFourThreeNR_f2(SevenFourThreeNR_f1(c,i1),i1),SevenFourThreeNR_f1(SevenFourThreeNR_f2(c,i1),i1),u=3,v=3)chr(13)1<i0?SevenFourThreeNR_f0(i0-1,i1):last} function SevenFourThreeNR_f1(clip c,int "i"){mt_expand(c,u=3,v=3)chr(13)1<i?SevenFourThreeNR_f1(i-1):last} function SevenFourThreeNR_f2(clip c,int "i"){mt_inpand(c,u=3,v=3)chr(13)1<i?SevenFourThreeNR_f2(i-1):last} function SevenFourThreeNR_f3(clip c0,clip "c1",int "i",string "s"){mt_merge(c0,c1,mt_lutxy(c0,c1,"x y - abs"+s,u=3,v=3),u=3,v=3)chr(13)1<i?SevenFourThreeNR_f3(c1,i-1,s):last} b0?mt_adddiff(mt_makediff(c,SevenFourThreeNR_f3(SevenFourThreeNR_f0(c,i0,i1),c,i2,s),u=3,v=3),c,u=3,v=3):c SevenFourThreeNR_f3(SevenFourThreeNR_f0(last,i0,i1),last,i2,s) b1?SevenFourThreeNR_f3(last,c,i2,s):last } デフォでの動作を簡単に説明するとFrFunっぽい リンギングは結構取れます、弱いエッジしか消えないのでボケてる感じはあまりしません てゆーか、シャープになったりしますww ワープシャープ的に引き締めたりもします 肝心のヘイローには殆ど効いてないみたいだけど、結構面白い関数だと思います
itvfrで120fのやりかた教えて
134 :
名無しさん@編集中 :2007/10/26(金) 11:25:58 ID:9jv9MmMl
すまん、初心者的な質問で申し訳ないが、 ユーザ定義関数を作るとき、 一番最初のパラメータclipの名前は引用符なし、 その次のパラメータの名前からは引用符必要ということでいい?
>>132 リンギングの取れ具合はすごくいいけど重くて常用はムリww
リンギングといや、3DNR・2DNRの前にアンシャープマスク掛けるのが好き ボケないしリンギング増加も少ない
>>132 > リンギングは結構取れます
> 肝心のヘイローには殆ど効いてないみたい
すみません、ringing と haloing の違い教えてください。
同じ物の単に違う呼び名だと思ってました。
昨晩放送された2001年宇宙の旅の最後のタイムスリップ後シーンとか
結構 haloing がひどいので使ってみましたが確かにあまり効いてないみたいです。
本スレドコー!?
本スレDAT落ちしてた・・・
またかよ!
スレ立てようかと思うんだけど、何かテンプレに加えたい情報とか直したいこととかある?
スレタイをAvisynth総合スレッドへ変更
何も足さない 何も引かない
このスレ、要らないだろ...
このスレの方が適切(というか元々前スレのだけど)だと思う KenKunNR2が本スレに貼られてるからね。 俺もたまに作るけど、ショボすぎて人に見せられない。
このスレは自作関数を張るスレとして機能している
GPU25
1080i -> 720pはとにかくプログレにしてリサイズ、だよね?
プログレって言うかデインタレね
いやその言い換えは全く必要ないというかどちらかと言えば逆というかw
プログレ:60p デインタレ:30p 俺の認識
p はプログレの p i はインタレースの i 俺の認識
インタレの話はしていない
#GetPixelType…現在の色空間を取得する function GetPixelType(clip clip) { return \ ((clip.IsYUY2()) \ ? "YUY2" \ :(clip.IsYV12()) \ ? "YV12" \ :(clip.IsRGB32()) \ ? "RGB32" \ :(clip.IsRGB24()) \ ? "RGB24" \ :(clip.IsYUV()) \ ? "YUV" \ :(clip.IsRGB()) \ ? "RGB" \ : "UNKNOWN" \ ) }
#GetPixelType…色空間を設定する # type 色空間 function SetPixelType(clip clip, string type) { return \ ((type == "YUY2") \ ? clip.ConvertToYUY2() \ :(type == "YV12") \ ? clip.ConvertToYV12() \ :(type == "RGB32") \ ? clip.ConvertToRGB32() \ :(type == "RGB24") \ ? clip.ConvertToRGB24() \ :(type == "YUV") \ ? clip.ConvertToYUY() \ :(type == "RGB") \ ? clip.ConvertToRGB() \ : clip \ ) }
#ColorMaskFilter…指定の色にフィルターを掛ける # filter 作用させるフィルタ # color 作用させる色 # tolerance 作用させる色範囲(省略なら0) # 負数なら色範囲外に作用させる # filter_lv フィルタのレベル(省略なら255) function ColorMaskFilter(clip clip, string filter, int color, int "tolerance", int "filter_lv") { tolerance = default(tolerance,0) filter_lv = default(filter_lv,255) width = clip.Width() height = clip.Height() type = clip.GetPixelType() fclip = Eval("clip." + filter) clip = clip.ConvertToRGB32() fclip = fclip.ConvertToRGB32() mask = clip.ColorKeyMask(color, Abs(tolerance)) mask = ((0 <= tolerance)? mask.Invert("A"): mask) fclip = MergeARGB(mask, fclip, fclip, fclip) clip = clip.Layer(fclip, "add", filter_lv) return clip.SetPixelType(type) }
#ReplaceColor…色の置き換え
# src_color 置き換え対象の色
# dst_color 置き換え後の色
# tolerance 作用させる色範囲(省略なら0)
# 負数なら色範囲外に作用させる
function ReplaceColor(clip clip, int src_color, int dst_color, int "tolerance") {
tolerance = default(tolerance,0)
return clip.ColorMaskFilter("BlankClip(color=" + string(dst_color) + ")", src_color, tolerance)
}
YUV2 や YV12 でも通りますが、精度は知りません。
RGB:808080 を RGB:00FF00 に置き換える
ReplaceColor($808080, $00FF00, 0)
>>134 引用符が付いているパラメータは省略出来る
引用符が無いパラメータは使用時に絶対に指定しなければならない
(先頭のclipだけ、もう少しややこしいけど省略)
160 :
134 :2007/11/19(月) 02:27:16 ID:q2R0Hp90
>>159 ありがとう。
WikiのAviSynth入門のスクリプトがうまく動かなかったので
どういうことだろうと思っていました。
function SevenFourThreeNRv2(clip c,bool "b0",bool "b1",int "i0",string "s0",int "i1",int "i2",\ string "s1",string "s2",int "i3",bool "b2",string "s3"){ function SevenFourThreeNR_0(clip c,bool b1,int i0,string s0,int i1,int i2,string s1,string s2,int\ i3,bool b2,string s3){ function SevenFourThreeNR_0_0(clip c,int i0,string s0,int i1,int i2){ function SevenFourThreeNR_0_0_0(clip c,int i0,string s0,int i1){ i0==0?mt_expand(c,mode=s0):i0==1?mt_logic(c,mt_logic(duplicateframe(deleteframe(c,framecount(c)-1),\ 0),deleteframe(duplicateframe(c,framecount(c)-1),0),"max"),"max"):mt_logic(mt_expand(c,mode=s0),\ mt_logic(duplicateframe(deleteframe(c,framecount(c)-1),0),deleteframe(duplicateframe(c,framecount(c\ )-1),0),"max"),"max") 1<i1?SevenFourThreeNR_0_0_0(i0,s0,i1-1):last } function SevenFourThreeNR_0_0_1(clip c,int i0,string s0,int i1){ i0==0?mt_inpand(c,mode=s0):i0==1?mt_logic(c,mt_logic(duplicateframe(deleteframe(c,framecount(c)-1),\ 0),deleteframe(duplicateframe(c,framecount(c)-1),0),"min"),"min"):mt_logic(mt_inpand(c,mode=s0),\ mt_logic(duplicateframe(deleteframe(c,framecount(c)-1),0),deleteframe(duplicateframe(c,framecount(c\ )-1),0),"min"),"min") 1<i1?SevenFourThreeNR_0_0_1(i0,s0,i1-1):last } mt_average(SevenFourThreeNR_0_0_1(SevenFourThreeNR_0_0_0(c,i0,s0,i1),i0,s0,i1),\ SevenFourThreeNR_0_0_0(SevenFourThreeNR_0_0_1(c,i0,s0,i1),i0,s0,i1)) 1<i2?SevenFourThreeNR_0_0(i0,s0,i1,i2-1):last } function SevenFourThreeNR_0_1(clip c0,clip c1,string s1,string s2,int i3){ mt_lutxy(c0,c1,"x y - abs"+s1+" "+s2+" < x y - abs"+s1+" x * "+s2+" x y - abs"+s1+" - y * + "+s2+\ " / x ?")
1<i3?SevenFourThreeNR_0_1(c0,last,s1,s2,i3-1):last } b3=isyv12(c) c0=b3?c:converttoyv12(c) b1?mt_adddiff(mt_makediff(c0,SevenFourThreeNR_0_1(c0,SevenFourThreeNR_0_0(c0,i0,s0,i1,i2),s1,s2,i3)\ ),c0):c0 SevenFourThreeNR_0_1(SevenFourThreeNR_0_0(i0,s0,i1,i2),s1,s2,i3) b1?SevenFourThreeNR_0_1(c0,last,s1,s2,i3):last b2?mt_clamp(last,mt_expand(c0,mode=s3),mt_inpand(c0,mode=s3)):last b3?last:converttoyuy2 } b0=default(b0,true) b1=default(b1,true) i0=default(i0,0) s0=default(s0,"square") i1=default(i1,1) i2=default(i2,8) s1=default(s1," 4 3 / ^") s2=default(s2,"256") i3=default(i3,8) b2=default(b2,false) s3=default(s3,"square") i4=b0?8:4 i5=isyv12(c)&&b0?8:4 i6=ceil(width(c)/i4)*i4 i7=ceil(height(c)/i5)*i5 pointresize(c,i6,i7,0,0,i6,i7) b0?ytouv(SevenFourThreeNR_0(utoy,b1,i0,s0,i1,i2,s1,s2,i3,b2,s3),SevenFourThreeNR_0(vtoy,b1,i0,s0,i1\ ,i2,s1,s2,i3,b2,s3),SevenFourThreeNR_0(b1,i0,s0,i1,i2,s1,s2,i3,b2,s3)):mergeluma(SevenFourThreeNR_0\ (b1,i0,s0,i1,i2,s1,s2,i3,b2,s3)) crop(0,0,width(c),height(c)) }
なんすかこれ
久しぶりにとある板のとあるスレを見たらSevenFourThreeNR使ってる人がいたので、何となくヴァージョンあっぷ 変更点 YUY2に対応、Yのみを可能に、時間軸追加etc. 引数について b0 UVをどうするか、trueでYUV、falseでYのみ b1 foo(subtract(last,subtract(foo,last)))的な事をするかどうか、trueでやる i0 ぼかし方、0で2D、1で時間軸、それ以外3D・・なのかなぁ?、2D以外はてきとーだから無駄が多い s0 ぼかす時のmt_expandとmt_inpandのモード i1 ぼかす範囲、大きくすると糞重い、1〜3程度で i2 ぼかす回数、良く解らんけど8〜9回ぐらいで変化しなくなる、少ないと軽い、2〜4ぐらいで十分な気もする s1 元に戻す強さに影響、s2,i3と一緒に弄る s2 元に戻す強さに影響 i3 元に戻す回数、少ないと軽い b2 時間軸用の制限の有無、trueで制限あり、2Dでは意味無し s3 時間軸用の制限のmt_expandとmt_inpandのモード 使用例 SevenFourThreeNRv2#前の奴のデフォとほぼ同じ SevenFourThreeNRv2(i1=2)#より強く SevenFourThreeNRv2(s0=mt_square(2))#上と同じ、でもこっちの方が重い SevenFourThreeNRv2(b1=false,s0="both",s1=" 1 2 / ^",s2="255 1 2 / ^",i3=10)#デハロ? SevenFourThreeNRv2(b1=false,i0=1,s1=" 3 4 / ^",s2="255 3 4 / ^",i3=10,b2=true,s3="both")#ドット妨害クロスカラー除去?、メモリ食いすぎwwwSDで700Mとかwwwww SevenFourThreeNRv2(b1=false,i0=743,s0="both",s1=" 3 4 / ^",s2="255 3 4 / ^",i3=10,b2=true,s3="both")#ほんとに3Dなの?、↑よりさらにメモリ食う ノシ
なんか知らんけど、一番最後の
crop(0,0,width(c),height(c))
がうまく機能してなさそうなんで
pointresize(width(c),height(c),0,0,width(c),height(c))
これに差し替えで・・・
>>163 >132をチョコッと弄ったデリンギングな関数のつもり、実際は良く解らん
Vinverseもどき mt_adddiff(last,mt_lutxy(mt_makediff(mt_convolution("1","1 2 1",u=3,v=3),last,u=3,v=3),mt_makediff(mt_convolution("1",\ "-1 1 4 1 -1",u=3,v=3),last,u=3,v=3),"x 128 - y 128 - * 0 > x 128 - abs y 128 - abs < x y ? 128 ?",u=3,v=3),u=3,v=3)
ほしゅ
皆さん、こんにちは〜
結構良い感じのドット妨害除去ができたんでうpってみます。
ttp://kininaruweb.sakura.ne.jp/uploader/src1/happa3796.rar 名前は「NR」、・・・そのまんまです
たぶんYV12でしか動かない
引数がclip1つだけなんで、使い方はNR() とか nr とか Nr とか nR(last) とかそんな感じで
実際の処理は
function NR_uf(clip c){
c
c0=duplicateframe(deleteframe(framecount-1),0)
c1=deleteframe(duplicateframe(framecount-1),0)
merge(\
mt_logic(mt_logic(mt_inpand(mode="horizontal",u=3,v=3),mt_inpand(mode="vertical",u=3,v=3),"max",u=3,v=3),mt_logic(last,mt_logic(c0,c1,"min",u=3,v=3),"min",u=3,v=3),"max",u=3,v=3),\
mt_logic(mt_logic(mt_expand(mode="horizontal",u=3,v=3),mt_expand(mode="vertical",u=3,v=3),"min",u=3,v=3),mt_logic(last,mt_logic(c0,c1,"max",u=3,v=3),"max",u=3,v=3),"min",u=3,v=3)\
)
}
こんなの、てか結果はまるっきり一緒
縦横時間でそれぞれ最大最小を求めて、最大の中の最小と、最小の中の最大の平均を返す・・みたいな?
コンパイラにSSEとSSE2使う様に頼んどいたんで、両方使える環境じゃないとまずい思う
c++触ったの初めてなんで動いたとか動かないとか教えてもらえるとうれしいです。
ノシ
君らは来るスレを微妙に間違えてる気がしなくも無い
nürüpo守
ガッ (・∀・)
NicAC3Source(***) #音声の長さ分の映像を足す function addvideo(clip c) { blankclip(length = int(100.0 * AudioLengthF(c) / float(audiorate(c))), fps=100) return audiodub(last,c) } addvideo() #AudioDubEx(BlankClip(length=Int(120*AudioLengthF(last)/Audiorate(last)), width=32, height=32, pixel_type="RGB24", fps=120), last) Soundout(output="cmd", filename="ぱす\audio.mp4", type=0, autoclose=true, executable="ぱす\neroaacenc.exe", prefilename="-ignorelength -q 0.5 -if - -of") #SoundOut(output="WAV",filename="output.wav", autoclose = true, showprogress=true, overwritefile="Yes") #AC3 6ch用 #Soundout(output="cmd", filename="ぱす\audio.mp4", type=0, autoclose=true, executable="ぱす\neroaacenc.exe", prefilename="-ignorelength -br 256000 -if - -of") AvsPの拡張子別テンプレートに登録しておけば空白のタブにD&D後 プレビュー窓をだした瞬間エンコが始まります。
元日保守
元日保守
function seven43upconv(clip c,int target_width,int target_height,float "src_left",float "src_top",float "src_width",float "src_height"){ src_left=default(src_left,0.) src_top=default(src_top,0.) src_width=default(src_width,width(c)*1.) src_width=src_width<=0?width(c)-src_left+src_width:src_width src_height=default(src_height,height(c)*1.) src_height=src_height<=0?height(c)-src_top+src_height:src_height rf="spline64resize" try{ eval(rf+"(c,width(c),height(c))") } catch(err_msg){ rf="lanczosresize" } eval("bicubicresize(c,"+string(target_width*3)+","+string(target_height*3)+",1.,0.,"+string(src_left)+","+string(src_top)+","+string(src_width)+","+string(src_height)+")") eval(rf+"(width(c),height(c),"+string(src_left*width/src_width*-1)+","+string(src_top*height/src_height*-1)+","+string(width(c)*width/src_width)+","+string(height(c)*height/src_height)+")") mt_adddiff(c,mt_makediff(c,last,u=3,v=3),u=3,v=3) eval("bicubicresize("+string(target_width*3)+","+string(target_height*3)+",1.,0.,"+string(src_left)+","+string(src_top)+","+string(src_width)+","+string(src_height)+")") mt_adddiff(last,mt_makediff(last,mt_convolution("1 1 1","1 1 1",u=3,v=3),u=3,v=3),u=3,v=3) mt_adddiff(last,mt_lutxy(mt_makediff(mt_expand(u=3,v=3),last,u=3,v=3),mt_makediff(mt_inpand(u=3,v=3),last,u=3,v=3),"x 128 - 128 y - < x x 128 - 128 y - > y 128 ? ?",u=3,v=3),u=3,v=3) eval(rf+"(target_width,target_height)") } ボケるけどジャギら無いバイキュービックb=1.,c=0.の拡大にアンシャープマスク、ssxsharpenをあわせてみたら。。。。糞重い
>>179 そこそこww
nnedi(0,true).turnleft.nnedi(0,true).turnright
には負ける(ssxsharpenのせいで>178の方が不自然)けど
lanczosresize(nnedi(0,true).turnright.nnedi(0,true).turnleft,width*2,height*2,.5,.5,width*2,height*2)
になら勝ってる(半ピクセルずらすとかなりへぼくなる)と思う。
function seven43upconv(clip c,int target_width,int target_height,float "src_left",float "src_top",float "src_width",float "src_height",int "taps"){ src_left=default(src_left,0.) src_top=default(src_top,0.) src_width=default(src_width,width(c)*1.) src_width=src_width<=0?width(c)-src_left+src_width:src_width src_height=default(src_height,height(c)*1.) src_height=src_height<=0?height(c)-src_top+src_height:src_height taps=default(taps,3) eval("bicubicresize(c,"+string(target_width*4)+","+string(target_height*4)+",1.,0.,"+string(src_left)+","+string(src_top)+","+string(src_width)+","+string(src_height)+")") eval("lanczosresize(width(c),height(c),"+string(src_left*width/src_width*-1)+","+string(src_top*height/src_height*-1)+","+string(width(c)*width/src_width)+","+string(height(c)*height/src_height)+","+string(taps)+")") mt_adddiff(c,mt_makediff(c,last,u=3,v=3),u=3,v=3) eval("bicubicresize("+string(target_width*4)+","+string(target_height*4)+",1.,0.,"+string(src_left)+","+string(src_top)+","+string(src_width)+","+string(src_height)+")") mt_adddiff(last,mt_lutxy(mt_makediff(mt_expand(u=3,v=3),last,u=3,v=3),mt_makediff(mt_inpand(u=3,v=3),last,u=3,v=3),"x 128 - 128 y - < x x 128 - 128 y - > y 128 ? ?",u=3,v=3),u=3,v=3) mt_adddiff(last,mt_makediff(last,mt_convolution(u=3,v=3),u=3,v=3),u=3,v=3) eval("lanczosresize(target_width,target_height,taps="+string(taps)+")") } とりあえず>178は無かったことに・・・ なんか二回目のアンシャープマスクが逆効果だったみたいだから順番入れ替え ダウンサンプリングをspline64からlanczosに変更 結局eedi2にもnnediにも勝てそうに無いwwwww プラグイン化したら速度でなら勝てそうだけどMitchellNetravaliとかウザイ
何度もサーセン 予定とはかなり違うけど seven43upconv(width,height) こんな感じで使えばかなり良い感じのだったので報告 bicubic(b=1,c=0)+lanczosでssxsharpenすると適当にNR、dehaloがかかってアニメ的に綺麗なのは知ってたけど それとは違ってLimitedSharpenみたいな方向に良い感じ、もちろん糞重いけど あと、 mt_adddiff(last,mt_lutxy(mt_makediff(mt_expand(u=3,v=3),last,u=3,v=3),mt_makediff(mt_inpand(u=3,v=3),last,u=3,v=3),"x 128 - 128 y - < x x 128 - 128 y - > y 128 ? ?",u=3,v=3),u=3,v=3) mt_adddiff(last,mt_makediff(last,mt_convolution(u=3,v=3),u=3,v=3),u=3,v=3) ↑をプラグイン化してみたけど焼け石にm(ryなかんじでしたOT2 てか俺のIDかっこよくね?
183 :
名無しさん@編集中 :2008/01/02(水) 13:30:06 ID:dT/7RLw8
一晩でAvisynth使えるようになった俺すげー SourceDir = "D:\bs\" SourceName = "1" RangeName = "1" MPEG2Source("D:\bs\1.d2v") AC3source("D:\bs\1.ac3") AssumeTFF() #フィールドオーダー指定(トップ先行) FrameCache(9).AutoDeint("") Crop(8, 0, 704, 480) Convolution3D(preset="movieHQ") LanczosResize(640,480) return last #おわり
AviSynthが使えるっていうのは 3項演算子と再帰呼び出しでループする関数が作れるレベルじゃねの?
185 :
名無しさん@編集中 :2008/01/05(土) 16:07:16 ID:+PGupEZ0
avisynth使い始めて、7,8年になるが、年々フィルターが減って、 今では、 video = mpeg2source("〜") audio = wavSource("〜") AudioDub(video, audio) trim(1,100) これだけ・・・
どんだけ〜
HDキャプでインターレース保持なら短いかも。
だよね、フィルタかけなくても奇麗だし
画質は糞目だから何とも言わないが アナログD3キャプチャだとfft3dgpu掛けると結構縮むよ。
顔に見えるネ ("〜")
↓から function nnediresize(clip c,int target_width,int target_height,float "src_left",float "src_top",\ float "src_width",float "src_height",int "taps",bool "merge_turn180",bool "merge_invert"){ src_left=default(src_left,0.) src_top=default(src_top,0.) src_width=default(src_width,float(width(c))) src_height=default(src_height,float(height(c))) src_width=src_width<=0.?float(width(c))-src_left+src_width:src_width src_height=src_height<=0.?float(height(c))-src_top+src_height:src_height taps=default(taps,3) merge_turn180=default(merge_turn180,false) merge_invert=default(merge_invert,false) function nnediresize_resample(clip c,float subrange_left,float subrange_top,float subrange_width,\ float subrange_height,int target_width,int target_height,int taps){ subrange_width<float(target_width)||subrange_height<float(target_height)?subrange_height*float(\ target_width)<subrange_width*float(target_height)?nnediresize_resample(nnedi(c,0,true),\ subrange_left,subrange_top*2.+.5,subrange_width,subrange_height*2.,target_width,target_height,taps\ ):nnediresize_resample(turnleft(nnedi(turnright(c),0,true)),subrange_left*2.+.5,subrange_top,\ subrange_width*2.,subrange_height,target_width,target_height,taps):lanczosresize(c,target_width,\ target_height,subrange_left,subrange_top,subrange_width,subrange_height,taps) } nnediresize_resample(c,src_left,src_top,src_width,src_height,target_width,target_height,taps) merge_turn180?merge(last,turn180(nnediresize_resample(turn180(c),float(width(c))-src_left-\ src_width,float(height(c))-src_top-src_height,src_width,src_height,target_width,target_height,taps\ ))):last merge_invert?merge_turn180?merge(last,invert(merge(nnediresize_resample(invert(c),src_left,src_top\ ,src_width,src_height,target_width,target_height,taps),turn180(nnediresize_resample(turn180(invert\
(c)),float(width(c))-src_left-src_width,float(height(c))-src_top-src_height,src_width,src_height,\ target_width,target_height,taps))))):merge(last,invert(nnediresize_resample(invert(c),src_left,\ src_top,src_width,src_height,target_width,target_height,taps))):last } ↑まで >184の言う"3項演算子と再帰呼び出しでループする関数"ってこんな感じで良いの? もしかして俺ってAviSynth使えてる?
#MTp…MTiの擬似プログレッシブ対応 # filter 実行するフィルタ # # 既知の不具合 # 時間軸系フィルタは上手く動作しません # YV12では上手く動作しません # MTiで使用出来ないフィルタは使用出来ません function MTp(clip clip, string filter) { tff = clip.GetParity() clip = clip.AssumeTFF() clip = Interleave(clip.SelectEvery(2, 0), clip.SelectEvery(2, 1)) clip = clip.AssumeFieldBased() clip = clip.Weave() clip = clip.AssumeFrameBased() clip = clip.MTi(filter) clip = clip.SeparateFields() clip = clip.AssumeFrameBased() clip = ((tff)? clip.AssumeTFF(): clip.AssumeBFF()) return clip } MTp("""subtitle("保守")""")
DVDアプコンをEDIUpsizer使ってやろうとしたら、死ぬほど重たいですね。 シングルスレッドでしか動かないので、クアッドコアとか持ち腐れ気味。 誰か、適度に使えるアプコンスクリプトplz
PS3のアプコンはDRCの劣化版ゴミ
そのゴミの画質になかなか追いつけないし、画質的に追いつけても時間が・・・・ リアルタイム処理であれだけの画質をあれだけの値段の機器でやってしまうのは あらためてすごいと思う今日この頃。
相手にするな
1 名前:名無しさん@編集中[] 投稿日:2008/01/14(月) 18:46:44 ID:pPBfz4B1 アプコンに関する専門スレを立ててみた。 Avisynth等を用いて、PS3アプコンを越える画質を作る方法を 研究するスレ。語って下さい。
糞スレ立てるなよw
↓から function nnediresize(clip,int target_width,int target_height,float "src_left",float "src_top",float "src_width",float "src_height",int "taps",bool "merge_turn180",bool "merge_invert"){a=clip b=target_width chr(13)c=target_height chr(13)d=default(src_left,0.)chr(13)d=isfloat(d)?d:float(d)chr(13)e=default(src_top,0.)chr(13)e=isfloat(e)?e:float(e)chr(13)f=float(width(a)) g=default(src_width,f)chr(13)g=isfloat(g)?g:float(g)chr(13)g=g<=0.?f-d+g:g chr(13)h=float(height(a))chr(13)i=default(src_height,h)chr(13)i=isfloat(i)?i:float(i)chr(13)i=i<=0.?h-e+i:i j=default(taps,3)chr(13)k=default(merge_turn180,false)chr(13)l=k?f-d-g:0.chr(13)m=k?h-e-i:0.chr(13)n=default(merge_invert,false) function nnediresize_(a,float b,float c,float d,float e,int f,int g,int h){i=float(f)chr(13)j=float(g) d<i||e<j?e*i<d*j?nnediresize_(nnedi(a,0,true),b,c*2.+.5,d,e*2.,f,g,h):nnediresize_(turnleft(nnedi(turnright(a),0,true)),b*2.+.5,c,d*2.,e,f,g,h):lanczosresize(a,f,g,b,c,d,e,h)} nnediresize_(a,d,e,g,i,b,c,j)chr(13)k?merge(last,turn180(nnediresize_(turn180(a),l,m,g,i,b,c,j))):last n?k?merge(last,invert(merge(nnediresize_(invert(a),d,e,g,i,b,c,j),turn180(nnediresize_(turn180(invert(a)),l,m,g,i,b,c,j))))):merge(last,invert(nnediresize_(invert(a),d,e,g,i,b,c,j))):last} ↑まで >193-194からの変更点 1 src_leftとかがint型も受け取るみたいだったのでfloat型にキャストを追加 2 同じ計算を何度もしてたのを変数に入れるようにした 3 変数の名前をシンプルにしてみた 4 改行位置を変えた 3と4はホントどーでも良いことで nnediが重過ぎるから2もそれほど重要じゃないはずだし 割り算してないから1も実は無意味だったりします てかfloat指定の引数にintが入るとかあるんだね、勝手にキャストしてくれると思ってたよ int/floatのつもりが実はint/intだったりとか怖いなぁ
>>55 の修正・拡張
#OffsetFrame…現在のフレームとは違うフレームの画像を表示する
# ofst 表示するフレームの位置(+1なら次のフレーム、-1なら前のフレーム)
# audio オーディオの同期(省略なら同期、偽なら非同期)
function OffsetFrame(clip clip, int ofst, bool "audio") {
audio = default(audio, true)
clip = ((0 < ofst)
\ ? clip.Trim(ofst,0)
\ :(ofst < 0)
\ ? clip.Loop((-ofst)+1, 0, 0)
\ : clip
\ )
clip = ((clip.HasAudio() && !audio)
\ ? clip.DelayAudio(Float(ofst) / clip.Framerate())
\ : clip
\ )
return clip
}
>>54 の修正・拡張
#for…繰り返し処理を行う
# start 値の初期値
# end 値の終了値
# step 刻み値
# filter 繰り返し分適応させるフィルタ(省略すると何もしません、“""”でも省略扱いです。)
# 繰り返しの値は“i”もしくは“crnt”で取得出来ます
# merge クリップ結合関数(省略すると最後に作成したクリップを返します、“""”でも省略扱いです。)
# 繰り返し途中に作成したクリップは早めに生成されたクリップが“c1”、
# 遅めに生成されたクリップが“c2”になります
# この2つのクリップを1つのクリップに結合します。
function for(clip clip, int start, int end, int step, string "filter", string "merge") {
filter = default(filter, "")
merge = default(merge, "")
merge = (("" != merge)? merge: "c1")
i = start
crnt = start
next = crnt + step
c1 = clip
c2 = (("" != filter)? Eval("clip." + filter): clip)
c2 = ((next < end) ? c2.for(next, end, step, filter, merge): c2)
return ((next < end)? Eval(merge): c1)
}
#FrameToStack…複数のフレームを1フレームに統合する # num 統合数 # horizontal 横に並べる(省略・偽なら縦並べ、真なら横並べ) function FrameToStack(clip clip, int num, bool "horizontal") { horizontal = default(horizontal, false) clip = clip.for(0, num, 1, "OffsetFrame(1)" \ , ((horizontal)? "StackHorizontal": "StackVertical") + "(c1, c2)") clip = clip.SelectEvery(num, 0) return clip }
#StackToFrame…1フレームに統合されたフレームを複数フレームに分離する # num 統合数 # horizontal 横に並べられている(省略・偽なら縦並べ、真なら横並べ) function StackToFrame(clip clip, int num, bool "horizontal") { horizontal = default(horizontal, false) width = ((!horizontal)? clip.Width(): clip.Width() / num) height = ((horizontal)? clip.Height(): clip.Height() / num) shiftx = ((horizontal)? width: 0) shifty = ((!horizontal)? height: 0) clip = clip.ChangeFPS(clip.FramerateNumerator() * num, clip.FramerateDenominator()) clip = clip.OffsetFrame(-num / 2) clip = clip.ScriptClip("offset = current_frame%"+string(num)+chr(13)+ \ "crop("+string(shiftx)+"*offset, "+string(shifty)+"*offset, "+string(width)+", "+string(height)+")"+chr(13)+ \ "AddBorders(0, 0, "+string(shiftx*(num-1))+", "+string(shifty*(num-1))+")") clip = clip.crop(0, 0, width, height) return clip }
#MTv…MTを用いたフレーム別マルチスレッドフィルタ適応 # filter 実行するフィルタ # threads スレッド数(省略なら2) # splitvertical 縦に分割する(省略・偽なら横分割、真なら縦分割) # # 既知の不具合 # 時間軸系フィルタは上手く動作しません # MTで使用出来ないフィルタは使用出来ません function MTv(clip clip, string filter, int "threads", bool "splitvertical") { threads = default(threads, 2) splitvertical = default(splitvertical, false) frame = clip.FrameCount() clip = clip.FrameToStack(threads, splitvertical) clip = clip.MT(filter, threads, 0, splitvertical) clip = clip.StackToFrame(threads, splitvertical) clip = clip.Trim(0, frame - 1) return clip }
#NoResizeEDIUpsizer…画面サイズを変更しないEDIUpsizer # 引数はEDIUpsizer準拠 function NoResizeEDIUpsizer(clip clip, int method, int window, float threshold4, float threshold8, float threshold16, int constraint, bool chroma, int cubic, int mvar) { clip = clip.Crop(0, 0, clip.Width() / 2, clip.Height() / 2) clip = clip.EDIUpsizer(method, window, threshold4, threshold8, threshold16, constraint, chroma, cubic, mvar) return clip }
#EDIUpsizerMt…EDIUpsizerのマルチスレッド対応 # 引数はEDIUpsizer準拠 # 以下追加引数 # threads スレッド数(省略なら2) function EDIUpsizerMt(clip clip, int "method", int "window", float "threshold4", float "threshold8", float "threshold16", int "constraint", bool "chroma", int "cubic", int "mvar", int "threads") { method = default(method, 7) window = default(window, 0) threshold4 = default(threshold4, 1000.0) threshold8 = default(threshold8, 2000.0) threshold16 = default(threshold16, 4000.0) constraint = default(constraint, 2) chroma = default(chroma, false) cubic = default(cubic, 2) mvar = default(mvar, 8) threads = default(threads, 2) clip = clip.AddBorders(0, 0, clip.Width(), clip.Height()) clip = clip.MTv("NoResizeEDIUpsizer("+string(method)+","+string(window)+","+ \ string(threshold4)+","+string(threshold8)+","+string(threshold16)+","+ \ string(constraint)+","+string(chroma)+","+string(cubic)+","+string(mvar)+")", threads) return clip }
EDIUpsizer() → EDIUpsizerMt(threads=4) EDIUpsizer(9, 0) → EDIUpsizerMt(9, 0, threads=4) 時間軸に依存しないフィルタなら殆どマルチスレッド対応出来そうな気がする。 まぁ、使わない訳だが…。
おお、早速使わせてもらいます
神ktkr!
ゴミばっかだな
と思ったらうは重いなぁ。メモリ釈迦食うね
メモリって・・・(・з・)
SetMTMode(2)で動いたりしないかなー試してみよ
てst
暇だったんで指定サイズ以内でPAR1:1にリサイズする為の関数を作ってみた ↓ここから function getResizeArguments(clip clip,int limit_width,int limit_height,int"par_width",int"par_height",int"align"){ function getResizeArguments_g(int i,int j){ j==0?i:getResizeArguments_g(j,i%j) } function getResizeArguments_w(int sw,int lw,int dw,int dh,int a){ th=(lw*dh+dw*a-1)/(dw*a)*a ln=(th*dw-lw*dh)*sw ld=2*th*dw g=getResizeArguments_g(ln,ld) ln=ln/g ld=ld/g sl="float("+string(ln)+")/float("+string(ld)+")" wn=sw*ld-2*ln g=getResizeArguments_g(wn,ld) sw="float("+string(wn/g)+")/float("+string(ld/g)+")" a=string(lw)+","+string(th) ln!=0?a+",src_left="+sl+",src_width="+sw:a } function getResizeArguments_h(int sh,int lh,int dw,int dh,int a){ tw=(lh*dw+dh*a-1)/(dh*a)*a tn=(tw*dh-lh*dw)*sh td=2*tw*dh g=getResizeArguments_g(tn,td) tn=tn/g td=td/g st="float("+string(tn)+")/float("+string(td)+")" hn=sh*td-2*tn g=getResizeArguments_g(hn,td) sh="float("+string(hn/g)+")/float("+string(td/g)+")" a=string(tw)+","+string(lh)
tn!=0?a+",src_top="+st+",src_height="+sh:a
}
sw=width(clip)
sh=height(clip)
pw=default(par_width,1)
ph=default(par_height,1)
a=default(align,16)
lw=limit_width/a*a
lh=limit_height/a*a
dw=pw*sw
dh=ph*sh
g=getResizeArguments_g(dw,dh)
dw=dw/g
dh=dh/g
lw*dh>lh*dw?getResizeArguments_h(sh,lh,dw,dh,a):getResizeArguments_w(sw,lw,dw,dh,a)
}
↑ここまで
引数について
clip
このクリップの横と縦をリサイズするつもりで計算します
limit_width,limit_height
横と縦の限界、limit_widthxlimit_height以内になるように計算します
par_width,par_height
clipのPARを指定できます(省略時1:1)
align
alignの倍数になる様に計算します(省略時16)
使い方
Eval("LanczosResize("+getResizeArguments(width,height,10,11)+")")
PAR10:11のクリップを16の倍数でPAR1:1になるように縮小、↓みたいな感じ
ttp://nagamochi.info/src/up0814.png
拡大に使うつもりで作ったんで縮小には向きません。
いただき
# 縦横を1倍から2倍までの間にアップサンプリングする関数。
# ニアレストネイバー法で縦横をそれぞれ4倍し離散コサイン変換したものを縮小。
# 要 AviSynth 2.57 YV12, プログレッシブ専用
# overlapped dct, proof of concept frequency lowpass and interpolator function
#
ttp://forum.doom9.org/showthread.php?t=121939 # アップサンプリングはこのスレからの引用。
# ratio: 0以上の整数。0 で target_width, target_height の値に拡大。デフォルト 0
# 1 で縦横をそれぞれ2倍に拡大。2 を指定するとアップサンプリングされたものを元の大きさに縮小。
# 3 以上のとき、 n を ratio の値としたとき、src_clip.width*2 * n-1/n, src_clip.height*2 * n-1/n が
# mod の倍数になるような値で自動で見つける。ピクセル比は保たれたままになる。
# 縦横を16の倍数にするとき、704*480 n=4, 720*480 n=3, 5, 6, 10, 15, 30 が 解。
# 720 x 480 のソースでの使用例:
# Crop(8, 0, -8, 0).DCTus2(1280, 720, sharpness=1.875, u64dct=false, warp=1.5, rx=1.2, ry=1.2, ratio=0) 正方ピクセル。
# DCTus2(sharpness=1.875, u64dct=false, warp=1.5, rx=1.2, ry=1.2, mod=16, ratio=5) ピクセル比は保たれたまま。
# いるもの。
# Import( PluginDir + "DeHalo_alpha.avs" ) #
ttp://forum.doom9.org/showthread.php?p=777956#post777956 # LoadPlugin( PluginDir + "Average.dll" ) #
ttp://forum.doom9.org/showthread.php?p=902012#post902012 # LoadPlugin( PluginDir + "aWarpSharp(Pruned).dll" )
# LoadPlugin( PluginDir + "DctFilter_test.dll" )
# LoadPlugin( PluginDir + "mt_masktools.dll" )
# LoadPlugin( PluginDir + "RepairSSE3.dll" )
# DctFilter_test.dll, dctlimit()
#
ttp://forum.doom9.org/showthread.php?p=953353#post953353
function DCTus2(clip clip, int "target_width", int "target_height", float "sharpness", bool "u64dct", float "warp", bool "rep", float "rx", \ float "ry", float "sharpness2", int "ratio", int "mod", float "shift_left", float "shift_top", bool "show") { target_width = default( target_width, clip.width*2 ) target_height = default( target_height, clip.height*2 ) u64dct = default( u64dct, false ) warp = default( warp, 1.5 ) rep = default( rep, true ) sharpness = default( sharpness, 1.875 ) sharpness2 = default( sharpness2, 1.126 ) rx = default( rx, 1.4 ) ry = default( ry, 1.4 ) ratio = default( ratio, 0 ) mod = default( mod, 16 ) shift_left = default( shift_left, 0.0 ) shift_top = default( shift_top, 0.0 ) show = default( show, false ) dx = int(round(clip.width / 16.0) * 16) - clip.width dy = int(round(clip.height / 16.0) * 16) - clip.height #clip.EDIUpsizer(method=0, chroma=false).EDIUpsizer(method=0, chroma=false) clip.PointResize(clip.width*4, clip.height*4) (dx + dy >= 1) ? AddBorders(dx*4, dy*4, 0, 0) : last dctlimit(dct2=sharpness, dct3=0, dct4=0, dct5=0, use64dct=u64dct, use8dct=true) PointResize(last.width/2, last.height/2) DeHalo_alpha(rx=rx, ry=ry, lowsens=0.0, highsens=0.0, ss=1.0) (rep == true) ? dctlimit(use64dct=u64dct, dct2=1+(sharpness/11.6), dct3=1+(sharpness/8.1), dct4=sharpness, \ dct5=sharpness2/8.1, dct6=sharpness2/11.6, dct7=sharpness2/16.1, dct8=sharpness2/23.1) \ : last (rep == true) ? DeHalo_alpha(rx=2.0, ry=2.0, lowsens=0.0, highsens=0.0, ss=1.0) : last
awarpsharp(depth=warp, cm=0, blurlevel=1) awarpsharp(depth=warp, cm=0, blurlevel=1) awarpsharp(depth=warp, cm=0, blurlevel=1) awarpsharp(depth=warp, cm=0, blurlevel=1) (dx >= 1) ? Crop(dx*4, 0, 0, 0) : last (dy >= 1) ? Crop(0, dy*4, 0, 0) : last Spline36Resize(last.width, last.height, shift_left, shift_top, last.width, last.height) MergeChroma(last, clip.Lanczos4Resize(clip.width*2, clip.height*2), 1) ratio = abs(ratio) ratio = (ratio > 0) ? abs( last.getRatio(-ratio, mod, mod) ) : ratio num = (ratio == 1) ? 1 : ratio - 1 (show == true) && (ratio != 0) ? Subtitle(string(num) + "/" + string(ratio) + " " + string(width*num/ratio) \ + " x " + string(height*num/ratio), x=32, y=64, size=32) : last return (ratio < 1) ? Spline36Resize(target_width, target_height) \ : Spline36Resize( clip.width*2 * num / ratio, clip.height*2 * num / ratio ) }
function getRatio(clip clip, int "ratio", int "mod_x", int "mod_y", int "t") { ratio = default( ratio, 2 ) mod_x = default( mod_x, 16 ) mod_y = default( mod_y, 16 ) t = default( t, Min(clip.width, clip.height) ) t = t - 1 num = (ratio > 0) ? ratio : abs(ratio) - 1 den = (ratio > 0) ? ratio - 1 : abs(ratio) W = clip.width * num H = clip.height * num rep = (W % den == 0) && (H % den == 0) && (W/den % mod_x == 0) && (H/den % mod_y == 0) \ ? ratio \ : ( (ratio > 0) ? ratio + 1 : ratio - 1 ) return (abs(ratio) < 2) || (t == 0) ? 1 \ : (rep != ratio) ? getRatio(clip, rep, mod_x, mod_y, t) : ratio } # AviSynth 2.58 Added Min()/Max() script functions. function Max(a, b){ return (a > b) ? a : b } function Min(a, b){ return (a < b) ? a : b }
>>226 間違っています。
以上。
はい次の方。
>>227 (dx >= 1) ? Crop(dx*4, 0, 0, 0) : last
(dy >= 1) ? Crop(0, dy*4, 0, 0) : last
を
(dx >= 1) ? Crop(dx*2, 0, 0, 0) : last
(dy >= 1) ? Crop(0, dy*2, 0, 0) : last
に変更
SevenFourThreeNR普通に実写でも使えるな もしかしてこれ最強のNRじゃね
SevenFourThreeNR使ってみたいけど素人な俺にはよくわかんないんだぜ ↓書式はこれでいいの? SevenFourThreeNRv2(clip c,bool "b0",bool "b1",int "i0",string "s0",int "i1",int "i2",\ string "s1",string "s2",int "i3",bool "b2",string "s3") んでデフォはこれ↓? b0=default(b0,true) b1=default(b1,true) i0=default(i0,0) s0=default(s0,"square") i1=default(i1,1) i2=default(i2,8) s1=default(s1," 4 3 / ^") s2=default(s2,"256") i3=default(i3,8) b2=default(b2,false) s3=default(s3,"square") だとしたらi2、i3とかデフォですごい強くかかってるんだね stringはどんなものがあるのかもわからんし デフォで超重いから軽いSevenFourThreeNRのほう使おうかとか思ったけどそっちはv2以上に説明無くてわけわからん 俺みたいな素人向けの、フィルタに入ってるreadmeみたいなの誰か作ってくれ
>>232 >161-162って>132と比べてそんなに重かったっけ?あんまり変わらなかったと思うけど・・
>132の方の引数についてちょっと書いてみる、>164とあわせて見て欲しいな
i0がv2のi2、i1がv2のi1、i2がv2のi3
sは元に戻す強さ"mt_merge(c0,c1,mt_lutxy(c0,c1,"x y - abs"+s,u=3,v=3),u=3,v=3)"c0がボケたクリップでc1は元のクリップ
デフォならmt_merge(c0,c1,mt_lutxy(c0,c1,"x y - abs 4 3 / ^",u=3,v=3),u=3,v=3)つまり(x*((x<y?y-x:x-y)^(4/3)>255?255:(x<y?y-x:x-y)^(4/3))+y*(256-((x<y?y-x:x-y)^(4/3)>255?255:(x<y?y-x:x-y)^(4/3))))/256
書いてて何のことか分からなくなったwww
ボケたクリップと元のクリップの差を元にどの程度復元するかの係数みたいなもの、v2ではmt_mergeやめてmt_lutxyだけでやってる
b0はアンシャープマスクの有無、v2のb1に近い
b1はb0がfalseならあまりい必要ない作業に関しての分岐
ぼかして戻して強調したクリップをぼかしてから強調したクリップの方に戻して、最後に大本のクリップの方に戻すかどうか、v2ではb1にまとめてたと思う
効果としてはSevenFourThreeNR(2,1,2," 8 5 / ^",true,false)ぐらいで十分だった気がする
ついでだから>162の訂正
i6=ceil(width(c)/i4)*i4
i7=ceil(height(c)/i5)*i5
↓
i6=(width(c)+i4-1)/i4*i4
i7=(height(c)+i5-1)/i5*i5
これ作ってた頃はjavascriptの所為でintとfloatがごっちゃになってました、多分>165もcropで拡大しようとした所為なんだろうなぁ
無知ってこわいね。
function ccSakura(clip clip,int target_width,int target_height,float"src_left",float"src_top",float"src_width",float"src_height",int"taps",bool"fast"){ function ccSakura_u(clip clip,int target_width,int target_height,float src_left,float src_top,float src_width,float src_height,int taps,bool fast){ bicubicresize(clip,target_width,target_height,1.,0.,src_left,src_top,src_width,src_height) lanczosresize(width(clip),height(clip),-src_left*float(target_width)/src_width,-src_top*float(target_height)/src_height,float(width(clip)*target_width)/src_width,float(height(clip)*target_height)/src_height,taps=taps) subtract(clip) subtract(clip,last) bicubicresize(target_width,target_height,1.,0.,src_left,src_top,src_width,src_height) align=isyuy2?2:isyv12?4:1 tmp_width=ceil(float(target_width*target_width)/src_width) tmp_width=isyuy2?(tmp_width+1)/2*2:tmp_width tmp_width=isyv12?(tmp_width+3)/4*4:tmp_width tmp_height=ceil(float(target_height*target_height)/src_height) tmp_height=isyv12?(tmp_height+1)/2*2:tmp_height fast?last:subtract(subtract(lanczosresize(bicubicresize(tmp_width,tmp_height,1.,0.),width,height,taps=taps),last)) } function ccSakura_h(clip clip,int target_width,float src_left,float src_width,int taps,bool fast){ float(target_width)>src_width?ccSakura_u(clip,target_width,height(clip),src_left,0.,src_width,float(height(clip)),taps,fast):lanczosresize(clip,target_width,height(clip),src_left,src_width=src_width,taps=taps) } function ccSakura_v(clip clip,int target_height,float src_top,float src_height,int taps,bool fast){ float(target_height)>src_height?ccSakura_u(clip,width(clip),target_height,0.,src_top,float(width(clip)),src_height,taps,fast):lanczosresize(clip,width(clip),target_height,src_top=src_top,src_height=src_height,taps=taps) } src_left=default(src_left,0.)
src_left=isfloat(src_left)?src_left:float(src_left)
src_top=default(src_top,0.)
src_top=isfloat(src_top)?src_top:float(src_top)
src_width=default(src_width,float(width(clip)))
src_width=isfloat(src_width)?src_width:float(src_width)
src_width=src_width<=0.?float(width(clip))-src_left+src_width:src_width
src_height=default(src_height,float(height(clip)))
src_height=isfloat(src_height)?src_height:float(src_height)
src_height=src_height<=0.?float(height(clip))-src_top+src_height:src_height
taps=default(taps,3)
fast=default(fast,false)
vf=float(target_width)*src_height<float(target_height)*src_width
vf?ccSakura_v(clip,target_height,src_top,src_height,taps,fast):ccSakura_h(clip,target_width,src_left,src_width,taps,fast)
vf?ccSakura_h(target_width,src_left,src_width,taps,fast):ccSakura_v(target_height,src_top,src_height,taps,fast)
}
synthの内蔵フィルタだけのシンプルなアプコンスクリプト
縮小はただのlanczosresizeで、拡大はbicubicとlanczosのコンボ
要約すると
bicubicresize(subtract(subtract(lanczosresize(bicubicresize(2*width,2*height,1,0),width,height),last)),2*width,2*height,1,0)
subtract(subtract(lanczosresize(bicubicresize(2*width,2*height,1,0),width,height),last))#fast=trueで省略
とりあえずサンプル
ソース
ttp://nagamochi.info/src/up1845.png ccSakura(1600,1200)
ttp://nagamochi.info/src/up1846.png nnedi+lanczos3
ttp://nagamochi.info/src/up1847.png eedi2+lanczos3
ttp://nagamochi.info/src/up1848.png まぁ、軽いだけで一番汚いです
>>233 両方デフォでかけたavs2種類をVDMで読み込むと、v2のほうは固まったかと思うくらいロード時間長かったからこっちの方はテラオモスなのかなーと
半分以上ワケワカランですけど参考にしてガンガリマス、サンクス
# frameを、frame, source_frame1, source_frame2 の3frameをMergeしたものと入れ替える。
# weight, weight2, weight3 がそれぞれを混ぜる割合。weight + weight1 + weight2 = 1.0 と必ずならなければいけない。
# source_frame2 がないときは weight1 は必要なく weightのみ設定する。このときの weightの値はframe に対する frame1 の値。
# MergeFrame(43275, 3274, weight=0.0) # 43275 のみが表示。逆にweight=1.0 とすると 3274のみが表示、FreezeFrame(43275, 43275, 3274) と同じ動作。
# MergeFrame(10, 100, 1000, 0.0, 0.5, 0.5) frame 10を、100 と 1000 をMergeしたものと入れ替える。
# 要 Average.dll,
http://forum.doom9.org/showthread.php?p=902012#post902012 function MergeFrame(clip clp, int frame, int source_frame1, int "source_frame2", float "weight",
\ float "weight2", float "weight3", int "field", int "source_field", string "pre", string "post")
{
field = default( field, 3 )
source_field = default( source_field, 3 )
pre = default( pre, "nul" )
post = default( post, "nul" )
source_frame2 = default( source_frame2, frame )
weight = default( weight, (source_frame2 == frame) ? 0.5 : 0.0 )
weight2 = default( weight2, (source_frame2 == frame) ? 1.0 - weight : 0.5 )
weight3 = default( weight3, (source_frame2 == frame) ? 0.0 : 0.5 )
(source_frame2 != frame) ? Assert(weight + weight2 + weight3 == 1.0, "weight + weight2 + weight3 should be equal to 1.0") : NOP
c0 = Eval("clp." + pre) c1 = (frame != 1) ? clp.Trim(0, frame - 1) : clp.Trim(0, -1) c2 = Merge(c0.Trim(frame, (frame != 0) ? frame : -1)._SelectField(field, weight2), \ c0.Trim(source_frame1, (source_frame1 != 0) ? source_frame1 : -1)._SelectField(source_field, weight3), weight) c2 = (source_frame2 == frame) ? c2 \ : Average(clp.Trim(frame, (frame != 0) ? frame : -1), weight, \ clp.Trim(source_frame1, (source_frame1 != 0) ? source_frame1 : -1), weight2, \ clp.Trim(source_frame2, (source_frame2 != 0) ? source_frame2 : -1), weight3, \ clp.Trim(0, -1), 0.0) c2 = Eval("c2." + post) c = (frame != 0) ? c1 + c2 : c2 (frame == clp.Framecount - 1) ? c : c + clp.Trim(frame + 1, 0) return clp.HasAudio ? AudioDubEx(last, clp.KillVideo) : last }
# frameを、そのframeのEven,Odd fieldの高さを2倍にしてMergeしたものと入れ替える。 function MergeField(clip clp, int "frame", float "weight", string "pre", string "post") { frame = default( frame, clp.Framecount - 1 ) weight = default( weight, 0.5 ) pre = default( pre, "nul" ) post = default( post, "nul" ) return clp.MergeFrame(frame, frame, weight=0.0, field=2, source_field=3, pre=pre, post=post, weight2=weight) } # frameを、そのframeの片fieldの高さを2倍にしたものと入れ替える。 # field: 0 Odd, 1 Even function SelectField(clip clp, int "frame", int "field", string "pre", string "post") { frame = default( frame, clp.Framecount - 1 ) field = default( field, 0) pre = default( pre, "nul" ) post = default( post, "nul" ) return clp.MergeFrame(frame, frame, weight=0.0, field=field, source_field=3, pre=pre, post=post) }
# source_field の値によって frame を source_frame と入れ替える。 # 0: Odd field, 1: Even field, 2: Odd と EvenをMerge, 3: source_frame デフォルト 3 function FreezeField(clip clp, int frame, int source_frame, int "source_field", float "weight", string "pre", string "post") { source_field = default( source_field, 3 ) weight = default( weight, 0.5 ) pre = default( pre, "nul" ) post = default( post, "nul" ) return clp.MergeFrame(frame, source_frame, weight=1.0, field=3, source_field=source_field, pre=pre, post=post, weight3=weight) } function eediMerge(clip clp, float "weight") { weight = default( weight, 0.5 ) clp.SeparateFields.EEDI2(field=-2) #, mthresh=0, lthresh=0, vthresh=0, estr=0, dstr=0, maxd=24, pp=3) Merge(SelectEven, SelectOdd, weight) #LimitedSharpenFaster(Smode=3, strength=40) }
function _SelectField(clip clp, int "field", float "weight") { field = default( field, 0 ) weight = default( weight, 0.5 ) c = clp.SeparateFields.EEDI2(field=-2) # ここは好きなように変更する。 (field == 1) ? c.SelectEven : c.SelectOdd #LimitedSharpenFaster(Smode=3, strength=20) clp.GetParity ? AssumeTFF : NOP return (field == 3) ? clp \ : (field == 2) ? Merge(c.SelectEven, c.SelectOdd, weight) \ : clp.GetParity ? AssumeTFF \ : last } function nul(clip c) { return c }
>>242 の clp.GetParity ? AssumeTFF : NOP はいらない。
ImageSource("Clipboard%02d.png", 1, 4, 29.97).ForLoop function ForLoop(clip clip, int "i", clip "outclip"){ i=default(i, 0) clip.trim(i, -1).loop(300) i>0 ? outclip++last : last i<clip.framecount-1 ? ForLoop(clip, i+1, last) : last } 0.1fps等は支障がある場合があるようなので、 png1枚に付き約10秒の動画を作るスクリプトを書いたのですが、 もう少しすっきり出来ないかと思うのですが、 (i>0 ? outclip : NUL)++clip.trim(i, -1).loop(300)みたいに書けるNULクリップみたいなものは存在しないでしょうか?
ImageSource("Clipboard%02d.png", 0, 299) #last++ImageSource(〜 AssumeFPS(30,1) 素直にこんな感じじゃだめなの?
ttp://ja.doukaku.org/165/ これ、やってみた。
# DF ドロップフレーム(1分間に2フレーム、カウントをとばす。ただし、10分間に一回は行わない)
# Current_Frame ≡ 0 (mod 1800)
# Current_Frame ≡ 1 (mod 1800)
# のときはフレームのカウントをとばす。
# 1,2, 3,4... --> 1,2, 5,6...
# ただし、
# Current_Frame ≡ 0 (mod 18000)
# Current_Frame ≡ 1 (mod 18000)
# のときはフレームをカウントをとばさない。
# 10分間のフレーム数
# 1800 + 1798 * 9 = 17982
# フレームレート
# 30 * 17982 / 18000 = 30 * 999 / 1000 = 2997 / 100 = 29.97
# 24 * 17982 / 18000 = 24 * 999 / 1000 = 2997 / 125 = 23.976
# これは放送用の編集ために用いるドロップフレームタイムコードから計算上出た
# 結果であってNTSC color(30000/1001)のフレームレートではない。
function ShowDropFrame(clip clp, bool "drop", float "fps", int "x", int "y") { global ShowDropFrame_drop = default( drop, true ) global ShowDropFrame_fps = default( fps, 30.0 ) global ShowDropFrame_x = default( x, 0 ) global ShowDropFrame_y = default( y, 0 ) return clp.ScriptClip("_ShowDropFrame(Current_Frame, ShowDropFrame_drop, \ ShowDropFrame_fps, ShowDropFrame_x, ShowDropFrame_y)") } function _ShowDropFrame(clip clp, int n, bool drop, float fps, int x, int y) { Current_Frame = n n = (drop == true) ? n + n / 1800 * 2 - n / 18000 * 2 : Current_Frame time = (drop == true) ? n / float(fps) \ : float(Current_Frame * clp.FramerateDenominator) / float(clp.FramerateNumerator) time_h = int(time) / 3600 time_m = ( int(time) - (time_h * 3600) ) / 60 time_s = int(time) - (time_h * 3600) - (time_m * 60) time_ms = Round( Frac(time) * 1000 ) hh = (time_h < 10) ? "0" + string(time_h) : string(time_h) mm = (time_m < 10) ? "0" + string(time_m) : string(time_m) ss = (time_s < 10) ? "0" + string(time_s) : string(time_s) ms = (time_ms < 10) ? "00" + string(time_ms) \ : (time_ms < 100) ? "0" + string(time_ms) : string(time_ms) return clp.Subtitle(hh + ":" + mm + ":" + ss + "." + ms + ";" + string(n % 30) \ + " " + string(n), x=ShowDropFrame_x, y=ShowDropFrame_y) # \ .Subtitle(string(Current_Frame) + " diff " + string(n / 1800 * 2 - n / 18000 * 2), x=x, y=y+16) }
>>245 pngを大量にコピーするのは避けたいので
<<247を01frameだけをフレームカウントスキップするように修正。 function _ShowDropFrame(clip clp, int n, bool drop, float fps, int x, int y) { Current_Frame = n n0 = (drop == true) ? n + n / 1800 * 2 - n / 18000 * 2 : n n1 = (drop == true) ? n + n0 / 1800 * 2 - n0 / 18000 * 2 : n0 time = (drop == true) ? n1 / float(fps) : n / float(clp.Framerate) time_h = int(time) / 3600 time_m = (int(time) - (time_h * 3600)) / 60 time_s = int(time) - (time_h * 3600) - (time_m * 60) time_ms = round(frac(time) * 1000) hh = (time_h < 10) ? "0" + string(time_h) : string(time_h) mm = (time_m < 10) ? "0" + string(time_m) : string(time_m) ss = (time_s < 10) ? "0" + string(time_s) : string(time_s) ms = (time_ms < 10) ? "00" + string(time_ms) \ : (time_ms < 100) ? "0" + string(time_ms) : string(time_ms) return clp.Subtitle(hh + ":" + mm + ":" + ss + "." + ms + ";" + string(n1 % round(fps)) \ + " " + string(n1), x=ShowDropFrame_x, y=ShowDropFrame_y) # \ .Subtitle(string(Current_Frame) + " diff " + string(n1 - Current_Frame), x=x, y=y+16) }
単純なループ関数で、
>>54 を簡易化したもの
n:ループ回数
filter:ループさせるフィルタ
start:ループさせるためだけの引数。変更してはいけない
function LoopFilter(clip clip, int "n", string "filter", int "start"){
n = default(n, 1)
filter = default(filter, "")
start = default(start, 0)
next = start+1
c = ((next <= n)? Eval("clip." + filter):clip)
return ((next >= n)? c: LoopFilter(c,n,filter,next))
}
書いてから気づいたけど、
>>54 の修正版があったのか…
まぁいいや
>>250 簡易と言う割には無駄が多過ぐる件
function LoopFilter(clip clip, int n, string filter){return n>0 ? LoopFilter(Eval("clip." + filter), n-1, filter) : clip}
使用例: LoopFilter(3, """Layer(clip.ReduceBy2, "add", 255, clip.width/2)""")
WikiのShowTimeCodeを見ていてミリ秒等の算出が気になったので、 frametime=current_frame/FrameRate #秒単位の入力値(元:mod_time) ms_digit=3 #秒未満の桁数 ms=string(round(frametime*pow(10,ms_digit))%int(pow(10,ms_digit)), "%0"+string(ms_digit)+".0f") 元: # Calculate mili-seconds and convert to string. ms = RightStr(String(mod_time), 6) ms1 = Int(Value(LeftStr(ms, ms_digit))) ms2 = MidStr(ms, ms_digit+1, 1) ms2 = Round(Value(ms2)/10) ms = ms1 + ms2 ms = ((ms_digit==3)&&(ms<10)) ? "00" + String(ms) : \ (((ms_digit==3)&&(ms<100))||((ms_digit==2)&&(ms<10))) ? "0" + String(ms) : \ String(ms) それから、ms_digit=1、current_frame=29、FrameRate=29.97の場合等に、00:00:00:10と桁が狂うので、 int_time = round(frametime-value(ms)/pow(10,ms_digit))
<< 246 の訂正。 30fps以外 (奇数 * 1000) frame をスキップ Current_Frame' ≡ 0, 1 (mod 1000) のときはフレームのカウントをとばす。 Current_Frame' ≡ 0, 1 (mod 2000) のときはフレームのカウントをとばさない。 10000 frameのフレーム数 5000 + 998 * 5 = 9990 フレームレート 24 * 9990 / 10000 = 24 * 999 / 1000 = 2997 / 125 = 23.976 d1 = (round(fps) == 30) ? 1800 : 1000 d2 = (round(fps) == 30) ? 18000 : 2000 n0 = (drop == true) && (real == false) ? n + n / d1 * 2 - n / d2 * 2 : n n1 = (drop == true) && (real == false) ? n + n0 / d1 * 2 - n0 / d2 * 2 : n0
4コマ撮りを除く3:2 プルダウンの値を見るスクリプト。要 TIVTC.dll, VirtualDub 3:2 プルダウンの4コマ撮りは30p制作の5コマ撮りと同値。すべてのフレームで縞なしとなる。 オプション: int "display" ShowCombedTIVTCのdisplayと同じ。5 にすると、ShowCombedTIVTCの表示無し。 使い方: VirtualDubでスクリプトを読み込んで、周期を調べたいフレーム上で F2 key で VirtualDubを 更新。文字が水色に変わり そこを FrameNumber 0 として周期を見ることが出来る。 尚、マイナス方向に count を進めても SelectEvery の値を得る。 その場合、F2で更新した Frameから5の倍数で区切ったときの値。 SelectEvery(n, a,b,c...) は frame1 ≡ a (mod n), frame2 ≡ b (mod n), ... と定義することが出来る。 n, n+1 に縞 FrameNumber ≡ n (mod 5) SelectEvery( 5, 2n + 3, 2n + 1 ) SelectEvery( 5, 2n + 1, 2n + 4 ) SelectEvery( 5, 2n - 2, 2n - 4 ) SelectEvery( 5, 2n - 4, 2n - 1 ) 3:2 プルダウンされたもののframeを 5周期ずつ見たときのまとめ a1,a2,...an は 10進数でのFrameNumber, nは そのFrameNumberの mod 5 での値。 (34 xor 40) or (34 and 40, |a3-a0|>2) or 2コマずつ同じ絵で4のみに縞 or すべてのframeが縞無しで5コマずつ同じ絵で1,2が互いに違う絵 DoubleWeave.SelectEvery(5, 2,4) (40 xor 01) or (40 and 01, |a4-a1|>2) or 2コマずつ同じ絵で0のみに縞 or すべてのframeが縞無しで5コマずつ同じ絵で2,3が互いに違う絵 DoubleWeave.SelectEvery(5, 1,4) (01 xor 12) or (01 and 12, |a0-a2|>2) or 2コマずつ同じ絵で1のみに縞 or すべてのframeが縞無しで5コマずつ同じ絵で3,4が互いに違う絵 DoubleWeave.SelectEvery(5, 1,3) (12 xor 23) or (12 and 23, |a1-a3|>2) or 2コマずつ同じ絵で2のみに縞 or すべてのframeが縞無しで5コマずつ同じ絵で4,0が互いに違う絵 DoubleWeave.SelectEvery(5, 0,3) (23 xor 34) or (23 and 34, |a2-a4|>2) or 2コマずつ同じ絵で3のみに縞 or すべてのframeが縞無しで5コマずつ同じ絵で0,1が互いに違う絵 DoubleWeave.SelectEvery(5, 0,2) 2コマ撮りは3つ選べるうちの中心のみ記載。2コマずつ同じ絵で2のみに縞 だと、(5, 1,3) (5, 0,3) (5, 0,2)
function ShowPulldown(clip clp, int "display") { global ShowPulldown_Start = -1 global ShowPulldown_Comb = -1 global ShowPulldown_koma = -1 global ShowPulldown_count = -1 global ShowPulldown_60i = -1 global ShowPulldown_display = default( display, 2 ) return clp.ScriptClip("_ShowPulldown(Current_Frame, ShowPulldown_display)") } function _ShowPulldown(clip clp, int n, int display) { Current_Frame = n global ShowPulldown_Start = (ShowPulldown_Start == -1) ? n : ShowPulldown_Start comb = clp.IsCombedTIVTC(cthresh=13, chroma=false, MI=128, blockx=32, blocky=32) function toMOD5(n) { return (n >= 0) ? n % 5 : ( (n % 5) + 5 ) % 5 } m = n - ShowPulldown_Start i = toMOD5(m) a = (comb == true) ? toMOD5( 2 * i + 1 ) : ShowPulldown_Comb b = toMOD5( a + 3 ) global ShowPulldown_Comb = a koma = (comb == true) && (ShowPulldown_count == 0) ? 1 \ : (comb == true) && (ShowPulldown_count == 4) ? 2 \ : (comb == true) && (ShowPulldown_count == 10) ? 3 \ : (comb == true) && (ShowPulldown_count == 14) ? 6 \ : ShowPulldown_koma
global ShowPulldown_koma = koma global ShowPulldown_count = (comb == false) ? ShowPulldown_count + 1 : 0 global ShowPulldown_60i = (comb == true) ? ShowPulldown_60i + 1 : 0 function _Max(a, b){ (a > b) ? a : b } function _Min(a, b){ (a < b) ? a : b } function n2s(n){ return (n == -1) ? "--" : string(n) } pd = (a != -1) ? string(_Min(a, b)) + "," + string(_Max(a, b)) : "2, 0" pd = (pd != "2, 0") ? "5, " + pd : pd pd = string(ShowPulldown_Start) + " - " + string(n) + " " + string(m) \ + " ≡ " + string(i) + " " + "SelectEvery(" + pd + ")" \ + " " + ( (ShowPulldown_60i > 2) ? " 60i " : (ShowPulldown_count > 15) \ ? " 30p " : " " + n2s(koma) + "コマ撮り " ) + string(ShowPulldown_count) y = (display < 5) ? 80 : 0 (display < 5) ? clp.ShowCombedTIVTC(cthresh=13, chroma=false, MI=128, blockx=32, blocky=32, display=display) : clp return Subtitle(pd, x=0, y=y, text_color=(m==0)?$00FFFF:$E0FFFF, font="MS_Gothic") }
そろそろこのスレのまとめみたいの作ったほうがいいんじゃね もしくはAvisynth wikiのユーザー定義関数の項目に記述
259 :
にーやん :2008/03/22(土) 01:14:17 ID:Hzyg/olQ
もしAviSynth Wikiのユーザー定義関数のページに追加されるのであれば、雛型として「ユーザー定義関数投稿用テンプレート」を利用してください。
ユーザー定義関数のページに使用手順を書いておきました。
多少はページ作成の助けになるかと思います。
あるいは、具体的にどれを追加するのかを指定していただけたら、私の方でページを作成してもかまいません。
新しくまとめサイトを作られるのなら、そちらにおまかせします。
>>253 修正ありがとうございます。
253さんの修正を取り込んだものを、さきほどAviSynth Wikiのユーザー定義関数に追加しました。
260 :
名無しさん@編集中 :2008/03/22(土) 04:04:34 ID:0CF92uOe
#UnsharpResize…アンシャープリサイズ # width 横幅 # height 縦幅 # sharp アンシャープ係数(弱 0.0 ← 1.0 → 2.0 強) # (省略なら1.0) function UnsharpResize(clip clip, int width, int height, float "sharp") { sharp = default(sharp, 1.0) sharp = ((sharp < 0.0)? 0.0: ((2.0 < sharp)? 2.0: sharp)) bicubic = ((1.0 < sharp)? 1.0: sharp) gauss = 10.0 - 9.0 * ((sharp < 1.0)? 0.0: sharp - 1.0) function SubtractClip(clip clip, clip sub) { return subtract(clip, subtract(sub, clip)) } result = clip.LanczosResize(width, height, taps=16) result = ((0.0 < bicubic) \ ? result.SubtractClip(clip.BicubicResize(width, height, b=bicubic, c=(1.0 - bicubic) / 2.0)) \ : result \ ) result = ((gauss < 10.0) \ ? result.SubtractClip(clip.GaussResize(width, height, p=gauss)) \ : result \ ) return result }
261 :
名無しさん@編集中 :2008/03/22(土) 04:18:22 ID:0CF92uOe
>>255 書き間違い。
×3:2 プルダウンされたもののframeを 5周期ずつ
○ 3:2 プルダウンされたもののframeを 5コマずつ
>>244 NullClip つくってみた。
# 使用例:
src = ImageSource("./test.bmp", 1, 4, 29.97).ConvertToYUY2 # YUY2, 720*480, 29.97fps, no audio
#return blankclip(length=0) # RGB32, 640*480, 24.0fps, audio mono
#return blankclip(length=0).toPixelTypeOf(src) # YUY2, 640*480, 24.0fps, audio mono
#return NullClip(src) # YUY2, 720*480, 29.97fps, no audio
return src.ForLoop # YUY2, 720*480, 29.97fps, no audio
function ForLoop(clip clip, int "i", clip "outclip"){
i=default(i, 0)
(i>0 ? outclip : NullClip(clip))++clip.trim(i, -1).loop(300)
i<clip.framecount-1 ? ForLoop(clip, i+1, last) : last
}
### {{{ NullClip # 要 AviSynth v2.56以上 # RGB24, RGB32, YUY2 or YV12 # 上記以外の色空間はエラー。 # srcに audioがある場合は 1ch(mono) または 2ch(stereo) でなければならない。 # 6ch などは KillAudio しておく。 function NullClip(clip src) { return src.toBlankClip } # srcの width, height, pixel_type, fps, audio と同じ FrameCountが lengthの BlankClipを生成する。 function toBlankClip(clip src, int "length") { length = default( length, 0 ) return (src.hasAudio == false) \ ? BlankClip( length=length, width=src.width, height=src.height, pixel_type=PixelTypeOf(src), fps=src.Framerate ).KillAudio \ : BlankClip( length=length, width=src.width, height=src.height, pixel_type=PixelTypeOf(src), \ fps=src.Framerate, audio_rate=src.Audiorate, stereo=(src.Audiochannels < 2) ? false : true ) }
# clpの色空間を srcの色空間と同じにする。 function toPixelTypeOf(clip clp, clip src) { Eval( "clp.ConvertTo" + PixelTypeOf(src) ) } function PixelTypeOf(clip clp) { return clp.IsYV12 ? "YV12" \ : clp.IsYUY2 ? "YUY2" \ : clp.IsRGB24 ? "RGB24" \ : clp.IsRGB32 ? "RGB32" \ : clp.IsRGB ? "RGB" \ : nop }
>>262 長さ0のBlankClipを作れるの知りませんでした。
(i>0 ? outclip : clip.Nul)++clip.trim(i, -1).loop(300)
function Nul(clip c, int "inp_length"){
inp_length=default(inp_length, 0)
BlankClip(inp_length, c.width, c.height, c.PixelTypeOf, c.FramerateNumerator, c.FramerateDenominator, c.audiorate, c.Audiochannels==2)
Return c.HasAudio ? last : KillAudio
}
FramerateDenominatorも設定しないと上手く行かない動画が
>>265 見てKillAudioなくてもいいということに気づいた。
>>263 を変更。
# srcの width, height, pixel_type, fps, audio と同じ FrameCountが lengthの BlankClipを生成する。
# BlankClip: audio_rate=0 で no audio
# Audiorate(), Audiochannels(): 無音クリップの場合、出力値は 0。
function toBlankClip(clip src, int "length")
{
length = default( length, 0 )
return BlankClip( length=length, width=src.width, height=src.height, pixel_type=PixelTypeOf(src), fps=src.FramerateNumerator,
\ fps_denominator=src.FramerateDenominator, audio_rate=src.Audiorate, stereo=(src.Audiochannels < 2) ? false : true )
}
#クリップ“src”と同様なBlankClipを作成する。 BlankClip(src) #もしくは src.BlankClip() #クリップ“src”と同様な“length”フレームのBlankClipを作成する。 BlankClip(src, length) #もしくは src.BlankClip(length) #クリップ“src”と同様な“600”フレームの、青一色のクリップを作成する。 BlankClip(src, 600, color=$0000FF) #もしくは src.BlankClip(600, color=$0000FF)
function nnediresize(clip clip,int target_width,int target_height,float"src_left",float"src_top",float"src_width",float"src_height",int"taps"){a=default(src_left,0.)chr(13)a=isfloat(a)?a:float(a) b=default(src_top,0.)chr(13)b=isfloat(b)?b:float(b)chr(13)c=float(width(clip))chr(13)d=default(src_width,c)chr(13)d=isfloat(d)?d:float(d)d=d<=0.?c-a+d:d chr(13)c=float(height(clip))chr(13)e=default(\ src_height,c)chr(13)e=isfloat(e)?e:float(e)chr(13)e=e<=0.?c-b+e:e chr(13)c=default(taps,3)function nnediresize_(clip a,int b,int c,float d,float e,float f,float g,int h,float i,float j){k=float(b) l=float(c)function nnediresize__(clip a,int b,int c,float d,float e,float f,float g,int h,float i,float j){k=lanczosresize(a,b,c,d+i,e+j,f,g,h)chr(13)l=(width(a)+7)/8*8chr(13)m=(height(a)+3)/4*4 pointresize(a,l,m,0,0,l,m)chr(13)n=(b+7)/8*8chr(13)o=(c+3)/4*4chr(13)f=f+float(n-b)*f/float(b)chr(13)g=g+float(o-c)*g/float(c)chr(13)ytouv(lanczosresize(utoy,n/2,o/2,d/2.+i,e/2.+j,f/2.,g/2.,h),\ lanczosresize(vtoy,n/2,o/2,d/2.+i,e/2.+j,f/2.,g/2.,h))chr(13)mergechroma(k,pointresize(b,c,0.,0.,float(b),float(c)))}k>f||l>g?k*g<l*f?nnediresize_(nnedi(a,0,true),b,c,d,2.*e,f,2.*g,h,i,2.*j+.5):\ nnediresize_(turnleft(nnedi(turnright(a),0,true)),b,c,2.*d,e,2.*f,g,h,2.*i+.5,j):isyv12(a)?nnediresize__(a,b,c,d,e,f,g,h,i,j):lanczosresize(a,b,c,d+i,e+j,f,g,h)}nnediresize_(clip,target_width,\ target_height,a,b,d,e,c,0.,0.)} 誰も使ってないと思うけど、ミスに気づいちゃったんで訂正 YV12の時YとUVでずらす値を変えるようにしました。
そんな事はありませぬ。 乙であります!
function nnediresize(clip clip,int target_width,int target_height,float"src_left",float"src_top",float"src_width",float"src_height",int"taps"){a=default(src_left,0.)a=isfloat(a)?a:float(a)b=default(\ src_top,0.)b=isfloat(b)?b:float(b)c=float(width(clip))d=default(src_width,c)d=isfloat(d)?d:float(d)d=d<=0.?c-a+d:d c=float(height(clip))e=default(src_height,c)e=isfloat(e)?e:float(e)e=e<=0.?c-b+e:e c=default(taps,3)function nnediresize_(clip a,int b,int c,float d,float e,float f,float g,int h,bool i,bool j){k=float(b)l=float(c)function nnediresize__(clip a,int b,int c,float d,float e,float f,\ float g,int h,float i,float j){k=lanczosresize(a,b,c,d+i,e+j,f,g,h)d=d/2.+i e=e/2.+j i=(width(a)+7)/8*8j=(height(a)+3)/4*4pointresize(a,i,j,0,0,i,j)a=(b+7)/8*8i=(c+3)/4*4f=(f+float(a-b)*f/float(b))/\ 2.g=(g+float(i-c)*g/float(c))/2.a=a/2i=i/2mergechroma(k,crop(ytouv(lanczosresize(utoy,a,i,d,e,f,g,h),lanczosresize(vtoy,a,i,d,e,f,g,h)),0,0,b,c))}k>f||l>g?k*g<l*f?nnediresize_(nnedi(a,j?1:0,true),b,\ c,d,2.*e,f,2.*g,h,i,true):nnediresize_(turnleft(nnedi(turnright(a),i?1:0,true)),b,c,2.*d,e,2.*f,g,h,true,j):isyv12(a)?nnediresize__(a,b,c,d,e,f,g,h,i?.5:0.,j?.5:0.):lanczosresize(a,b,c,d+(i?.5:0.),e\ +(j?.5:0.),f,g,h)}nnediresize_(clip,target_width,target_height,a,b,d,e,c,false,false)} 早速ですいませんがチョットだけ処理を変えてみました 体感できるとは思いませんが計算量は減ってるはず・・・ ところで皆様は縮小って何使ってます? 縮小だけならspline64とかblackmanよりlanczosの方が良さそうだと思って↑ではlanczos使っていますが もっと凄いのがあれば教えていただけないでしょうか?よろs(ry 改行ってあまり必要なかったんだね まだまだ使えてなかったよ、AviSynth
>>269 そう仰ってて頂けると助かります、これからもよr(ry
### {{{ TrueTears # メイン画面とワイプの周期が異なるときの逆テレシネ用。 # x, y, w, h: 座標 (x, y) から 幅 w, 高さ h の範囲に フィルター string "top" を掛ける。 # 上記の範囲外にはフィルター string "bottom" を掛ける。 # bright: 0 以外の数値を指定すると "top" の範囲外に Tweakの brightが適用される。範囲特定用。YUY2, YV12のみ。 # show: "top" の部分だけ表示する。 # interlaced: YV12 のとき、縦の解像度が 4の倍数でないとき警告を出す。デフォルト true function TrueTears(clip clp, int "x", int "y", int "w", int "h", string "top", string "bottom", \ string "pre", float "bright", bool "show", bool "interlaced") { x = default( x, 0 ) y = default( y, 0 ) w = default( w, clp.width ) h = default( h, clp.height ) top = default( top, "nul" ) pre = default( pre, "nul" ) bright = default( bright, 0 ) show = default( show, false ) interlaced = default( interlaced, true ) bottom = default( bottom, "nul" ) bottom = (bright != 0) ? bottom + ".Tweak(bright=" + string(bright) + ")" : bottom
x_end = x + w y_end = y + h x_end = (x_end >= clp.width) ? clp.width : x_end y_end = (y_end >= clp.Height) ? clp.Height : y_end (interlaced == true) && clp.isYV12 ? Assert(y % 4 == 0, "TrueTears: IsYV12 && (y % 4 == 0)") : NOP (interlaced == true) && clp.isYV12 ? Assert(h % 4 == 0, "TrueTears: IsYV12 && (h % 4 == 0)") : NOP TTx = "TrueTears_x(start=" + string(x) + ", end=" + string(x_end) + ", filter=" + chr34 + top + chr34 \ + ", filter2=" + chr34 + bottom + chr34 + ", pre=" + chr34 + pre + chr34 + ", show=" + string(show) + ")" TTy = "TrueTears_y(start=" + string(y) + ", end=" + string(y_end) + ", filter=" + chr34 + top + chr34 \ + ", filter2=" + chr34 + bottom + chr34 + ", pre=" + chr34 + pre + chr34 + ", show=" + string(show) + ")" #return clp.TrueTears_Y(start=y, end=y_end, filter=TTx, filter2=bottom, pre=pre, show=show) return clp.TrueTears_X(start=x, end=x_end, filter=TTy, filter2=bottom, pre=pre, show=show) } function TrueTears_X(clip clp, int "start", int "end", string "filter", \ string "filter2", string "pre", bool "show") { clp2 = Eval("clp." + filter2) c1 = (start != 0) ? clp2.Crop( 0, 0, -(clp.width - start), -0) : nop c2 = Eval("clp." + pre + ".Crop( start, 0, -(clp.width - end), -0 ) " + filter) c3 = (end < clp.width) ? clp2.Crop( end, 0, -0, -0) : nop c2 = (c2.Framecount > clp2.FrameCount) ? c2.DeleteFrame(lastFrameOf(clp2)) \ : (c2.Framecount < clp2.FrameCount) ? c2.DuplicateFrame(lastFrameOf(clp2)) : c2 c = (show == false) ? ( (start == 0) ? c2 : StackHorizontal(c1, c2) ) : nop return (show == true) ? c2 : (end >= clp.width) ? c : StackHorizontal(c, c3) }
function TrueTears_Y(clip clp, int "start", int "end", string "filter",
\ string "filter2", string "pre", bool "show")
{
clp2 = Eval("clp." + filter2)
c1 = (start != 0) ? clp2.Crop( 0, 0, -0, -(clp.Height - start) ) : nop
c2 = Eval("clp." + pre + ".Crop( 0, start, -0, -(clp.Height - end) ) " + filter)
c3 = (end < clp.Height) ? clp2.Crop( 0, end, -0, -0) : nop
c2 = (c2.Framecount > clp2.FrameCount) ? c2.DeleteFrame(lastFrameOf(clp2))
\ : (c2.Framecount < clp2.FrameCount) ? c2.DuplicateFrame(lastFrameOf(clp2)) : c2
c = (show == false) ? ( (start == 0) ? c2 : StackVertical(c1, c2) ) : nop
return (show == true) ? c2 : (end >= clp.Height) ? c : StackVertical(c, c3)
}
function NulClip(clip src) { return src.BlankClip(length=0) } #
>>267 氏、Thanks.
function toParityOf(clip clp, clip src) { return src.GetParity ? clp.AssumeTFF : clp.AssumeBFF }
function toFramerateOf(clip clp, clip src) { return clp.AssumeFPS(src.Framerate) }
function lastFrameOf(clip clp) { return clp.Framecount - 1 }
function nul(clip clp) { return clp }
function chr34() { return chr(34) + chr(34) + chr(34) }
function SubtitleFilter(clip clp, string filter){ return Eval( "clp " + filter + " Subtitle(" + chr34 + filter + chr34 + ")" ) }
使用例: 直接、TrueTears()を使うか、下のような関数を作る。 # toTrueTears TrueTears自身をstringに変換。3:2プルダウン用 #return TrueTears(x=458, y=148, w=200, h=288, top="""SelectEvery2("5, 2,4").vinverse""", bottom="""SelectEvery2("5, 0,2").nul""", bright=0, show=false) #TT = toTrueTears(x=458, y=148, w=200, h=288, top="5, 2,4", bottom="5, 0,2", top_filter="vinverse", bottom_filter="nul", show=false, interlaced=true) #return Eval(TT) function toTrueTears(int "x", int "y", int "w", int "h", string "top", string "bottom", string "top_filter", \ string "bottom_filter", float "bright", bool "show", bool "interlaced") { top_filter = default( top_filter, "nul" ) bottom_filter = default( bottom_filter, "nul" ) bright = default( bright, 0 ) show = default( show, false ) interlaced = default( interlaced, true ) # string を渡すフィルタによってこの部分を変える。 return "TrueTears(x=" + string(x) + ", y=" + string(y) + ", w=" + string(w) + ", h=" + string(h) \ + ", top=" + chr34 + "SelectEvery2(" + chr(34) + top + chr(34) + ")." + top_filter + chr34 \ + ", bottom=" + chr34 + "SelectEvery2(" + chr(34) + bottom + chr(34) + ")." + bottom_filter + chr34 \ + ", bright=" + string(bright) + ", show=" + string(show) + ", interlaced=" + string(interlaced) + ")" }
string を同期のためのtimecodeを出力する関数に渡す。(ClipArray()はdebug中。) True Tears のオープニング。 frame 1355から 2100までを 24000/1001 fps, 2101 frameの Framerateのみ修正。 ClipArray( start=1355, end=1519, ivtc="5, 0,2", pre="", post="", ff="em" ) TT1 = toTrueTears(x=60, y=96, w=202, h=292, top="5, 0,3", bottom="5, 0,2") ClipArray( start=1520, end=1564, ivtc=TT1, pre="", post="", ff="", mode=2 ) ClipArray( start=1565, end=1669, ivtc="5, 0,2", pre="", post="MergeField(frame=82)", ff="e0" ) TT2 = toTrueTears(x=60, y=120, w=360, h=244, top="5, 1,3", bottom="5, 2,4") ClipArray( start=1669, end=1759, ivtc=TT2, pre="", post="", ff="", mode=2 ) ClipArray( start=1760, end=1794, ivtc="5, 0,2", pre="", post="", ff="" ) TT3 = toTrueTears(x=458, y=144, w=204, h=296, top="5, 1,4", bottom="5, 0,2") ClipArray( start=1795, end=1911, ivtc=TT3, pre="", post="", ff="", mode=2 ) TT4 = toTrueTears(x=226, y=48, w=270, h=388, top="5, 0,2", bottom="5, 1,3") ClipArray( start=1912, end=1979, ivtc=TT4, pre="", post="", ff="", mode=2 ) ClipArray( start=1980, end=2101, ivtc="5, 0,2", pre="", post="", ff="" )
>>246 の応用。ドロップフレームより算出されたフレームレートをNTSCのものに変換。
function toNTSC(clip clp)
{
#return (clp.FramerateNumerator % 999 == 0) ? clp.AssumeFPS( clp.FramerateNumerator * 1000000, clp.FramerateDenominator * 999999 ) : clp
return (clp.FramerateNumerator % 999 == 0) && (clp.FramerateDenominator % 5 == 0)
\ ? clp.AssumeFPS( clp.FramerateNumerator/999 * 200000, clp.FramerateDenominator/5 * 1001 ) : clp
}
# frame: フィルタを適用する FrameNumber デフォルト -1 Last Frame
# func: フィルタ
function MapFrame(clip clp, int "frame", string "func")
{
frame = default( frame, lastFrameOf(clp) )
func = default( func, "nul" )
return clp.FilterRange(start=frame, pre=func)
}
## {{{ FilterRange
# FilterRangeを値が0より小さいときも使えるように変更。
#
# startから endまで filterを適用する。
# FilterRange(100, 200, "vinverse") 100 frame から 200 frameまでfilterを適用する。
# すべてのframeにfilterを適用するには、start=0, end=0 (end=clip.Framecount-1) を指定。
#
# option # start: filterを開始するframe。startのみ指定すると、その Frameのみfilterを適用する。 # start < 0 のとき、 LastFrame - abs(start) + 1 が start frameとなる。 # FilterRange(start=0, filter="vinverse") 1st frameだけにフィルターをかける。 # FilterRange(start=-1, filter="vinverse") start=-1 で Last frameだけにフィルターをかける。 # FilterRange(start=-5, filter="vinverse") Last frameから数えて 5frame分前のframeだけにフィルターをかける。 # FilterRange(start=-5, end=0, filter="vinverse") Last frameから数えて 5frame分前のframeからLast frameまでフィルターをかける。 # # end: filterを適用する 終了frame。end < 0 のとき、start frameからFramecountがabs(end)となる範囲にfilterを適用する。 # FilterRange(start=100, end=-50, filter="vinverse") 100 frame から 50 frame分(149 frame)filterを適用する。 # FilterRange(start=-5, end=-1, filter="vinverse") Last frameから数えて 5frame分前のframeだけにフィルターをかける。 # # filter: Trimのあとに適用するフィルタ。filterのみ指定すると一番最後の frameにみfilterを適用する。 # FilterRange(filter="vinverse") Last frameだけにフィルターをかける。 # # pre: Trimの前に適用するフィルタ。自分自身以外(Trimの範囲外)の frameを参照するfilterを使うとき使用。 # # show: filterを適用した部分だけ表示する。 # # audio_dub: FilterRangeで audioにフィルタを使用するのが目的のとき falseを指定する。 function FilterRange(clip clp, int "start", int "end", string "filter", string "pre", bool "show", bool "audio_dub") { start = default( start, -1 ) end = default( end, -1 ) filter = default( filter, "nul" ) pre = default( pre, "nul" ) show = default( show, false ) audio_dub = default( audio_dub, true )
non = (start < 0) && (clp.Framecount <= abs(start) - 1) ? true : false filter = (non == true) ? "nul" : filter pre = (non == true) ? "nul" : pre start = (start < 0) ? ( (clp.Framecount > abs(start) - 1) ? lastFrameOf(clp) - abs(start) + 1 : 0 ) : start end = (end < 0) ? ( (start != 0) || (end != -1) ? start - end - 1 : -1 ) : end end = (end > lastFrameOf(clp)) ? lastFrameOf(clp) : end c1 = (start != 0) ? clp.Trim( 0, ((start==1)?0:start) - 1 ) : NulClip(clp) c2 = Eval("clp." + pre + ".Trim(start, end) " + filter + ".toFramerateOf(clp)") c3 = (end != 0) && (end != lastFrameOf(clp)) && (clp.Framecount != 1) \ ? clp.Trim( ((start!=0)||(end!=-1)?end:0) + 1, 0 ) : NulClip(clp) (show == false) ? c1 + c2 + c3 : c2 return (audio_dub == true) ? AudioDubEx( last, !show?clp:clp.Trim(start,end) ) : last }
# string "frames" に属するフレームに フィルタ string "func" を適用する。 # FilterRange2(func="GreyScale", frames="0,-1, 1,1, 5,5, 100,200, 800,0") # 0, 1, 5, 100-200, 800-lastFrame に filterを適用する。 function FilterRange2(clip clp, string "func", string "frames", int "start", int "pre_end", int "i", clip "clip2") { func = Default( func, "nul" ) frames = Default( frames, "0, 0" ) start = Default( start, 0 ) pre_end = Default( pre_end, 0 ) i = Default( i, 0 ) clip2 = Default( clip2, NulClip(clp) ) (i > 1) && (i % 2 == 1) ? Assert(pre_end < start, "Previous or Current End Frame: " + string(pre_end) \ + " is larger than or equal to Start Frame: " + string(start) + "." ) : NOP offset = FindStr(frames, ",")
return (offset != 0) \ ? Eval(""" j = int(Value(LeftStr(frames, offset-1))) end = (i % 2 == 0) ? j - 1 : j (j != start) || ((i % 2 == 1) && (j != 0)) ? clp.Trim( start, end ) : NulClip(clp) (i % 2 == 1) ? Eval(func) : last pre_end = (i % 2 == 1) ? end : pre_end clp.FilterRange2( func=func, frames=MidStr(frames, offset+1), start=(j==0)?0:((end!=-1)?end:0)+1, pre_end=pre_end, i=i+1, clip2=clip2+last ) """) \ : ((i != 0) \ ? clip2 + Eval(""" end = int(Value(frames)) end = (end == 0) || (end > lastFrameOf(clp)) ? lastFrameOf(clp) : end Assert(start <= end, "Start: " + string(start) + " is larger than End Frame: " + string(start) + "." ) clp.Trim(start, end) Eval(func) \ + ((end != lastFrameOf(clp)) ? clp.Trim(end+1,0).subtitle(string(frames)) : NulClip(clp)) """) \ : clp) } ## }}}
>>281 × \ + ((end != lastFrameOf(clp)) ? clp.Trim(end+1,0).subtitle(string(frames)) : NulClip(clp))
○ \ + ((end != lastFrameOf(clp)) ? clp.Trim(end+1,0) : NulClip(clp))
283 :
にーやん :2008/04/03(木) 23:31:39 ID:T0mh+SLT
>>103 ChangePlaySpeedをAviSynth Wikiのユーザー定義関数のページに追加させていただきました。
もし何か問題やおかしな点があれば言ってください。
にーやん乙
285 :
103 :2008/04/04(金) 23:24:22 ID:eIjWKAmU
掲載ありがとうございます。 コードに全角スペースが含まれていますので、半角に差し替えさせて頂きました。 (当時は字下げの仕方を知らなかったもので…。) それにしても、再生速度の話題は半年に1回ぐらいのペースで出てきますねぇ。
アス非を変えず、余った空間は黒で塗りつぶしてクリップを指定した解像度にするスクリプト考えてるんですが a=0 if(a==0){ MessageClip("おk") }else{ MessageClip("ダメ") } AviSynthってこのif構文使えないんですか?
3項演算は可能
自分がif elseに頼り切ってる事が分かった ループ系も無いのね function rc(string "path" , float "from" , float "to" ){ c1 = AVISource(path) mode = (Float(Height(c1)) / Float(Width(c1))>0.75) ? "A" : "B" #modeがAなら左右に黒枠を付ける #modeがBなら上下に黒枠を付ける add_size = (mode=="A") ? (int(Height(c1)/0.75)-Width(c1))/2 : (int(Width(c1)*0.75)-Height(c1))/2 c1 = (mode=="AA")?AddBorders (c1, add_size,0,add_size,0):AddBorders (c1, 0,add_size,0,add_size) c1 = BicubicResize(c1,640,480) c1 = Trim(c1, int(from*Framerate(c1)),int(from*Framerate(c1)+to*Framerate(c1))) c1 = ChangeFPS(c1,30) c1 = ResampleAudio(c1, 48000) return c1 } pathに動画のフルパス、fromに開始秒、toに継続時間 を指定すると pathの動画を開いてfrom秒〜from+to秒に切り取って、fpsを30にしてサンプリングレート48000に統一して アス比を4:3にして解像度を640x480にする メドレーなんかに使えるのではないかと rc("G:\A.avi",0,99.8)++rc("G:\B.avi",0,99.8) こんな感じで
289 :
にーやん :2008/04/06(日) 01:20:07 ID:JX+oQBdu
>>285 そのまま貼り付けただけだったので、全角スペースに気づきませんでした。
修正ありがとうございました。
保守
見つけたので貼り
946 名前:[名無し]さん(bin+cue).rar[sage] 投稿日:2008/04/06(日) 15:11:30 ID:SeqvFgpF0
YUKKYの設定ファイルをコピー
ttp://nagamochi.info/src/up2812.png EEDI2を使わずにリサイズ
ttp://nagamochi.info/src/up2811.png まぁエンコードの速さはかなりいい感じかな
965 名前:946[sage] 投稿日:2008/04/06(日) 21:01:15 ID:SeqvFgpF0
FrameCache(9).IT(fps = 24, ref = "TOP", diMode = 1)
FrameCache(9).crop(8,0,-8,0)
FrameCache(9).ffdshow("unsharp")
FFT3DGPU()
GPU_BeginYV12
GPU_LanczosResize(1280,720)
GPU_EndYV12()
FrameCache(9).asharp(0.8,1.5,0.10,hqbf=true)
FrameCache(9).aWarpSharp(8,3,0.2,2)
FrameCache(9).WarpSharp(128, 3, 108, -0.6)
FrameCache(9).crop(0,4,-0,0)
FrameCache(9).AddBorders(0, 4, 0, 0)
ffdshowはunsharp maskの強さ20
こんな感じの設定ね
FrameCache意味有るのか知らないが付けてみた
MT使えないからquadだとWarpSharpあたりが足を引っ張るかもしれない
EEDI2使ってない分早いと思う
みなみけ以外でYUKKYの設定のあるDVD持ってないから、他のDVDにも通用するは、わからない
静止画の時点でここまで酷いと動画では見るに耐えないと思うが… というかそんなもの貼るなよ
ねーよwww YUKKYの汚すぎだろwww また糞比較コピペの誕生かよwww
ま、文字テロップはEEDI2やNNEDI使うよりlanczosで拡大したほうがきれいになるのは確かだけどな。
誰YUKKYって
もはやYUKKYもしらない厨房や消防もこのスレに入り込んできたのか。 まぁYUKKYなんて糞職人のことは知らないほうがいいのかもしれないな。
兵藤ユキ?
職人ってなんの職人?
[名無し]さん(bin+cue).rar ダウソですね
FrameCache(9).asharp(0.8,1.5,0.10,hqbf=true) FrameCache(9).aWarpSharp(8,3,0.2,2) FrameCache(9).WarpSharp(128, 3, 108, -0.6) 何がしたいんだか・・
704x396な向こうの人か確かにショボイよな
叩くだけなら誰だってできるよ お前らの設定晒してみろや
何を今更w
相手にするな うつるぞ
##ソースファイル読み込み## src = DGDecode_MPEG2Source("N:\みなみけ\01\VTS_01_1.d2v").AssumeTFF() OP = src.FrameCache(9).Trim(0,3147).DoubleWeave().SelectEvery(10,0,2,5,7) a = src.FrameCache(9).Trim(3148,22957).DoubleWeave().SelectEvery(10,0,2,5,7) b = src.FrameCache(9).Trim(22958,39561).DoubleWeave().SelectEvery(10,0,2,5,7) ED = src.FrameCache(9).Trim(39562,42257).DoubleWeave().SelectEvery(10,0,2,5,7) next = src.FrameCache(9).Trim(42258,0).DoubleWeave().SelectEvery(10,0,2,5,7) last = OP ++ a ++ b ++ ED ++ next Crop(8,0,-8,0) ##映像フィルタ## asharp(0.1,11,-1,true) FFT3dFilter(plane=4,sigma=1.2) EEDI2(mthresh=10,lthresh=20,vthresh=20,estr=2,dstr=6,maxd=26,map=0,nt=50,pp=0).TurnRight() EEDI2(mthresh=10,lthresh=20,vthresh=20,estr=2,dstr=6,maxd=26,map=0,nt=50,pp=0).TurnLeft() WarpSharp(60,6,165,0) WarpSharp(60,6,165,0) LanczosResize(1280,720,taps=16) YSharp(1.16) Crop(0,4,0,0) AddBorders(0,4,0,0) return last ちなみにYUKKYの設定はこっちのほうな 正直AvsP開いた瞬間閉じたわ、、、
#########BlackEdge########## # 作者 YUKKY # # 必要なプラグイン # # ・mt_masktools # # ・asharp ・EEDI2 # function BlackEdge(clip clip, int "thY", bool "dr", bool "resize"){ thY = default(thY, 6) #エッジマスクを作成する際の輝度閾値 dr = default(dr, false) #デリンギング処理を行うかどうか(trueのみ行う) resize = default(resize, true) #EEDI2の後に元の解像度に戻すかどうか(false以外は戻す) src = clip src = ((dr == true) \ ? src.asharp(0.1,4.0) \ : (dr == false) \ ? src \ : src) diff1 = Subtract(src.mt_expand().mt_inpand(),src) diff2 = Subtract(src,src.mt_inflate().mt_deflate()) temp1 = mt_adddiff(src,mt_makediff(diff2,diff1)) temp2 = mt_adddiff(src,temp1,y=1,u=3,v=3) temp = mt_average(temp1,temp2) map = src.mt_edge(mode="min/max",thY1=thY,thY2=thY) clip = mt_merge(src,temp,map,u=1,v=1) clip = clip.EEDI2().TurnRight().EEDI2().TurnLeft() clip = ((resize == true) \ ? clip.LanczosResize(clip.width/2,clip.height/2,taps=16) \ : (resize == false) \ ? clip \ : clip.LanczosResize(clip.width/2,clip.height/2,taps=16)) return clip }
ゴミばっかw
犯罪者の話題なんて出すなよ
さすがダウンソクオリティー こんなクソ関数を堂々と公開して後悔。ナチッテ、、、
scriptclipの使い方が良く解んないから試しに逆テレ氏ね関数作ってみた globalな変数しか受け付けないから関数内ではとても使いにくいです、ついでに言うと素直にプラグインで作った方が軽そうな予感 conditional系って使い道あるの? function SakuratanIVTC(clip clip,bool"debug"){ doubleweave(clip) interleave(last,merge(trim(1,0),last)) default(debug,false)?info:last c0=selectevery(10,0,5) c0=stackhorizontal(c0,trim(c0,0,-1)+trim(c0,0,framecount(c0)-2),trim(c0,1,framecount(c0)-1)+trim(c0,framecount(c0)-1,-1)) trim(0,-1)+trim(0,framecount-2) c1=selectevery(10,0,5) c1=stackhorizontal(c1,trim(c1,0,-1)+trim(c1,0,framecount(c1)-2),trim(c1,1,framecount(c1)-1)+trim(c1,framecount(c1)-1,-1)) trim(0,-1)+trim(0,framecount-2) c2=selectevery(10,0,5) c2=stackhorizontal(c2,trim(c2,0,-1)+trim(c2,0,framecount(c2)-2),trim(c2,1,framecount(c2)-1)+trim(c2,framecount(c2)-1,-1)) trim(0,-1)+trim(0,framecount-2) c3=selectevery(10,0,5) c3=stackhorizontal(c3,trim(c3,0,-1)+trim(c3,0,framecount(c3)-2),trim(c3,1,framecount(c3)-1)+trim(c3,framecount(c3)-1,-1)) trim(0,-1)+trim(0,framecount-2) c4=selectevery(10,0,5) c4=stackhorizontal(c4,trim(c4,0,-1)+trim(c4,0,framecount(c4)-2),trim(c4,1,framecount(c4)-1)+trim(c4,framecount(c4)-1,-1)) trim(0,-1)+trim(0,framecount-2) c5=selectevery(10,0,5) c5=stackhorizontal(c5,trim(c5,0,-1)+trim(c5,0,framecount(c5)-2),trim(c5,1,framecount(c5)-1)+trim(c5,framecount(c5)-1,-1)) stackhorizontal(c0,c1,c2,c3,c4,c5) scriptclip("""\ w=width/6\ c0=crop(0,0,w,0)\ crop(w,0,0,0)\ c1=crop(0,0,w,0)\ crop(w,0,0,0)\
c2=crop(0,0,w,0)\ crop(w,0,0,0)\ c3=crop(0,0,w,0)\ crop(w,0,0,0)\ c4=crop(0,0,w,0)\ c5=crop(w,0,0,0)\ why=w*height\ whuv=why/4\ b0=blur(c0,0,1)\ b1=blur(c1,0,1)\ b2=blur(c2,0,1)\ b3=blur(c3,0,1)\ b4=blur(c4,0,1)\ b5=blur(c5,0,1)\ d0=why*lumadifference(c0,b0)+whuv*(chromaudifference(c0,b0)+chromavdifference(c0,b0))\ d1=why*lumadifference(c1,b1)+whuv*(chromaudifference(c1,b1)+chromavdifference(c1,b1))\ d2=why*lumadifference(c2,b2)+whuv*(chromaudifference(c2,b2)+chromavdifference(c2,b2))\ d3=why*lumadifference(c3,b3)+whuv*(chromaudifference(c3,b3)+chromavdifference(c3,b3))\ d4=why*lumadifference(c4,b4)+whuv*(chromaudifference(c4,b4)+chromavdifference(c4,b4))\ d5=why*lumadifference(c5,b5)+whuv*(chromaudifference(c5,b5)+chromavdifference(c5,b5))\ d5=1.25*d5\ min01=min(d0,d1)\ min012=min(min01,d2)\ min0123=min(min012,d3)\ stackhorizontal(d5<min(min0123,d4)?c5:d4<min0123?c4:d3<min012?c3:d2<min01?c2:d1<d0?c1:c0,c0,c0,c0,c0,c0)\ """) crop(0,0,width(clip),0) } とりあえず作ってみただけなんで↑の関数自体は役に立ちませんwww だれかscriptclipの素晴らしさを教えてくれ〜
>>305 avisynthでエンコを始めようとしている者です。YUKKY氏の設定を見て、
>src = DGDecode_MPEG2Source("N:\みなみけ\01\VTS_01_1.d2v").AssumeTFF()
>OP = src.FrameCache(9).Trim(0,3147).DoubleWeave().SelectEvery(10,0,2,5,7)
>a = src.FrameCache(9).Trim(3148,22957).DoubleWeave().SelectEvery(10,0,2,5,7)
>b = src.FrameCache(9).Trim(22958,39561).DoubleWeave().SelectEvery(10,0,2,5,7)
>ED = src.FrameCache(9).Trim(39562,42257).DoubleWeave().SelectEvery(10,0,2,5,7)
>next = src.FrameCache(9).Trim(42258,0).DoubleWeave().SelectEvery(10,0,2,5,7)
>last = OP ++ a ++ b ++ ED ++ next
この辺はなるほどと感じましたが、私のavsに取り入れたとき何か問題はありますか?
だいぶ叩かれている様なので。
( ゚Д゚)ハァ?
釣だろシカト汁
みなみけ 1)皆、三毛 (みな三毛猫の意) 2)南家 (南さんの家で共有しているパソコンの意)
317 :
313 :2008/05/24(土) 15:41:04 ID:q+JZgKsj
釣りではありませんでしたが、試さずに質問したのは失礼しました。 Trimより後を省いてVirtualDubで開いてみました。 結果極端に重くなることもなく普通に使えました。 何もなかったかのように312の続きをどうぞ↓
( ゚Д゚)ハァ?
釣だろシカト汁
321 :
313 :2008/05/25(日) 20:10:49 ID:z5lBM62D
>>317 下のようなAVSを作ったわけです。突っ込み大歓迎です。
lgd = "E:\EncFiles\logo\"
LoadAviUtlInputPlugin("C:\Program Files\EARTH SOFT\PV3 3.x\AviUtl\EARTH SOFT DV.aui", "EARTHSOFTDV")
logo = "TBS_1920x1080.lgd"
src = EARTHSOFTDV("E:\TVRec\マクロスF(フロンティア) 5月24日.dv").AssumeTFF()
at_in = 764
at_out = 6245
at_fin = 5
at_fidur = 10
op_in = at_out + 1
op_out = 9244
op_fout = op_out - op_in - 5
op_fodur = 9
(省略)
nx_in = 50274
nx_out = 51112
nx_fin = 5
nx_fidur = 10
nx_fout = nx_out-nx_in-6
nx_fodur = 9
avantitle = src.FrameCache(9).Trim(at_in,at_out).EraseLOGO(logofile=lgd+logo, start=at_fin, fadein=at_fidur).IT(fps=24, ref="TOP")
OP = src.FrameCache(9).Trim(op_in,op_out).EraseLOGO(logofile=lgd+logo, end=op_fout, fadeout=op_fodur).IT(fps=24, ref="TOP")
a = src.FrameCache(9).Trim(a_in,a_out).EraseLOGO(logofile=lgd+logo, start=a_fin, end=a_fout, fadein=a_fidur, fadeout=a_fodur).IT(fps=24, ref="TOP")
b = src.FrameCache(9).Trim(b_in,b_out).EraseLOGO(logofile=lgd+logo, start=b_fin, fadein=b_fidur).IT(fps=24, ref="TOP")
ED = src.FrameCache(9).Trim(ed_in,ed_out).EraseLOGO(logofile=lgd+logo, end=ed_fout, fadeout=ed_fodur).IT(fps=24, ref="TOP")
next = src.FrameCache(9).Trim(nx_in,nx_out).EraseLOGO(logofile=lgd+logo, start=nx_fin, end=nx_fout, fadein=nx_fidur, fadeout=nx_fodur).IT(fps=24, ref="TOP")
last = avantitle ++ OP ++ a ++ b ++ ED ++ next
頼むからくだらないの貼らないでくれないか、邪魔だから
釣だろシカト汁
>>321 何がしたいかなんとなく分かったけど・・・
つーか何に対してなるほどと思ったのか最初に書けやw
似たような事する記述方法色々あるけど
>>321 のはマンドクサくてヤだな。
最近地デジチューナーを入手したんで、これをGV-MVP/RX2に突っ込んで SDキャプしています。 今までは、 Crop(4,0,704,480) LanczosResize(640,480) だったんですが、WIDEのままエンコするには、 Crop(0,0,716,480) LanczosResize(704,396) ぐらいでいいでしょうか? MPEG2ソースを見るのと同じサイズで見ようと思うと LanczosResize(848,480) かなぁと思ったんですが、横にムダに引き伸ばすのは間抜けですか?
スレ (´∀`( ´∀`) チガイ
>>206 修正(mergeを省略するとフィルタが適応されなかった不具合の修正)
#for…繰り返し処理を行う
# start 値の初期値
# end 値の終了値
# step 刻み値
# filter 繰り返し分適応させるフィルタ(省略すると何もしません、“""”でも省略扱いです。)
# 繰り返しの値は“i”もしくは“crnt”で取得出来ます
# merge クリップ結合関数(省略すると最後に作成したクリップを返します、“""”でも省略扱いです。)
# 繰り返し途中に作成したクリップは早めに生成されたクリップが“c1”、
# 遅めに生成されたクリップが“c2”になります
# この2つのクリップを1つのクリップに結合します。
function for(clip clip, int start, int end, int step, string "filter", string "merge") {
filter = default(filter, "")
merge = default(merge, "")
merge = (("" != merge)? merge: "c2")
i = start
crnt = start
next = crnt + step
c1 = clip
c2 = (("" != filter)? Eval("clip." + filter): clip)
c2 = ((start < end) ? c2.for(next, end, step, filter, merge): c2)
return ((start < end)? Eval(merge): c1)
}
この関数色々な所で使っているから、不具合があると再確認事項が多くて困る。
>>156-157 ,328使用
#DotCleaner…2値の画像のドットノイズを削減します
# strong ノイズ除去の強さ(省略なら“1”、“0”なら変化無し)
# 1なら黒拡張1回→白拡張2回→黒拡張1回
# 2なら黒拡張2回→白拡張4回→黒拡張2回
# -1なら白拡張1回→黒拡張2回→白拡張1回
function DotCleaner(clip clip, int "strong") {
strong = default(strong, 1)
darken = """DotCleaner CrossSelfOverlay("darken")"""
lighten = """DotCleaner CrossSelfOverlay("lighten")"""
expansion = ((0 < strong)? darken: lighten)
reduction = ((0 < strong)? lighten: darken)
strong = ((0 < strong)? strong: -strong)
function DotCleaner CrossSelfOverlay(clip clip, string mode) {
base = clip
clip = clip.Overlay(base, mode=mode, x=-1, y=0).Overlay(base, mode=mode, x=1, y=0).Overlay(base, mode=mode, x=0, y=1).Overlay(base, mode=mode, x=0, y=-1)
return clip
}
type = clip.GetPixelType()
clip = clip.ConvertToYUY2()
clip = clip.for(0, strong, 1, expansion).for(0, strong*2, 1, reduction).for(0, strong, 1, expansion)
return clip.SetPixelType(type)
}
mt_logic使った方が良いと思いますが、取り敢えず標準フィルタで作成。
>>156-157 使用
#LuminanceKey…他クリップをルミナンスキーとし、マスク画像を生成します
# diff ルミナンスキー判定用クリップ
# tolerance マスク許容範囲(省略なら“25”、“0”なら完全一致のみです)
# 負数なら相違箇所をマスクします
# color マスク色(省略なら“$00FF00”です)
# alpha only アルファ用のクリップを生成する(省略・偽ならマスク、真ならアルファです)
# effect マスクの加工フィルタ(省略すると何もしません、“""”でも省略扱いです)
# effect clip マスクの加工フィルタにて参照出来るクリップ(省略するとdiffと同じです)
function LuminanceKey(clip clip, clip diff, int "tolerance", int "color", bool "alpha only", string "effect", clip "effect clip") {
color = default(color, $00FF00)
tolerance = default(tolerance, 25)
alpha only = default(alpha only, false)
effect = default(effect, "")
effect clip = default(effect clip, diff)
is mask = ((0 <= tolerance)? true: false)
tolerance = ((0 <= tolerance)? tolerance: -tolerance)
type = clip.GetPixelType() diff = clip.Overlay(diff, mode="difference").ColorYUV(off y=-127) diff = diff.ConvertToRGB32() diff = diff.ColorKeyMask($000000, tolerance) diff = diff.ShowAlpha() diff = ((is mask)? diff.Invert(): diff) diff = (("" != effect)? Eval("diff." + effect): diff) clip = clip.ConvertToRGB32() bg = clip.BlankClip(color=color) bg = bg.Mask(diff) clip = clip.Layer(bg, "add") clip = ((alpha only)? diff.Invert(): clip) return clip.SetPixelType(type) }
trio = LoadTrioClip()
duo = LoadDuoClip()
alpha = trio.LuminanceKey(duo, 10, alpha only=true, effect="DotCleaner(1).Blur(1.0)")
luminance = trio.LuminanceKey(duo, 10, effect="DotCleaner(1).Blur(1.0)")
up = StackHorizontal(trio, duo)
down = StackHorizontal(alpha, luminance)
StackVertical(up, down)
ttp://nagamochi.info/src/up5363.png
>>329-332 すいません、そこここの“_”が消えています。
DotCleaner_CrossSelfOverlay
alpha_only
effect_clip
is_mask
off_y
ほ
アニメエンコで定番のUnSharpMask+WarpSharpに対抗してみた。 それだけ。 LoadPlugin("ffmpegsource.dll") LoadPlugin("FFT3DGPU.dll") LoadPlugin("rgbhack.dll") LoadPlugin("LGhost.dll") LoadPlugin("PMD.dll") FFPP(pp="vdeblock:chrom/hdeblock:chrom/dering:chrom") ConvertToRGB(matrix="rec709") red=ShowRed("YV12").FFT3DGPU(plane=0,bt=-1,bw=32,bh=32,ow=16,oh=16,precision=2,sharpen=4,interlaced=false).LGhost(1).PMD() green=ShowGreen("YV12").FFT3DGPU(plane=0,bt=-1,bw=32,bh=32,ow=16,oh=16,precision=2,sharpen=4,interlaced=false).LGhost(1).PMD() blue=howBlue("YV12").FFT3DGPU(plane=0,bt=-1,bw=32,bh=32,ow=16,oh=16,precision=2,sharpen=4,interlaced=false).LGhost(1).PMD() YYYToRGB(red,green,blue) ConvertToYV12(matrix="PC.709") flipvertical FFPP(pp="vdeblock:chrom/hdeblock:chrom/dering:chrom")
ショボ
#2-3プルダウンでテレシネされたソースに60テロなんか入った場合、手動間引きしつつ矩形範囲のみbob化して60p出力する関数 #ivtcbob("12","ConvertToYV12(interlaced=true).MCbob().ConvertToYUY2()",0,930,1440,90)#例えば5n+2&3フレーム目に縞がある場合stripe="23" function ivtcbob(clip clip, string stripe, string bobfilter, int x, int y, int w, int h){ Assert((stripe == "01") || (stripe == "12") || (stripe == "23") || (stripe == "34") || (stripe == "40"), "ivtcbob : stripe list : '01','12','23','34' or '40'") Assert(clip.IsYUY2 || clip.IsRGB32, "ivtcbob : require 'YUY2' or 'RGB32' input") frame = clip.Framecount() * 2 - 1 c = clip.DoubleWeave() c = (stripe == "01") ? c.SelectEvery(5,1,3) : c c = (stripe == "12") ? c.SelectEvery(5,0,3) : c c = (stripe == "23") ? c.SelectEvery(5,0,2) : c c = (stripe == "34") ? c.SelectEvery(5,2,4) : c c = (stripe == "40") ? c.SelectEvery(5,1,4) : c c1 = c.SelectEven() c2 = c.SelectOdd() c = (stripe == "01") ? clip.SeparateFields().SelectEven().EEDI2().Trim(0,-1).AssumeFPS(60000,1001) + Interleave(c1,c1,c2,c2,c2) : c c = (stripe == "12") ? Interleave(c1,c1,c1,c2,c2) : c c = (stripe == "23") ? Interleave(c1,c1,c2,c2,c2) : c c = (stripe == "34") ? clip.Trim(0,-1).AssumeFPS(60000,1001) + clip.Trim(0,-1).AssumeFPS(60000,1001) + Interleave(c1,c1,c2,c2,c2) : c c = (stripe == "40") ? clip.SeparateFields().SelectEven().EEDI2().Trim(0,-1).AssumeFPS(60000,1001) + Interleave(c1,c1,c1,c2,c2) : c c = c.Trim(0,frame) telop=Eval("clip." + bobfilter) Assert((frame == telop.Framecount() - 1) && (telop.FramerateNumerator() == 60000), "ivtcbob : bobfilter error") telop=telop.Crop(x,y,w,h) Layer(c,telop,"add",255,x,y) return last }
#
>>339 にMCBOBを使ってエンコしたら重すぎて使い物にならなかったのでクロップ優先オプションの"fast"を追加
function ivtcbob(clip clip, string stripe, string bobfilter, int x, int y, int w, int h, bool "fast", bool "yv12", int "overlap"){
fast = default(fast,true)
yv12 = default(yv12,false)
overlap = default(overlap,2)
Assert(clip.IsYUY2 || clip.IsRGB32, "ivtcbob : require 'YUY2' or 'RGB32' input")
Assert((stripe == "01") || (stripe == "12") || (stripe == "23") || (stripe == "34") || (stripe == "40"), "ivtcbob : stripe list : '01','12','23','34' or '40'")
fast ? Assert(y % 2 == 0, "ivtcbob : In case 'fast' is true, 'y' must be even number.") : last
fast ? Assert(h % 2 == 0, "ivtcbob : In case 'fast' is true, 'h' must be even number.") : last
fast ? Assert(overlap % 2 == 0, "ivtcbob : In case 'fast' is true, 'overlap' must be even number.") : last
fast ? Assert((w > 0) && (h > 0), "ivtcbob : In case 'fast' is true, 'w' and 'h' must be positive numbers.") : last
top = (y < overlap) ? y : overlap
bottom = (clip.Height() - y - h < overlap) ? clip.Height() - y - h : overlap
left = (x < overlap) ? x : overlap
right = (clip.Width() - x - w < overlap) ? clip.Width() - x - w : overlap
frame = clip.Framecount() * 2 - 1
c = clip.DoubleWeave()
c = (stripe == "01") ? c.SelectEvery(5,1,3) : c
c = (stripe == "12") ? c.SelectEvery(5,0,3) : c
c = (stripe == "23") ? c.SelectEvery(5,0,2) : c
c = (stripe == "34") ? c.SelectEvery(5,2,4) : c
c = (stripe == "40") ? c.SelectEvery(5,1,4) : c
341 :
340 :2008/07/22(火) 00:22:30 ID:SgMxS+s2
c1 = c.SelectEven() c2 = c.SelectOdd() c = (stripe == "01") ? clip.SeparateFields().SelectEven().EEDI2().Trim(0,-1).AssumeFPS(60000,1001) + Interleave(c1,c1,c2,c2,c2) : c c = (stripe == "12") ? Interleave(c1,c1,c1,c2,c2) : c c = (stripe == "23") ? Interleave(c1,c1,c2,c2,c2) : c c = (stripe == "34") ? clip.Trim(0,-1).AssumeFPS(60000,1001) + clip.Trim(0,-1).AssumeFPS(60000,1001) + Interleave(c1,c1,c2,c2,c2) : c c = (stripe == "40") ? clip.SeparateFields().SelectEven().EEDI2().Trim(0,-1).AssumeFPS(60000,1001) + Interleave(c1,c1,c1,c2,c2) : c c = c.Trim(0,frame) branch = yv12 && ((top + h + bottom) % 4 != 0) ? \ ( \ (clip.Height() - y - h < overlap) ? Eval("clip.crop(" + String(x-left) + "," + String(y-top) + "," + String(left+w+right) + "," + String(top+h+bottom) + ").AddBorders(0,0,0,2)") \ : Eval("clip.crop(" + String(x-left) + "," + String(y-top) + "," + String(left+w+right) + "," + String(top+h+bottom+2) + ")") \ ) \ : Eval("clip.crop(" + String(x-left) + "," + String(y-top) + "," + String(left+w+right) + "," + String(top+h+bottom) + ")") telop = fast ? branch : clip telop = Eval("telop." + bobfilter) telop = fast ? telop.crop(left,top,w,h) : telop.crop(x,y,w,h) Assert((frame == telop.Framecount() - 1) && (telop.FramerateNumerator() == 60000), "ivtcbob : bobfilter error") Layer(c,telop,"add",255,x,y) return last }
342 :
340 :2008/07/22(火) 00:42:39 ID:SgMxS+s2
# 一応使い方 # 使用プラグイン # EEDI2 片フィールドしか存在しない0フレーム目のフィールド補間に使ってるだけなので # SeparateFields().SelectEven().EEDI2()の部分を好みのbobフィルタにしても可。 # 今気づいたけどSelectEven必要ないな・・・ # 引数リスト # stripe(string): 5n+xフレームのどこに縞があるかを'01','12','23','34','40'の中から指定。 # bobfilter(string): bobフィルタを指定。 # x,y,w,h(int): bobフィルタを適用する矩形領域を選択。 # fast(bool): trueでcropを優先し高速化する。デフォルトはtrue。 # yv12(bool): fastがtrueのとき、矩形領域の高さが4の倍数でなくても # bobfilterでConvertToYV12(interlaced=true)を使えるようにする。デフォルトはfalse。 # overlap(int): fastがtrueのとき、bobフィルタをかける前に矩形領域の上下左右を余分にクロップするピクセル数。 # 動き補償付きbob関数なんかを使うときは大きめにしたほうがいいかもしれない。デフォルトは2。 # 使用例 # ivtcbob("23","ConvertToYV12(interlaced=true).MCbob().ConvertToYUY2()",0,930,1440,1020-930,true,true,4)
アニメDVD用 mpeg2source(FPath + D2vFile) AssumeFrameBased().ComplementParity() Its(def=DPath + DefFile,fps=-1,output=FPath + TimestampFile, debug=false) ColorYUY2(matrix="rec709s", debug=0, interpolation="411->422", interlaced=false) ColorMatrix(mode="Rec.709->SMPTE 240M", source=0, dest=3, scaling=2, interlaced=false, d2v=FPath + D2vFile) UnSharpMask(24,3,5) WarpSharp(90,5,90) Lanczos4Resize(704,396) addborders(0,0,0,4) return last
Its24fps用 function a24(clip clip) { clip AssumeFrameBased().ComplementParity() BruteIVTC() TDeint(mode=2,order=1,field=1,type=1,mtnmode=3,full=false,chroma=false,tryweave=true,link=1,slow=2) vinverse(sstr=2.7,amnt=255,uv=3,scl=0.25,opt=2) TDecimate(mode=1,hybrid=0,dupThresh=0.7,blockx=8,blocky=8,chroma=true) return last } Its30fps用 function b30(clip clip) { clip AssumeFrameBased().ComplementParity() BruteIVTC() TDeint(mode=2,order=1,field=1,type=1,mtnmode=3,full=false,chroma=false,tryweave=true,link=1,slow=2) vinverse(sstr=2.7,amnt=255,uv=3,scl=0.25,opt=2) return last }
ソースがDVD Videoなら、色空間がBT.601(SMPTE 170M)のYV12(YCbCr 4:2:0)なので、 BT.709と解釈してSMTPE 240M(アナログHDTVの色空間)にするとおかしな色になる。 ColorYUY2とColorMatrixの両方を外したら良い。
DGIndex が 709 だと言ってたので 709 にしてました。(騙されたorz) 601で通すことにします。
最近のDGIndex(1.5.0以降)ならSDのソースをBT.709だと判定しない様に改良された。 ただ、BT.709とするべきSDのデジタル放送をBT.470-2 B,G(SMPTE 170M, BT.601と同じ)と判定するので、 それだけ注意する必要がある。
DVDエンコは基本色を弄らずエンコして、再生する時にレベル補正する方が確実に楽だよっねー!
FUNCTION ContraSharpening(clip denoised, clip original) { # contra-sharpening: sharpen the denoised clip, but don't add more to any pixel than what was removed previously. # script function from Didee from the VERY GRAINY thread s = denoised.minblur(1,1) # Damp down remaining spots of the denoised clip. allD = mt_makediff(original,denoised) # The difference achieved by the denoising. ssD = mt_makediff(s,s.removegrain(11,-1)) # The difference of a simple kernel blur. ssDD = ssD.repair(allD,1) # Limit the difference to the max of what the denoising removed locally. ssDD = SSDD.mt_lutxy(ssD,"x 128 - abs y 128 - abs < x y ?") # abs(diff) after limiting may not be bigger than before. denoised.mt_adddiff(ssDD,U=2,V=2) # Apply the limited difference. (Sharpening is just inverse blurring.) RETURN (last) }
ショボイスクリプトを貼ったよ SetMemoryMax(768) SetMTMode(1,0) # Auto("○"=自動クロップ)Anime("○"=アニメ)Wide("○"=ワイドスクリーン&Anime="○"(704,360)"×"(704,392) ※Auto時無効 ) Auto="○" Anime="○" Wide="○" UTimingH=0 VTimingH=0 Border="1" Line=0 Range=20 # Border/Line=0(OFF):1(ON) Range=16-24 #------------------------------------------------- AutoS="○"==Auto AnimeS="○"==Anime wideS="○"==Wide BorderS="1"==Border Plugin="C:\Program Files\AviSynth 2.5\plugins+\" #------------------------------------------------- LoadPlugin(Plugin+"DGDecode.dll") LoadPlugin(Plugin+"gradfun2db.dll") LoadPlugin(Plugin+"TComb.dll") LoadPlugin(Plugin+"autocrop") LoadPlugin(Plugin+"ColorYUY2_for_25.dll") LoadPlugin(Plugin+"RemoveGrainSSE3.dll") LoadPlugin(Plugin+"DeGrainMedian.dll") LoadPlugin(Plugin+"FFT3dGPU.dll") LoadPlugin(Plugin+"warpsharp.dll") LoadPlugin(Plugin+"TemporalCleaner.dll") LoadPlugin(Plugin+"TBilateral.dll") LoadPlugin(Plugin+"FluxSmooth.dll") LoadPlugin(Plugin+"mt_masktools-25.dll") #------------------------------------------------- Import(Plugin+"myFunctions.avs") Import(Plugin+"LimitedSharpenFaster.avsi") Try{assert(false)}Catch(err_msg){err_msg = MidStr(err_msg,FindStr(err_msg,"(") + 1) script_name = LeftStr(err_msg,StrLen(err_msg) - FindStr(RevStr(err_msg),","))} Video_name = Leftstr(script_name,Findstr(script_name,".avs")-1) gradfun2db(MPEG2Source(Video_name+".d2v",cpu=6),1.8)
#------------------------------------------------- AssumeFrameBased().ComplementParity() UVTimingH(UTimingH,VTimingH,false).crop(8,0,704,480).TComb() #------------------------------------------------- AutoS ? autocrop(mode=Line,wmultof=8,hmultof=4,samples=10,aspect=0,threshold=Range) : nop() AutoS ? nop(): wideS ? AnimeS ? crop(0,60,704,360) : crop(0,44,704,392) : nop() #------------------------------------------------- ColorYUY2(gain_y=0,cont_y=3,off_y=0,cont_u=15,cont_v=15,gamma_y=5,opt="1-254",matrix="rec601s",debug=0,interlaced=true) AnimeS ? Tweak(0.0, 1.2, 0.0, 1.0, false) : Tweak(0.0, 1.1, 0.0, 1.0, false) #----------------------実写----------------------- Setmtmode(5) AnimeS ? nop() : FrameCache(9).fft3dGPU(sigma=2.0,beta=1,plane=4,bw=16,bh=16,ow=8,oh=8,bt=4,mode=1,wintype=2,svr=0,interlaced=true) Setmtmode(2) AnimeS ? nop() : DeGrainMedian(2,3,1,interlaced=true).iFilterT("UnsharpMask(48,2,7)").WarpSharp(64,3,96) #---------------------アニメ---------------------- Setmtmode(5) AnimeS ? FrameCache(9).fft3dGPU(sigma=2.5,beta=1,plane=3,bw=2,bh=2,ow=1,oh=1,bt=4,mode=1,wintype=2,svr=0,interlaced=true) : nop() Setmtmode(2) AnimeS ? FrameCache(9).iFilterT("TemporalCleaner(3,0)") : nop() Setmtmode(1) AnimeS ? FrameCache(9).iFilterT("TBilateral(diameterL=5,diameterC=5,sDevL=4,sDevC=5,iDevL=3,iDevC=5,kernS=7,kernI=7,gui=false)") : nop() Setmtmode(2) AnimeS ? FrameCache(9).iFilterB("FluxSmoothT(6).LimitedSharpenFaster(Smode=4,strength=150,soft=0,edgemode=1)") : nop() AnimeS ? iFilterT("UnSharpMask(24,2,5)") : nop()
#------------------------------------------------- AutoS ? BorderS ? AddBorders(0,(480 - Height()) / 2,0,(480 - Height()) / 2,$000000) : nop() : nop() AutoS ? nop(): BorderS ? wideS ? AnimeS ? AddBorders(0,60,0,60,$000000) : AddBorders(0,44,0,44,$000000) :nop() :nop() #------------------------------------------------- return last
修正 Setmtmode(2) AnimeS ? FrameCache(9).iFilterB("FluxSmoothT(6).LimitedSharpenFaster(Smode=4,strength=150,soft=-1,edgemode=1)") : nop() AnimeS ? FrameCache(9).iFilterT("UnSharpMask(24,2,5)").WarpSharp(40,2,80,-0.6) : nop()
修正版(MeGUI版 アナログ素材用インタレ保持) 入門者用メモ 素材は「GV-MVP-GX2W」で録画したものを INTEL E6750(3.2G)で2時間以内(アニメの場合)でエンコすることを目安した (再生はHWインタレ解除) RADEON HD3850 (カタリスト 8.11) (カタリスト 8.11はRenderless ModeだとHWインタレが崩れる Renderless Modeを使用する場合はカタリスト8.4で) KMPlyaer VMR9(Windows Mode) 3D パイリニア VMRミキサー 外部CODEC CyberLink H.264/AVC Decoder 704x480 sar 8:9または720x480 sar 1:1のエンコでソース(GX2WのMPEG2)と同じ比率で再生できる KMPlyaerは「アスペクト比を保持しない」に設定 ※HWインタレ解除で一部(数回に1回程度は成功する)引っかかる場合はインタレ稿の検出に失敗している場合があるのでフィルター類を見直すか カタリスト8.4で再生してみる FluxSmoothTを少し強めにすれば改善する場合がある
SetMemoryMax(768) SetMTMode(1,0) Auto="○" Anime="○" Crop="○" BorderX="0" BorderY="1" Test=0 Range=30 UTimingH=0 VTimingH=0 #------------------------------------------------- # Auto(自動クロップ)Anime(アニメ)Crop(×720x480 ○704x480 ※Auto優先)BorderX/Y/Test=0(OFF)/1(ON) Range=16-30 # ○(有効)×(無効) x264 (sar = 704x480 > 4:3(10:11) 16:9(40:33) 3:2 > 4:3(8:9) 16:9(32:27)) ※BorderX/Y=720/480 #------------------------------------------------- AutoS="○"==Auto AnimeS="○"==Anime CropS="○"==Crop BorderXS="1"==BorderX BorderYS="1"==BorderY Plugin="C:\Program Files\AviSynth 2.5\plugins+\" #------------------------------------------------- LoadPlugin(Plugin+"DGDecode.dll") LoadPlugin(Plugin+"gradfun2db.dll") LoadPlugin(Plugin+"TComb.dll") LoadPlugin(Plugin+"autocrop") LoadPlugin(Plugin+"ColorYUY2_for_25.dll") LoadPlugin(Plugin+"RemoveGrainSSE3.dll") LoadPlugin(Plugin+"DeGrainMedian.dll") LoadPlugin(Plugin+"FFT3dGPU.dll") LoadPlugin(Plugin+"warpsharp.dll") LoadPlugin(Plugin+"TemporalCleaner.dll") LoadPlugin(Plugin+"TBilateral.dll") LoadPlugin(Plugin+"FluxSmooth.dll") LoadPlugin(Plugin+"mt_masktools-25.dll")
#------------------------------------------------- Import(Plugin+"myFunctions.avs") Import(Plugin+"vmToon-v0.74.avsi") Try{assert(false)}Catch(err_msg){err_msg = MidStr(err_msg,FindStr(err_msg,"(") + 1) script_name = LeftStr(err_msg,StrLen(err_msg) - FindStr(RevStr(err_msg),","))} Video_name = Leftstr(script_name,Findstr(script_name,".avs")-1) gradfun2db(MPEG2Source(Video_name+".d2v",cpu=6),1.8) #------------------------------------------------- AssumeFrameBased().ComplementParity() UVTimingH(UTimingH,VTimingH,false).TComb() #------------------------------------------------- AutoS ? autocrop(mode=Test,wmultof=8,hmultof=4,samples=20,aspect=0,threshold=Range) : CropS ? crop(8,0,704,480) : nop() #------------------------------------------------- ColorYUY2(gain_y=0,cont_y=15,off_y=0,cont_u=35,cont_v=30,gamma_y=5,opt="1-254",matrix="rec601s",debug=0,interlaced=true) #----------------------実写----------------------- 調整中 Setmtmode(5) AnimeS ? nop() : FrameCache(9).fft3dGPU(sigma=2.0,beta=1,plane=4,bw=16,bh=16,ow=8,oh=8,bt=4,mode=1,wintype=2,svr=0,interlaced=true) Setmtmode(2) AnimeS ? nop() : DeGrainMedian(2,3,1,interlaced=true).iFilterT("UnsharpMask(48,2,7)").WarpSharp(64,3,96,-0.6)
#---------------------アニメ---------------------- 調整中 Setmtmode(5) AnimeS ? FrameCache(9).fft3dGPU(sigma=2.5,beta=1,plane=3,bw=2,bh=2,ow=1,oh=1,bt=4,mode=1,wintype=2,svr=0,interlaced=true) : nop() Setmtmode(2) AnimeS ? FrameCache(9).iFilterT("TemporalCleaner(3,0)") : nop() Setmtmode(1) AnimeS ? FrameCache(9).iFilterT("TBilateral(diameterL=5,diameterC=5,sDevL=3,sDevC=5,iDevL=2,iDevC=5,kernS=7,kernI=7,gui=false)") : nop() Setmtmode(2) AnimeS ? FrameCache(9).iFilterT("FluxSmoothT(6).UnSharpMask(24,2,5)").WarpSharp(64,3,96,-0.6).vmToon(strength=20,sharpen=true) : nop() #AnimeS ? FrameCache(9).iFilterT("FluxSmoothT(6).UnSharpMask(24,2,5)").WarpSharp(96,3,96,-0.6).vmToon(strength=20,sharpen=true) : nop() #------------------------------------------------- AutoS ? BorderXS ? AddBorders((720 - Width()) / 2, 0 ,(720 - Width()) / 2, 0 ,$000000) : nop() : nop() AutoS ? BorderYS ? AddBorders(0, (480 - Height()) / 2, 0 ,(480 - Height()) / 2,$000000) : nop() : nop() AutoS ? nop(): BorderXS ? CropS ? AddBorders(8,0,8,0,$000000) : nop() :nop() #------------------------------------------------- return last
追記 素材に適したアスペクト比でエンコしてやらないと再生時にテロップ(文字)が若干ぼやけてしまうことがあるので注意(PC上での再生の場合)
>>357 HWインタレ解除がミスりやすいのと2時間以内にエンコできなかったので一部修正
Auto="○" Anime="○" Crop="○" BorderX="0" BorderY="1" Test=0 Range=30 UTimingH=0 VTimingH=0 Mod=8
#-------------------------------------------------
Import(Plugin+"LimitedSharpenFaster.avsi")
#-------------------------------------------------
AutoS ? autocrop(mode=Test,wmultof=8,hmultof=Mod,samples=20,aspect=0,threshold=Range) : CropS ? crop(8,0,704,480) : nop()
#----------------------実写-----------------------
Setmtmode(2)
AnimeS ? nop() : DeGrainMedian(2,3,1,interlaced=true).iFilterT("UnSharpMask(24,1,5)")
#---------------------アニメ----------------------
Setmtmode(2)
AnimeS ? FrameCache(9).FluxSmoothT(6).iFilterB("LimitedSharpenFaster(Smode=4,strength=120,soft=0,edgemode=1).WarpSharp(64,1,96,-0.6)") : nop()
#-------------------------------------------------
※16の倍数ではないと警告がでるが無視してOK hmultof=16 だと上下カットしすぎかも
※GV-MVP/GX2W(4:3)でCAP(CSレター)し sar 8:9でエンコすれば上下をカットしてもMediaInfo上では16/9になるのでKMPlyaer等で再生可能
※推奨プレイヤー PowerDVD Vista(4617) HWインタレ解除(ベクター) または 正方形ピクセルに調整してくれるKMPlyaer等(VMR9 Windows Mode)
以上 入門者用メモでした
>>360 追記
KMPlyaerは高速モードか超高速モードにしないとDxVAモードが動作しない
また、CCCで強制的にベクタにしてもHWインタレ解除はPowerDVD Vistaの方が画質は上
# if-else構文 {{{
# もし三項演算子を if-else構文で書くとしたら。
# else と elseif の前には必ず . を置く
# ).else (
/* 使用例
#
ttp://avisynth.org/mediawiki/Block_statements Global c = BlankClip().Trim(0,23)
Global d = BlankClip(color=$ffffff).Trim(0,23)
Global e = BlankClip(color=$ffff00).Trim(0,23)
#Return b ? c + d : d + c
#Return if("b", "c + d").else("d + c")
Global b = true
if("b",
\"""
Global k = c
Global l = d
"""\
).else (
\"""
Global k = d
Global l = c
""")
# if("b", "Global k = c Global l = d").else("Global k = d Global l = c")
Return k + l
#Global k = undef()
#Global l = undef()
Global a = 2 if ("a>=5", \""" Global k = c Global l = d Global m = e """\ ).elseif ("a > 2", \""" Global k = d Global l = e Global m = c """\ ).else ( \""" Global k = e Global l = c Global m = d """) Return k + l + m */
Function if(string exp1, string exp2) { Global IF_ELSE_BREAK = false Eval(exp1) \ ? Eval(""" Global IF_ELSE_BREAK=true Eval(exp2) """) : NOP } Function elseif(val exp1, string exp2, string exp3) { !IF_ELSE_BREAK && Eval(exp2) \ ? Eval(""" Global IF_ELSE_BREAK=true Eval(exp3) """) : NOP } Function else(val exp1, string exp2) { !IF_ELSE_BREAK ? Eval(exp2) : exp1 Global IF_ELSE_BREAK = undef() } Function undef(val "x") { Assert(!Defined(x), "Usage: x = undef()") Return x } #}}}
修正 Function else(val exp1, string exp2) { !IF_ELSE_BREAK ? Eval(exp2) : exp1 Global IF_ELSE_BREAK = undef() } から Function else(val exp1, string exp2) { !IF_ELSE_BREAK ? Eval(exp2) : NOP Global IF_ELSE_BREAK = undef() }
てst
### デバッグ・検証用 {{{1
# コンソールで AviSynth を動かしている気分に浸れるもの。
# 日本語を扱うときは、スクリプトを cp932 (sjis) で保存してください。
# フォントは osaka_unicode がお勧めです。
## 要るもの {{{2
/*
Arrays and Loops
ttp://forum.doom9.org/showthread.php?t=106880 Thunk() を下記のように変更。
function Thunk(val val, string "clipName")
{
clipName = Default(clipName, "val")
c34 = chr(34) + chr(34) + chr(34)
# string -> escape it
# clip -> double-thunk it
# everything else -> stringify it
return val.IsString()
\ ? c34 + val + c34
\ : val.IsClip()
\ ? "Eval(" + chr(34) + clipName + chr(34) + ")"
\ : string(val)
} #}}}
## 使用例: {{{2 # columns: 横に何文字配列するか, lines: 縦に何文字配列するか ConsoleClip(lines=30) # y で表示位置調整。デフォルト 0 Evaluation(" 7 % 3") Evaluation("-7 % 3", y=2) Evaluation("-7 % -3", y=4) Evaluation(" 7 % -3", y=6) AviSynth の剰余 % は Haskell の Prelude.rem, Scheme の remainder と同 じ働きをする。(商はゼロに向かってまるめられる) 被除数, 除数ともに正数のときだけ正しい解が出力される。 一方、Haskell の Prelude.mod, Scheme の modulo をはじめ GNU CLISP, Perl, Python, Ruby では、(商は負の無限大に向かってまるめられ) 除数が正数のときだけ正しい解が出力される。 こちらの方は、正数演算での除数はゼロより大きくなければならないことを 念頭に置いておけば、合同式の演算に使うことが出来る。 (ほとんどの言語はゼロで割ろうとすればエラーを出すが、整数型を負数で 割ろうとしてもエラーを出さないので気をつける必要がある) 任意の整数を、あるゼロより大きい整数 で割った余りの集合を剰余体と いい、その中でも素数で割ったものを有限体(ガロア体)といい、特に 2 で 割ったものは計算機のビット演算に使われている。FrameNumber を 5 で割っ た集合を考えれば 逆テレシネにも応用することが出来る。 整数型の除算の商の符号は、被除数 及び 除数 の符号がマイナスかどうかを 1, 0 であらわすと排他的論理和によってあらわすことができる。乗算でも同 様である。(符号が同じならば正の値を取る)
Function xor(P, Q) { !(P == Q) }
Evaluation("xor(true, true)", y=0)
Evaluation("xor(true, false)", y=2)
Evaluation("xor(false, true)", y=4)
return Evaluation("xor(false, false)", y=6)
とこういう風に書くと正数演算において負数で被除数を割ることができない
なんて聞いたことがないと思われるかもしれないが、正数においては除法の
原理が大前提にあるのでこれを見れば明らか。
もし、正数を負数で割りたければ、正数を有理数に拡張する必要がある。
もちろん有理数には剰余というものがないが、除法の原理において
被除数, 除数を有理数にしても同じことが言える。
よって、ユークリッドの互除法を使えば2つの有理数の最大公約因子を
求めることが出来る。(これは最大公約数ではない。最大公約数は2つの
ゼロより大きい整数によって決まるものである)
これは、timeScale, timeBase を求めるのに使うことが出来る。
下の式で m, n, r を有理数とし、それ以外を整数として計算する。
除法の原理
m を任意の整数、n は n > 0 の整数とする。このとき
m = qn + r, 0 <= r < n
となる整数 q, r がただ1組存在する。
言語内での除算のふるまいは、ここらへん。
Gaucheのリファレンスマニュアル
ttp://gauche.sourceforge.jp/doc/gauche-refj_49.html#SEC53 R5RS (Revised^5 Report on Algorithmic Language Scheme)
ttp://www.unixuser.org/~euske/doc/r5rs-ja/
# 表示で改行をさせたいときは \n を行末に加える。 フィボナッチ数 Evaluation(""" Function Fib(int n) {\n Assert( (n >= 0), "fib: n should be larger than or equal to 0." )\n Return (n == 0) ? 0\n \ : (n == 1) ? 1\n \ : (n == 2) ? 1\n \ : n.isEven ? int(pow(fib((n/2)+1), 2) - pow(fib((n/2)-1), 2))\n \ : fib(n-1) + fib(n-2)\n }\n\n Function isEven(int n) { n % 2 == 0 }\n\n #Findstr("Print(" + Chr(34) + "てすと" + Chr(34) + ")", "てすと")\n\n Fib(35) """, y=9) n が偶数のとき fib(n+2) = fib(n) + fib(n+1) としないと AviSynth がフリーズ するのでそのように変更。だが、正しい解が求められる最大値は Fib(35) #}}} */
<<370
× n が偶数のとき fib(n+2) = fib(n) + fib(n+1)
○ fib(2n) = fib(n+1)^2 - fib(n-1)^2
## 関数: {{{2
Function Evaluation(clip clp, string "block", int "y", int "guifg", string "guifont", int "font_size")
{
y = Default(y, 0)
guifg = Default(guifg, $FFFFFF)
#guifont = Default(guifont, "osaka_unicode") #
ttp://osakattf.hp.infoseek.co.jp/ guifont = Default(guifont, "MS_Gothic")
font_size = Default(font_size, 18)
Global Evaluation_block = block
Global Evaluation_Count = 0
While("""Findstr(Evaluation_block, "\n") > 0""",
\"""
Global Evaluation_block = DelChr10(Evaluation_block)
Global Evaluation_Count = Evaluation_Count + 1
""")
clp
Subtitle(string(VersionString), font=guifont, size=font_size, text_color=guifg)
Subtitle("$ " + string(block), font=guifont, size=font_size,
\ text_color=guifg, y =font_size*(2+y), lsp=1)
Subtitle(string(Eval(Evaluation_block)), font=guifont, size=font_size,
\ text_color=guifg, y =font_size*(3+Evaluation_Count+y))
}
Function ConsoleClip(int "columns", int "lines", int "font_size", int "guibg", int "length") { columns = Default(columns, 80) lines = Default(lines, 25) font_size = Default(font_size, 18) guibg = Default(guibg, $000000) length = Default(length, 240) BlankClip(length=length, width=font_size*(columns/2), height=font_size*lines, color=guibg) } Function DelChr10(string block, string "ffs") { ffs = Default(ffs, "\n") \ LeftStr(block, Findstr(block, ffs)-1) + MidStr(block, Findstr(block, ffs)+2) } #}}} ###}}}
GradFunkMirrorを弄くったら若干軽くなりました function gradfunkmirror2(clip c,float"strength"){ strength=default(strength,1.2) c w=width h=height stackhorizontal(addborders(fliphorizontal(crop(0,0,16,h)),0,16,0,16),stackvertical(flipvertical(crop(0,0,w,16)),last,flipvertical(crop(0,h-16,w,16))),addborders(fliphorizontal(crop(w-16,0,16,h)),0,16,0,16)) gradfun2db(strength) crop(16,16,-16,-16) } ↑の出来上がりはGradFunkMirrorと同じです、ウチの環境では結構軽くなりました。 ↓はGradFunkMirrorとは違う絵になるけど俺環境では↑よりも軽い function gradfunkmirror3(clip c,float"strength"){ strength=default(strength,1.2) c w=width h=height stackhorizontal(fliphorizontal(crop(0,0,16,h)),last,fliphorizontal(crop(w-16,0,16,h))) stackvertical(flipvertical(crop(0,0,w+32,16)),last,flipvertical(crop(0,h-16,w+32,16))) gradfun2db(strength) crop(16,16,-16,-16) }
過疎化しているので修正版を上げます(入門者用 GV-MVP/GX2W DGIndex MeGUI HWインタレ AviSynthMT 2.5.7.5) 使い勝手の向上とHWデインタレ(ベクター適応)時のピクつきを改善したと思う(画質や複雑さは求めていませんのであしからず) Setmtmode(2,0) Auto="○" Crop="×" Crop_x=704 Crop_y=360 Range=30 BorderX="0" BorderY="0" Test=0 UTimingH=0 VTimingH=0 #------------------------------------------------- # Auto(自動Crop)Crop(○Crop_x/y ×Source ※Auto時無効)Range(Crop感度)BorderX/Y/Test(額縁)=OFF(0):ON(1) UVTimingH(UV補正) # ○(有効)×(無効) ※〜XXXms?.avs(?="D"(DVD)/"M"(Movie)/"A"(Anime)/""(None)) Anime & 縦464以下=bandingON BorderX/Y=Source #------------------------------------------------- AutoS="○"==Auto CropS="○"==Crop BorderXS="1"==BorderX BorderYS="1"==BorderY Plugin="C:\Program Files\AviSynth 2.5\plugins+\" Audio_mp2=" Tc0 L2 2ch 48 384" Audio_ac3=" T80 3_2ch 448Kbps" #------------------------------------------------- LoadPlugin(Plugin+"mt_masktools-25.dll") LoadPlugin(Plugin+"DGDecode.dll") LoadPlugin(Plugin+"autocrop") LoadPlugin(Plugin+"TComb.dll") LoadPlugin(Plugin+"gradfun2db.dll") LoadPlugin(Plugin+"AddGrainC.dll") LoadPlugin(Plugin+"ColorYUY2_for_25.dll") LoadPlugin(Plugin+"DeGrainMedian.dll") LoadPlugin(Plugin+"FFT3dGPU.dll") LoadPlugin(Plugin+"TemporalCleaner.dll") LoadPlugin(Plugin+"TBilateral.dll") LoadPlugin(Plugin+"FluxSmooth.dll") LoadPlugin(Plugin+"RemoveGrainSSE3.dll") LoadPlugin(Plugin+"warpsharp.dll") LoadPlugin(Plugin+"NicAudio.dll")
#------------------------------------------------- Import(Plugin+"myFunctions.avs") Import(Plugin+"GradFun2DBmod.avsi") Import(Plugin+"LimitedSharpenFaster.avsi")
#------------------------------------------------- # DGIndex / READ Video_name.d2v Audio_name1.mp2 (Audio_name2.ac3) ※AVS Examples [File-Name DELAY -100msA.avs] #------------------------------------------------- Try{assert(false)}Catch(err_msg){err_msg = Midstr(err_msg,Findstr(err_msg,"(") + 1) script_name = Leftstr(err_msg,strLen(err_msg) - Findstr(Revstr(err_msg),","))} Video_name = Leftstr(script_name,Findstr(script_name,"DELAY") -2 ) Error_name = Rightstr(Video_name,Findstr(Revstr(Video_name),"\") - 1) Video = Exist(Video_name+".d2v") ? MPEG2Source(Video_name+".d2v") : Assert(false,+Error_name+".d2v"+" : File not found") AssumeFrameBased(Video).ComplementParity() STR_Width=Width(Video) STR_Height=Height(Video) STR_Left=(STR_Width-Crop_x)/2 STR_TOP=(STR_Height-Crop_y)/2 mode = Midstr(script_name,Findstr(script_name,"avs") - 2, 1 ) Audio_Delay = Midstr(script_name,Findstr(script_name,"DELAY") + 6 ) Audio_Delay = Leftstr(Audio_Delay,Findstr(Audio_Delay,"ms") - 1 ) Audio_name1 = Video_name+Audio_mp2+" DELAY "+Audio_Delay+"ms" Audio_name2 = Video_name+Audio_ac3+" DELAY "+Audio_Delay+"ms" mode=="D" ? Exist(Audio_name2+".ac3") ? nop() : Assert(false,+ Error_name+Audio_ac3+" DELAY "+Audio_Delay+"ms.ac3"+" : File not found") : nop() mode!="D" ? Exist(Audio_name1+".mp2") ? nop() : Assert(false,+ Error_name+Audio_mp2+" DELAY "+Audio_Delay+"ms.mp2"+" : File not found") : nop() mode=="D" ? AudioDub(Video,NicAC3Source(Audio_name2+".ac3",2)) : AudioDub(Video,NicMPG123Source(Audio_name1+".mp2"))
#------------------------------------------------- (mode=="A" || mode=="M") ? UVTimingH(UTimingH,VTimingH,false).TComb() : nop() AutoS ? autocrop(mode=Test,wmultof=16,hmultof=8,samples=20,aspect=0,threshold=Range) : CropS ? crop(STR_Left,STR_TOP,Crop_x,Crop_y) : nop() mode=="D" ? Filter_DVD(Test) : mode=="M" ? Filter_Movie(Test) : mode=="A" ? Filter_Anime(Test) : nop() #------------------------------------------------- BorderXS ? AddBorders((STR_Width - Width()) / 2, 0 ,(STR_Width - Width()) / 2, 0 ,$000000) : nop() BorderYS ? AddBorders(0, (STR_Height - Height()) / 2, 0 ,(STR_Height - Height()) / 2,$000000) : nop() return last
#----------------------実写----------------------- function Filter_Movie(clip clip, Test) { clip= Test==1 ? subtitle(clip,"Movie",x=20,y=20) : clip Setmtmode(2) clip=clip.ColorYUY2(off_y=-1,off_u=0,off_v=0,cont_y=0,cont_u=0,cont_v=0,gamma_y=3,opt="1-254",matrix="rec601s",debug=0,interlaced=true) clip=clip.FrameCache(9).DeGrainMedian(2,3,1,interlaced=true) Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=1.8,plane=4,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=2,interlaced=true,sharpen=1.5,svr=0.5) return clip }
#---------------------アニメ---------------------- function Filter_Anime(clip clip, Test) { clip= Test==1 ? subtitle(clip,"Anime",x=20,y=20) : clip Setmtmode(2) clip= Height(clip)<464 ? GradFun2DBmod(clip,thr=1.2,mode=2,chroma=false,str=0.8,temp=50,adapt=64,radius=2,range=2,show=false) : clip offy= Height(clip)<464 ? 0 : -1 clip=clip.ColorYUY2(off_y=offy,off_u=0,off_v=0,cont_y=15,cont_u=0,cont_v=0,gamma_y=0,opt="1-254",matrix="rec601s",debug=0,interlaced=true) clip= Height(clip)<464 ? Tweak(clip,0.0, 1.1, 0.0, 1.0, false) : Tweak(clip,0.0, 1.2, 0.0, 1.0, false) Setmtmode(1) clip=clip.FrameCache(9).iFilterT("TBilateral(diameterL=9,diameterC=5,sDevL=1.8,sDevC=7.0,iDevL=1.8,iDevC=7.0,kernS=2,kernI=2,gui=false)") Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=2.0,plane=3,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=0,interlaced=true,svr=0) Setmtmode(2) clip=clip.FrameCache(9).TemporalCleaner(3,0) clip=clip.iFilterB("FluxSmoothT(6).LimitedSharpenFaster(ss_x=1.15,ss_y=1.15,Smode=4,strength=150,soft=-1,edgemode=1).WarpSharp(64,3,96)") return clip }
#---------------------DVD---------------------- function Filter_DVD(clip clip, Test) { clip= Test==1 ? subtitle(clip,"DVD",x=20,y=20) : clip Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=1.8,beta=1,plane=4,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=2,interlaced=true,svr=0) return clip }
>>374 たびたびすいません SetmtmodeをNicAC3Sourceで使用すると強制的に2CH(DownMix)しないと記憶保護例外で落ちてしまうので簡易修正しました
Setmtmode(2,0) # マルチチャンネル(AC3)を使用する場合は左記の「#Setmtmode(2,0)」をコメントアウトし「AC3_DownMix="×"」してから使用にする
Auto="○" Crop="×" Crop_x=704 Crop_y=360 BorderX="0" BorderY="0" Test=0 Range=30 UTimingH=0 VTimingH=0 AC3_DownMix="○"
#-------------------------------------------------
# Auto(自動Crop)Crop(○Crop_x/y ×Source ※Auto時無効)BorderX/Y/Test(額縁)=OFF(0):ON(1) Range(Crop感度)UVTimingH(UV補正)
# ○(有効)×(無効) [File-Name DELAY -100ms?.avs] 「?」= ("D"(DVD)/"M"(Movie)/"A"(Anime)/""(None)) ※BorderX/Y=Source
#-------------------------------------------------
AutoS="○"==Auto CropS="○"==Crop BorderXS="1"==BorderX BorderYS="1"==BorderY AC3_DownMixS="○"==AC3_DownMix
Plugin="C:\Program Files\AviSynth 2.5\plugins+\" Audio_mp2=" Tc0 L2 2ch 48 384" Audio_ac3=" T80 3_2ch 448Kbps"
#-------------------------------------------------
LoadPlugin(Plugin+"mt_masktools-25.dll")
LoadPlugin(Plugin+"DGDecode.dll")
LoadPlugin(Plugin+"autocrop")
LoadPlugin(Plugin+"TComb.dll")
LoadPlugin(Plugin+"gradfun2db.dll")
LoadPlugin(Plugin+"AddGrainC.dll")
LoadPlugin(Plugin+"ColorYUY2_for_25.dll")
LoadPlugin(Plugin+"DeGrainMedian.dll")
LoadPlugin(Plugin+"FFT3dGPU.dll")
LoadPlugin(Plugin+"TemporalCleaner.dll")
LoadPlugin(Plugin+"TBilateral.dll")
LoadPlugin(Plugin+"FluxSmooth.dll")
LoadPlugin(Plugin+"RemoveGrainSSE3.dll")
LoadPlugin(Plugin+"warpsharp.dll")
LoadPlugin(Plugin+"NicAudio.dll")
#------------------------------------------------- Import(Plugin+"myFunctions.avs") Import(Plugin+"GradFun2DBmod.avsi") Import(Plugin+"LimitedSharpenFaster.avsi") #------------------------------------------------- # DGIndex / READ Video_name.d2v Audio_name1.mp2 (Audio_name2.ac3) ※AVS Examples [File-Name DELAY -100msA.avs] #------------------------------------------------- Try{assert(false)}Catch(err_msg){err_msg = Midstr(err_msg,Findstr(err_msg,"(") + 1) script_name = Leftstr(err_msg,strLen(err_msg) - Findstr(Revstr(err_msg),","))} Video_name = Leftstr(script_name,Findstr(script_name,"DELAY") -2 ) Error_name = Rightstr(Video_name,Findstr(Revstr(Video_name),"\") - 1) Video = Exist(Video_name+".d2v") ? MPEG2Source(Video_name+".d2v") : Assert(false,+Error_name+".d2v"+" : File not found") AssumeFrameBased(Video).ComplementParity() st_width=Width(Video) st_height=Height(Video) st_left=(st_width-Crop_x)/2 st_top=(st_height-Crop_y)/2 st_ch = AC3_DownMixS ? 2 : 6 mode = Midstr(script_name,Findstr(script_name,"avs") - 2, 1 ) Audio_Delay = Midstr(script_name,Findstr(script_name,"DELAY") + 6 ) Audio_Delay = Leftstr(Audio_Delay,Findstr(Audio_Delay,"ms") - 1 ) Audio_name1 = Video_name+Audio_mp2+" DELAY "+Audio_Delay+"ms" Audio_name2 = Video_name+Audio_ac3+" DELAY "+Audio_Delay+"ms" mode=="D" ? Exist(Audio_name2+".ac3") ? nop() : Assert(false,+ Error_name+Audio_ac3+" DELAY "+Audio_Delay+"ms.ac3"+" : File not found") : nop() mode!="D" ? Exist(Audio_name1+".mp2") ? nop() : Assert(false,+ Error_name+Audio_mp2+" DELAY "+Audio_Delay+"ms.mp2"+" : File not found") : nop()
# # [NicAC3Source]で[Setmtmode]を使用する場合は強制的に2チャンネルにするか[Setmtmode]の影響を受けないようしなければ記憶保護例外でアベンドする # mode=="D" ? AudioDub(Video,Effect_AC3(NicAC3Source(Audio_name2+".ac3",st_ch))) : AudioDub(Video,NicMPG123Source(Audio_name1+".mp2")) #------------------------------------------------- (mode=="A" || mode=="M") ? UVTimingH(UTimingH,VTimingH,false).TComb() : nop() AutoS ? autocrop(mode=Test,wmultof=16,hmultof=8,samples=20,aspect=0,threshold=Range) : CropS ? crop(st_left,st_top,Crop_x,Crop_y) : nop() Width_S= Height()<464 ? true : false mode=="D" ? Filter_DVD(Test) : mode=="M" ? Filter_Movie(Test) : mode=="A" ? Filter_Anime(Test,Width_S) : nop() #------------------------------------------------- BorderXS ? AddBorders((st_width - Width()) / 2, 0 ,(st_width - Width()) / 2, 0 ,$000000) : nop() BorderYS ? AddBorders(0, (st_height - Height()) / 2, 0 ,(st_height - Height()) / 2,$000000) : nop() return last
#-------------------Effect_AC3------------------- function Effect_AC3(Audio) { org_ch=Audiochannels(Audio) F_L= org_ch>=1 ? GetChannel(Audio,1).Normalize().AmplifydB(8.80) : nop() F_C= org_ch>=2 ? GetChannel(Audio,2).Normalize().AmplifydB(8.80) : nop() F_R= org_ch>=3 ? GetChannel(Audio,3).Normalize().AmplifydB(8.80) : nop() S_L= org_ch>=4 ? GetChannel(Audio,4).Normalize().AmplifydB(8.80) : nop() S_R= org_ch>=5 ? GetChannel(Audio,5).Normalize().AmplifydB(8.80) : nop() LFE= org_ch>=6 ? GetChannel(Audio,6).Normalize().AmplifydB(8.80) : nop() org_ch==1 ? MergeChannels(F_L) : nop() org_ch==2 ? MergeChannels(F_L,F_C) : nop() org_ch==3 ? MergeChannels(F_L,F_C,F_R) : nop() org_ch==4 ? MergeChannels(F_L,F_C,F_R,S_L) : nop() org_ch==5 ? MergeChannels(F_L,F_C,F_R,S_L,S_R) : nop() org_ch==6 ? MergeChannels(F_L,F_C,F_R,S_L,S_R,LFE) : nop() return last }
#----------------------実写----------------------- function Filter_Movie(clip clip, int "Test") { clip= Test==1 ? subtitle(clip,"Movie",x=650,y=20) : clip Setmtmode(2) clip=clip.ColorYUY2(off_y=-1,off_u=0,off_v=0,cont_y=0,cont_u=0,cont_v=0,gamma_y=3,opt="1-254",matrix="rec601s",debug=0,interlaced=true) clip=clip.FrameCache(9).DeGrainMedian(2,3,1,interlaced=true) Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=1.8,plane=4,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=2,interlaced=true,sharpen=1.5,svr=0.5) return clip }
#---------------------アニメ---------------------- function Filter_Anime(clip clip, int "Test", bool "Width_S") { clip= Test==1 ? subtitle(clip,"Anime",x=650,y=20) : clip Setmtmode(2) clip= Width_S ? GradFun2DBmod(clip,thr=1.2,mode=2,chroma=false,str=0.8,temp=50,adapt=64,radius=2,range=2,show=false) : clip offy= Width_S ? 0 : -1 clip=clip.ColorYUY2(off_y=offy,off_u=0,off_v=0,cont_y=15,cont_u=0,cont_v=0,gamma_y=0,opt="1-254",matrix="rec601s",debug=0,interlaced=true) clip= Width_S ? Tweak(clip,0.0, 1.1, 0.0, 1.0, false) : Tweak(clip,0.0, 1.2, 0.0, 1.0, false) Setmtmode(1) clip=clip.FrameCache(9).iFilterT("TBilateral(diameterL=9,diameterC=5,sDevL=1.8,sDevC=7.0,iDevL=1.8,iDevC=7.0,kernS=2,kernI=2,gui=false)") Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=2.0,plane=3,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=0,interlaced=true,svr=0) Setmtmode(2) clip=clip.FrameCache(9).TemporalCleaner(3,0) clip=clip.iFilterB("FluxSmoothT(6).LimitedSharpenFaster(ss_x=1.15,ss_y=1.15,Smode=4,strength=150,soft=-1,edgemode=1).WarpSharp(64,3,96)") return clip }
#---------------------DVD---------------------- function Filter_DVD(clip clip, int "Test") { clip= Test==1 ? subtitle(clip,"DVD",x=650,y=20) : clip Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=1.8,beta=1,plane=4,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=2,interlaced=true,svr=0) return clip }
>>381 追伸 入門者の方へ 最新の「AviSynth 2.5.8.5」にして[Setmtmode]を削除すれば問題は発生しません(NicAC3SourceのCH指定は不要) MeGUI用
メモ替わりにして申し訳ないが最後に整理したので入門者の方が参考にしてくだされば幸いです(画質、難易度は除外) (入門者用 GV-MVP/GX2W DGIndex MeGUI HWインタレ AviSynthMT 2.5.7.5 ※setmtmodeを外せばAviSynth 2.5.8.5可) 例 DGIndexで作成 バトルスターギャラクティカ.d2v バトルスターギャラクティカ Tc0 L2 2ch 48 384 DELAY 0ms.mp2 scriptに登録(avs) " Tc0 L2 2ch 48 384" script名を作成(avs) バトルスターギャラクティカ+" DELAY 0ms"+"M"+.avs MeGUI(Video,Audio) バトルスターギャラクティカ DELAY 0msM.avs Setmtmode(2,0) # マルチチャンネル(AC3)を使用する場合は左記の「#Setmtmode(2,0)」をコメントアウトし「AC3_DownMix="×"」してから使用にする Auto="○" Crop="○" Crop_X=704 Crop_Y=480 BorderX="0" BorderY="0" Test=0 Range=30 UTimingH=0 VTimingH=0 AC3_DownMix="○" #------------------------------------------------- # Auto(自動Crop)Crop(○Crop_X/Y ×Source ※Auto時無効)BorderX/Y/Test(額縁)=OFF(0):ON(1) Range(Crop感度)UVTimingH(UV補正) # ○(有効)×(無効) ※AVS Examples [File-Name DELAY -100ms?.avs]「?」= ("D"(DVD)/"M"(Movie)/"A"(Anime)/""(None)) (BorderX/Y=Source) #------------------------------------------------- AutoS="○"==Auto CropS="○"==Crop BorderXS="1"==BorderX BorderYS="1"==BorderY AC3_DownMixS="○"==AC3_DownMix global Plugin="C:\Program Files\AviSynth 2.5\plugins+\" global Audio_mp2=" Tc0 L2 2ch 48 384" global Audio_ac3=" T80 3_2ch 448Kbps"
#------------------------------------------------- LoadPlugin(Plugin+"mt_masktools-25.dll") LoadPlugin(Plugin+"DGDecode.dll") LoadPlugin(Plugin+"autocrop") LoadPlugin(Plugin+"TComb.dll") LoadPlugin(Plugin+"gradfun2db.dll") LoadPlugin(Plugin+"AddGrainC.dll") LoadPlugin(Plugin+"ColorYUY2_for_25.dll") LoadPlugin(Plugin+"DeGrainMedian.dll") LoadPlugin(Plugin+"FFT3dGPU.dll") LoadPlugin(Plugin+"TemporalCleaner.dll") LoadPlugin(Plugin+"TBilateral.dll") LoadPlugin(Plugin+"FluxSmooth.dll") LoadPlugin(Plugin+"RemoveGrainSSE3.dll") LoadPlugin(Plugin+"warpsharp.dll") LoadPlugin(Plugin+"NicAudio.dll") #------------------------------------------------- Import(Plugin+"myFunctions.avs") Import(Plugin+"GradFun2DBmod.avsi") Import(Plugin+"LimitedSharpenFaster.avsi")
#------------------------------------------------- # MAIN #----(READ)--------------------------------------- script_path=Script_Get() mode = Mode_Get(script_path) AV_Get(mode,script_path,AC3_DownMixS) AssumeFrameBased().ComplementParity() #----(Constant_set)------------------------------- st_width=width() st_height=Height() st_left=(st_width-Crop_X)/2 st_top=(st_height-Crop_Y)/2 #----(NTSC_Filter)-------------------------------- (mode=="A" || mode=="M") ? UVTimingH(UTimingH,VTimingH,false).TComb() : nop() #----(Crop)--------------------------------------- AutoS ? autocrop(mode=Test,wmultof=16,hmultof=8,samples=20,aspect=0,threshold=Range) : CropS ? crop(st_left,st_top,Crop_X,Crop_Y) : nop() #----(Main_Filter)-------------------------------- mode=="D" ? Filter_DVD(Test) : mode=="M" ? Filter_Movie(Test) : mode=="A" ? Filter_Anime(Test) : nop() #----(Border)------------------------------------- BorderXS ? AddBorders((st_width-Width())/2,0,(st_width-Width())/2,0,$000000) : nop() BorderYS ? AddBorders(0,(st_height-Height())/2,0,(st_height-Height())/2,$000000) : nop() return last #------------------------------------------------- # END #-------------------------------------------------
#--------------------Script_Get------------------- function Script_Get() { Try{assert(false)}Catch(err_msg){err_msg = Midstr(err_msg,Findstr(err_msg,"(") + 1) script_path = Leftstr(err_msg,strLen(err_msg) - Findstr(Revstr(err_msg),","))} return script_path } #---------------------Mode_Get-------------------- function Mode_Get(string "script_path") { mode = Midstr(script_path,Findstr(script_path,"avs") - 2, 1 ) return mode } #------------------------------------------------- # DGIndex / READ Video_File.d2v Audio_File.mp2(ac3) #------------------------------------------------- #----------------------AV_Get--------------------- function AV_Get(string "mode", string "script_path", bool "AC3_DownMixS") { Video_path = Leftstr(script_path,Findstr(script_path,"DELAY") -2 ) Error_name = Rightstr(script_path,Findstr(Revstr(script_path),"\") - 1) Video = Exist(Video_path+".d2v") ? MPEG2Source(Video_path+".d2v") : Assert(false,+Error_name+".d2v"+" : File not found") Audio_Delay = Midstr(script_path,Findstr(script_path,"DELAY") + 6 ) Audio_Delay = Leftstr(Audio_Delay,Findstr(Audio_Delay,"ms") - 1 ) Audio_option = mode!="D" ? Audio_mp2+" DELAY "+Audio_Delay+"ms.mp2" : Audio_ac3+" DELAY "+Audio_Delay+"ms.ac3" Exist(Video_path+Audio_option) ? nop() : Assert(false,+ Error_name+Audio_option+" : File not found") st_ch = AC3_DownMixS ? 2 : 6 mode=="D" ? AudioDub(Video,Effect_AC3(NicAC3Source(Video_path+Audio_option,st_ch))) : AudioDub(Video,NicMPG123Source(Video_path+Audio_option)) return last }
#--------------------Effect_AC3------------------ function Effect_AC3(Audio) { org_ch=Audiochannels(Audio) F_L= org_ch>=1 ? GetChannel(Audio,1).Normalize().AmplifydB(8.80) : nop() F_C= org_ch>=2 ? GetChannel(Audio,2).Normalize().AmplifydB(8.80) : nop() F_R= org_ch>=3 ? GetChannel(Audio,3).Normalize().AmplifydB(8.80) : nop() S_L= org_ch>=4 ? GetChannel(Audio,4).Normalize().AmplifydB(8.80) : nop() S_R= org_ch>=5 ? GetChannel(Audio,5).Normalize().AmplifydB(8.80) : nop() LFE= org_ch>=6 ? GetChannel(Audio,6).Normalize().AmplifydB(8.80) : nop() org_ch==1 ? MergeChannels(F_L) : nop() org_ch==2 ? MergeChannels(F_L,F_C) : nop() org_ch==3 ? MergeChannels(F_L,F_C,F_R) : nop() org_ch==4 ? MergeChannels(F_L,F_C,F_R,S_L) : nop() org_ch==5 ? MergeChannels(F_L,F_C,F_R,S_L,S_R) : nop() org_ch==6 ? MergeChannels(F_L,F_C,F_R,S_L,S_R,LFE) : nop() return last } #-------------------Filter_Movie------------------ function Filter_Movie(clip clip, int "Test") { clip= Test==1 ? subtitle(clip,"Movie",x=650,y=20) : clip Setmtmode(2) clip=clip.ColorYUY2(off_y=-1,off_u=0,off_v=0,cont_y=0,cont_u=0,cont_v=0,gamma_y=3,opt="1-254",matrix="rec601s",debug=0,interlaced=true) clip=clip.FrameCache(9).DeGrainMedian(2,3,1,interlaced=true) Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=1.8,plane=4,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=2,interlaced=true,sharpen=1.5,svr=0.5) return clip }
#-------------------Filter_Anime------------------ function Filter_Anime(clip clip, int "Test") { clip= Test==1 ? subtitle(clip,"Anime",x=650,y=20) : clip Width_S= Height(clip)<464 ? true : false Setmtmode(2) clip=Width_S ? GradFun2DBmod(clip,thr=1.2,mode=2,chroma=false,str=0.8,temp=50,adapt=64,radius=2,range=2,show=false) : clip offy=Width_S ? 0 : -1 clip=clip.ColorYUY2(off_y=offy,off_u=0,off_v=0,cont_y=15,cont_u=0,cont_v=0,gamma_y=0,opt="1-254",matrix="rec601s",debug=0,interlaced=true) clip=Width_S ? Tweak(clip,0.0, 1.1, 0.0, 1.0, false) : Tweak(clip,0.0, 1.2, 0.0, 1.0, false) Setmtmode(1) clip=clip.FrameCache(9).iFilterT("TBilateral(diameterL=9,diameterC=5,sDevL=1.8,sDevC=7.0,iDevL=1.8,iDevC=7.0,kernS=2,kernI=2,gui=false)") Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=2.0,plane=3,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=0,interlaced=true,svr=0) Setmtmode(2) clip=clip.FrameCache(9).TemporalCleaner(3,0) clip=clip.iFilterB("FluxSmoothT(6).LimitedSharpenFaster(ss_x=1.15,ss_y=1.15,Smode=4,strength=150,soft=-1,edgemode=1).WarpSharp(64,3,96)") return clip } #-------------------Filter_DVD-------------------- function Filter_DVD(clip clip, int "Test") { clip= Test==1 ? subtitle(clip,"DVD",x=650,y=20) : clip Setmtmode(5) clip=clip.FrameCache(9).fft3dGPU(sigma=1.8,beta=1,plane=4,bw=4,bh=2,ow=2,oh=1,bt=4,mode=1,wintype=2,interlaced=true,svr=0) return clip }
.
.
.
.
.
.
.
.
.
404 :
名無しさん@編集中 :2009/02/18(水) 18:02:44 ID:mJiTBtm4
なんか板全体が荒らされてるみたいね とりあえずDAT落ちしないようage
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。