すべてのバージョン共通
|
AviSynth2.0.4以降の場合
AviSynth2.0.4からAssumeTFF/AssumeBFFフィルタによって、フィールドオーダーを指定することができるようになりました。
|
フィールドオーダーの判別法
1.AviUtlを使った判定方法
AviUtlで60fps読み込みすることにより、フィールドオーダーを確認することができます。詳しくはチュートリアルで紹介していますので、参考にしてください。
[フレームレートの判別法]
上記の方法で1フレームずつコマ送りにしたときに、次のいずれにあてはまるかで、ソースのフレームレートがわかります。
[フレームレートの判別法]
上記の方法で1フレームずつコマ送りにしたときに、次のいずれにあてはまるかで、ソースのフレームレートがわかります。
|
2.TMPGEncによる判定
3.Avisynthによる判定(1)
AVSファイルに、以下のように記述してください。
subtitle(last.GetParity() ? "トップ優先":"ボトム優先", font="MS Pゴシック")
※このスクリプトは「Avisynth側でソースをどう捉えているか」を示すものらしいです。 Avisynthでは、基本的にはAVIソースはボトムと判定し、MPEG2DECなどのプラグインを使用している場合にトップと判定するようです。
subtitle(last.GetParity() ? "トップ優先":"ボトム優先", font="MS Pゴシック")
※このスクリプトは「Avisynth側でソースをどう捉えているか」を示すものらしいです。 Avisynthでは、基本的にはAVIソースはボトムと判定し、MPEG2DECなどのプラグインを使用している場合にトップと判定するようです。
4.Avisynthによる判定(2):trbarry(Tom Barry)氏の関数
以下のスクリプトをメモ帳にコピー&ペーストし、適当な名前をつけて保存します。プラグイン、および、ソースまでのパスは書き換えてください。
LoadPlugin("mpeg2dec.dll") #AVIソースの場合、不要。
v=Mpeg2Source("D:\test.d2v")
#v=AviSource("D:\test.avi") #AVIソースの場合。
function CheckTopFirst(clip v1){
v2=v1.subtitle(v1.GetParity?"TF":"BF")
v3=v2.GetParity?v2.ComplementParity:v2
t0=v3.ComplementParity
t1=t0.separatefields
t2=compare(t1.trim(1,0),t1)
b1=v3.separatefields
b2=compare(b1.trim(1,0),b1)
return stackvertical(t2,b2)}
CheckTopFirst(v)
判定方法
このスクリプトをVirtualDubModなどのソフトで開いてください。
すると、トップとボトムそれぞれ半分のフィールドを使った画像が上下に分割されて表示されると思います。 上がトップ、下がボトムです。
これを数フレーム、プレビューします。
そして、次の4つの点に注目して判定してください。
(1)TFかBFか
画面左上隅に表示されている文字をチェックします。
TF / TopFirst
BF / BottomFirst
(2)Jerky
上下の画像を比較したときに、画像が乱れて(jerky)いないほうのフィールドが優先であると考えられます。
たとえば、上の画像のほうが急に動いてたりするのが目立つ場合、その反対の下側(=ボトムフィールド)が優先である可能性が高いということになります。
(3)Avg Mean Dev
上下の画像上にいくつかの数値が表示されると思いますが、この中の"Mean Abs Dev"の"avg"(平均値)をチェックします。
この数値が低いほうのフィールドが優先であると考えられます。
(4)Avg PSNR
この数値が高いほうのフィールドが優先であると考えられます。
以上の4点がすべて一致していれば、この関数によって示された結果の精度はかなり高いものと思われます。 ただし、そうでない場合は、必ずしもこの判定結果が正しいとは限りませんので、他の判定方法を併用するほうといいでしょう。
※この関数は、Doom9Forumにtrbarry(Tom Barry)氏が投稿したものです。
LoadPlugin("mpeg2dec.dll") #AVIソースの場合、不要。
v=Mpeg2Source("D:\test.d2v")
#v=AviSource("D:\test.avi") #AVIソースの場合。
function CheckTopFirst(clip v1){
v2=v1.subtitle(v1.GetParity?"TF":"BF")
v3=v2.GetParity?v2.ComplementParity:v2
t0=v3.ComplementParity
t1=t0.separatefields
t2=compare(t1.trim(1,0),t1)
b1=v3.separatefields
b2=compare(b1.trim(1,0),b1)
return stackvertical(t2,b2)}
CheckTopFirst(v)
判定方法
このスクリプトをVirtualDubModなどのソフトで開いてください。
すると、トップとボトムそれぞれ半分のフィールドを使った画像が上下に分割されて表示されると思います。 上がトップ、下がボトムです。
これを数フレーム、プレビューします。
そして、次の4つの点に注目して判定してください。
(1)TFかBFか
画面左上隅に表示されている文字をチェックします。
TF / TopFirst
BF / BottomFirst
(2)Jerky
上下の画像を比較したときに、画像が乱れて(jerky)いないほうのフィールドが優先であると考えられます。
たとえば、上の画像のほうが急に動いてたりするのが目立つ場合、その反対の下側(=ボトムフィールド)が優先である可能性が高いということになります。
(3)Avg Mean Dev
上下の画像上にいくつかの数値が表示されると思いますが、この中の"Mean Abs Dev"の"avg"(平均値)をチェックします。
この数値が低いほうのフィールドが優先であると考えられます。
(4)Avg PSNR
この数値が高いほうのフィールドが優先であると考えられます。
以上の4点がすべて一致していれば、この関数によって示された結果の精度はかなり高いものと思われます。 ただし、そうでない場合は、必ずしもこの判定結果が正しいとは限りませんので、他の判定方法を併用するほうといいでしょう。
※この関数は、Doom9Forumにtrbarry(Tom Barry)氏が投稿したものです。
5.Avisynthによる判定(3):sh0dan氏の関数
以下のスクリプトをメモ帳にコピー&ペーストし、適当な名前をつけて保存します。プラグイン、および、ソースまでのパスは書き換えてください。※要Avisynth2.5 & YV12。
LoadPlugin("MPEG2Dec3.dll") #AVIソースの場合、不要。
v=Mpeg2Source("D:\test.d2v")
#v=AviSource("D:\test.avi") #AVIソースの場合。
function CheckTopFirst(clip v1){
global top_hits=1
global bot_hits=1
global text = ""
global text2 = ""
v1 = assumeframebased(v1)
global tff=assumetff(v1).separatefields().bob()
global bff=assumebff(v1).separatefields().bob()
istff = tff.subtitle("Is frame TFF: TRUE").frameevaluate("top_hits=top_hits+1.0")
isnottff = tff.subtitle("Is frame TFF: FALSE").frameevaluate("bot_hits=bot_hits+1.0")
outclip = conditionalfilter(tff,istff, isnottff, "yDifferenceFromPrevious(tff)+ydifferenceToNext(tff)","<","yDifferenceFromPrevious(bff)+yDifferenceToNext(bff)",false)
outclip = frameevaluate(outclip,"text = "+chr(34)+"STATS: TFF = "+chr(34)+" + string(100.0*top_hits/(top_hits+bot_hits)) + " + chr(34) + "%"+chr(34))
outclip = frameevaluate(outclip,"text2 = "+chr(34)+"STATS: BFF = "+chr(34)+" + string(100.0*bot_hits/(top_hits+bot_hits)) + " + chr(34) + "%"+chr(34))
outclip = scriptclip(outclip, "Subtitle(text,y=50)")
outclip = scriptclip(outclip, "Subtitle(text2,y=70)")
return outclip
}
CheckTopFirst(v)
次の2点からフィールドオーダーを判定します。
(1)Is frame TFF: TRUE / Is frame TFF: FALSE
(2)STATS: TFF = 〜%
※この関数は、Doom9ForumにshOdan氏が投稿したものです。
LoadPlugin("MPEG2Dec3.dll") #AVIソースの場合、不要。
v=Mpeg2Source("D:\test.d2v")
#v=AviSource("D:\test.avi") #AVIソースの場合。
function CheckTopFirst(clip v1){
global top_hits=1
global bot_hits=1
global text = ""
global text2 = ""
v1 = assumeframebased(v1)
global tff=assumetff(v1).separatefields().bob()
global bff=assumebff(v1).separatefields().bob()
istff = tff.subtitle("Is frame TFF: TRUE").frameevaluate("top_hits=top_hits+1.0")
isnottff = tff.subtitle("Is frame TFF: FALSE").frameevaluate("bot_hits=bot_hits+1.0")
outclip = conditionalfilter(tff,istff, isnottff, "yDifferenceFromPrevious(tff)+ydifferenceToNext(tff)","<","yDifferenceFromPrevious(bff)+yDifferenceToNext(bff)",false)
outclip = frameevaluate(outclip,"text = "+chr(34)+"STATS: TFF = "+chr(34)+" + string(100.0*top_hits/(top_hits+bot_hits)) + " + chr(34) + "%"+chr(34))
outclip = frameevaluate(outclip,"text2 = "+chr(34)+"STATS: BFF = "+chr(34)+" + string(100.0*bot_hits/(top_hits+bot_hits)) + " + chr(34) + "%"+chr(34))
outclip = scriptclip(outclip, "Subtitle(text,y=50)")
outclip = scriptclip(outclip, "Subtitle(text2,y=70)")
return outclip
}
CheckTopFirst(v)
次の2点からフィールドオーダーを判定します。
(1)Is frame TFF: TRUE / Is frame TFF: FALSE
(2)STATS: TFF = 〜%
※この関数は、Doom9ForumにshOdan氏が投稿したものです。
6.Avisynthによる判定(4):ViewFields / UnViewFields
詳細不明。
ViewFields http://www.geocities.com/siwalters_uk/viewfields.html
UnViewFields http://www.geocities.com/siwalters_uk/unviewfields.html
ViewFields http://www.geocities.com/siwalters_uk/viewfields.html
UnViewFields http://www.geocities.com/siwalters_uk/unviewfields.html
最終更新日 2003年11月23日