お前らのショボイAvisynthスクリプト貼ってください

このエントリーをはてなブックマークに追加
931名無しさん@編集中:2006/05/08(月) 01:11:24 ID:mxvaCdqX
932名無しさん@編集中:2006/05/08(月) 01:12:26 ID:dCKrS2oo
C3Dは前後フレームを参照する3D-NRも含んでるので
それだと、前後フレームが別フィールドの画を参照してしまう。
2Dのみのフィルタじゃなかったら、フィールドも分けるように。
でも同じフィルタが複数回動作できない作りのものもあるので要注意
wikiとかに説明があったかと思う。
separatefields
a=selecteven.Convolution3D("movieHQ")
b=selectodd.Convolution3D("movieHQ")
interleave(a,b)
lanczosresize(640,last.height)
weave

もちろんlanczosをC3Dの後ろに、それぞれくっつけても可。
というかそっちの方が間違いが起きない。
933名無しさん@編集中:2006/05/08(月) 01:33:07 ID:XGfh7drG
>>932
レスサンクスです。
LanczosをC3Dの後ろに引っ付けるということは

separatefields
a=selecteven.Convolution3D("movieHQ")
b=selectodd.Convolution3D("movieHQ")
a=selecteven.lanczosresize(640,240)
b=selectodd.lanczosresize(640,240)
interleave(a,b)
weave

でいいんでしょうか?
934名無しさん@編集中:2006/05/08(月) 01:35:14 ID:dCKrS2oo
separatefields
a=selecteven.Convolution3D("movieHQ").lanczosresize(640,last.height)
b=selectodd.Convolution3D("movieHQ").lanczosresize(640,last.height)
interleave(a,b)
weave
935名無しさん@編集中:2006/05/08(月) 01:39:32 ID:dCKrS2oo
または記述行を分けても良いが、その場合はこう書く
separatefields
a=selecteven
b=selectodd
a=a.Convolution3D("movieHQ")
b=b.Convolution3D("movieHQ")
a=a.lanczosresize(640,last.height)
b=b.lanczosresize(640,last.height)
interleave(a,b)
weave
または
separatefields
a=selecteven
a=a.Convolution3D("movieHQ")
a=a.lanczosresize(640,last.height)
b=selectodd
b=b.Convolution3D("movieHQ")
b=b.lanczosresize(640,last.height)
interleave(a,b)
weave
936名無しさん@編集中:2006/05/08(月) 01:44:59 ID:XGfh7drG
なるほど、そういうことでしたか。
助かりました。ありがとう!
937名無しさん@編集中:2006/05/08(月) 01:45:44 ID:dCKrS2oo
えっと別に間違いじゃないんだが、記述を分ける場合だと
lanczosresize(640, a.height)
とかlastじゃなく、a,bを指定した方がよいかも。
ちなみにlastだと、separatefielsの直後のクリップを指すことになる。
938名無しさん@編集中:2006/05/14(日) 15:07:36 ID:kGJbbpDO
hqdn3dってデフォだとかなり残像出ない?(特に暗い画面?)
3DNRってことで多少は仕方無いんだろうけど
939名無しさん@編集中:2006/05/15(月) 06:39:26 ID:izQAtOkE
目民のまとめ

スクリプトを改良(藁) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/613
駄目だしされる ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/617
許してもらえるための条件を提示される ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/619-621
荒らしだす(1回目) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/728
名無しで自己擁護(1回目) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/729
荒らしだす(2回目) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/905
名無しで自己擁護(2回目) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/919
名前欄を消し忘れてスクリプトを貼る ttp://pc8.2ch.net/test/read.cgi/esite/1147577504/14

正体が完全にばれる ttp://pc8.2ch.net/test/read.cgi/esite/1147577504/16-17
940名無しさん@編集中:2006/05/17(水) 20:37:55 ID:Q+VbyTlE
目民のまとめ

スクリプトを改良(藁) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/613
駄目だしされる ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/617
許してもらえるための条件を提示される ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/619-621
荒らしだす(1回目) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/728
名無しで自己擁護(1回目) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/729
荒らしだす(2回目) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/905
名無しで自己擁護(2回目) ttp://pc8.2ch.net/test/read.cgi/esite/1146747314/919
名前欄を消し忘れてスクリプトを貼る ttp://pc8.2ch.net/test/read.cgi/esite/1147577504/14

