ScriptFunctions のバックアップの現在との差分(No.13)


  • 追加された行はこの色です。
  • 削除された行はこの色です。
*スクリプト関数: [#iea63ce3]

これらの関数の入出力は、クリップではなく、スクリプトの中で使われる別の変数です。

#contents

**数値関数: [#u1ee7bc9]

#hr

 MulDiv(int, int, int) v2.56

64ビットの中間結果(intermediate result)を(m*n+d/2)/d

''例'':

:MulDiv (1, 1, 2) = 1|
:MulDiv (2, 3, 2) = 3|

#hr

 Floor(float)

floatからintへ変換します(小数点以下の端数を切り捨て)。

''例:''

 Floor(1.2) = 1 
 Floor(1.6) = 1 
 Floor(-1.2) = -2 
 Floor(-1.6) = -2 
:Floor(1.2) = 1|
:Floor(1.6) = 1|
:Floor(-1.2) = -2|
:Floor(-1.6) = -2|

#hr

 Ceil(float)

floatからintへ変換します(小数点以下の端数を切り上げ)。

''例:''

 Ceil(1.2) = 2.0 
 Ceil(1.6) = 2.0 
 Ceil(-1.2) = -1 
 Ceil(-1.6) = -1 
:Ceil(1.2) = 2.0|
:Ceil(1.6) = 2.0|
:Ceil(-1.2) = -1|
:Ceil(-1.6) = -1|

#hr

 Round(float)

floatからintへ変換します(最も近い整数に四捨五入する)。

''例:''

 Round(1.2) = 1 
 Round(1.6) = 2 
 Round(-1.2) = -1 
 Round(-1.6) = -2 
:Round(1.2) = 1|
:Round(1.6) = 2|
:Round(-1.2) = -1|
:Round(-1.6) = -2|

#hr

 Sin(float) v2

引数のサイン(正弦)を返します(それがラジアン(弧度)であると仮定します)。

''例:''

:Sin(Pi()/4) = 0.707|
:Sin(Pi()/2) = 1.0|

#hr

 Cos(float) v2

引数のコサイン(余弦)を返します(それがラジアン(弧度)であると仮定します)。

''例:''

:Cos(Pi()/4) = 0.707|
:Cos(Pi()/2) = 0.0|

#hr

 Pi() v2

"π"定数の値(円周率)を返します。

''例:''

:d = Pi() # d == 3.141593|

#hr

 Log(float) v2

引数の自然対数(natural(base-e)logarithm)を返します。

''例:''

:Log(1) = 0.0|
:Log(10) = 2.30259|

#hr

 Exp(float) v2

自然指数(natural(base-e)exponent)を返します。

''例:''

:Exp(1) = 2.718282|
:Exp(0) = 1.0|

#hr

 Pow(float base, float power) v2

2番目の引数によって示された累乗に引き上げられた"base"を返します。

''例:''

:Pow(2, 3) = 8|
:Pow(3, 2) = 9|
:Pow(3.45, 1.75) = 8.7334|

#hr

 Sqrt(float) v2

引数の平方根を返します。

''例:''

:Sqrt(1) = 1.0|
:Sqrt(2) = 1.4142|

#hr

 Abs(float or integer) v2.07

絶対値を返します(floatにはfloatを、整数には整数を返す)。

''例:''

 Abs(-3.8) = 3.8 
:Abs(-3.8) = 3.8|

#hr

 Sign(float) v2.07

値の符号を返します(1、0、または-1)。

''例:''

 Sign(-3.5) = -1 
 Sign(3.5) = 1 
 Sign(0) = 0 
:Sign(-3.5) = -1|
:Sign(3.5) = 1|
:Sign(0) = 0|

#hr

 Int(float) v2.07

floatからintへ変換します(0のほうへ丸める)。

''例:''

 Int(1.2) = 1 
 Int(1.6) = 1 
 Int(-1.2) = -1 
 Int(-1.6) = -1 
:Int(1.2) = 1|
:Int(1.6) = 1|
:Int(-1.2) = -1|
:Int(-1.6) = -1|

#hr

 Frac(float) v2.07

与えられた値の小数点以下の端数分を返します。

''例:''

 Frac(3.7) = 0.7 
 Frac(-1.8) = -0.8 
:Frac(3.7) = 0.7|
:Frac(-1.8) = -0.8|

#hr

 Float(int) v2.07

intをfloatへ変換します。

#hr

 Value(string) v2.07

文字列を数値へ変換します。

''例:''

:Value ("-2.7") = -2.7|

#hr

 HexValue(string) v2.07

文字列を16進数の値として評価します。

''例:''

 HexValue ("FF00") = 65280
:HexValue ("FF00") = 65280|

#hr

&aname(rand);
 Rand([int max] [, bool scale] [, bool seed]) v2.07

ランダムな整数値を返します。すべてのパラメータはオプションです。maxは最大値+1を設定し(デフォルト 32768)、負の結果のために負の値を設定することができます。scaledモードかmodulus((訳者註: 係数の意。))モードのどちらかで処理します(デフォルトは、maxの絶対値が32768より大きいならscale=true、それ以外はscale=false)。scaledモードは、内部のランダム数ジェネレータの値を最大値(max)にあわせて調整します。一方、modulusモード(scale=false)は、整数の割り算により、最大値でランダムジェネレータの値を割ったときの余りを使用します。最大値が小さいときほど、modulusモードが最適です。seed=trueを使うと、ランダム数ジェネレータに現在の時間をシード(seed)します。デフォルトではfalseとなり、おそらくseed=trueを使用する必要はありません。しかし、万一に備えて、seedパラメータは存在します。一般的に、この関数は、ランダムなクリップ用のSelect関数と一緒に使用されます。

''例:''

 Select(Rand(5), clip1, clip2, clip3, clip4, clip5) 
:Select(Rand(5), clip1, clip2, clip3, clip4, clip5)|

#hr

 Spline(float X, x1, y1, x2, y2, .... [, bool cubic]) v2.51

コントロールポイント(制御点)x1/y1などを使って、Yの値をX点で補間します。x/yのペアは、少なくとも2つ以上でなければなりません。補間は、3次(cubic)補間(結果はスプライン)か線形(linear)補間(結果は多角形(polygon))になります。

''例:''

 Spline(5, 0, 0, 10, 10, 20, 0, false) = 5 
 Spline(5, 0, 0, 10, 10, 20, 0, true) = 7
:Spline(5, 0, 0, 10, 10, 20, 0, false) = 5|
:Spline(5, 0, 0, 10, 10, 20, 0, true) = 7|

#hr

**文字列関数: [#s1b75b61]

#hr

 LCase(string) v2.07

stringを小文字で返します。

''例:''

 LCase("AviSynth") = "avisynth" 
:LCase("AviSynth") = "avisynth"|

#hr

 UCase(string) v2.07

stringを大文字で返します。

''例:''

 UCase("AviSynth") = "AVISYNTH" 
:UCase("AviSynth") = "AVISYNTH"|

#hr

 StrLen(string) v2.07

stringの長さを返します。

''例:''

 StrLen("AviSynth") = 8 
:StrLen("AviSynth") = 8|

#hr

 RevStr(string) v2.07

stringを逆さまに返します。

''例:''

 RevStr("AviSynth") = "htnySivA" 
:RevStr("AviSynth") = "htnySivA"|

#hr

 LeftStr(string, int) v2.07

文字列の最初のint個を返します。

''例:''

 LeftStr("AviSynth", 3) = "Avi" 
:LeftStr("AviSynth", 3) = "Avi"|

#hr

 RightStr(string, int) v2.07

文字列の最後のint個を返します。

''例:''

 LeftStr("AviSynth", 5) = "Synth" 
:RightStr("AviSynth", 5) = "Synth"|

#hr

 MidStr(string, int pos [, int length]) v2.07

pos番目の文字から、オプションで指定するlength個分、またはstringの最後までのサブストリング(部分文字列)を返します。pos=1は、stringの先頭を明示します。

''例:''

 MidStr("AviSynth", 3, 2) = "iS" 
:MidStr("AviSynth", 3, 2) = "iS"|

#hr

 FindStr(string, substring) v2.07

stirngの中におけるsubstringのポジションを返します。見つからないなら、0を返します。

''例:''

 Findstr("AviSynth", "syn") = 4 
:Findstr("AviSynth", "syn") = 4|

#hr

 String(float / int) v2

数字をstringに変換します。

''例:''

 Subtitle( "Clip height is " + String(last.height) ) 
:Subtitle( "Clip height is " + String(last.height) )|

#hr

 Chr(int) v2.51

アスキー文字を返します。


''例:''

 Chr(34) # 引用文字を返します。
:Chr(34) # 引用文字を返します。|

#hr

 Time(string) v2.51

stringによって定義されたフォーマットで、現在のシステム時間に関するstringを返します。出力フォーマットのためのコード:

%a 短縮された曜日名

%A 完全な曜日名

%b 短縮された月の名前

%B 完全な月の名前

%c ロケールに適した日時の表示

%d 10進数で、その月の何日か (01 - 31)

%H 24時間方式における時間 (00 - 23)

%I 12時間方式における時間 (01 - 12)

%j 10進数で、その年の何日目か (001 - 366)

%m 10進数で、何月か (01 - 12)

%M 10進数で、何分か (00 - 59)

%p カレントロケールの、12時間時計用のA.M./P.M(午前/午後)表示器

%S 10進法で、何秒か (00 - 59)

%U 日曜日を週の始まりとしたときに、10進法で、その年の何週目か (00 - 53)

%w 10進法としての曜日 (0 - 6; 日曜日は0)

%W 月曜日を週の始まりとしたときに、10進法で、その年の何週目か (00 - 53)

%x カレントロケール用の日にちの表示

%X カレントロケール用の時間表示

%y 10進法で、世紀なしの年数 (00 - 99)

%Y 10進法で、世紀を伴った年数

%z, %Z タイムゾーン名、または、その省略形; タイムゾーンが不明なら、文字なし

%% パーセント記号

#フラグは、どんなフォーマットコードの前につけてもかまいません。その場合、フォーマットコードの意味は、以下のように変更されます:

%#a, %#A, %#b, %#B, %#p, %#X, %#z, %#Z, %#% #フラグは無視されます。

%#c カレントロケールに適した、長文の日時表示。例: "Tuesday, March 14, 1995, 12:41:29"。

%#x カレントロケールに適した、長文の日にち表示。例: "Tuesday, March 14, 1995"。

%#d, %#H, %#I, %#j, %#m, %#M, %#S, %#U, %#w, %#W, %#y, %#Y 先頭の0を削除(もしあるなら)。

#hr

**バージョンチェック関数: [#k3d35a2c]

#hr

 VersionNumber() v2.07

AviSynthのバージョンナンバーをfloatとして返します。

''例:''

 VersionNumber() = 2.07 
:VersionNumber() = 2.07|

#hr

 VersionString() v2.07

AviSynthのバージョン情報をstringとして返します(Versionフィルタで使用される最初の行)。

''例:''

 VersionString() = "AviSynth 2.08 (avisynth.org) 22 nov. 2002"
:VersionString() = "AviSynth 2.08 (avisynth.nl) 22 nov. 2002"|

#hr

**変数型およびファイルをチェックする関数: [#sb873dca]

 IsBool(var)

 IsInt(var)

 IsFloat(var)

 IsString(var)

 IsClip(var)

 Exist(filename) v2.07

明記されたファイルが存在するかどうかをチェックします。

 Defined(var)

: varが定義されているならtrueを、さもなければfalseを返します。

 Default(x,d)

: Defined(x)ならxを、さもなければdを返します。

註: DefinedとDefaultは、主として、ユーザー定義関数においてオプションで宣言される変数を扱うことを目的として作られており、オプションの変数が渡されているかどうかを決定するために使われます。完全に宣言されていない変数は、エラーを生成するでしょう。より詳しい情報に関しては、このセクションの"[[ユーザー定義関数>#user_defined_functions]]"を、後で見てください。

 Eval(string)

 Apply(func-string, arg, ...)

: Eval("f(x)")は、Apply("f", x))に相当します。

'''Evalは、以下のように使うことができます:'''
'''以下のようなことのために、Evalを使用することができます(ここでは[[BicubicResize>Resize]]フィルタの明確な呼び出しが示されていますが、しかし趣旨はわかります):'''

 settings = "352, 288"
 
 Eval( "BicubicResize(" + settings + ")" )
#pre{{
settings = "352, 288"
Eval( "BicubicResize(" + settings + ")" )
}}

'''別のスクリプトのテキストをインポートすることができます:'''

 Import (filename)

: 別のAviSynthスクリプトの内容を評価(eval)します。

'''エラーリポートとユーザー定義関数への不正な入力をキャッチするために、以下の関数を使うことができます(bool=falseなら、error-message):'''

 Assert (bool, string error-message)

エラーが発生する''であろう''かどうかをチェックするための関数があります:

 Try {
 
 AviSource("file.avi")
 }
 
 catch(err_msg) {
 
 Blackness.Subtitle(err_msg)
 
 }
#pre{{
Try {
AviSource("file.avi")
}
catch(err_msg) {
Blackness.Subtitle(err_msg)
}
}}

