📜  obs studio 使用脚本 (1)

📅  最后修改于: 2023-12-03 14:44:51.940000             🧑  作者: Mango

使用脚本来增强 OBS Studio

OBS Studio 是一种开源的直播软件,提供了丰富的功能来让用户进行直播、视频录制、视频制作等任务。但有时候,我们需要一些特别的功能,这时候就可以使用脚本来实现增强,可以定制化、自动化地完成很多任务,提高工作效率。

使用 Lua 脚本

OBS Studio 支持 Lua 脚本,这是一种快速、简便的脚本语言,非常适合用于 OBS Studio 的扩展。你可以通过在菜单栏选择『工具』然后点击『脚本』来进入 Lua 脚本管理页面。

在这里,你可以添加、编辑、删除 Lua 脚本。点击『添加』按钮,可以创建一个新的 Lua 脚本,比如下面这个脚本用于在生成视频的时候添加静态的文字:

obs = obslua

function script_description()
    return "Adds a simple text overlay to the video"
end

function script_update(settings)
end

function script_properties()
    props = obs.obs_properties_create()

    obs.obs_properties_add_text(props, "text", "Text to show", obs.OBS_TEXT_DEFAULT)
    obs.obs_properties_add_int(props, "x", "X position", 0, 1920, 1)
    obs.obs_properties_add_int(props, "y", "Y position", 0, 1080, 1)

    return props
end

function script_defaults(settings)
    obs.obs_data_set_default_string(settings, "text", "Hello world!")
    obs.obs_data_set_default_int(settings, "x", 0)
    obs.obs_data_set_default_int(settings, "y", 0)
end

function script_save(settings)
end

function script_load(settings)
    source_name = "Text"

    source_def = obs.obs_source_def_create()
    obs.obs_source_def_set_id(source_def, source_name)
    obs.obs_source_def_set_name(source_def, "Text (lua)")

    obs.obs_source_def_set_flags(source_def, obs.OBS_SOURCE_VIDEO)
    obs.obs_source_def_set_create_fn(source_def, create_text)
    obs.obs_source_def_set_destroy_fn(source_def, destroy_text)
    obs.obs_register_source(source_def)
end

function create_text(source, settings)
    text_source = obs.obs_source_create("text_gdiplus", "Text (lua)", nil)
    text_string = obs.obs_data_get_string(settings, "text")
    obs.obs_data_set_string(obs.obs_data_create(), "text", text_string)
    obs.obs_source_set_text(text_source, obs.obs_data_create_from_json('{"text": "' .. text_string .. '"}'))

    pos_x = obs.obs_data_get_int(settings, "x")
    pos_y = obs.obs_data_get_int(settings, "y")
    transform = obs.obs_transform_create()
    matrix = obs.vec2()
    matrix.x = pos_x
    matrix.y = pos_y
    obs.obs_transform_set_translation(transform, matrix)
    obs.obs_source_set_transform(text_source, transform)

    return text_source
end

function destroy_text(source)
    obs.obs_source_release(text_source)
end

这个脚本定义了一个用于添加自定义文字水印的图层,可以自定义文字内容和位置,让你的视频更加有个性。

使用 Python 脚本

如果你更喜欢使用 Python 脚本,也没问题,OBS Studio 也支持 Python 脚本。你可以通过菜单栏选择『工具』然后点击『脚本』,进入 Python 脚本管理页面。

这个脚本用于创建一个新的窗口,当这个窗口关闭时,OBS Studio 也会退出。

import obspython as obs
import tkinter as tk

class PythonScript:
    def __init__(self):
        self.window = None

    def on_event(self, event):
        if event == obs.OBS_FRONTEND_EVENT_EXIT:
            if self.window is not None:
                self.window.destroy()

        return True

    def on_clicked(self):
        self.window = tk.Toplevel()
        self.window.protocol("WM_DELETE_WINDOW", self.on_window_closed)
        self.window.title("PythonScript Window")
        label = tk.Label(self.window, text="Hello, World!")
        label.pack()

    def on_window_closed(self):
        self.window.destroy()
        self.window = None

def script_description():
    return "A Python script that demonstrates how to create a window and exit OBS Studio on close"

def script_update(settings):
    pass

def script_properties():
    props = obs.obs_properties_create()

    obs.obs_properties_add_button(props, "button", "Click me", clicked)
    obs.obs_properties_add_bool(props, "check", "Checked")

    return props

def script_defaults(settings):
    obs.obs_data_set_default_bool(settings, "check", True)

def script_save(settings):
    pass

def script_load(settings):
    obs.obs_frontend_add_event_callback(on_event)
    python_script = PythonScript()
    obs.obs_data_set_ptr(settings, "python_script", python_script)

def clicked(props, prop):
    settings = obs.obs_properties_get_settings(props)
    python_script = obs.obs_data_get_ptr(settings, "python_script")
    python_script.on_clicked()

def on_event(event):
    settings = obs.obs_frontend_get_settings()
    python_script = obs.obs_data_get_ptr(settings, "python_script")
    if python_script is not None:
        python_script.on_event(event)

    return False
感谢

在 OBS Studio 中使用脚本能让你快速地完成一些定制化的任务。不同于其他软件,OBS Studio 提供了开放的脚本接口和很多扩展的文档来帮助你进行扩展。所以,我希望你能够学习和探索这个方向,将 OBS Studio 发挥到极致。