正体が完全にばれる ttp://pc8.2ch.net/test/read.cgi/esite/1147577504/16-17
941名無しさん@編集中:2006/05/18(木) 01:18:24 ID:neDH5t/m
>>938
出るね。ちょうど漏れも気になってた。解決策あるのかな?ソース落としてみたけどワカラナス
942名無しさん@編集中:2006/06/26(月) 14:10:07 ID:pJP+XK0V
24/30/60
VFR

PluginDir = "C:\Program Files\AviSynth 2.5\plugins\"
LoadPlugin(PluginDir + "DGDecode.dll")
LoadPlugin(PluginDir + "IT.dll")
LoadPlugin(PluginDir + "TDeint.dll")

MPEG2Source(E:\"hage.d2v")
Crop(8,0,704,480)
c1 = trim(0,1620).assumefps(59,94,false) #30
c2 = trim(621,2524).IT(fps=24, diMode=1).assumefps(59,94,false) #24
c3 = trim(2525,2772).TDeint(mode=1).assumefps(59,94,false) #60
c4 = trim(2773,2849).assumefps(59,94,false) #30
c5 = trim(2850,3669).IT(fps=24, diMode=1).assumefps(59,94,false) #24
c6 = trim(3670,3735).TDeint(mode=1).assumefps(59,94,false) #60
c1 + c2 + c3 + c4 + c5 + c6
return last

・タイムコード
# timecode format v1
assume 23.976
0,1620,29.97
2525,2772,59.94
2773,2849,29.97
3670,3735,59.94

よくわかってないのでつっこみください。
943名無しさん@編集中:2006/06/26(月) 14:29:58 ID:pJP+XK0V
ってタイムコードめちゃくちゃだ。
944名無しさん@編集中:2006/06/26(月) 15:01:01 ID:pJP+XK0V
trimもだ。何度もスマソ。
945名無しさん@編集中:2006/06/26(月) 15:02:03 ID:pJP+XK0V
ソース読み込みr
その辺スルーしてくださいorz
946名無しさん@編集中:2006/06/26(月) 16:28:14 ID:dySvtXTg
もちつけw
947名無しさん@編集中:2006/06/26(月) 16:35:03 ID:Q38H6qRb
0.627659574fps
948名無しさん@編集中:2006/06/26(月) 18:28:04 ID:9mZJ14JG
素直にIts使っとけ
949名無しさん@編集中:2006/06/26(月) 18:42:35 ID:urNk3DUg
これダウソしようとするとセキュウテイがはじくけど大丈夫?
950名無しさん@編集中:2006/06/26(月) 21:18:36 ID:jwPkZmt8
>>942
なるほどそのアイデア面白い。漏れが初めて見ただけかもだけど。
FrameEvaluateあたりでタイムコードを別ファイルに出力できるようにすれば
単ファイルの.avsでVFRできるね。

日本では.auoでいきなり120にするのが一般的だけど
海外方式で似非30fps aviにタイムコードを利用してドロップフレームを挿入すれば
120fpsの疑似VFRもできると。
951名無しさん@編集中:2006/06/26(月) 22:56:02 ID:Q38H6qRb
>>942
下のは漏れ風に書いちゃったやつだけどこういう事かな

#最初に良く使用する関数をあらかじめ定義して読み込む
Global Pr1 = AvsDir + "ProgreTFM32.avs" #TFM(d2V=Filename+".d2v",mode=3,PP=2)#,display=true)
Global Pr2 = AvsDir + "ProgreAuto0.avs" #Auto24fps(drop = False, threshold = 24, border = 16, mode = "", debug = False)
Global IV0 = AvsDir + "fps24Tdcm1.avs" #tdecimate(mode=1,hybrid=0,noblend=true)
Global IV1 = AvsDir + "fps24IT1.avs" #IT(fps = 24, ref = "TOP", diMode = 1) そのほか諸々・・

c=ソース読み込み好きなように
c1=Imp(c,0,0,Pr1,Rate)
Last=Imp(c,0,0,Pr2,Rate)
c10=c.AutoBob.Assumefps(29970,Rate,False)

