OBS-Websocket无法修改文本与图片源设置问题求助
OBS WebSocket 修改文本/图片源无效果的排查与解决
核心问题排查方向
1. 源名称完全匹配检查
OBS的源名称区分大小写、空格和特殊字符,必须确保代码中source_name_text、source_name_image的值和OBS界面里显示的源名完全一致(比如OBS里是"Text",代码里不能写"text")。
2. 图片路径有效性
- 优先使用绝对路径:OBS的工作目录可能和脚本运行目录不一致,相对路径可能无法被正确识别。可以用
os.path.abspath()将相对路径转为绝对路径,示例:import os new_image_file_path = os.path.abspath("image.png") - 路径格式规范:Windows系统下使用正斜杠
/或双反斜杠\\,避免转义错误。
3. 文本源API参数错误
你的代码中调用SetTextGDIPlusProperties时用了source_name参数,但obs-websocket-py的正确参数名是sourceName(驼峰命名),参数名不匹配会导致调用无效但无报错。修正后的调用:
ws.call(requests.SetTextGDIPlusProperties( sourceName=source_name_text, text="修改后的文本" ))
4. 源类型与API匹配
- 文本源必须是GDI+文本源:如果是「文本(FreeType2)」类型,需要改用
SetTextFreeType2PropertiesAPI。 - 图片源必须是图片源:不能是媒体源或其他类型,否则
SetSourceSettings的file参数不生效。
5. 调试API返回结果
即使无报错,也可以打印API调用的返回结果,查看是否存在隐藏的错误信息:
response = ws.call(request) print(response)
正常成功的返回会包含status:ok,如果有问题会返回对应的错误码和描述。
6. 文件权限与路径访问
确保OBS有访问图片文件的权限,避免将图片放在系统受保护目录(如Windows的Program Files),优先选择用户目录(如Documents)存放图片。
修正后的完整代码
from obswebsocket import obsws, requests import os new_image_file_path = os.path.abspath("image.png") source_name_text = "text" source_name_image = "image" def connect(): host = "localhost" port = 4455 password = "myPassword" ws = obsws(host, port, password) ws.connect() run(ws) ws.disconnect() # 执行完操作后断开连接 def run(ws): # 修改图片源 img_req = requests.SetSourceSettings( sourceName=source_name_image, sourceSettings={"file": new_image_file_path} ) img_res = ws.call(img_req) print("图片源修改响应:", img_res) # 修改GDI+文本源(修正参数名) text_req = requests.SetTextGDIPlusProperties( sourceName=source_name_text, text="已成功修改的文本内容" ) text_res = ws.call(text_req) print("文本源修改响应:", text_res) if __name__ == '__main__': connect()
内容的提问来源于stack exchange,提问作者JLP17
相关产品推荐
相关产品推荐

