語法:腳本變量

從 NMM Doc
跳到: 導覽搜尋

此頁會講解如何在腳本中使用變量存儲處理過程中的值,用來做進一步的處理。同時也會描述腳本可以操作的數據類型,以及如何書寫變量。


實際上變量名可以是一個任意長度的字符串(從v2.56開始可以有4000個字符以上),可以是(英文)字母、數字和下劃線(_)的組合,但不能有其他的字符。變量名不得用數字開頭。

你也可以在字符串和文件名中使用你系統的本地編碼。

變量在表達式中的位置取決於

語法

變量可以有以下類型:

  • clip (剪輯)
一個視頻片段包含視頻軌和/或音頻軌。一個腳本返回的值必須是這種類型。
  • string (字符串)
一串代表文字的字符序列。字符串的寫法是把字符用「引號」或「三重引號」括起來。文字包含除了兩端引號或三重引號之外的任何字符。

手冊以前提到多TeX式樣的引號,但是v1.03以後的Avisynth確實無法使用這種風格。如果你想在字符串中打引號,只需用Python式樣的「三重引號」。比如:

Subtitle("""AVISynth is as they say "l33t".""") 

此外,你也可以用在字符串里用Windows擴展ASCII字符集的引號(curly-quotes),而不直接寫引號,這樣也能避免此類限制。

  • int (整數)
一個整數。輸入一串數字,成為一個整數變量。在數字前面也允許有正號(+)或負號(-)。在十六進制的字符前面加上$的話,也可以作為數值。比如$ff或$FF(大小寫沒有影響)等於255.
  • float (浮點)
有小數點的數。輸入一串包含小數點的數字,成為浮點變量,也可以有正號(+)或負號(-)。例如,+1. 是浮點類型。注意不支持指數記號。
  • bool (布爾)
布爾值必須是「true」(真)或「false」(假)。此外也可以寫作「yes」或「no」,但是應該儘量避免在腳本里這樣寫。(保留「yes」和「no」僅僅是出於兼容性的目的)。
  • val (變量)
一個通用類型的名字。只能用在自定義腳本函數的變量列表裏,目的是為了能夠聲明一個任意類型(int、float、bool、string或clip)的參數變量。必須明確它的類型(用布爾函數),再做恰當的處理。


還有另一種只在Avisynth處理內部使用的類型 - void(空)或「undefined」(未定義),主要和可選的函數的參數一起使用。


變量可以是局部的(限制在正在執行的腳本的局部尺度)或是全局的。全局變量的範圍是所有腳本環境的尺度,所有內部函數、用戶定義函數、運行環境腳本和主腳本都可以訪問。

要定義和/或給一個全局變量賦值,在賦值語句中,變量名的左邊必須添上關鍵字「global」。在讀取全局變量是,並不需要(實際上也不允許)寫這個關鍵字。比如:

global canvas = BlankClip(length=200, pixel_type="yv12")
global stroke_intensity = 0.7
...
global canvas = Overlay(canvas, pen, opacity=stroke_intensity, mask=brush)

想要聲明一個變量,僅僅需要在變量名稱之後加上「=」(等號),再加上初值就夠了。類型不必聲明;類型靠給它賦的初值確定(而且也能被以後的賦值語句改變)。唯一允許聲明變量類型的地方只有用戶定義函數腳本的參數列表裏(雖然沒有嚴格要求)。比如:

b = false      # 声明了一个初值是“false”(假)的布尔变量,变量名是“b”
x = $100       # 整数类型(初值是十六进制)
y = 256        # 整数类型(初值是十进制)
global f = 0.0 # 浮点类型的全局变量
...
function my_recolor_filter(clip c, int new_color, float amount, val "userdata") { ... }