Rate=1000
ofs=0
Trim(0+ofs,1620+ofs).Assumefps(29970,Rate,False)
\ + Imp(c1,1621+ofs,2524+ofs,IV0,Rate)
\ + Trim(C10,5050+ofs*2,5545+ofs*2).Assumefps(29970,Rate,False)
\ + Trim(2773+ofs,2849+ofs).Assumefps(29970,Rate,False)
\ + Imp(c,2850+ofs,3669+ofs,IV1,Rate)
\ + Trim(C10,7340+ofs*2,7471+ofs*2).Assumefps(29970,Rate,False)

Return Last

# timecode format v1
Assume 23.976
0,1620,29.97
1621,2343,23.9693694690266
2344,2839,59.94
2840,2916,29.97
3573,3704,59.94
952名無しさん@編集中:2006/06/26(月) 22:57:12 ID:Q38H6qRb
定義関数とか

Function Imp(clip "Clip",int "Start",int "End",
\ String "Setting",int "Rate",bool "Connect")
{
FC = Eval("Clip.trim(Default(Start,0),Default(End,0))"
\ + "Import(Setting)")
C = Default(Connect,False) == True ?
\ Start == 0 ? FC : Clip.trim(0,-Start) + FC : FC
End = Default(End,0) < 0 ? Start : End
C = Default(Connect,False) == True ?
\ End == 0 ? C :
\ End == Clip.FrameCount()-1 ? C :
\ C+ Clip.trim(End + 1,0) : FC
C = Assumefps(C,29970,Default(Rate,1000),False)
return C
}

function AutoBob(clip Clip,int "Start",int "End")
{
color_space = clip.IsRGB24() ? "RGB24" : clip.IsRGB32() ? "RGB32" : "Others"
clip = ((color_space == "RGB24") || (color_space == "RGB32")) ?
\ clip.ConvertToYUY2(interlaced = true) : clip
c = Clip.trim(Default(Start,0),Default(End,0))
c1 = c.AutoDeint("")
c2 = c.SeparateFields().Trim(1, 0).Weave.AutoDeint("")
bbb_clip = Interleave(c1, c2).AssumeFrameBased()
return_clip = (color_space == "RGB24") ? bbb_clip.ConvertToRGB24(interlaced = true) :
\ (color_space == "RGB32") ? bbb_clip.ConvertToRGB32(interlaced = true) : bbb_clip
return return_clip
}
953名無しさん@編集中:2006/06/26(月) 23:04:36 ID:Q38H6qRb
フレーム操作系はエクセルとVBAなどで極力自動化して
VFR用のタイムコード、WMToolのVFRエンコ定義ファイル、
120fpsならInsNull用のテーブルファイルを自動生成させるようにしてる。
でも管理できると修正がやりやすいというだけで
きっちりやろうとしたら力技でし'`,、'`,、(ノ∀`)'`,、'`,、
954名無しさん@編集中:2006/06/27(火) 00:10:04 ID:B957EUu9
緑色の肉のカレー食えば直るよ!
955名無しさん@編集中:2006/06/27(火) 00:14:49 ID:XEyzO9Sn
(;´д`)うぇぅえ
956名無しさん@編集中:2006/06/27(火) 00:18:31 ID:ws1T393d
>>951のようなスクリプトで
c
oldcount=framecount(c)
trim(xxx,xxx) + trim(xxx,xxx) + trim(xxx,xxx)
oldfps=framerate(c)
averagefps=(float(framecount(c))/float(oldcount))*oldfps
c = c.assumefps(averagefps)
としてaveragefpsの値を自動で他のスクリプトに読み込んで
エンコードの設定に使いたいけど俺の頭では無理だった
957名無しさん@編集中:2006/06/27(火) 01:46:08 ID:ya2ozl/d
俺のような馬鹿にとって、trim連結スタイルのvfrは、trimのパートから
timecode fileへの変換の処理がやはり難物。今使ってる無理やり秀丸マクロだと
こ汚く柔軟性もなく、ちょっとした流儀の変更でも一苦労。やはり一度まじめに勉強しないと…
入力に関しては、VDMのScriptEditorをmayuで弄ったらだいぶ楽になり、自分なりに満足気味。日記おわり。
958950:2006/06/27(火) 03:34:58 ID:w1mJ0NX4
てなわけでタイムコードも一緒に作る関数を作ってみた。
ロードされた瞬間にタイムコードファイルを生成。
フレーム数は別に計算しなくても取ればいいよね?という方向で。
tc2cfrで120化して確認。

