|
中文為機翻,僅供參考。 原文地址 https://www./mrjholt/expressions-484626 視頻編輯和動態(tài)圖形中的表達世界開辟了一個充滿可能性的世界。在本文中,我將把我在 DaVinci Resolve 中發(fā)現(xiàn)和試驗過的表達式匯總在一起。這份清單絕不是完整的,而是一份工作文件,我會一次又一次地回來。 當我試驗一個表達式時,我養(yǎng)成了將一個文本節(jié)點放入合成中并將該表達式添加到樣式文本表達式輸入中的習慣。這使我能夠以可讀格式查看表達式的輸出。然后我可以調(diào)整表達式以獲得我想要的結(jié)果。 另一個提示:在重命名節(jié)點之前首先使用表達式,因為重命名節(jié)點將更新表達式。 --在簡單表達式中放置“ ”將忽略右邊的字符。就像在“ GetPrefs("Comp.FrameFormat.Rate") -- Returns TL FPS”中一樣,這是添加提醒的好方法。 帶有注釋的表達式列表。 沒有特別的順序。 DaVinci Resolve基礎(chǔ) time這將返回當前幀。(在“角度”參數(shù)上使用逆時針旋轉(zhuǎn)對象) time-1返回前一幀的值。(time- n) ( n = 前一幀數(shù)計數(shù),因此time-10將是從當前時間回溯 10 幀) -time返回當前幀的負值。(使用“角度”參數(shù)順時針旋轉(zhuǎn)對象) math.floor(3.5) 向負取整(就是向左取整),3.5取整話就是3或者4。往左是負往右是正。3和4兩個數(shù)是3在左邊所以取3。如果是-3.5,那么-4是在左邊,所以取的是-4 math.ceil(3.5)向正取整(就是向右取整),3.5取整話就是3或者4。往左是負往右是正。3和4兩個數(shù)4在右邊所以取4 math.modf(-3.5)向0取整。取兩個值。一個整型值,一個浮點值。返回值為-3和-0.5 用在表達式上會取前面一個值也就是-3 用在FUSION的表達式上可以不用寫math.) abs 將負數(shù)轉(zhuǎn)換為正數(shù) time/600返回當前幀除以 600(可用于控制速度,數(shù)字越大越慢) time*600返回當前幀乘以600(可用于控制速度,數(shù)字越大越快) sin(time) 這導致從 -1 到 1 的 14 位小數(shù) ceil(sin(time)) 這導致在 2 幀內(nèi)從 0 到 +1 的進展,因為 ceil 將小數(shù)點向上舍入。 floor(sin(time)) 當 ceil 將小數(shù)點向下舍入時,這會導致在 2 幀內(nèi)從 -1 到 0。 comp.RenderEnd 這將返回當前合成中的幀數(shù) comp.RenderEnd/2 返回合成的中間位置幀數(shù) (1-(time/comp.RenderEnd)*2) 這導致在合成長度的 50% 內(nèi)從 0 到 1 的進展,非常適合創(chuàng)建響應式動畫 ((comp.RenderEnd-comp.RenderStart)) 結(jié)果在合成中的幀數(shù) time/comp.RenderEnd 這導致從 0 到 1 的進展,非常適合創(chuàng)建響應式動畫 1-(time/comp.RenderEnd) 這導致從 1 到 0 的進展,非常適合創(chuàng)建響應式動畫 (time*360)/fps 1 每秒完整旋轉(zhuǎn)。(fps = 時間線幀率。)用于“角度”參數(shù) (time360)/(fps2)每 2 秒旋轉(zhuǎn) 1 次。(fps = 時間線幀率。)用于“角度”參數(shù) ceil(time/fps)結(jié)果倒數(shù)第二。(fps = 時間線幀率。) ceil((time)/comp:GetPrefs("Comp.FrameFormat.Rate"))結(jié)果倒數(shù)第二。(當 fps 未知時有用) ceil((comp.RenderEnd-time)/fps)根據(jù)組合長度以秒為單位返回倒計時。(fps = 時間線幀率。) ceil((comp.RenderEnd-time)/comp:GetPrefs("Comp.FrameFormat.Rate")) 根據(jù)合成長度以秒為單位返回倒計時,(當 fps 未知時很有用) max(floor(30-(time/fps)),0)結(jié)果是從 30 倒數(shù)到 0 的整數(shù)。(fps = 時間線幀率。) ceil(time/comp.RenderEnd*100) 返回組合長度的百分比。 ceil(time/comp.RenderEnd*100) .. "%"返回組合長度的百分比,并在末尾連接 .. % 符號。(所有字符串都需要“”) ceil((1-time/comp.RenderEnd)*100 返回組合長度的下降百分比。 ceil((1-time/comp.RenderEnd)*100) .. "%" 返回組合長度的向下百分比,并在末尾連接 .. % 符號。(所有字符串都需要“”) math.floor(PolylineStroke1.WriteOnEnd*100).."%" 創(chuàng)建“擦除”效果的“樣式文本”百分比。 math.floor(Circle1.Radius*100) 根據(jù)圓半徑向上計數(shù)。 math.floor(Rectangle1.Width*50).."%" 創(chuàng)建“矩形蒙版”的“樣式文本”百分比 :randomseed(floor(time/6)) ; return random() 會給你一個簡單的 0.1.0 值,每 6 幀改變一次 ceil(time/comp.RenderEnd*100) .. "%" 結(jié)果百分比“..”將百分比連接到最后 "Progress: " .. ceil(time/comp.RenderEnd*100) .. "%" 進行中的結(jié)果百分比“..”將百分比連接到最后 ceil((1-time/comp.RenderEnd)*100) .. "%" 結(jié)果在百分比中,comp ".." 將 % 連接到最后 "Progress: " .. ceil((1-time/comp.RenderEnd)*100) .. "%" 結(jié)果進行中 比較“..”的百分比下降將 % 連接到末尾 "Loading " .. ceil(time/24) .. "/" .. ceil(comp.RenderEnd/fps) 結(jié)果在 comp 的加載時間 文本驅(qū)動的表達式 ((Text1.Output.DataWindow[4]-Text1.Output.DataWindow[2])/Text1.Output.Height)返回文本節(jié)點的數(shù)據(jù)窗口的高度。(用于確定文本的高度) ((Text1.Output.DataWindow[3]-Text1.Output.DataWindow[1])/Text1.Output.Width) 返回 Text 節(jié)點的 DataWindow 的寬度。(用于確定文本的寬度) [1]=左側(cè),[2]=頂部,[3]=右側(cè),[4]=底部 Text1.StyledText.ValueORText1.StyledText[0]從 text+ 節(jié)點返回文本 Text1.StyledText.Value .. Text2.StyledText.Value 連接 2 個樣式文本字段 string.len(Text1.StyledText.Value 返回字符串的長度 :_, mylines = string.gsub(Text1.StyledText.Value, "\n", ""); return mylines 返回樣式文本字段中的行數(shù) min(time/(comp.RenderEnd/2),1)-(Text1.Delay)用于加擾文本隨機性以在合成(從單詞到加擾)延遲的中途結(jié)束加擾,這是一個從 0 到 0.25 的滑塊控件以允許延遲。使用 TimeSpeed 速度 -1 來反轉(zhuǎn)壓縮。延遲是一個從 0 到 0.25 的滑塊。 1-(time/comp.RenderEnd) 用于從加擾到單詞的加擾文本隨機性。 寫在表達式上 time/(comp.RenderEnd/fps)結(jié)果每幀一個字母“寫上”。(fps = 時間線幀率。) time/(comp.RenderEnd/fps)*2導致每幀兩個字母“寫入”(fps = 時間線幀速率。) time/(comp.RenderEnd/fps)/2結(jié)果在 fps 15 幀的一半內(nèi)出現(xiàn)“寫入”一詞。(fps = 時間線幀率。) time/(comp.RenderEnd/comp:GetPrefs("Comp.FrameFormat.Rate"))/2當幀速率未知時,會在 fps 的一半內(nèi)產(chǎn)生“寫入”一詞。小心奇數(shù) fps 23.976 等,因為動畫將嘗試在幀之間。 time/(comp.RenderEnd/comp:GetPrefs("Comp.FrameFormat.Rate"))/(Text1.WriteOn)添加一個帶有整數(shù)和步長 2 的滑塊控件“WriteOn”,用戶可以控制寫入速度 掩碼表達式 floor(-1*((Rectangle1.Height))/2)或floor(-Rectangle1.Height)/2返回遮罩的底部位置。 floor((Rectangle1.Height)/2) 返回遮罩的頂部位置。 我還沒有嘗試過,但是將 Height 更改為 Width 應該可以獲得側(cè)面位置。 (理想情況下使用轉(zhuǎn)換作為空對象) Point(Rectangle1.Center.Y-(Rectangle1.Width/2)+(Ellipse1.Width/2))將項目的邊緣放在蒙版的左側(cè)內(nèi)側(cè) Point(Rectangle1.Center.Y-(Rectabgle1.Width/2)-(Ellipse1.Width/2)) 將項目的邊緣放在蒙版的左側(cè) Point(Rectangle1.Center.X, (Rectangle1.Center.Y+(Rectangle1.Height/2))) 返回矩形遮罩的頂部位置 Point(Rectangle1.Center.X, (Rectangle1.Center.Y-(Rectangle.Height/2))) 返回矩形遮罩的底部位置 Point(Rectangle1.Center.Y+(Rectangle1.Width/2)) 返回矩形遮罩的 Right 位置 Point(Rectangle1.Center.Y-(Rectangle1.Width/2)) 返回矩形遮罩的左側(cè)位置 math.floor(((Transform1.XSize*100)-100)+100).."%"% 讀數(shù)為空。% 隨著 RectangleMask 的寬度變小而減少 math.floor((100-Transform1.XSize*100)).."%"% 讀到完整。% 隨著 RectangleMask 的寬度變大而增加 顯示日期和操作系統(tǒng)功能 Text1.StyledText = os.date('%x')返回日期。從下面更改 %x 將給出規(guī)定的結(jié)果。 %a縮寫的工作日名稱(例如,Wed) %A完整的工作日名稱(例如,星期三) %b縮寫的月份名稱(例如,Sep) %B完整月份名稱(例如,九月) %c日期和時間(例如,09/16/98 23:48:10) %d每月第16天 (16) [01-31] %H小時,使用 24 小時制 (23) [00-23] %I小時,使用 12 小時制 (11) [01-12] %M分鐘 (48) [00-59] %m月 (09) [01-12] %p "am" 或 "pm" (pm) %S秒 (10) [00-61] %w工作日 (3) [0-6 = 周日-周六] %x日期(例如 09/16/98) %X時間(例如,23:48:10) %Y全年 (1998) %y兩位數(shù)年份 (98) [00-99] %%字符 `%' 打開本地網(wǎng)頁 (Windows) os.execute ("start ../galleries/gallery.html" )使用本地 .htm 文件打開默認安裝的瀏覽器。在編輯控制按鈕內(nèi)使用。 打開本地網(wǎng)頁 (Mac) os.execute ("open ../galleries/gallery.html" )使用本地 .htm 文件打開默認安裝的瀏覽器。在編輯控制按鈕內(nèi)使用。 打開網(wǎng)頁 (Mac) os.execute('open "" "你的網(wǎng)址"')在編輯控制按鈕內(nèi)使用 打開網(wǎng)頁 (Windows) os.execute('start "" "你的網(wǎng)址"')在編輯控制按鈕內(nèi)使用。 不是這樣的表達式,而是用于向文本編輯器中的節(jié)點添加按鈕的 LUA。這是放在下面的行ViewInfo = OperatorInfo { Pos = { 0, 82.5 } }, UserControls = ordered() { ScriptButton = { LINKS_Name = "ScriptButton", LINKID_DataType = "Number", INPID_InputControl = "ButtonControl", INP_Integer = false, BTNCS_Execute = [[ os.execute('open "" "你的網(wǎng)址"') os.execute('start "" "你的網(wǎng)址"') ]], ICS_ControlPage = "Controls" } } 引用另一個節(jié)點中一個節(jié)點的值 Transform1:Angle結(jié)果是變換節(jié)點的角度。因此,您可以引用任何其他節(jié)點內(nèi)的任何節(jié)點屬性。(節(jié)點名稱:屬性) 從特定時間/框架獲取價值 Rectangle1:GetValue("Width", 10)返回節(jié)點“ Rectangle1 ”在第 10 幀處的寬度 Rectangle1.Width返回整個合成中每一幀“ Rectangle1 ”節(jié)點的寬度值 Merge1:GetValue("Center", time-1).X 從前一幀獲取點的 X 坐標 self:GetValue(....)要在不同時間獲取同一工具上的控件值,請使用self表示法: 獲取上一個節(jié)點值 我還沒有真正想出這個表達式的實際用例,但已經(jīng)嘗試根據(jù)框的寬度更改框的顏色。然而,這個表達式的實際應用是無限的。 self:GetSourceTool("[connected input]"):GetValue("[source parameter]",[source time] 一個重要的注意事項是在 Blackmagic Fusion 和 DaVinci Resolve 中,大多數(shù)這種性質(zhì)的表達都需要引用幀來從中提取數(shù)據(jù)。盡管如果需要,這可能只是第 0 幀,但當您添加time表達式時,樂趣就開始了。 上面的表達式將查看self:GetSourceTool("[connected input]"):節(jié)點的輸入,實際節(jié)點輸入例如“EffectMask”。這不會被誤認為是節(jié)點的名稱。 然后在此示例中需要源時間 time=frame 節(jié)點所在的幀乘以 2。表達式 = self:GetSourceTool("EffectMask"):GetValue(("Width2",time2)) comp:GetPrefs( )返回有關(guān)當前組合的信息 comp:GetPrefs("Comp.FrameFormat.Rate") 確定用戶時間線幀速率 這將返回實際的時間線幀率,這對于將變量添加到任何其他需要計算幀率的表達式非常有用。 comp:GetPrefs("Comp.FrameFormat.Width") 返回 DaVinci Resolve 中時間線分辨率的寬度,基本上 1080p 高清分辨率將返回 1920 comp:GetPrefs("Comp.FrameFormat.Height") 返回 DaVinci Resolve 中時間軸分辨率的高度,基本上 1080p 高清分辨率將返回 1080 實際圖像寬度和高度 我最近遇到有人想要獲得 MediaIn1 - MediaIn6 節(jié)點的分辨率而不是時間線的分辨率 self.Input.OriginalWidth 返回 DaVinci Resolve 中輸入分辨率的寬度 基本上 1080p 高清時間線上的 4K 視頻將返回 3840 self.Input.OriginalHeight 返回 DaVinci Resolve 中輸入分辨率的寬度 基本上 1080p 高清時間線上的 4K 視頻將返回 2160 下一個對我來說是新的,我仍在確定它的用途。目前,似乎確保 KEYFRAMESTRETCHER 根據(jù)全局輸入/輸出的長度計算所需的設(shè)置。經(jīng)過進一步調(diào)查,當使用全局輸入/輸出將節(jié)點設(shè)置在組合的總長度內(nèi)時,此表達式很有用。例如。通過將 KeyFrameStretcher 連接到此背景節(jié)點并使用此表達式將使其響應,149 幀的合成可以具有介于 0 - 149 之間的背景節(jié)點開始或結(jié)束。 KeyframeStetcher - 源端 min(Background1.GlobalOut,F1.FPS)這是查看反映全局輸入/輸出長度的背景節(jié)點參數(shù)。表達式中的FPS是時間線幀率。 溶解開關(guān) 溶解節(jié)點可用作背景和前景輸入之間的有效切換。它們可以鏈接在一起以在檢查器中創(chuàng)建用戶選項。 iif((comp.RenderEnd-time)<(comp.RenderEnd/2),0,1) 在合成的中點從背景輸入切換到前景輸入 時光機 這是一個強大的節(jié)點,這個節(jié)點有無數(shù)的表達式。 time<HoldFrame and time or time>HoldFrame+HoldTime and time-HoldTime or Hold_Frame 在 EditControls 中添加工具以提供 2 個滑塊,其中包含合成中的幀,然后您可以在一段時間內(nèi)暫停動畫。 整個工具都在這里,因此您可以對其進行逆向工程。TimeStrecher 動畫暫停節(jié)點 如果-那么-否則 iif(Merge1.Blend > 0.5, 1, 0)要根據(jù)條件(例如 if-then-else 表達式)切換值,請使用 iif() 函數(shù)。如果 Merge1.Blend 大于 0.5,這會將輸入的值設(shè)置為 1,否則設(shè)置為 0 或者, (Merge1.Blend > 0.5) and 1 or 0 以下 Lua 條件表達式也適用: 運營商 運算符用于評估語句。它們與函數(shù)結(jié)合使用以在 Number Out 和 Point Out 選項卡中執(zhí)行邏輯和數(shù)學計算。 x + yx 加 y。 x - yx 減去 y。 x < y 1.0如果 x 小于 y,則 x < y 1.0,否則為 0.0。 x > y 1.0如果 x 大于 y,則 x > y 1.0,否則為 0.0。 !x 1.0 如果 x = 0,否則為 0.0。 -x (0.0 - x)。 +x (0.0 + x)(實際上什么都不做)。 x ^ yx 的 y 次方。 x * yx 乘以 y。 x / yx 除以 y。 x % yx 取模 y,((x 除以 y)的余數(shù))。 x <= y 1.0如果 x 小于或等于 y,則 x <= y 1.0,否則為 0.0。 x >= y 1.0如果 x 大于或等于 y,則 x >= y 1.0,否則為 0.0。 x == y 1.0如果 x 正好等于 y,則 x = y 1.0,否則為 0.0。 x <> y 1.0如果 x 恰好等于 y,則 x == y 1.0,否則為 0.0(與上述相同)。 x <> y 如果 x 不等于 y,則為 1.0,否則為 0.0。 x != y 如果 x 不等于 y,則為 1.0,否則為 0.0(與上述相同)。 x & y 1.0如果 x 和 y 都不為 0.0,則 x & y 1.0,否則為 0.0。 x && y 1.0如果 x 和 y 都不是 0.0,則 x && y 1.0,否則為 0.0(與上述相同)。 x | y 1.0如果 x 或 y(或兩者)不為 0.0,則為 1.0,否則為 0.0。 x || y 1.0如果 x 或 y(或兩者)不是 0.0,則 y 1.0,否則為 0.0(與上述相同)。 公式 公式作為表達式的一部分輸入到 Number Out 或 Point Out 選項卡中。它們可以由以下功能組成: n1..n9 數(shù)字輸入 1..9 的值。 p1x..p9x 位置控制 1..9 的 X。 p1y..p9y 位置控制 1..9 的 Y。 time 當前時間(幀數(shù))。 pi pi 的值。 e e 的值。 log(x) x 的以 10 為底的對數(shù)。 ln(x) x 的自然(以 e 為底)對數(shù)。 sin(x) x 的正弦值(x 是度數(shù))。 cos(x) x 的余弦(x 是度數(shù))。 tan(x) x 的正切(x 是度數(shù))。 asin(x) x 的反正弦,以度為單位。 acos(x) x 的反余弦值,以度為單位。 atan(x) x 的反正切,以度為單位。 atan2(x, y) x,y 的反正切,以度為單位。 abs(x) x 的絕對(正)值。 int(x) x 的整數(shù)(整數(shù))值。 frac(x) x 的分數(shù)值。 sqrt(x) x 的平方根。 rand(x, y) x 和 y 之間的隨機值。 rands(x, y, s) x 和 y 之間的隨機值,基于種子 s。 min(x, y) x 和 y 的最小值(最低)。 max(x, y) x 和 y 的最大值(最高)。 dist(x1, y1, x2, y2) 點 x1,y2 和 x2,y2 之間的距離。 dist3d(x1,y1,z1,x2,y2,z2) 3D 點 x1,y2,z1 和 x2,y2,z2 之間的距離 noise(x) 基于 x 的平滑變化的 Perlin 噪聲值 noise2(x, y) 基于 x 和 y 的平滑變化的 Perlin 噪聲值 noise3(x, y, z) 基于 x、y 和 z 的平滑變化的 Perlin 噪聲值 if(c, x, y) 如果 c <> 0,則返回 x,否則返回 y。 緩動函數(shù)
|
|
|