如何使用 Silverstack 的脚本功能

影视制作

概述

Silverstack 脚本功能:有什么新内容?

两个真实使用例子

为什么脚本功能很重要

脚本编辑器

 

Silverstack 已涵盖丰富的现成可用片场数据管理及每日样片工作流。从可靠的装载到进阶每日样片创建,Silverstack XT 和 Silverstack Lab 旨在满足多数拍摄项目的需求。但在现实中,任意两套工作流都不会完全相同:管线不断演变,需求发生变化,很多边缘案例反而是常态而非例外。

这就是为什么我们已经更进了一步。随着脚本功能的引入,Silverstack 现在为你提供了灵活性,让你可以根据自己的自定义逻辑扩展和调整工作流。无论你是想自动化重复性很强的任务还是执行针对拍摄项目的规定,脚本功能都为你提供了额外的控制层级 —— 这种控制与 Silverstack 的工作流概念无缝集成。

在这篇文章中,我们将通过两个实际用例来探索新的脚本功能。这些例子应被视为你自行探索的起点,鉴于脚本能够以多种不同的方式应用。你可以根据自己的具体需求,决定它如何以及何时可适配你的工作流。它只是 Silverstack 工具包中的另一个选项,与预设、模板和配置一起 —— 所有这些都是为了助你塑造Silverstack以匹配你的工作方式而设计的。那么,我们来看看吧!

Silverstack 脚本功能:有什么新内容?

Silverstack 现在包含一个 Lua API 来访问 Silverstack 中的一些数据,还带一个内置的脚本编辑器。Lua 是一种轻量级的、自包含的脚本语言,旨在嵌入到软件中。它占用空间小且核心简单,非常适合执行可扩展的脚本功能,而 Silverstack 则定义可用的功能和环境。当从工作流配置窗口打开脚本时,你可以访问工作流上下文环境来获取脚本的相关信息,如片段元数据等等。你添加的脚本随后将作为配置工作流的一部分运行。我们将在后面更详细地介绍脚本编辑器,但首先,让我们厘清脚本在概念上是如何运作的。总的来说,脚本功能让你能以两种方式扩展工作流:在摄取过程中或作为任务完成后的后续步骤。让我们快速看一看这两种情况。

a) 元数据调整脚本:

这些脚本在摄取过程中运行,可以让你自动调整或丰富片段元数据。后期制作往往会请求 DIT 从不同摄影机型号间收集一致、详尽的元数据。因此,这些脚本可以用来清理元数据,比如从镜次编号中移除前导零。你可以通过 onStampVideo 和 onStampAudio 函数识别这些脚本:

1 function onStampVideo(videoClip)

2 local take = videoClip:metadata():getTake()

3 local n = tonumber(take)

4 if n then videoClip:metadata():setTake(tostring(n)) end

5 end

b) 后续步骤脚本:

这些脚本作为后续步骤添加到任务中,并自动响应工作流事件,如已完成的备份或转码。比方说,下面的脚本会将一个小日志文件写入任务的工作目录。而正如你在这里看到的,这些脚本可以触发 Silverstack 之外的操作。所有后续步骤脚本都使用 onFinish 函数运行:

1 function onFinish(_, _, workingPath)

2 local logFile = workingPath .. “/Silverstack_Log.txt”

3 os.execute(‘echo “Silverstack Job Finished” >> “‘ .. logFile .. ‘”‘)

4 end

 

Silverstack 脚本功能的最大优势在于这两种方法的灵活性 —— 使你能够在多种多样的情景中应用它们。在我们继续深入探讨更多具体例子之前,先来一则快速提示。

快速提示:这不是一份编程教程

请注意,这篇文章并不是要教你如何编程 —— 也不一定非要这样做。你不需要是软件开发人员也能从新的脚本功能中受益。如果你对底层概念有基本的理解,或者能够轻松地适应目前已提到的例子,那你就可以在日常工作中很好地使用脚本。

此外,如今在大语言模型(Large Language Models,LLM)的帮助下学习编程比以往任何时候都更容易 —— 它可以为你编写第一个Lua脚本提供指导。

尽管如此,本文的主要目标其实是解释为什么脚本功能很实用,以及它可以帮助你解决哪些问题。更多详细信息和分步说明可以在知识库中找到,而深入的脚本编写文档则可以在GitHub上找到。

两个真实使用例子

话不多说,让我们仔细看看两种常见的情景 —— 在这两种情景中,自定义脚本可以在你的日常工作中产生非常大的影响。

示例1:摄取过程中自动调整元数据

元数据是片场的常伴概念。一些值直接来自摄影机;其他值则需要在摄取过程中添加、修改或标准化。手动对每张卡或片段进行这些操作可能会非常重复且容易出错:小的不一致问题很容易变成漏网之鱼。

通过在摄取步骤中运行元数据调整脚本,这些调整可以自动进行。脚本可以检查某个特定的元数据字段是否已被设置,并且只有在它缺失或与所需填写的内容不同时才会填充。这样可保持现有信息完整,同时确保重要字段始终得到填充。在多摄影机设置中工作时,这一点尤为重要,因为元数据可能因制造商甚至摄影机而异。

比方说,你在用 ARRI ALEXA 35 拍摄,同时有一台 ARRI ALEXA Mini LF 作为第二摄影机进行拍摄。在摄取素材时,Silverstack 会提取第一台摄影机的字母标作“A_”,而第二台摄影机的字母就是“B”。脚本可帮助你根据需要调整摄影机字母。为了实现这一点,摄取脚本可如下所示:

1 function onStampVideo(videoClip)

2 local cameraIndex = videoClip:metadata():getCameraIndex()

3 if cameraIndex == nil then return end