もし使うなら2つの関数をどっかに追い出してImportするといいと思う。
FPSの数値もclipからとることにしたので
きれいな数値にしたい人はAssumeFPSとかで設定してくださいまし。

グローバル変数使っちゃってるのが汚いけど
なんかうまい方法あったら変えて。

大きすぎると怒られたので関数定義部と利用部を分割で。
959950:2006/06/27(火) 03:35:56 ID:w1mJ0NX4
function WriteTimeCodeHeader(clip, timecode_path) {
clip.WriteFileStart(timecode_path, """ "# timecode format v1" """)
clip.WriteFileStart(timecode_path, """ "Assume " + string(clip.framerate) """, append=true)

return clip
}
function ProcessRangeVFR(clip, timecode_path, deintfunc, after_deint_func) {
tmp = clip
Strlen(Default(deintfunc, "")) > 0 ? Eval("tmp = tmp." + deintfunc) : nop()
Strlen(Default(after_deint_func, "")) > 0 ? Eval("tmp = tmp." + after_deint_func) : nop()

tmp.WriteFileStart(timecode_path, """ string(vfr_current_real_frame) + "," + \
string(vfr_current_real_frame + tmp.framecount - 1) + "," + string(tmp.framerate) """, append=true)
global vfr_current_real_frame = vfr_current_real_frame + tmp.framecount

return tmp.AssumeFPS(clip)
}
960950:2006/06/27(火) 03:37:05 ID:w1mJ0NX4
function filterfunc(clip) {
return clip.Deen("a3d",1,4,5,2.0).LanczosResize(640,480,8,0,-8,0)
}

src = MPEG2Source(...)

timecode_path = "d:\timecode.txt"
global vfr_current_real_frame = 0
src.WriteTimeCodeHeader(timecode_path)
ProcessRangeVFR(src.Trim(44000,45375), timecode_path, "TFM().TDecimate(mode=1)", "filterfunc()") + \
ProcessRangeVFR(src.Trim(45376,48071), timecode_path, "", "filterfunc()") + \
ProcessRangeVFR(src.Trim(48072,48400), timecode_path, "TFM().TDecimate(mode=1)", "filterfunc()")
961名無しさん@編集中:2006/06/27(火) 06:36:23 ID:n4PxCmVQ
よくわかんないけどすごい
962名無しさん@編集中:2006/06/27(火) 06:54:16 ID:fVuTveOS
俺もよくわからんが、逆テレシネしたときの端数はどうなってるの?
963名無しさん@編集中:2006/06/27(火) 08:09:36 ID:n4PxCmVQ
>>942みたいにtrimでfps区切ったあとそのavsをAviutlに食わせて目視でフレームレートかわるシーンに移動してそのフレームをタイムコードに書く…
ってやりかたでVFR作って(る気になって)るんだけどもっとかしこいやり方誰かおすえてください。>>953氏の自動化とか詳しく聞きたいです。
端数補正?なんて今まで考えたこともなかったし聞いてもおれの脳みそではよくわからんorz
964950:2006/06/27(火) 12:40:40 ID:w1mJ0NX4
>>962
まずFramecountプロパティでそのクリップのフレーム数を取れるのが前提。
clip = other.Trim(0,20)
Subtitle(string(clip.Framecount)) # フレーム数を表示

そんで、clipに逆テレシネフィルタをかけるとそのフィルタによって
逆テレシネされた分クリップのフレーム数が変化するわけ
clip.IT(ref="TOP", fps=24).Framecount # => 減ってる

実際のフィルタによって生成された数を取得してるのでズレることはないはず。
あとはその出力を足し算して保持しておけば、
その範囲のスタートフレームもわかるから
フレーム位置を特定できる、というわけ。

# current変数に維持しておけば
# 範囲はcurrentからcurrent + clip.Framecount - 1で取れる。そして
current = current + clip.Framecount
# で更新。

ついでにAssumeだとか第3カラムのFPSの項目はFramerateプロパティで
取ってしまえば手動で書かなくていいかららくちん。

だからProcessRangeVFR(クリップ, タイムコードファイル名, 逆テレシネ関数片, フィルタ関数片)
で出力をつなげたものだけを出力すればずれてないタイムコードがでてくる。