**制御関数: [#u1280d7c]

 SetMemoryMax(int)

: AviSynthが使用する最大メモリを設定します(MB単位)。 v2

いくつかのバージョンにおいては、デフォルトの設定が5MBと、かなり低く設定されています。もし、何らかの問題(たとえば、処理速度が遅いなど)に遭遇したなら、この値を少なくとも32MBに設定してみてください。
いくつかのバージョンにおいては、デフォルトの設定が5MBと、かなり低く設定されています。もし、何らかの問題(たとえば、処理速度が遅いなど)に遭遇したなら、この値を少なくとも32MBに設定してみてください。戻り値: 実際のMemory_Max(メモリの最大)値。

 SetPlanarLegacyAlignment (clip, bool)

: Planarなフレームにアライメント(alignment)モードを設定する。 v2.5.6

いくつかの古いプラグインは、メモリにおけるビデオフレームのレイアウトを、不正に引き受けます。この特別なフィルタは、Planarなフレームのメモリレイアウトを、前のバージョンのAviSynthと互換性があるように強制します。フィルタはGetFrame()コールスタック((訳者註: 参考 - [[ASCII24 - アスキー デジタル用語辞典 - コールスタック:http://yougo.ascii24.com/gh/30/003098.html]]))に関して働きます。そのため、スクリプトの中の、それよりも前のフィルタに効果を与えます。

''例'':

#pre{{
# 古いバージョンのMpeg2Source()を使用
LoadPlugin("...\Mpeg2Dec.dll")
Mpeg2Source("test.d2v") # メモリレイアウトを不正に引き受けるプラグイン
SetPlanarLegacyAlignment(true) # 前の命令文に対し、旧来型の(legacy)メモリアライメントを設定する
ConvertToYUY2() # スクリプトの最後に至るまでの命令文は
...             # 進歩したメモリアライメントを持つ
}}

#br

 SetWorkingDir(string)
: AviSourceやLoadPluginなどのフィルタが関連付けられるディレクトリを設定します。これは、おもに、ソースクリップなどを簡単に読み込むためのものです。プラグインのオートローディングには影響を与えません。戻り値: 成功なら0、さもなければ-1。 v2

***条件演算: [#y19f2b02]

 [var=]boolean式 ? trueの場合の値か演算 : その他の場合の値か演算

#hr

 nop()
: おもに、(上の条件式で)その他の場合の演算が望まれないときに、代わりにヌルの結果を返します。 v2.07~
(nopは、おもに、[[Import]]やLoadPluginのような、変数なし / クリップなしの関数に対する形で使用されます。)
:(nopは、おもに、[[Import]]やLoadPluginのような、変数なし / クリップなしの関数に対する形で使用されます。)|

''例:''

 versionnumber<2.07 ? import("patches.avs") : nop()
#pre{{
VersionNumber<2.07 ? import("patches.avs") : nop()
}}

#hr

 Select(int index, val item0 [,item1...]) <v2.07>

item0からitem<n-1>のitemを、indexによって選択((訳者註: index=0なら、item0。))します(itemの数には、特別な制限はありません)。itemは、clipを含む、あらゆる変数型((訳者註: ScriptVariablesを参照。))をとることができます。技術的には、アイテムの型が一致しなくてもかまいませんが、しかし、それ(型が一致しないアイテムを指定すること)は問題となりうるでしょう。同じスクリプトの中で、ランダムにクリップを生成したり、さまざまなバージョン(たとえば、title, preview, main、あるいはPAL, NTSC, FILM)を統御したりするために、indexには、Rand()関数を使って指定されることができます。((訳者註: [[Rand>#rand]]の欄を参照。))

***&aname(user_defined_functions);ユーザー定義関数: [#jeb5d893]

下の方で説明されているように、あなたは、あなた自身の関数を定義し、そして、それを呼び出すことができます。関数内の[[スクリプト文法>ScriptGrammar]]は、スクリプト全般のそれと同じです。関数は、あらゆるクリップや変数型((訳者註: ScriptVariablesを参照。))を返すことができます。そのフォーマットは、一般には、次のようになります:


 function 関数名([変数型 変数名 [,...])
 { 
 関数のコマンド
 
 . 
 . 
 . 
 
 return(結果) 
 } 
:function 関数名([変数型 変数名 [,...])|
::{|
::関数のコマンド|
::|
:::.|
:::.|
:::.|
::|
::return(結果)|
::}|

カールした括弧((訳者註: {と}))は、関数のコマンドを取り囲まなければなりませんが、関数のヘッダ、そして / あるいは、関数のコマンド全体と、行を共有することができます。下記のものは、1行書きの関数の例です:

 function rednum(clip c, int "num") { return subtitle(c,string(default(num,0)),text_color=$FF0000) } 
:''function rednum(clip c, int "num") { return subtitle(c,string(default(num,0)),text_color=$FF0000) }''|

関数へ渡される変数は、変数名を引用符で囲むことによって(たとえば、前の例におけるint "num")、オプション扱いにすることができます。関数内部では、変数名が渡されたかどうかを決定し、デフォルト値を設定したり、それによって加工を変更したりするために、DefinedやDefault関数をインクルードするでしょう。オプションのパラメータは、他のオプションのパラメータをスキップするために、「変数名=値」というシンタックスを使って呼び出されることができます。

 function NTSC2PAL(clip c) {
 # かなり優れたNTSC->PAL変換。SmartBobを使うと、もっといいでしょう :-)
 Assert(c.height == 480, "NTSC2PAL: input clip must have 480 scan lines")
 Bob(c, height=576)
 ChangeFPS(50)
 SeparateFields.SelectEvery(4, 0, 3)
 return Weave
 }
#pre{{
function NTSC2PAL(clip c) {
# かなり優れたNTSC->PAL変換。SmartBobを使うと、もっといいでしょう :-)
Assert(c.height == 480, "NTSC2PAL: input clip must have 480 scan lines")
Bob(c, height=576)
ChangeFPS(50)
SeparateFields.SelectEvery(4, 0, 3)
return Weave
}

 AviSource("ntsc.avi").NTSC2PAL
AviSource("ntsc.avi").NTSC2PAL
}}

もし、何かクールな関数を作ったら、必ず[[ShareFunctions:http://www.avisynth.org/ShareFunctions]]に投稿してください!
もし、何かクールな関数を作ったら、必ず[[ShareFunctions:http://www.avisynth.nl/ShareFunctions]]に投稿してください!

''AviSynthManualに戻る''

#hr
註: このページは、http://www.avisynth.org/ScriptFunctionsの日本語訳です。
註: このページは、http://www.avisynth.nl/ScriptFunctionsの日本語訳です。