4 local newCameraIndex = string.gsub(cameraIndex, “_+$”, “”)

5 videoClip:metadata():setCameraIndex(newCameraIndex)

6 end

 

眼下,如果你还没完全理解脚本的语法细节也不用太担心。在第2行,片段的当前摄影机字母被提取,而在第3行,如果片段不包含任何摄影机字母,脚本将停止。第4行将摄影机字母中的任何下划线字符替换为空字符串,并将其存储在变量 newCameraIndex 中,然后第5行将其设置为片段的新摄影机字母。就这么简单!

与其修改工作流或依赖手动检查,不如将工作逻辑封装在一个小型的、聚焦的脚本中,并在摄取过程中运行它。这样摄取工作流本身保持不变,只是多了这个额外逻辑在明确定义的范围内运行。

示例2:任务完成后触发外部沟通

你的工作不会在工作流(或任务)完成时结束。成功完成任务(如备份或转码)通常会引发后续操作:通知制片办公室、通知剪辑部门,或者仅仅是确认素材已得到安全备份。后续步骤脚本可在任务完成时自动做出响应,比如发一封包含相关工作流信息的电子邮件,可能包含任务状态以及数据写入到哪个卷:

1 function onFinish(_, _, workingPath, success)

2

3 local to = “production@example.com”

4 local subject = “Silverstack job finished”

5 local status = success and “Successful” or “Failed”

6 local body =

7 “The job has finished.\n\n” ..

8 “Working path: ” .. workingPath .. “\n” ..

9 “Result: ” .. status .. “\n”

10

11 local url = “mailto:” .. to .. “?subject=” .. subject .. “&body=” .. body

12

13 os.execute(‘open “‘ .. url .. ‘”‘)

14 end

 

这个脚本会创建一封邮件草稿,但不发送。邮件内容是通知收件人任务已完成,包括任务的工作目录(第8行)和任务结果(第9行)信息。你或许还能想到许多其他值得写的邮件信息,但为了此处的展示,我们就让这个例子保持简洁。

这里也强调的是操作的受控。后续步骤脚本只能在相关任务完成后启动的后续步骤中执行,并且要根据你指定的逻辑运行。你负责决定在什么条件下以及哪些操作会被触发。通过自动将你自己的逻辑嵌入工作流,你可以减少重复步骤,同时保持自行监督和负责。

为什么脚本功能很重要

上述例子突出了一个共同的主题:脚本功能使你能够扩展和制定个性化工作流,同时保持它们的一致性和可监督性。与其维护多个略有不同的工作流或引入临时变量,你可以以此保持一个简洁、结构化的设置,并使用脚本进行能反映项目需求的特定调整。

尽管如此,脚本功能并不是有效使用 Silverstack 的必要条件,只是对于需要额外自动化或定制的情景,它可以成为一种有价值的扩展。无论你是希望减少人工干预并简化流程的片场数据管理员或 DIT,还是一家以 Silverstack 为主要引擎搭建定制工具的公司,在某些情况下,脚本功能都可能派上用场。

脚本编辑器:自定义逻辑所在之地

为了支持这种级别的可扩展性,Silverstack 9.2 引入了一个专门的脚本编辑器。在这里,你可以创建、编辑和管理你的脚本,而无需离开软件内部。

E:\Charlie\FEED\Gaiamount资讯板块\20260518-0522\20260518 L-如何使用Silverstack的脚本功能(更新至5-5)\pomfort-silverstack-ui-script-editor.jpg
Silverstack Lab 和 XT 中的脚本编辑器

脚本编辑器与工作流密切相关。你可以在配置工作流的同时处理脚本,随着需求的变化对其进行调整,并在需要时在项目间重复使用它。脚本被管理存放在三个位置,而每个位置都服务于特定的目的:

·默认:由 Pomfort 提供的脚本,可以直接使用,也可以作为自己改编脚本的起点。

·项目:属于特定项目并确保随时间推移在特定项目中可重复使用的脚本

·共享:可在多个项目中使用的脚本,以支持多个项目的一致结果

这种结构反映了深思熟虑的设计选择,并支持可重复性、可追溯性和共享标准。所有脚本都作为常规文件存储在文件系统中,让你也能在访达中访问它们,并根据需要创建版本。在脚本编辑器中,你可以将默认脚本复制到项目或共享位置,比如从提供的默认脚本开始迭代。

最重要的是,脚本编辑器的设计旨在让你的脚本学习变得可管理。它包含一个 API 参考和多个功能,如自动补全或预览已编辑变量,助你在明确定义的范围内探索软件支持的函数。这就是为什么设计一个让用户能够快速且交互式地创建脚本的编辑器对我们来说如此重要。

然而,对于那些旨在处理更复杂设置的人来说,脚本编辑器让你能在你所选择的外部 IDE 中打开脚本。此外,技术用户和开发人员只需通过 require() 创建可加载的模块就可利用共享功能。

结论

脚本功能为 Silverstack 的工作流概念带来了新的多功能性。它为你提供了一个明确定义的扩展层,可反映你的项目在现实世界中的挑战,而无需重新设计你的设置。Silverstack 仍会继续像往常一样运作。脚本功能只是给了你一个选择来按你自己的情况做调整。你会在你自己的 Silverstack 工作流中扩展什么?欢迎与我们分享。


出处:Elwin | Pomfort

编译:Charlie | 盖雅翻译小组

 

views
https://cdn.filmmakermagazine.com/uploads/2025/07/01-e1753116760238.png
影视制作
摄影师在 LED 虚拟影棚中的操作指南

〖更新至6-10〗如何在 LED 虚拟影棚中拍摄

影视制作
FilmLight:现代广播电视中的 IT

〖更新至1-9〗现代广播电视