お前らのショボイAvisynthスクリプト貼ってください
擬似vfrなavi作成支援
要 InsNull.exe (Reena!付属 これのパラメータ作成用です) / (Avi30a)
# 最初に記述
#
global NulTblFilename="G:\work\tmp.tbl" # 出力されるNulフレームテーブルのファイル名
global tgtfps=120 # 変換後のfps(120fps化するなら120)
global nultbl="" # ワーク用
#
# スクリプト例
#
PriF
S0=trim(673,1921).f24p #オープニング
S1=trim(1922,2371).f30p
S2=trim(2372,2502).f24p
S3=trim(2503,2638).f30p
S4=trim(2639,2739).f24p
S5=trim(2740,3037).f30p
S6=trim(3038,3372).f24p
S7=trim(5468,22969).f24 #Aパート
S8=trim(25668,45927).f24 #Bパート
S9=trim(45928,48627).f24 #エンディング
S10=trim(50573,51472).f24 #次回予告
(S0+S1+S2+S3+S4+S5+S6+S7+S8+S9+S10).PostF
#
# return 直前に "WriteTbl"
#
WriteTbl
return last
#
# fps変換前後を "intbl"と"adtbl"で挟んでおく
#
function f24(clip c)
{ c=c.intbl.Auto24FPS(true,24,0,"blend").adtbl
return c }
function f24p(clip c)
{ c=c.intbl.Decimate(cycle=5).adtbl
return c }
function f30p(clip c)
{ return c.intbl.adtbl.assumefps(2997,125,false) }
#
#
# 変換前のフレーム数を記憶しておく(だけ)
#
function intbl(clip c)
{ global nulwok=c.framecount
return c }
#
# Nulフレーム計算
# fps: 変換後のfpsを明示(29.97fpsを30で表記、省略するとクリップから読み取る)
#
function adtbl(clip c,float "fps")
{ fps=default(fps,c.Framerate*30/29.97)
m=float(tgtfps)/fps #変換係数
i=nulwok*tgtfps/30 #必要なnulフレーム数
j=c.framecount*m #そのまま変換した場合のフレーム数
ct1= (i==j)? c.framecount : c.framecount-1 #終端補正とか
ct2= (i==j)? 0 : i+m-j
str=string(ct1)+":"+string(int(ct1*m))
str=(ct2!=0)? str+",1:"+string(int(ct2)) : str
str=(frac(ct1*m)!=0)? string(c.framecount)+":"+string(i) : str #変則fps等は補正なし均等割り
global nultbl=(nultbl!="")? nultbl+","+str : str
return c
}
#
# ファイル書き出し
#
function WriteTbl(clip c)
{ return c.WriteFileStart(NulTblFilename,"nultbl")
}
スクリプトをVDMにかけると、Nulフレームテーブルファイル(例だと"G:\work\tmp.tbl")が出来る
上の例だと中身は
"998:4990,1:6,450:1800,103:515,1:9,136:544,79:395,1:9,298:1192,268:1340,14000:70000,1:8,16208:81040",2160:10800,720:3600"
エンコ後のaviファイル(たとえば"G:\work\tmp.avi")とNulフレームテーブルファイルを
InsNullにかけて擬似vfr.aviに変換する
InsNull.exe [変換前のファイル] [変換後のファイル] @[Nulフレームテーブルファイル] [ヘッダ倍率]
例: (コマンドプロンプトまたはバッチファイル等から)
"C:\Reena\InsNull.exe" "G:\work\tmp.avi" "G:\work\tmp120.avi" @"G:\work\tmp.tbl" 5
InsNullで変換するとヘッダが微妙に狂うので、細かいこと気にする人はAvi30aで修正しておく
(120fpsの場合、 83416,10000000 → 25,2997)
とりあえず思いついて作ってみたが、最近ほとんど.avi作ってないんで、あまり検証してません
バグがあったら(あると思う)スミマセン
MKV用のTimecode出力ツールあるからその処理無駄くさいと思うが。
>>710 そんな物がありましたか… orz
( 出来れば詳細教えて下さい。洩れの検索能力では見つかりませんでした
最近作ってるのはほとんどmkvなんですが、ヌルフレームの方が扱い簡単なんで、
この考えでとりあえず作ってみて、うまい事いけば、タイムコードやチャプターの計算/出力まで
スクリプトに埋め込みできると思ったんですが…
???? ひょっとして、あじ氏のconverterの事ですか?
aviutl+asfを使えと言うご助言ですか? いたみいります
(converter群は優秀なツールだと思いますが、大元のvfr作成にどのように使用するか、ご教授下さい)
kiraru2002のとこのitsは使えないの?
Reena!とかdougaαの出力をカット&ペーストで利用できそうな気がするけど?
…… どうゆう判断基準で、どこからどこまでをカットして、
どこにペーストするのか、 そもそも何のためにカット&ペーストするのか、
洩れの知能では分かりませぬ ……
レスが無いなぁ……
分割結合エンコか自動VFRで十分なのかな?
貼っちまった義務上、修正
/計算を切捨→6捨7入(格納fpsが30の公倍以外の精度用)
/1フレーム以下の時のヘマ
+α
#
function adtbl(clip c,float "fps")
{ fps=default(fps,c.Framerate*30/29.97)
m=float(tgtfps)/fps # 変換係数
i=round(float(nulwok)*tgtfps/30-0.2) # 必要なnulフレーム数
j=c.framecount*m # そのまま変換した場合のフレーム数
ct1= (i==j)? c.framecount : c.framecount-1 # 終端補正とか
ct2= (i==j)? 0 : int(i+m-j)
str=string(ct1)+":"+string(int(m*ct1))
str=(ct2!=0)? str+",1:"+string(ct2) : str
str=(frac(ct1*m)!=0 || c.framecount==1)? string(c.framecount)+":"+string(i) : str
# 変則fps等は補正なし均等割り
global nultbl=(c.framecount==0)? nultbl
\ : (nultbl!="")? nultbl+","+str : str
return c
}
#
# 24/30/60fps以外も使えるが、格納fpsによっては当然カクつく
# 20+24+30+48は144fps化がバランス良に思う
#
function f20(clip c,int "phase",string "method")
{ c=c.intbl
c=(defined(phase))? c.DoubleWeave.SelectEvery(3,phase)
\ : Eval("c."+default(method,"IT(fps=30,dimode=3)")+".Decimate(cycle=3)")
return c.adtbl.assumefps(2997,125,false)
}
function f48(clip c,int "phase",string "method")
{ c=c.intbl
c=Eval("c."+default(method,"TDeint(mode=1,tryweave=true)"))
c=Eval("c."+(defined(phase)?
\ "SelectEvery(5,"+select(phase,"1,2,3,4)","0,2,3,4)","0,1,3,4)","0,1,2,4)","0,1,2,3)")
\ : "Decimate(cycle=5)" ))
return c.adtbl.assumefps(2997,125,false)
}
function fAnyFps(clip c,float fps,string "method")
{ c=c.intbl
c=Eval("c."+default(method,"TDeint(mode=1,tryweave=true)"))
c=c.FDecimate(fps*29.97/30)
return c.adtbl.assumefps(2997,125,false)
}
同じ方だと思うが、
>>620-624のは、すごく参考にさせてもらってます
(自分でも理解がおよぶ部分だけパクって)。特に「24fps部分の終端補正」の部分は
目から鱗。ただ60pからんでくると、なんか妙なことになったりすることあるんで
結局分割してたりして…。将来的にはAVCとMP4でやりたいなあ、VFR。
>>718 レスどうも
30→60fps変換では、フレーム数が単純に倍になるだけで、
補正はいらないハズですよ
以前書いてみたのは、
30fps NフレームをMfpsに変換した場合のあるべきフレーム数は
NxM/30 だが、フレーム数は整数にしかならないので、
小数点以下端数がでる場合は、切捨てか切り上げされてしまう
それを、vfr化した時に、最終フレームの時間調整をして、
再生する上では999.2フレームとか0.8フレームとかにしよう、
という考えだったんです(mkv用タイムコード計算はこれでやりやすいのですが)
avi用に使ったのはもっと単純に
@fps変換前の長さは 変換前のフレーム数x1/30
Afps変換後の長さは 変換後のフレーム数x変換後のfps
@-A+変換後の1フレーム分の長さ→最終フレームのとるべき長さ
関数化してスクリプト内に入れてしまえば、計算に必要なパラメータはクリップから
読み取ればよいので、切捨て/切り上げを確認する手間も省けた次第
>補正はいらないハズ
わざわざ、どうもありがとうございます。
書き方が紛らわしかったのですが、60pからむと妙なことというのは、終端補正のことではなく
s0+s1+…のとこで、60pパートが「framerateあってないよ」と「時々」synthに叱られることがあって
「必ず」エラー吐くなら、かえっていいんですが、大抵は23.976で統一されて普通に繋がるんで、?。
(assumefps()のとこがうまくいってないのかな…)
原因は自分が根本を理解してないことにあると思うので、精進します
…ってたぶん精進できないけどw
この流れで質問しづらいけど、
インタレ保持で、DustかConvolution3D使っているのですが、
Dustは激重だし、Convolution3Dは少々ぼやける感じで・・・
みなさんは何をお使いですか?
FluxSmoothST
>>721 インタレ保持の方法は抜きにして、Dustとか使ってるということは実写かな。
最近のやつではRemoveGrain(スクリプト関数になったほう)がよさげ。
これは個人の画質(絵柄)の好みにもよるが、設定次第ではConvolution3D
とかよりも早くて好みの画質になることもある。と言っても、そんなにいろいろな
フィルタを試したわけじゃない俺が言う意見だから参考までにという事で。
TTempSmooth
TTempSmoothF
>>721 実写はdust(2〜3)
しかし重くてたまらん
どういうアルゴリズムやら
P4-2.4GHzだとソース(huffyuv)→中間ファイル(YUY2無圧縮)がFaeryDustで約8倍。
CCE-basicが2倍速2passで1倍。計9倍。
ソースが30分や1時間なら寝てる間・仕事に行ってる間に終わるからまぁいいかと諦めてる。
729 :
721:2005/05/03(火) 14:03:44 ID:Gd0FFG4H
色々ありがとうございます。
とりあえず、RemoveGrainとFluxSmoothTを実写インタレ保持テストしてみました。
RemoveGrainですがおっしゃるとおり、激早でした。
画質もRemoveGrain(2) ぐらいが標準でなかなかいい感じで、
強めのConvolution3Dぐらいの容量に収まりました。
RemoveGrainを通すとインタレ網が少なくなる?ようです。
だから、結構くっきりしてるのに縮むのかな??
色々テストしてみます。
インタレ縞が減るってフィールド崩れてるんじゃないの?
フィールド分離して、それぞれのフィールドにフィルタすれば良いじゃん。
これdustの常套手段だったはずだし。
video = mpeg2source("〜.d2v")
audio = MPASource("〜 -66ms.mpa", normalize=false)
DelayAudio(audio,-0.066)
AudioDub(video, audio)
AssumeFrameBased().ComplementParity()
Import("E:\avs\myFunctions.avs")
iDustB("FaeryDust", 1〜3, "YUY2", "kernelbob(order=1)")
#iFilterT("""removegrain(2)""")
Crop(8,0,704,480)
#LanczosResize(544,480)
AddRange("〜.vcf")
インタレエンコです。
みなさんはどんな感じで書いてますか?
長すぎるから貼らないがだいたい同じ
違いはAssumeTFF使ってるくらいか
MPEG2DEC_MPEG2Source("〜.d2v")
AssumeFrameBased().ComplementParity()
TomsMoComp(1, 5, 0)
Crop(8, 0, -8, -0)
LanczosResize(640, 480)
>>732 Import("E:\avs\myFunctions.avs") ##### 途中に書くと紛らわしいので先頭か末尾のどっちかに書く
video = mpeg2source("〜.d2v")
audio = MPASource("〜 -66ms.mpa", normalize=false).DelayAudio(-0.066)
AudioDub(video, audio)
AssumeFrameBased().ComplementParity()
AddRange("〜.vcf") ######## Addrange , Cropはフィルタ処理の前に置いた方
Crop(8,0,704,480) ######## 無駄な処理をしなくてよいので早く終わる
iDustB("FaeryDust", 1〜3, "YUY2", "kernelbob(order=1)")
#iFilterT("""removegrain(2)""")
#LanczosResize(544,480)
return last ##### 一応付けといた方がよい
MPEG2Source("xxx.d2v")
AudioDub(last,WavSource("xxx LPCM T01 48KHz.wav"))
YV12toYUY2
AssumeTFF()
DeDot(20,20,15,5)
DeCross(30,60,1,false)
InterlacedFluxSmoothST(7,7)
ConvertToYV12(interlaced=true)
return last
function InterlacedFluxSmoothST(clip clip,int s,int t) {
clip = clip.SeparateFields()
Top = clip.SelectEven().FluxSmoothST(s,t)
Bottom = clip.SelectOdd().FluxSmoothST(s,t)
clip = Interleave(Top,Bottom)
clip = clip.Weave()
return clip
}
ペグファイルのデコードはMPEG2DEC派が多いな。
まるもが寂しがってるぞ。
738 :
名無しさん@編集中:2005/05/09(月) 07:54:20 ID:FeFBsNOX
>>735 ツッコミサンクスす。
他にインタレエンコの書き方あったら教えて欲しいです。
iDustBってプラグイン探したけど見つからなかった。
皆さん、インタレ保持エンコの際はLanczosResize使ってないみたいだけど
使わない方がいいのかな?
>>739 縦方向を変化させなきゃ問題ないと思うよ。でもbilinearと変わらないことになりそうだけど。
>>740 LanczosResizeはインタレ対応なのですね。ありがとうございます。
インタレエンコしたら壊れてた・・・LanczosResizeが原因かと思ってたんだけどWNRが原因かな?
何がインタレ対応なのか1個ずつ使ってみないとわかりません。
>>741 自作関数って奴ですか。凄い技術ですね。
精進してくれ
>>742 凄い技術ですね。にワロタ。あと743の優しさにも感動したw。
何がインタレ対応かはドキュメント読めば書いてあるよ。interlaced=true/falseとかのオプションがあれば
そこをtrueにするだけ。それがないのはたいていプログレッシブの入力を予定してる。
あのね。インタレって簡単にいえば、縦に奇数番目と偶数番目のラインに「本来は別の画」がおりこまれてる
だけなの。だから縦方向に画素を混ぜるようなやつは上に書いたようなオプションがなければ壊れるし、
逆に縦にさえ混ぜなければ(横方向のみとか時間軸=前後のフレームのみとか)「インタレ対応」と書いて無くても
大丈夫。
で、「インタレースのまま」リサイズしたいなら上のレスのFluxSmoothの例にあるように
function InterlacedLanczosResize(clip i,int new_x,int new_y) {
i = i.SeparateFields()
top = i.SelectEven().LanczosResize(new_x, new_y/2)
btm = i.SelectOdd().LanczosResize(new_x, new_y/2)
return Weave(Interleave(top,btm))
}
とでもやればよし。まあ、こんなんしてリサイズした画をインタレ「保持」というかは個人的に疑問だけど。
用途はDVD規格に吐きたい時くらいか?
745 :
739:2005/05/15(日) 09:27:46 ID:QSThksvG
にーやん氏のところのShift_Fieldを簡略化してみますた。
よく考えればParity情報が正しければこれだけでいいんだな、と思って。
function InvertFieldOrder(clip c)
{
ParityC = GetParity(c)
c = c.SeparateFields
DominantF = c.SelectEven
SlaveF = c.SelectOdd
DominantF = DominantF.DeleteFrame(0)
c = Interleave(DominantF,SlaveF).Weave
return ParityC ? c : c.ComplementParity
}
フィールドオーダーが正しく設定されてないと変なクリップを合成します。
(AviSourceで呼び出している場合は注意が必要?)
フィールドオーダーが異なるソースを連結するときとかに使えます。
普段は全く用途がないです。
c=c.SeparateFields.SelectEvery(2, 1,0).Weave
一行で済むのでわ?
ゴメン
c=c.SeparateFields.SelectEvery(2, 1,2).Weave
ホントだ、Parity情報もキチンとひっくり返ってる・・・ orz
フィールドの情報って結構頑丈に保持されてるんですね・・
フィールド情報を取り扱うフィルタはどれもきちんとパリティ管理されている。
例
Trim
bool Trim::GetParity(int n)
{
return child->GetParity(n+firstframe);
}
interleave
inline bool __stdcall GetParity(int n)
{ return child_array[n % num_children]->GetParity(n / num_children); }
SelectEvery
inline bool __stdcall GetParity(int n)
{ return child->GetParity(n*every+from); }
SelectRangeEvery
bool __stdcall SelectRangeEvery::GetParity(int n){
return child->GetParity((n/length)*every+(n%length)); }
AddRange
bool __stdcall AddRange::GetParity(int n)
{
int i = 0;
while( n >= AddRangeData[i].end) { i++; }
if(i) {
if(!AddRangeData[i].MaskedFlag) n += AddRangeData[i].startframe - AddRangeData[i-1].end;
else n = AddRangeData[i-1].end - 1;
}
else {
if(!AddRangeData[i].MaskedFlag) n += AddRangeData[i].startframe;
else n = AddRangeData[i].startframe;
}
return child->GetParity(n);
}
752 :
名無しさん@編集中:2005/06/05(日) 18:16:12 ID:5V9UyYuA
ショボいの貼ってくれってコトだったんで。
LoadPlugin("MPEG2Dec3.dll")
LoadPlugin("AlignFieldsS.dll")
LoadPlugin("VSFilter.dll")
Video = BicubicResize(AlignFields(YV12toYUY2(MPEG2Source("hoge.d2v"))),720,406)
Audio = WavSource("hoge.wav")
AudioDub(Video,Audio)
VobSub("hoge")
msvcr70.dllが必要のないようにスタティックリンクしたもの。
msvcr70.dllが入ってる環境では無駄にファイルサイズが大きいだけのもの。
Plugins = "〜\AviSynth2.5\plugins\"
LoadPlugin(Plugins + "warpsharp.dll")
LoadPlugin(Plugins + "DGDecode.dll")
MPEG2Source("enc.d2v", idct=2, cpu=6, iPP=true)
YV12toYUY2()
LoadPlugin(Plugins + "cc.dll")
FrameCache(6).cc(y1=16, y2=80, c1=16, c2=118, yc=12, ylimit=false, climit=false)
LoadPlugin(Plugins + "IT.dll")
LoadPlugin(Plugins + "IVTC.dll")
FrameCache(6).UVTimingH(2, -1)
IT(fps=30, ref="TOP", blend=false)
Decimate(5, 16, 300)
LoadPlugin(Plugins + "SimpleResize.dll")
Crop(4, 0, -12, 0)
SimpleResize(640, 480)
LoadPlugin(Plugins + "convolution3d.dll")
FrameCache(6).Convolution3d(preset="animeHQ")
return last
Avisynth使い始めて2週間程です。いまいち何がいいのかとか分かってません。
画質より速度重視でしてます。24/30混合アニメ用。実写はDecimate(5, 16, 300)を抜いて使いまわし。
AthXP2000+定格で24分ソース1時間30分ちょい。
プラグインフォルダに置いているならLoadPluginを全て削除してくれ
あとFrameCacheは必要か?
>>756 フルパス記述しないとVDModがエラー出すので書いてます。
フレームキャッシュ入れても遅くなりはしないのでおまじない的に使ってます
あっそ。
つまり1行目のパスはだましなのか?
たぶんavisynthインストミスってるんだろうけど面倒なので
インストし直すよりスクリプト少々追加するだけで済むならと…('A`)
LoadPluginは上にまとめて書いたほうが見やすくないか?
その都度読み込む方が気に入ってるなら別に構わんが
756はオートロードの事を言ってるんだろうが、話がかみ合っていないのがオツ
>>755 画質より速度重視と言ってるのに、YUY2で処理する理由は?
>>757 例えば
s1=Trim(233,344).framecache(9).auto24fps()
…
s40=Trim(23456,34567).framecache(9).auto24fps()
s1++…s40
のようにたくさん分割して、後で結合するような記述があるとき
フレームキャッシュを入れると私の環境では
フレーム情報がおかしくなって、エンコード時に
Iフレーム情報が正常に記録されない場合がありました。
ですので、フレームキャッシュは入れないほうが無難な気がします。
(´・ω・`)プラグインオートローディングがされませんのです。
>>762 いつYV12とYUY2の変換していいのかワカラナサス
>>763 (´・ω・`)CMカット済みソース使ってます
フレームキャッシュは逆にキャッシュを制限するときに使ったら?
framecache(1)とかで。
とりあえずConvolution3DをYV12対応版に変えれば後は全部YV12で通せると思うよ。
つかなんでSimpleResize?
別にいいんじゃない?
説明みたら、2-tap linear interpolationで、最大の特長が
It's main advantage is that it will run somewhat faster than some of the others
だということだし。
俺としては、WarpedResize/InterlacedResize/InterlacedWarpedResize
の方に興味あるなあ。
確かに「画質より速度重視」って基準が決まってるとつっこみどころは限られてくるよな。
ああそんで
>>764 762のつっこみから分かると思うけど、基本的にYUY2で処理するよりYV12で処理する方が
速いんだす。でもってMPEG2Sourceから出てくるのはYV12なんだす。
となると、
・YV12でたくさんフィルタをかけると色が劣化するから嫌なんじゃボケ、という御仁
・「画質向上のために」どうしても使いたいフィルタがYUY2専用という状況
しかYUY2にする必要はないんだす。で、Convolution3DはYV12版もあるから大丈夫。
というわけでYV12のままがおすすめ。
あとは、後でエンコーダにYUY2で渡す必要があるとき、スクリプトの最後に
ConvertToYuy2を入れることはよくあるかな。
速度重視ならConvolution3dよりもBlurを弱めにかけるだけでもいいんじゃないだろうか
速度重視なら、idct=6, cpu=0, fastMC=trueではなかろうか?
あとccとか要るのかなあ?
YV12で通すのなら、convolution3dyv12とITもyv12対応版がいる
TMPGEncを使うの止めるなら最後にConvertToYUY2も追加しなくてよい
c3dのyv12版はyuy2版に比べるといまいちな気がする
yv12ならhqdn3dも試してみてほしい
>>768 今までで一番分かりやすいレスでしたthx
地上波アナログのMPEG2ソースなのでNR入れてます。
おまけにドット妨害とクロスカラーも酷いのでUnDotとDeDotも使ってましたが
時間軸でほとんど取れない感じだったので結局cc使ってます。
うちのソースではダメでしたがUnDotは早くてそれなりに低減されてたので結構よかったと思います。
Convolution3dのYV12版探してきてそこだけYV12で処理してみたら、
今までのYUY2で90分〜100分程だったのが60分〜70分程度にまで早くなりました。
個人的にはXP2000+でここまで早くなるとは思っていなかったので(今までaviutlで2時間以上)
結構満足してます。
そんな40分そこらでエンコしたいとか、そんな所までは思っていないし、いろいろ設定変えて
比較するのも面倒なのでこれくらいで妥協してみるのが良さそうかなと思いました。
>>772 んじゃ久しぶりにマジレスで
速度重視って事なら先に左右のクロップ済ませるべき
YV12でスルーするならConvolution3Dよりもhqdn3dの方が性能がよくノイズはよく取れる
速度が早いConvolution3DのYV12版だが、何か処理手抜きしてるんでノイズ除去性能は悪い
クロスカラーにはdecross、ドット妨害にはdedotと併用または使い分ける
ccは時間軸で混ぜるために残像がよく出たり、酷いとインターレース壊す
あとITのmode3で24fps化解除し解除残りはauto24fpsでブレンド処理するのが意外と早く綺麗だったりもする
無駄なフレームキャッシュは余計な時間が増えるだけになるので必要最低限にすること
IT(dimode=3)は前方参照する分誤爆率倍になる
フィールドオーダー正常ならdimode=2
IT.Auto24fpsでは解除残しはキレイにはならない
Auto24fps.ITではITがAuto24のブログレを壊す
併用はあまりよろしくない
↑フィールドオーダー正常ならdimode=1 の間違い
ttp://www.uploda.org/file/uporg122848.avi.html うちの酷い?ドット妨害…以前ドット妨害低減無しでエンコしたのから切り出で。
NRはconvolution3d以外もちょっとは使ってみたいと思います。
YV12版の方はTemporal influence currently disabled.と書かれてますから
2DNRという事なのでは、、、と
avisynthでの24/30混合の処理をどんな風に処理すればいいのか
aviutlから移行したばっかりではほとんど分からなかったので
最初はIT+Auto24fps使ってたのですが、どーしてもカクカクになってしまうのが
気になって今のDecimateでそれなりに満足してます(´・ω・`)
# 再生速度の変更
# ChangeSpeed(速度倍率)
function ChangeSpeed(clip clip, float speed)
{
Assert(!(speed <= 0.0), "ChangeSpeed : Error")
rate = HasAudio(clip) ? Audiorate(clip):1
f = Float(rate) / speed
p = Ceil (Log( f*1073741824.0 ) / Log(2) ) - 30 # 2^30
Assert(!(p > 30), "ChangeSpeed : Error")
p = (p < 0) ? 0:(30-p)
denominator = Pow(2, p)
HasAudio(clip) ? ResampleAudio(clip, Round( f * denominator ), Int(denominator) ):clip
HasAudio() ? AssumeSampleRate(rate):last
fps = HasVideo() ? Framerate():0.0
HasVideo() ? ChangeFPS(fps / speed):last
return HasVideo() ? AssumeFPS(fps):last
}
使用例
ChangeSpeed(3.5) # 3.5倍速
ChangeSpeed(2) # 2倍速
ChangeSpeed(1.0/2.0) # 半分の速度
ChangeSpeed(1.0/3.0) # 1/3の速度
勢いで作ってしまいましたが、同じ物が既にありましたっけ?
音でめんどくさいことやってるけど、TimeStretchじゃだめなん?
?
もうすぐこのスレも三年目か
ぐぐったら、こういうジョークがあった。
「アメリカ人が宇宙に行ったとき重力、気圧の関係でボールペンが使えなかった
そこでNASAを中心として、アメリカの最先端の技術を結集して宇宙で使えるボールペンを開発したんだって。
一方旧ソ連の宇宙船では鉛筆が使われていた。」
>>779の言っている意味がわかった気がする。
そういえばそのころ、そのボールペンが欲しかったなぁ〜
寝転がっても書けるから
784 :
777:2005/07/15(金) 19:44:24 ID:exHFLZEx
>>778 気付きませんでした、TimeStretchのtempoではなくrateを使えば同じ処理ができたんですね。
レス感謝です。
ネタがないからsynthのじゃなくてもいい?(ショボイことは間違いないよ)
Reena!の.task → .avs(範囲指定のみtrim形式に変換) awkスクリプト
CvReAvs.awk
BEGIN{ sc=1; tc=0
}
NR==1{ if ($0!~/^Reena! Task/) exit(255)
}
/^;/{ sc++; continue
}
sc==2{ gsub(/[ :\-\[\]]+/," ",$0);
printf("S%i=trim(%i,%i).f%i\n",tc++,$1,$2,$6)
}
END{ for(i=0;i<tc;i++) printf("%sS%i",i ? "+":"#\nS=",i);
print
}
使い方は↓のような.batのショートカットをデスクトップに置いて.taskをドロップ
if not exist %1 goto :end
C:\bin\gawk.exe -f C:\lib\CvReAvs.awk %1 1> "%~dpn1.avs"
:end
こっちはInsNull形式の.tbl → timecode.txt 変換
BEGIN{ RS=","; FS=":"; fn=0;
print "# timecode format v1";
print "assume 23.976";
}
{ s=sprintf("%i,%i,%f",fn,(fn+=$1)-1,$1/$2*119.88);
if(s!~/23\.9760*$/) print s;
}
ついでに .tbl → chapter.txt変換(trimした所に取りあえず全部チャプター)
BEGIN{ RS=","; FS=":"; cc=1; fc=0
}
$1>1{ s=fc/119.88;
h=int(s/3600); m=int((s-=h*3600)/60); s-=m*60;
printf("CHAPTER%02i=%02i:%02i:%06.3f\n",cc,h,m,s);
printf("CHAPTER%02iNAME= \n",cc++) #←全角スペース
}
{ fc+=$2
}
timecode変換とまとめて.bat
if not exist "%1" goto :end
C:\bin\gawk.exe -f C:\lib\CvTblTC.awk %1 1> "%~dpn1_t.txt"
C:\bin\gawk.exe -f C:\lib\CvTblCH.awk %1 1> "%~dpn1_c.txt"
:end
ショボイのがなかなかないもんで・・・貼れない;;
ひさしぶりにまにある見たら、今どきのawkはそんなにユルくはないらすい
2.15で動いてるからまぁいっか。
timecode.txt(v1) → .tbl変換
でもassumeで省略だと最後がわかりまへんので
"# all xxxxx"
↑とどこかに総フレーム数を書いておいてくらはい
BEGIN{ IGNORECASE=1
}
/^# +all +[0-9]+/{ al=$3
}
f&&!/^#/&&gsub(/\,/," ")==2{
pout($1-fc,as); pout((fc=$2+1)-$1,$3)
}
/^ *assume +[0-9.]+/{ as=$2; f=1
}
END{ if(f) pout(al-fc,as)
}
func pout(n,fps)
{ if(n>0){ printf("%s%i:%i",pf?",":"",n,n/fps*119.88+0.5); pf=1
}}
.tbl → timecode.txt 改
BEGIN{ RS=","; FS=":"
print "# timecode format v1";
print "assume 23.976"
}
{ s=sprintf("%i,%i,%.9f",fn,(fn+=$1)-1,$1/$2*119.88);
sub(/0+$/,"",s); if(s!~/23\.976$/) print s
}
END{ print "# all\x20" fn
}
789 :
名無しさん@編集中:2005/08/29(月) 21:04:41 ID:g86Td9+q
実写には、インタレ解除、NR系はよくないということを、この頃知った・・・
790 :
名無しさん@編集中:2005/08/29(月) 21:22:10 ID:n/B8MUTH
実写というのがアニメに対応する言葉として使われてるとして
NRはともかくインタレ解除は時と場合によるだろ
実写にも色々あるが60i物をインタレ解除するのは賢くないな
だが、2時間ものになるとサイズが半端じゃない。
さらにHDだと・・・
793 :
789:2005/08/30(火) 01:26:57 ID:9Jp5G5rZ
言葉足らずでした
実写60iはインタレ解除しないほうが綺麗でした。
NRてんこ盛り、インタレ解除してサイズ縮めるより、
ビットレートを下げる方向のほうが、自然で綺麗に感じる。
実写元24fpsは解除すべきか未だに迷う…色々試したけど、
avisynthでは限界を感じています。
俺は実写でもインタレ解除する。
静止画(コマ送り)でみると汚くなるけど、
動画としてみるならインタレ解除したほうが見やすい
まあ、アニヲタは死ねってことですな。
796 :
名無しさん@編集中:2005/09/01(木) 23:21:56 ID:sn5KzRoW
masktools.dllを使ってエッジを検出して
エッジ部分にのみUnsharpmaskをかけるには
どのようにスクリプトを書けばよいでしょうか。
798 :
名無しさん@編集中:2005/10/01(土) 12:43:14 ID:BWTZMBsy
age
799 :
名無しさん@編集中:2005/10/01(土) 20:07:54 ID:Y0LvytR5
答えられるか?
3人で一泊3万円の部屋に泊まることになった。
前払いで3万円を払ったが、後で主人が2万円の部屋に
案内してしまったことに気づいた。そこでバイトに1万円を
持たせて返してくるように言いつけた。ところがこのバイト、
7千円を自分のポケットに入れて、3千円をお釣りとして
返してしまった。
3千円のお釣りが帰ってきたので、払った宿代は27000円
バイトが盗んだお金は7000円
合計すると27000円+7000円=34000円
最初に払ったお金は3万円なのだが、余った4千円は
どこから生まれてきたのでしょう?
>>799 30,000=27,000+3,000
30,000=20,000+3,000+7,000
27,000=30,000-3,000
7,000=30,000-20,000-3,000
3,000=30,000-20,000-7,000
客は27,000しか払ってない。
バイトは7,000しか取ってない。
宿は20,000しかもらってない。
20,000 = 27,000 - 7,000
ってのも書けよ。
でも、きっとこの問題の本質は別のところにあるんだろうな。
客は27,000しか払ってないんだから、それ以上にお金が増える
はずがない。払った側の金額と受け取った側の金額を足して
いるんだから払った金額以上の額(34,000円)になるのは当然。
803 :
名無しさん@編集中:2005/10/01(土) 23:05:02 ID:L36wuQ9R
客が3人いました 宿代は30ドルだったので
ひとり10ドルづつ出しました
しかし宿屋の店主が25ドルにまけてやろうと思い
ボーイに5ドル客に返すよういいました
しかしポーイは2ドルくすねて 3ドルしか返しませんでした
そうすると ひとり9ドルだしたことになり
9×3=27ドル これにボーイの2ドルを足すと29ドル
残りの1ドルはどこに消えたのでしょう?
おい、おまえら
ここはショボイAvisynthスクリプトを貼るスレであって
おまえらのショボイ脳みそを晒す場所じゃないんだよ
確かにショボイな。
807 :
名無しさん@編集中:2005/10/02(日) 13:16:39 ID:CMJ1VNKN
mkj!
AssumeTFF()
function bbb(clip clip)
{
c1 = clip.TomsMoComp(1,4,1).AddBorders(0,1,0,0).crop(0,0,0,-1)
c2 = clip.ComplementParity().TomsMoComp(0,5,1)
clip = Interleave(c1,c2)
return clip
}
bbb()
TomsMoCompで60fps化したいんだけどこれでいいのかな…?
function TomsBob (clip c)
{ f=c.GetParity
c=c.SeparateFields.TomsMoComp(f?1:0,-1,0)
c=c.BilinearResize(c.width,c.height+1)
t=c.SelectEven.Crop(0,f?1:0,0,f? 0:-1)
b=c.SelectOdd.Crop(0,f?0:1,0,f?-1:0)
return interleave(t,b)
}
function Auto24Bob(clip c)
{ c1=c.Auto24fps(false,16,8,"blend")
c2=c.SeparateFields.Trim(1,0).Weave.Auto24fps(false,16,8,"blend")
return InterLeave(c1,c2)
}
function LanczosBob(clip c, float "d")
{ d=default(d,0.25) d=c.GetParity? d:-d
c=c.SeparateFields
t=c.SelectEven.LanczosResize(c.width,c.height*2,0,d,c.width,c.height)
b=c.SelectOdd.LanczosResize(c.width,c.height*2,0,-d,c.width,c.height)
return InterLeave(t,b)
}
>>810 スクリプトとは直接関係無いけど、
interleaveはこれで一語だぞ。inter-leaveではなく。
名詞形は、interleaf
814 :
名無しさん@編集中:2005/11/01(火) 20:37:13 ID:/FAL74x0
ほしゅ
。 ο ,.。 ο
ο
,. ゚ ο o
。 o
ο 。 ゚ ο
,ヘ、 ,.:-一;:、ο人がまるでいない・・・
_,.-';: ミ;;:;,. _,.;:゙ミ '^ー、 ο 。
,r( ´・ω・) ,.*。\,r'! ο
.,。 ツィー=ニ彡' ,.。 _j
〜'l つとノ '" {-'
,.;:;u‐―u' ,.。* ._,.-!
-=、,r' ,r='i:,ィ'
,.*。 ,__,.-=':トー'
ヘ_,、 /;;::-一'
‐-、`-'iニレ'^'
そこはどこの無人島だ。
。 ο ,.。 ο
ο
,. ゚ ο o
。 o
ο 。 ゚ ο
,ヘ、 ,.:-一;:、ο人がまるでいない・・・
,.-';: ミ;;:;,. _,.;:゙ミ '^ー、 ο 。
,.:-一;:、 ,r( ´・ω・) ,.*。\,r'! ο
ミ;;:;,. _,.;:゙ミ .,。 ツィー=ニ彡' ,.。 _j
( ´・ω・)<だね'l つとノ '" {-'
ィー=ニ彡' ,.;:;u‐―u' ,.。* ._,.-!
l つとノ-=、,r' ,r='i:,ィ'
u‐―u' ,.*。 ,__,.-=':トー'
ヘ_,、 /;;::-一'
‐-、`-'iニレ'^'
1ヶ月過疎ってるところにに、ショボイスクリプトで悪いんだが、
PluginDir = "D:\AviSynthPlugins\"
FileName = "01"
FileDir = "D:\d2v\"
LoadPlugin(PluginDir + "DGDecode.dll")
LoadPlugin(PluginDir + "De.dll")
LoadPlugin(PluginDir + "DeCross.dll")
LoadPlugin(PluginDir + "IT.dll")
LoadPlugin(PluginDir + "hqdn3d.dll")
mpeg2source(FileDir + FileName + ".d2v")
DeDot()
DeCross()
IT(fps = 24, ref = "TOP", diMode = 1)
hqdn3d()
LanczosResize(640, 480, 8, 0, 704, 480)
な感じでmkvに出力してるんだが、
本編24、OP30、ED60の混合フレームでmkvに出力したいのがあるんだが、サンプルあったら教えてくで
>>818 timde-code使って解決じゃだめなの?
>>819 timecodesの連結する方法を教えてくだされ。
822 :
818:2005/12/19(月) 21:39:13 ID:P1QUYi7m
サンクス
まさか過疎地でレスもらえるとは思わなかった・・・テヘ
>>712のTimecode出力ツールで問題解決しますた
過疎といっても一応見てることは見てる
あんたは出て来ないで宜しい
だれかいますか?
宗男といいます
本スレに書いたんですが応答ないので、こちらでも聞かせてもらいます。
LanczosResize(640,480)
をした後に、フィルタをかけるにはどうすればいいですか?
具体的にはLanczosResize(640,480)してからvobsubで字幕合成したいのに
字幕合成後にLanczosResizeされてしまいます。
mpeg2source("C:\データ\2005-11-DVD\12\12.d2v")
crop(8,0,-8,0)
AutoDeint("")
LanczosResize(640,480)
ConvertToRGB24()
vobsub("I:\Temp\DVD\12\VTS_01_0")
return last
vobsub(last,"I:\Temp\DVD\12\VTS_01_0")
にしてみるとか
>>828 ありがとうございます。
でも変化なかったです。
まったく関係ないんだが、
ConvertToRGB24()
なんで入れてるの?
後にTMPGEncへと流れるからです。
>>827 laczosresizeのあとにvobsubになってるよ
字幕を入れてからリサイズされていると考えてるみたいだけど
リサイズされたあとの大きさにあわせてvobsubが字幕を貼り付けてるだけ
字幕の大きさを大きくしたいのだろうけど、字幕って結構端の方にあるからはみ出る
可能性大
役に立てないけど解決法はわからん
なんて言うか、字幕の文字は正方形なので貼りつけたあとに640x480に
リサイズすると文字が縦長みたいになっちゃうんです。ソースは720x480
でも、vobsubが解像度に合わせて貼りつけているって言う方が
つじつまが合う気がします。
834 :
名無しさん@編集中:2006/01/04(水) 23:51:19 ID:WW2jGnKA
640x480の一時ファイルを出力した後なら上手く行くの?
はっきりさせるため320x240にvobsubだけ当てると字幕まで縮小されています。
どうやら、vobsubが自分で縮小しているようです。
ご迷惑をおかけしました。いろいろ教えたらアドバイスくれた人ありがとうございます。
久しぶりに伸びてると思ったら・・・
正月休みからAvusynth&VirtualDubを勉強しはじめて、ある程度目処がたってきたな
と思ったら今度はVirtualDubのCMカットがちょっと面倒だなと思うようになり、dougaα
の存在を知ってdougaαをCMカットだけに使ってみようと今はこんな感じです。
### ソースファイル指定
FileName = "Capture"
PluginDir = "D:\Program Files\AviSynth 2.5\plugins\"
LoadPlugin(PluginDir + "warpsharp.dll")
LoadPlugin(PluginDir + "De.dll")
LoadPlugin(PluginDir + "TomsMoComp.dll")
LoadPlugin(PluginDir + "MPEG2Dec3.dll")
LoadAviUtlInputPlugin(PluginDir + "m2v.vfp", "MPEG2VIDEO")
### MPEG2読み込み - キャプ
AudioDub(MPEG2VIDEO("E:\_1\" + FileName + ".m2v"),WavSource("E:\_1\" + FileName + ".wav"))
### MPEG2読み込み - DVD
#AudioDub(MPEG2Source("E:\_DVD\" + FileName + ".d2v"),WavSource("E:\_DVD\" + FileName + ".wav"))
Trim(0,100)+Trim(200,300)
DeDot(20,20,15,5)
FrameCache(9).TomsMoComp(1,5,1)
Crop(8,0,704,480)
FrameCache(9).LanczosResize(640,480)
FrameCache(9).KenKunNR(32,3,6)
FrameCache(9).KenKunNRT(64,3,20)
で?
いや、ここ貼るスレじゃんw
別にCMカットだけなら、インストがめんどいdougaαよりもVDubとかでよくね?
と言ってみるテスト
もはやtrimを++していくだけでいい
842 :
837:2006/01/07(土) 21:54:39 ID:DCqzsIXU
>>840 いままではaviutlで[Ctrl]、[Shift]、[Ctrl+Shift]と左右キーにそれぞれ30フレーム
150フレーム、900フレームずつ移動するように割り当てていて、始めから30秒毎
にジャンプしながらCMをカットしてたので、それっぽい操作感ができるdougaαに
白羽の矢が立った訳です。
と書きつつ、さっきやってためちゃイケをdougaαでカット編集したやつをVirtualDub
に放り込んだら、カットしたとこが全部2フレームずつズレてる・・・
もうちょっと試行錯誤が必要かもです。
AviUtl に読み込ませて Trim エクスポートがお手軽ですよ。
844 :
837:2006/01/07(土) 23:21:04 ID:DCqzsIXU
>>843 おぉ!ググって早速使ってみましたがめっちゃいいですね。CMカットはこれで
ばっちしです。色々検索して探したつもりだったんですが、こんな便利なものを
見逃していたとは・・・
このスレに書いてよかったw サンクス
>>842 IBBPのMPEG2だと、VDMやVD-MPEG2でカットし、AddRangeでしても2フレずれる。
なので、AddRangeのソースを弄って、それなりの関数AddRange2をつくって対応。
※勝手に変更して作ったので、配布はできないけど変更箇所なら・・・
・俺の怠慢CMカット、クロップ
1. VD-MPEG2で、mpegファイル("f:\temp\foo.m2p")を読み込んで、CMカット
※VDMだと、Undoが出来ない為
※読み込みに時間がかかるが、りシークが早いので、スクリプトを読み込んでTrimを
追加するより、ストレスがない為
2.動画と同じ場所に、設定保存("f:\temp\foo.vcf")
3.あとは、こんな感じのスクリプト
※まるもだと、余計な中間ファイルもできないし、作業のステップ数が少ない。
######
SrcBasePath="f:\Temp\foo"
#
SrcMpgPath = SrcBasePath+".m2p"
SrcVcfPath = SrcBasePath+".vcf"
# 映像+音声 読み込み
LoadAviUtlInputPlugin("m2v.vfp","MPEG2VIDEO")
last=MPEG2VIDEO( SrcMpgPath )
# CMカット
Exist(SrcVcfPath) ? AddRange2( SrcVcfPath, offs=2 , audcorr=true ) : last
DelayAudio(-0.066)
# Crop
AutoCrop(mode=0,wMultOf=704,hMultOf=480,aspect=480/704)
# その他
.....
return last
d2v作ってる場合はdgindexでやれば・・・
DGMPGDec でええやんけ
しらんがな
m2vでもDVD2AVI+MPEG2Source経由でも、DirectShowSourceで音を読み込むと音がずれるんだけど、みんなどうやってる?
ソースはレコで録ったMPEG2+AC-3。DSFはCyberLinkのが一番上位にある。
メリット値弄ってWinDVDのデコーダ使うようにすると、6chに誤認識されてしまう。
>>849 DGIndex経由でDELAY XXms補正してる
TMEでカット編集すると、DELAY 0msになってずれが起きなくなった。
DGMPGDec でええやんけ
しらんがな
本スレ落ちてるがな
立てといたんでよろしく
ほぜむ
avisynthでaac読み込むプラグインってないですか?
ググっても見つからなかったんでないかもですが。
>>859 DirectShowSource( filename )
で、いいんジャマイカ?
エロDVDのエンコってどんなフィルターおすすめ?
862 :
名無しさん@編集中:2006/03/18(土) 14:35:58 ID:T1VpxdAL
ソースが十分きれいだからなしでいいよ。
細部が潰れて逆効果になるだけ
>>862 そうですか、でもDVD画質ってそんなに綺麗だとは思えないんですがね、VHSとかから比べたらそりゃ綺麗ですが。
メーカーによってはぼやけ気味だったり、輪郭がギザギザ(インタレではなく)してたり様々で。
いろいろノイズが有ると、分かっていながら、
ただお勧めが有るかと問うだけなのは、頭悪いですね。
莫迦は帰ってくれ。
cx
>>863 確かにそうだけど色々試してみて
それをフィルタ使って改善出来る感じはしなかったなぁ
輪郭補正とかしても、輪郭はきれいになっても他が変になるし
ノイズ除去もそこそこビットレートふってたら
大して出てないから弱くかけると効果が見られず強くかけると
肌の質感がなくなる感じがする
まあ自分で色々試してみるのが一番だね
モザイクには妄想フィルターで花びらの1枚1枚まで鮮明に見えるさ
※想像力・経験値により個人差があります。
真に極めれば音声さえ要らない
極めすぎるとナガラでも可能
873 :
名無し募集中。。。:2006/03/22(水) 14:32:07 ID:KcRIPJ5A
このスレ的にはDGMPGDecなの?DVD2AVIなの?
まるものプラグイン
>>874 DVD2AVIは完全なバグ持ちで、今後、修正されることはないお
DGMPGDecはverup中だから、verによってはバグあるかもしれないお
だから安定版のDGMPGDec使ってるお
でも、フリーソフトは自己責任忘れたらダメアルヨ
これ万国共通の約束事アルネ
1.4.6?
878 :
名無しさん@編集中:2006/03/26(日) 20:23:34 ID:Wwe+2U6c
>>877 すぐ、人に聞くの良くないアルヨ
自分で試すの基本のことアルヨ
フリーソフトは自己責任忘れたらダメアルヨ
これ万国共通の約束事アルネ
>>875 同じくm2v。音声はbbdmux便利ス
DSSなら音声いっしょに読めて楽と思ってたが、音ズレしたしw
DVD2AVIの類がコマンドラインかバッチ処理できればそっち使ってたかも
DVD2AVIのころからコマンドラインでバッチ処理してたし、
DGMPGDecはデフォでコマンドラインがサポートされてるのは
漏れの気のせいだったか。
気のせいです
>>880 俺の目は節穴のようです orz
マニュアル読めよ阿呆と罵って下さい……
>>882 マニュアルを読みなさい!
そして、靴をお舐めなさい!
>>822 マニュアル読めよ阿呆
これだから最近の(ry
お代官様〜おたわむれを〜
せっかくの良スレ(?)が台無し
Lanczos4Resizeってavisynthじゃつかえないの?
このスレの波にのって盲目的にTomsMoComp使ってたけど
TDeintのほうがきれいじゃん
・・・そうでもないな・・・。
ちょwwwwwwおまwwwwwwww
ええやんけ
avisynth初心者なんだけど、地上波テレビドラマ+その他キャプ目的でこんな感じで設定してみたんだけど
ソースが微妙に悪いからしょうがないんだけど、いまいち縮まないし
他にも不備がいろいろありそうなので、何か問題点を指摘してくれませんか?
LoadPlugin("H:\videotoolz\dgmpgdec146\DGDecode.dll")
LoadPlugin(PATH + "De.dll")
LoadPlugin(PATH + "TomsMoComp.dll" )
LoadPlugin(PATH + "warpsharp.dll")
LoadPlugin(PATH + "hqdn3d.dll")
AudioDub(mpeg2source(VIDEO_PATH + "test3.d2v"),WAVSource(VIDEO_PATH + "test3 MPA T01 DELAY 0ms.wav"))
#DeDot(20,20,15,5)
##インタレース解除
TomsMoComp(1,6,1)
##bob
bbb()
##ノイズ除去
hqdn3d(8)
##無駄な領域を削る
Crop(10,2,700,476)
##リサイズ
LanczosResize(640,480)
return last
なんでインタレ解除後にさらにbob化するのか?
すごいネタが投下されたようだな。
905 :
901:2006/04/18(火) 00:19:56 ID:x7KTVznT
>>902 保持のほうがいいのかもしれないけど、プログレッシブでもつくって置こうかなぁと。
>>903 よく意味わかってなかったんでつかってみたんだけど 、bbの中でインターレース解除やってるんですね。
TomsMoCompつかってみたかったら>808-809みたいにやればいいのかな?
インタレかかった動画なんてゴミ
アニオタなんてゴミ
モーオタを忘れているぞ
>>902 そう言えば反町の戦国自衛隊は30Pだったよ?
910 :
メモ帳:2006/04/18(火) 16:55:36 ID:zRSz/33h
実写DVD(せくしーうえうえ)
IT(fps=24,ref="TOP",diMode=0)
trim(0,3104).TDeint(mode=0,tryweave=true)+trim(3105,3106).TomsMoComp(1,5,0)+trim(3107,6200).TDeint(mode=0,tryweave=true)
p1 = trim( 85, 164).Lanczos4Resize(640,400,40,62,640,355)
p2 = trim( 214, 408).Lanczos4Resize(640,400,40,62,640,355)
p3 = trim( 409, 427).Lanczos4Resize(640,400,76,62,640,355)
p4 = trim( 428, 517).Lanczos4Resize(640,400,40,62,640,355)
p5 = trim( 518, 554).Lanczos4Resize(640,400,76,62,640,355)
p6 = trim( 555, 641).Lanczos4Resize(640,400,40,62,640,355)
p7 = trim( 642, 664).Lanczos4Resize(640,400,76,62,640,355)
p8 = trim( 665,1218).Lanczos4Resize(640,400,40,62,640,355)
p9 = trim(1219,1263).Lanczos4Resize(640,400,76,62,640,355)
p0 = trim(1264,1413).Lanczos4Resize(640,400,40,62,640,355)
pq = trim(1414,1459).Lanczos4Resize(640,400, 6,62,640,355)
pw = trim(1460,1720).Lanczos4Resize(640,400,40,62,640,355)
pe = trim(1721,1816).Lanczos4Resize(640,400,76,62,640,355)
pr = trim(1817,2088).Lanczos4Resize(640,400,40,62,640,355)
pt = trim(2089,2143).Lanczos4Resize(640,400,76,62,640,355)
py = trim(2144,2328).Lanczos4Resize(640,400,40,62,640,355)
pu = trim(2329,2375).Lanczos4Resize(640,400,76,62,640,355)
pi = trim(2376,2474).Lanczos4Resize(640,400,40,62,640,355)
po = trim(2475,2540).Lanczos4Resize(640,400,76,62,640,355)
pp = trim(2541,5211).Lanczos4Resize(640,400,40,62,640,355)
pa = trim(5212,5232).Lanczos4Resize(640,400,76,62,640,355)
ps = trim(5233,5627).Lanczos4Resize(640,400,40,62,640,355)
pd = trim(5628,5672).Lanczos4Resize(640,400, 6,62,640,355)
pf = trim(5673,5731).Lanczos4Resize(640,400,76,62,640,355)
pg = trim(5732,6127).Lanczos4Resize(640,400,40,62,640,355)
ph = trim(6128,6192).Lanczos4Resize(640,400,66,62,640,355)
p1+p2+p3+p4+p5+p6+p7+p8+p9+p0+pq+pw+pe+pr+pt+py+pu+pi+po+pp+pa+ps+pd+pf+pg+ph
return last
911 :
メモ帳:2006/04/18(火) 16:56:20 ID:zRSz/33h
912 :
メモ帳:2006/04/18(火) 17:00:24 ID:zRSz/33h
うえうえ(メイキング)
name = "ueue"
dir = "D:\My Videos\src\"
LoadPlugin("C:\Program Files\AviSynth\plugins\DGDecode.dll")
video = mpeg2source(dir+name+".d2v")
audio = wavsource(dir+name+" T01 48K 16bit 2ch.wav")
AudioDub(video,audio)
TomsMoComp(1,5,0)
p1 = trim(22170,22888).Lanczos4Resize(640,400,14,16,702,390)
p2 = trim(24477,24588).Lanczos4Resize(640,400,10,42,702,390)
p3 = trim(24787,24815).Lanczos4Resize(640,400,10,42,702,390)
p4 = trim(32836,33432).Lanczos4Resize(640,400,68,42,648,360)
p42= trim(33433,33878).Lanczos4Resize(640,400, 6,42,666,370)
p5 = trim(42771,43133).Lanczos4Resize(640,400,10,46,702,390)
p6 = trim(48095,48153).Lanczos4Resize(640,400,10,46,702,390)
p1 + p2 + p3 + p4 + p42 + p6
return last
913 :
メモ帳:2006/04/18(火) 17:01:03 ID:zRSz/33h
name="kan"
dir="D:\My Videos\src\"
LoadPlugin("C:\Program Files\AviSynth\plugins\DGDecode.dll")
video=mpeg2source(dir+name+".d2v")
audio=wavsource(dir+name+" T01 48K 16bit 2ch.wav")
AudioDub(video,audio)
p00 = trim(135,1510)
p01 = trim(1511,1536).TDeint(mode=0,tryweave=true)
p02 = trim(1537,1555)
p03 = trim(1556,1607).TDeint(mode=0,tryweave=true)
p04 = trim(1608,1632)
p05 = trim(1633,1702).TDeint(mode=0,tryweave=true)
p06 = trim(1703,1852)
p07 = trim(1853,1879).TDeint(mode=0,tryweave=true)
p08 = trim(1880,1974)
p09 = trim(1975,1986).TDeint(mode=0,tryweave=true)
p10 = trim(1987,2222)
p11 = trim(2223,2270).TDeint(mode=0,tryweave=true)
p12 = trim(2271,2288)
p13 = trim(2289,2317).TDeint(mode=0,tryweave=true)
p14 = trim(2318,2419)
p15 = trim(2420,2448).TDeint(mode=0,tryweave=true)
p16 = trim(2449,2544)
p17 = trim(2545,2600).TDeint(mode=0,tryweave=true)
p18 = trim(2601,2646)
p19 = trim(2647,2693).TDeint(mode=0,tryweave=true)
p20 = trim(2694,2818)
p21 = trim(2819,2900).TDeint(mode=0,tryweave=true)
914 :
メモ帳:2006/04/18(火) 17:01:34 ID:zRSz/33h
p22 = trim(2901,3169)
p23 = trim(3170,3201).TDeint(mode=0,tryweave=true)
p24 = trim(3202,3240)
p25 = trim(3241,3357).TDeint(mode=0,tryweave=true)
p26 = trim(3358,3976)
p27 = trim(3977,4009).TDeint(mode=0,tryweave=true)
p28 = trim(4010,4068)
p29 = trim(4069,4116).TDeint(mode=0,tryweave=true)
p30 = trim(4117,4164)
p31 = trim(4165,4208).TDeint(mode=0,tryweave=true)
p32 = trim(4209,4250)
p33 = trim(4251,4313).TDeint(mode=0,tryweave=true)
p34 = trim(4314,5205)
p35 = trim(5206,5221).TDeint(mode=0,tryweave=true)
p36 = trim(5222,5328)
p37 = trim(5329,5370).TDeint(mode=0,tryweave=true)
p38 = trim(5371,5412)
p39 = trim(5413,5460).TDeint(mode=0,tryweave=true)
p40 = trim(5461,5486)
p41 = trim(5487,5531).TDeint(mode=0,tryweave=true)
p42 = trim(5532,5584)
p43 = trim(5585,5628).TDeint(mode=0,tryweave=true)
p44 = trim(5629,5724)
p45 = trim(5725,5772).TDeint(mode=0,tryweave=true)
p46 = trim(5773,5792)
p47 = trim(5793,5818).TDeint(mode=0,tryweave=true)
p48 = trim(5819,5861)
p49 = trim(5862,5913).TDeint(mode=0,tryweave=true)
p50 = trim(5914,5976)
p51 = trim(5977,6006).TDeint(mode=0,tryweave=true)
p52 = trim(6007,6239)
p53 = trim(6240,6345).TDeint(mode=0,tryweave=true)
915 :
メモ帳:2006/04/18(火) 17:02:04 ID:zRSz/33h
p54 = trim(6346,6544)
p55 = trim(6545,6645).TDeint(mode=0,tryweave=true)
p56 = trim(6646,6739)
p00+p01+p02+p03+p04+p05+p06+p07+p08+p09+p10+p11+p12+p13+p14+p15+p16+p17+p18+p19+p20+p21+p22+p23+p24+p25+p26+p27+p28+p29+p30+p31+p32+p33+p34+p35+p36+p37+p38+p39+p40+p41+p42+p43+p44+p45+p46+p47+p48+p49+p50+p51+p52+p53+p54+p55+p56
Lanczos4Resize(640,400,40,61,640,354)
return last
うむ このスレらしい貼りっぷりだ
よくまあまともに動くもんだ。
クリップ数の上限に近いんでないかい。
918 :
メモ帳:2006/04/18(火) 18:29:19 ID:zRSz/33h
リンクすんなよ ポップアップがうざいw
921 :
メモ帳:2006/04/18(火) 19:06:48 ID:zRSz/33h
自己レスだが918のポップアップがウザいっていうレベルを遥かに超えてるなw
画面全体がポップアップになるしw
923 :
901:2006/04/22(土) 19:19:21 ID:1djBz9T3
LoadPlugin("H:\videotoolz\dgmpgdec146\DGDecode.dll")
LoadPlugin(PATH + "De.dll")
LoadPlugin(PATH + "TDeint.dll")
LoadPlugin(PATH + "hqdn3d.dll")
video = mpeg2source(VIDEO_PATH + "xxx.d2v")
audio = wavsource(VIDEO_PATH + "xxx.wav")
AudioDub(video,audio)
DeDot(20,20,15,5)
TDeint(1,1)
hqdn3d(12)
Crop(10,0,-6,-0)
LanczosResize(640,480)
return last
結局こんな感じの設定でエンコするか TDeint外してインタレ保持エンコしようとしてるんですが
あんまりサイズが縮まない。
結局のところ、_2DCleanYUY2とKenkunNRTに戻っちゃった俺なんかがここにいる。
ああ、縮ますのならPixieDustがいいよ。
ちょっとボケるけど縮み具合と比較すると気になる程度でもない。
もうへたにNRかけない方が綺麗だと気づいた俺がいる。
縮まなくていいよ・・・メディアも随分安くなったことだし。
一枚に2クール入らなきゃヤダヤダヤダ グス
またアニヲタか。
今さらながらインタレ保持でエンコしようと思いたったんだけど、こんな感じでいいのかな?
FileName = "Capture"
PluginDir = "D:\Programs\Avisynth\AviSynth 2.5\plugins\"
LoadPlugin(PluginDir + "warpsharp.dll")
LoadPlugin(PluginDir + "De.dll")
LoadPlugin(PluginDir + "DGDecode.dll")
LoadPlugin(PluginDir + "Convolution3DYV12.dll")
AudioDub(MPEG2Source("E:\_1\" + FileName + ".d2v"),WavSource("E:\_1\" + FileName + ".wav"))
AssumeFrameBased().ComplementParity()
### Trim
DeDot(20,20,15,5)
Crop(6,0,704,480)
SeparateFields()
FrameCache(6).Convolution3D("movieHQ")
FrameCache(9).LanczosResize(640,240)
Weave()
return last
640x240ってどんなソースなんだ?
C3Dは前後フレームを参照する3D-NRも含んでるので
それだと、前後フレームが別フィールドの画を参照してしまう。
2Dのみのフィルタじゃなかったら、フィールドも分けるように。
でも同じフィルタが複数回動作できない作りのものもあるので要注意
wikiとかに説明があったかと思う。
separatefields
a=selecteven.Convolution3D("movieHQ")
b=selectodd.Convolution3D("movieHQ")
interleave(a,b)
lanczosresize(640,last.height)
weave
もちろんlanczosをC3Dの後ろに、それぞれくっつけても可。
というかそっちの方が間違いが起きない。
>>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
でいいんでしょうか?
separatefields
a=selecteven.Convolution3D("movieHQ").lanczosresize(640,last.height)
b=selectodd.Convolution3D("movieHQ").lanczosresize(640,last.height)
interleave(a,b)
weave
または記述行を分けても良いが、その場合はこう書く
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
なるほど、そういうことでしたか。
助かりました。ありがとう!
えっと別に間違いじゃないんだが、記述を分ける場合だと
lanczosresize(640, a.height)
とかlastじゃなく、a,bを指定した方がよいかも。
ちなみにlastだと、separatefielsの直後のクリップを指すことになる。
hqdn3dってデフォだとかなり残像出ない?(特に暗い画面?)
3DNRってことで多少は仕方無いんだろうけど
939 :
名無しさん@編集中:2006/05/15(月) 06:39:26 ID:izQAtOkE
940 :
名無しさん@編集中:2006/05/17(水) 20:37:55 ID:Q+VbyTlE
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
よくわかってないのでつっこみください。
ってタイムコードめちゃくちゃだ。
trimもだ。何度もスマソ。
ソース読み込みr
その辺スルーしてくださいorz
もちつけw
0.627659574fps
素直にIts使っとけ
949 :
名無しさん@編集中:2006/06/26(月) 18:42:35 ID:urNk3DUg
これダウソしようとするとセキュウテイがはじくけど大丈夫?
>>942 なるほどそのアイデア面白い。漏れが初めて見ただけかもだけど。
FrameEvaluateあたりでタイムコードを別ファイルに出力できるようにすれば
単ファイルの.avsでVFRできるね。
日本では.auoでいきなり120にするのが一般的だけど
海外方式で似非30fps aviにタイムコードを利用してドロップフレームを挿入すれば
120fpsの疑似VFRもできると。
>>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
定義関数とか
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
}
フレーム操作系はエクセルとVBAなどで極力自動化して
VFR用のタイムコード、WMToolのVFRエンコ定義ファイル、
120fpsならInsNull用のテーブルファイルを自動生成させるようにしてる。
でも管理できると修正がやりやすいというだけで
きっちりやろうとしたら力技でし'`,、'`,、(ノ∀`)'`,、'`,、
緑色の肉のカレー食えば直るよ!
(;´д`)うぇぅえ
>>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の値を自動で他のスクリプトに読み込んで
エンコードの設定に使いたいけど俺の頭では無理だった
俺のような馬鹿にとって、trim連結スタイルのvfrは、trimのパートから
timecode fileへの変換の処理がやはり難物。今使ってる無理やり秀丸マクロだと
こ汚く柔軟性もなく、ちょっとした流儀の変更でも一苦労。やはり一度まじめに勉強しないと…
入力に関しては、VDMのScriptEditorをmayuで弄ったらだいぶ楽になり、自分なりに満足気味。日記おわり。
958 :
950:2006/06/27(火) 03:34:58 ID:w1mJ0NX4
てなわけでタイムコードも一緒に作る関数を作ってみた。
ロードされた瞬間にタイムコードファイルを生成。
フレーム数は別に計算しなくても取ればいいよね?という方向で。
tc2cfrで120化して確認。
もし使うなら2つの関数をどっかに追い出してImportするといいと思う。
FPSの数値もclipからとることにしたので
きれいな数値にしたい人はAssumeFPSとかで設定してくださいまし。
グローバル変数使っちゃってるのが汚いけど
なんかうまい方法あったら変えて。
大きすぎると怒られたので関数定義部と利用部を分割で。
959 :
950: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)
}
960 :
950: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()")
よくわかんないけどすごい
俺もよくわからんが、逆テレシネしたときの端数はどうなってるの?
>>942みたいにtrimでfps区切ったあとそのavsをAviutlに食わせて目視でフレームレートかわるシーンに移動してそのフレームをタイムコードに書く…
ってやりかたでVFR作って(る気になって)るんだけどもっとかしこいやり方誰かおすえてください。
>>953氏の自動化とか詳しく聞きたいです。
端数補正?なんて今まで考えたこともなかったし聞いてもおれの脳みそではよくわからんorz
964 :
950: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
Ctrl+Shift+Right
メニュのgoを見れば全部分かるとは思うけど。
あ、modか。modでなくちゃダメ?本家じゃいかんの?
Shift+左右キーでキーフレームに位置付けられる。
エンコ済みのファイルを切り貼りする時にとても便利。
つかVirtualDubスレで聞けよw
ジタバタ
〃〃∩ _, ,_
⊂⌒( `Д´) modじゃなきゃ嫌だい。本家なんていらないやい
`ヽ_つ__つ
ジタバタ
そういやVDMは自分勝手にアサインしてるから元々の忘れたな
二画面ファイラのようにワンキーショートカットとかも
なんか面白そうなスクリプトでてきて、いい流れ。暇ができたら
有難く遊ばせてもらおうっと。今のところ自分の感心ランク一位は.u(かな
972 :
950:2006/06/28(水) 00:37:30 ID:PpOkZ2le
わお。今後も達人な人たちは気が向いたらshareよろしくです
>>964 やっぱり端数の処理は必要と思うよ。
反例を出すね。
今30フレームの画像があってこれを5分割する、つまり、1パッケージで6フレーム
この1パッケージを逆テレシネするとプラグインによっては5フレームを取得する。
でこれを結合すると30フレームを24fpsに変換したのに25フレーム取得することになる。
しかし、timecode v1の書式では各フレームを24fpsのタイミングで表示させてしまう。
従って、(25-24)*1/24秒分映像が長く表示される。
もちろん5の倍数でTrimすればこの問題はおきないけど、それは運だよね。
俺はなかなか運がいい
動画のフレーム番号を指定すると、そのフレーム画像をクリップボードに出力して終了するようなものを
クリップボードに貼り付けるのはどの編集ソフトでも出来るよ
VDubとかAviUtlとかでやれ
だいたい、フレーム番号探すのにDubとか使うしな。
面倒なのでそういうソフト作ってください。
getframe.exe とかのソフトで
getframe.exe -i InputFileName(avi) -f FrameNo
とするとフレームゲットできるようなの