逆テレシネ部分とフィルタ部分でEvalを使ってるのは
ただこの関数を汎用化したかっただけなので埋め込んでもかまわないし、
そもそも逆テレシネ済みのクリップとassumefpsの引数だけ渡したほうがよかったかもしれない。

あと、罠なのはWriteFileFirst. 引数の文字列が出力されるのではなく
引数の文字列が評価されたものが出力されるので気をつけること。
965名無しさん@編集中:2006/06/27(火) 19:22:49 ID:w/zQyOy0
VirtualDubMod のショートカットキーが知りたいんですが
Home
End
Del
Ctrl+左右キー
Alt+左右キー
は分かりましたが,次のシーンを検索 みたいなボタンのショートカットが分かりません。
どなたか 教えてもらえませんかm(_ _)m
966名無しさん@編集中:2006/06/27(火) 19:36:46 ID:nVFjmm/8
Ctrl+Shift+Right

メニュのgoを見れば全部分かるとは思うけど。
967名無しさん@編集中:2006/06/27(火) 19:47:27 ID:nVFjmm/8
あ、modか。modでなくちゃダメ?本家じゃいかんの?
968名無しさん@編集中:2006/06/27(火) 21:36:39 ID:k3KdpaKI
Shift+左右キーでキーフレームに位置付けられる。
エンコ済みのファイルを切り貼りする時にとても便利。
969名無しさん@編集中:2006/06/27(火) 22:26:08 ID:UuJ+z5cR
つかVirtualDubスレで聞けよw
970名無しさん@編集中:2006/06/27(火) 22:51:35 ID:I1VYP3Br
              ジタバタ
    〃〃∩  _, ,_
     ⊂⌒( `Д´)  modじゃなきゃ嫌だい。本家なんていらないやい
       `ヽ_つ__つ
              ジタバタ
971名無しさん@編集中:2006/06/28(水) 00:27:08 ID:h/1+ID9i
そういやVDMは自分勝手にアサインしてるから元々の忘れたな
二画面ファイラのようにワンキーショートカットとかも

なんか面白そうなスクリプトでてきて、いい流れ。暇ができたら
有難く遊ばせてもらおうっと。今のところ自分の感心ランク一位は.u(かな
972950:2006/06/28(水) 00:37:30 ID:PpOkZ2le
長いのをまた貼り付けるのもアレだからにーやん先生のwikiを借りました。
http://www.avisynth.info/?EasyVFR
消されなければ残るはず。
973名無しさん@編集中:2006/06/28(水) 00:53:06 ID:h/1+ID9i
わお。今後も達人な人たちは気が向いたらshareよろしくです
974名無しさん@編集中:2006/07/06(木) 00:15:46 ID:0fHioZXf
>>964
やっぱり端数の処理は必要と思うよ。
反例を出すね。
今30フレームの画像があってこれを5分割する、つまり、1パッケージで6フレーム
この1パッケージを逆テレシネするとプラグインによっては5フレームを取得する。
でこれを結合すると30フレームを24fpsに変換したのに25フレーム取得することになる。
しかし、timecode v1の書式では各フレームを24fpsのタイミングで表示させてしまう。
従って、(25-24)*1/24秒分映像が長く表示される。
もちろん5の倍数でTrimすればこの問題はおきないけど、それは運だよね。
975名無しさん@編集中:2006/07/07(金) 18:24:49 ID:GBEFFB04
俺はなかなか運がいい
976名無しさん@編集中:2006/07/13(木) 14:11:42 ID:keEINFPA
動画のフレーム番号を指定すると、そのフレーム画像をクリップボードに出力して終了するようなものを
977名無しさん@編集中:2006/07/13(木) 15:35:35 ID:sRLjGiQw
>>976
Trim で任意のフレームを指定。
978名無しさん@編集中:2006/07/13(木) 15:41:28 ID:AGjm/Yxb
クリップボードに貼り付けるのはどの編集ソフトでも出来るよ
VDubとかAviUtlとかでやれ
979名無しさん@編集中:2006/07/13(木) 16:59:22 ID:sRLjGiQw
だいたい、フレーム番号探すのにDubとか使うしな。
980名無しさん@編集中
面倒なのでそういうソフト作ってください。

getframe.exe とかのソフトで

getframe.exe -i InputFileName(avi) -f FrameNo
とするとフレームゲットできるようなの