-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
OBS Studio Lua Скриптинг #1
Comments
Привет, я только зарегистрировался на этом сайте, мне нужен совет программиста:), я с помощью chatgpt написал скрипт lua для OBS - когда картинка замирает то скрипт быстро деактивирует и сразу активирует источник входного видеосигнала, когда вставляю этот скрипт в OBS то мне выдает такую ошибку "[Sony.lua] Error running file: [string "C:/Program Files/obs-studio/data/obs-plugins/..."]:52: attempt to call field 'obs_register_script' (a nil value)" -- Глобальная переменная для хранения предыдущего кадра -- Функция, которая будет вызываться при обновлении кадра -- Получаем информацию о состоянии текущего кадра -- Проверяем, является ли текущий кадр замороженным -- Сохраняем текущий кадр в переменной previous_frame -- Освобождаем ресурсы -- Функция, которая будет вызываться при загрузке скрипта -- Функция, которая будет вызываться при выгрузке скрипта -- Регистрируем функции загрузки и выгрузки скрипта |
Ну ChatGPT не подходит для этой задачи, можно попробовать через Github Copilot($), но я им не пользовался. Код выше содержит функции которых нет в API: obs_output_get_frames_behind , obs_output_get_frame_time и.т.д; Также неправильно реализован доступ к данным libobs, Вообще в Можно попробывать раз в секунду вызывать |
Всем привет, в этом руководстве рассмотрим создание скриптов для OBS на языке Lua.
Скриптинг в OBS доступен начиная с версии 21, на данный момент новейшая 26.0.0-rc3 версия доступна для тестирования.Обновление включает в себя виртуальную веб камеру (пока что только на Windows), улучшенный UI,возможность скриншота любого источника( КДПВ была сделана с помощью этой функции).
Описание глобальных функций, API, настроек
Добавить скрипт можно через меню -> Инструменты -> Скрипты -> значок "плюс".
Скрипты могут быть добавлены, перезагружены, удалены в режиме реального времени.
Сходства и различия c С-API
Сходства: почти полный доступ к API, СБОЙ или УТЕЧКА ПАМЯТИ с неправильно написанным скриптом.
Различия: некоторые функции(с двойными указателями) недоступны, некоторые заменены на другие.
У каждого скрипта своё пространство имён, убедиться в этом можно открыв текущую коллекцию сцен "~/obs-studio/basic/scenes".
Настройки
settings
представляют собой JSON строку, они могут быть созданы/загружены/сохранены с помощью JSON строк или файлов.Описание функций:
obslua
- модуль для доступа к функциям OBSscript_description()
- описание скрипта, поддерживает примитивный HTMLscript_properties()
- пользовательский интерфейсscript_defaults(settings)
- устанавливает настройки по умолчаниюscript_update(settings)
- вызывается каждый раз когда пользователь изменил настройки через пользовательский интерфейсscript_load(settings)
- загружает настройки при первом запускеscript_unload()
- вызывается при закрытии скриптаscript_save(settings)
- используется в основном для сохранения горячих клавиш, настройки c пользовательского интерфейса сохраняются автоматическиscript_tick(seconds)
- вызывается каждый кадр, аргумент seconds получает значение потраченных секунд с предыдущего кадраscript_path()
- возвращает абсолютный путь к папке скриптаtimer_add(callback,milliseconds)
- вызов функции периодичноtimer_remove(callback)
- удаление функции с таймера, также есть вариант использоватьremove_current_callback()
внутри функции которая вызывается периодичноПример скрипта
Скрипт: Движение по линии с использованием кнопок и таймера.
Короткая запись модуля,
local var
- инициализация значения какnil
,pos
- структура предоставляемая OBS для перемещения источников на сцене.Добавляем пользовательский интерфейс.
obs.obs_properties_add_button(props, "имя", "Описание",функция)
,local p = obs.obs_properties_add_list
- выпадающие меню с выбором источника ,source_id = obs.obs_source_get_unversioned_id(source)
- получение имени источника при этом игнорируя его версию ,obs.source_list_release(sources)
- освобождение памятиОбновление
selected_source
каждый раз когда настройки (выпадающее меню в этом случае) изменены.Выбор сцены и создание настроек для источника, добавление на сцену,освобождение памяти.
Функция перемещения источника в рамках сцены.
Кнопка перемещения источника и 2 необходимых аргумента.
Кнопка переключатель и таймер периодического запуска функции в миллисекундах.
![Гифка](https://camo.githubusercontent.com/0a1948a92dd07d8cec5f0e8d3743dfb9ab974f0565c67826e394be0cc5f47e45/68747470733a2f2f692e696d6775722e636f6d2f6b56764d3173372e676966)
Исходный код
Пример горячих клавиш
Скрипт: Создание постоянных и изменяющихся горячих клавиш.
Создание изменяющихся горячих клавиш, в том смысле что их можно поменять в настройках OBS.
Словарь с клавишами и функция типа "switch"
Сохранение/загрузка изменяющихся горячих клавиш.
Создание постоянных клавиш, их можно поменять в настройках, но при перезапуске OBS они примут значения по умолчанию. В данном случае кнопку 1 и 2.
Исходный код
Задачи
Задача на движение по кругу:
На основе скрипта движение по линии, создайте скрипт с движением вокруг часовой/против.
Задача на использование кнопок клавиатуры:
На основе скрипта с горячими клавишами, создайте скрипт с переключателем вкл/выкл,
доп кнопкой через JSON, доп кнопкой с комбинацией клавиш через JSON.
Ссылки
The text was updated successfully, but these errors were encountered: