刊名: 课程·教材·教法
Curriculum, Teaching Material and Method
主办: 人民教育出版社 课程教材研究所
周期: 月刊
出版地:北京
语种: 中文
开本: 大16K
ISSN: 1000-0186
CN: 11-1278/G4
历史沿革:
1981年创刊期刊荣誉:
国家新闻出版总署收录 ASPT来源刊
中国期刊网来源刊
2011年度核心期刊,国家新闻出版总署收录 ASPT来源刊,中国期刊网来源刊,百种重点期刊,社科双百期刊,首届全国优秀社科期刊。
关于Python编程助力OBS studio 网络推流自动化的初探
【作者】 毛国林
【机构】 浙江省绍兴市柯桥区湖塘中学
【正文】 【摘 要】 根据教育部停课不停学的文件精神,我区教育技术中心承担了这次学生线上同步教学视频网络推流活动,笔者有幸参与了八年级网络推流,在工作过程当中,发现OBS studio网络推流手动操控,存在人为忘记切换、节目间切换不流畅导致黑屏等现象,通过Python编写鼠标键盘模拟程序,达到了切换精准,节目播放流畅,实现了网络推流自动化,大大降低了人为因素导致节目播放出错的风险。
【关键词】 Python ;OBS studio;网络推流
2020年,一场突如奇来的新型冠状病毒疫情从湖北武汉蔓延开来,席卷整个中国大地,短短数月,夺去了我数千同胞的生命。一时间,人们纷纷居家隔离,防止交叉感染。教育部发文停课不停学的指令后,各地线上教学如雨后春笋,纷纷推出了由各地名师录制的教学视频,同时,部分学校任课教师转战成为了线上为学生答疑的角色。我区教育技术中心承担了这次网络推流活动,笔者有幸参与了八年级网络推流。在工作过程当中,发现OBS studio网络推流软件手动操控,存在人为忘记切换、节目间切换不流畅导致黑屏等现象,通过Python编写鼠标键盘模拟程序,达到了切换精准,节目播放流畅,实现了网络推流自动化,大大降低了人为因素导致节目播放出错的风险。
一、OBS studio网络推流流程及分析
(一)OBS studio网络推流操作流程
经过数天的OBS studio网络推流操作,发现其操作流程较简单,可大致分为以下几个步骤:
1、 启动计算机。
2、 用鼠标双击打开OBS studio网络推流软件。
3、 鼠标定位到第一个直播场景。
4、 在规定时间用鼠标点击“开始推流”,开始网络推流。
5、 在规定时间按键盘向下箭头切换场景。
6、 场景播完后,在规定时间“停止推流”结束推流。
7、 关闭OBS studio软件。
8、 关闭计算机。
(二)OBS studio网络推流操作流程自动化分析:
1、 启动计算机
启动计算机比较简单,可在BIOS中设置,在工作日开启即可。
2、用鼠标双击打开OBS studio网络推流软件(图1)
Python中调用pyautogui模块,可以实现鼠标、键盘的模拟控制。
3、光标定位到第一个场景
用Python中调用pyautogui模块,模拟键盘“Tab”健实现。
(图1)
4、在规定时间用鼠标点击“开始推流”,开始网络推流
用Python中调用pyautogui模块,通过在OBS studio网络推流软件中设置开始推流热键,“ctrl”+”shife”+”D”,模拟键盘实现。
5、在规定时间按键盘向下箭头切换场景
用Python中调用openpyxl模块,读取excel节目表中的对应节目播放时间存入列表,与计算机系统时间比对,比对成功,模拟键盘“↓”健实现。
6、场景播完后,在规定时间“停止推流”结束推流
用Python中调用pyautogui模块,通过在OBS studio网络推流软件中设置开始推流热键,“ctrl”+”shife”+”S”,模拟键盘实现。
7、关闭OBS studio软件
用Python中调用pyautogui模块,模拟键盘“AlT”+F4健实现。
8、关闭计算机
用Python中OS模块,调用shutdown程序实现。
二、Python软件安装及控制推流程序解析
为保证程序运行,首先要给计算机安装Python程序及Python第三方模块,可按以下方法操作进行。
1、Python下载及安装
笔者使用操作系统为win10 64,程序在python3.8.2 win64 下编译通过, 软件下载链接:https://www.python.org/downloads/,下载后运行安装,直至完成。
2、 Python第三方模块下载及安装
Pyautogui、openpyxl模块属于第三方模块,Python没有自带,?Python第三方模块下载链接https://pypi.python.org/pypi
第三方模块通常都需与Python版本对应,否者安装后将不能使用,模块安装可在DOS下进行。
模块安装 :pip install Pyautogui
PiP install openpyxl
注:pip安装程序在python3.8.2已经自带,安装模块时,需将模块包与pip程序在同一目录。
3、 控制推流程序及注释
程序通过while循环,模拟鼠标键盘操作,完成在指定时间加载节目列表,对OBS studio网络推流软件进行开始推流、切换节目,关闭推流,关装推流软件等操作,实现节目推流自动化。
以下是程序tuiliu.py代码及注释,外部数据库program.xlsx,与tuiliu.py放置同一目录。
#加载第三方模块及系统模块
import pyautogui,time,datetime,openpyxl,os
#主程序进入循环
while True:
t_date=datetime.date.today()
daynum=t_date.strftime(“%w”)
#推流日期为工作日周一至周五
if (daynum==“1”) or (daynum==“2") or (daynum==“3") or (daynum==“4") or (daynum==“5"):
#获取计算机系统日期,显示时、分、秒
xttime=time.strftime(“%H:%M:%S",time.localtime())
if(xttime==“07:00:00"):
#推流开启之前清空推流时间列表
timedat=[]
time.sleep(2)
#节目播放时间在时间列表内,按向下箭头,切换到下一各节目场景
if (xttime in timedat):
pyautogui.hotkey('down')
#为避免重复判断执行,设置2s等待时间,跳过这一节目时间点
time.sleep(2)
#因任务为上午推流,设置12:45:00停止推流
if (xttime==“12:45:00"):
#键盘按下'ctrl','shift','s' 停止推流热键,退出推流
pyautogui.hotkey('ctrl','shift','s')
#设置退出时间延长8S,确保成功退出推流
time.sleep(8)
#键盘按下'Alt',”F4t, 退出软件
pyautogui.hotkey('Alt',”F4t'')
time.sleep(4)
#07:28:00,打开推流软件,切换至第一个节目,打开推流
if (xttime==“07:28:00"):
#推流软件图标定位于桌面左上角,光标(40,43)位置双击,打开推流软件
pyautogui.doubleClick(40,43)
#延时16S等待打开
time.sleep(16)
#在推流软件中设定'ctrl','shift','D'热键,按下'ctrl','shift','D'组合键,开始网络推流
pyautogui.hotkey('ctrl','shift','D')
#延时14S等待推流直播
time.sleep(14)
#点击推流界面,激活推流软件窗口为当前窗口
pyautogui.click(1365,401)
#启动pyautogui自动防故障功能,防止光标移动出错
pyautogui.PAUSE=1
pyautogui.FAILSAFE=True
#按下Tab键,切换至第一个节目
pyautogui.hotkey('tab')
time.sleep(2)
#13:00:00,调用系统shutdown程序,强制关闭计算机
if (xttime==“13:00:00"):
os.system('shutdown -s -f -t 10')
#退出循环
break
#每周07:15:00点载入推流时间列表
if(xttime==“07:15:00"):
#excel工作簿中由Sheet1-Sheet5,5张工作表组成(图2),分表代表周一
#至周五的直播节目时间表
sheetnum=“Sheet"+str(daynum)
#显示星期
print(“今天是星期:"+str(daynum))
#初始化时间列表
timedat=[]
s1=“"
#加载工作簿'program.xlsx',路径位于解析器同一目录,,data_only=True
#表示将工式计算后引用
wb=openpyxl.load_workbook('program.xlsx',data_only=True)
#读取当前工作日工作表名
sheet=wb[sheetnum]
#将播放时间列读入至列表
for i in range(2,sheet.max_row+1):
#读取excel第3列节目播放时间
s1=s1+“\"“+str(sheet.cell(row=i,column=3).value )+"\“,"
timedat=“["+s1+“]"
#显示节目单
for i in range(1,sheet.max_row+1):
print(str(sheet.cell(row=i,column=2).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=3).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=1).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=4).value).rjust(12))
#退出工作表
del wb
time.sleep(2)
(图2)
三、控制推流程序改进及注意事项
(一)程序改进
以上程序若中途退出,又错过加载节目表时间,程序播放时间列表将得不到节目播放时间,导致不能定时切换节目。为解决这一问题,可在程序开头加载一遍节目表时间代码。
#加载周一至周五节目时间表 将这段程序放置while循环前,解决程序中途退出问题。
sheetnum=“Sheet"+str(daynum)
print(“今天是星期:"+str(daynum))
timedat=[]
s1=“"
wb=openpyxl.load_workbook('program.xlsx',data_only=True)
sheet=wb[sheetnum]
for i in range(2,sheet.max_row+1):
s1=s1+"\""+str(sheet.cell(row=i,column=3).value )+"\","
timedat="["+s1+"]"
for i in range(1,sheet.max_row+1):
print(str(sheet.cell(row=i,column=2).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=3).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=1).value).rjust(12),end="") print(str(sheet.cell(row=i,column=4).value).rjust(12))
del wb time.sleep(2)
(二)其他注意事项
1、在程序运行过程中,为避免弹窗出现影响键盘按键操作,需关闭杀毒软件,删除或关闭弹窗软件。
2、需将系统日期与网上校对,并显示秒数,方便推流查看。
3、当日推流完毕后,需将下一日推流内容在OBS studio网络推流软件中排好,若播放中途机器重启,需将当前节目重新打开。
4、一周节目表可在program.xlsx工作簿中提前输入。
5、zb.bat批处理,将其添加到开机启动文件夹下,实现开机加载控制推流程序,内容如下:
@echo off
cd\
C:
cd "Users\HTZX\AppData\Local\Programs\Python\Python38"
python c:\Users\HTZX\AppData\Local\Programs\Python\
Python38\tuiliu.py
pause
@cmd.exe
四、结语
该程序笔者在直播期间应用6周以上,稳定、可靠,切换精准,节目播放流畅,提高了工作效率,发挥了Python编程的优势,实现了疫情期间OBS studio网络推流自动化,惠及广大师生。
参考文献:
[1]美AlSweigart.Python编程快速上手[M].人民邮电出版社,2016
[2]李永华.PYTHON算法指南[M].人清华大学出版社,2019
【关键词】 Python ;OBS studio;网络推流
2020年,一场突如奇来的新型冠状病毒疫情从湖北武汉蔓延开来,席卷整个中国大地,短短数月,夺去了我数千同胞的生命。一时间,人们纷纷居家隔离,防止交叉感染。教育部发文停课不停学的指令后,各地线上教学如雨后春笋,纷纷推出了由各地名师录制的教学视频,同时,部分学校任课教师转战成为了线上为学生答疑的角色。我区教育技术中心承担了这次网络推流活动,笔者有幸参与了八年级网络推流。在工作过程当中,发现OBS studio网络推流软件手动操控,存在人为忘记切换、节目间切换不流畅导致黑屏等现象,通过Python编写鼠标键盘模拟程序,达到了切换精准,节目播放流畅,实现了网络推流自动化,大大降低了人为因素导致节目播放出错的风险。
一、OBS studio网络推流流程及分析
(一)OBS studio网络推流操作流程
经过数天的OBS studio网络推流操作,发现其操作流程较简单,可大致分为以下几个步骤:
1、 启动计算机。
2、 用鼠标双击打开OBS studio网络推流软件。
3、 鼠标定位到第一个直播场景。
4、 在规定时间用鼠标点击“开始推流”,开始网络推流。
5、 在规定时间按键盘向下箭头切换场景。
6、 场景播完后,在规定时间“停止推流”结束推流。
7、 关闭OBS studio软件。
8、 关闭计算机。
(二)OBS studio网络推流操作流程自动化分析:
1、 启动计算机
启动计算机比较简单,可在BIOS中设置,在工作日开启即可。
2、用鼠标双击打开OBS studio网络推流软件(图1)
Python中调用pyautogui模块,可以实现鼠标、键盘的模拟控制。
3、光标定位到第一个场景
用Python中调用pyautogui模块,模拟键盘“Tab”健实现。
(图1)
4、在规定时间用鼠标点击“开始推流”,开始网络推流
用Python中调用pyautogui模块,通过在OBS studio网络推流软件中设置开始推流热键,“ctrl”+”shife”+”D”,模拟键盘实现。
5、在规定时间按键盘向下箭头切换场景
用Python中调用openpyxl模块,读取excel节目表中的对应节目播放时间存入列表,与计算机系统时间比对,比对成功,模拟键盘“↓”健实现。
6、场景播完后,在规定时间“停止推流”结束推流
用Python中调用pyautogui模块,通过在OBS studio网络推流软件中设置开始推流热键,“ctrl”+”shife”+”S”,模拟键盘实现。
7、关闭OBS studio软件
用Python中调用pyautogui模块,模拟键盘“AlT”+F4健实现。
8、关闭计算机
用Python中OS模块,调用shutdown程序实现。
二、Python软件安装及控制推流程序解析
为保证程序运行,首先要给计算机安装Python程序及Python第三方模块,可按以下方法操作进行。
1、Python下载及安装
笔者使用操作系统为win10 64,程序在python3.8.2 win64 下编译通过, 软件下载链接:https://www.python.org/downloads/,下载后运行安装,直至完成。
2、 Python第三方模块下载及安装
Pyautogui、openpyxl模块属于第三方模块,Python没有自带,?Python第三方模块下载链接https://pypi.python.org/pypi
第三方模块通常都需与Python版本对应,否者安装后将不能使用,模块安装可在DOS下进行。
模块安装 :pip install Pyautogui
PiP install openpyxl
注:pip安装程序在python3.8.2已经自带,安装模块时,需将模块包与pip程序在同一目录。
3、 控制推流程序及注释
程序通过while循环,模拟鼠标键盘操作,完成在指定时间加载节目列表,对OBS studio网络推流软件进行开始推流、切换节目,关闭推流,关装推流软件等操作,实现节目推流自动化。
以下是程序tuiliu.py代码及注释,外部数据库program.xlsx,与tuiliu.py放置同一目录。
#加载第三方模块及系统模块
import pyautogui,time,datetime,openpyxl,os
#主程序进入循环
while True:
t_date=datetime.date.today()
daynum=t_date.strftime(“%w”)
#推流日期为工作日周一至周五
if (daynum==“1”) or (daynum==“2") or (daynum==“3") or (daynum==“4") or (daynum==“5"):
#获取计算机系统日期,显示时、分、秒
xttime=time.strftime(“%H:%M:%S",time.localtime())
if(xttime==“07:00:00"):
#推流开启之前清空推流时间列表
timedat=[]
time.sleep(2)
#节目播放时间在时间列表内,按向下箭头,切换到下一各节目场景
if (xttime in timedat):
pyautogui.hotkey('down')
#为避免重复判断执行,设置2s等待时间,跳过这一节目时间点
time.sleep(2)
#因任务为上午推流,设置12:45:00停止推流
if (xttime==“12:45:00"):
#键盘按下'ctrl','shift','s' 停止推流热键,退出推流
pyautogui.hotkey('ctrl','shift','s')
#设置退出时间延长8S,确保成功退出推流
time.sleep(8)
#键盘按下'Alt',”F4t, 退出软件
pyautogui.hotkey('Alt',”F4t'')
time.sleep(4)
#07:28:00,打开推流软件,切换至第一个节目,打开推流
if (xttime==“07:28:00"):
#推流软件图标定位于桌面左上角,光标(40,43)位置双击,打开推流软件
pyautogui.doubleClick(40,43)
#延时16S等待打开
time.sleep(16)
#在推流软件中设定'ctrl','shift','D'热键,按下'ctrl','shift','D'组合键,开始网络推流
pyautogui.hotkey('ctrl','shift','D')
#延时14S等待推流直播
time.sleep(14)
#点击推流界面,激活推流软件窗口为当前窗口
pyautogui.click(1365,401)
#启动pyautogui自动防故障功能,防止光标移动出错
pyautogui.PAUSE=1
pyautogui.FAILSAFE=True
#按下Tab键,切换至第一个节目
pyautogui.hotkey('tab')
time.sleep(2)
#13:00:00,调用系统shutdown程序,强制关闭计算机
if (xttime==“13:00:00"):
os.system('shutdown -s -f -t 10')
#退出循环
break
#每周07:15:00点载入推流时间列表
if(xttime==“07:15:00"):
#excel工作簿中由Sheet1-Sheet5,5张工作表组成(图2),分表代表周一
#至周五的直播节目时间表
sheetnum=“Sheet"+str(daynum)
#显示星期
print(“今天是星期:"+str(daynum))
#初始化时间列表
timedat=[]
s1=“"
#加载工作簿'program.xlsx',路径位于解析器同一目录,,data_only=True
#表示将工式计算后引用
wb=openpyxl.load_workbook('program.xlsx',data_only=True)
#读取当前工作日工作表名
sheet=wb[sheetnum]
#将播放时间列读入至列表
for i in range(2,sheet.max_row+1):
#读取excel第3列节目播放时间
s1=s1+“\"“+str(sheet.cell(row=i,column=3).value )+"\“,"
timedat=“["+s1+“]"
#显示节目单
for i in range(1,sheet.max_row+1):
print(str(sheet.cell(row=i,column=2).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=3).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=1).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=4).value).rjust(12))
#退出工作表
del wb
time.sleep(2)
(图2)
三、控制推流程序改进及注意事项
(一)程序改进
以上程序若中途退出,又错过加载节目表时间,程序播放时间列表将得不到节目播放时间,导致不能定时切换节目。为解决这一问题,可在程序开头加载一遍节目表时间代码。
#加载周一至周五节目时间表 将这段程序放置while循环前,解决程序中途退出问题。
sheetnum=“Sheet"+str(daynum)
print(“今天是星期:"+str(daynum))
timedat=[]
s1=“"
wb=openpyxl.load_workbook('program.xlsx',data_only=True)
sheet=wb[sheetnum]
for i in range(2,sheet.max_row+1):
s1=s1+"\""+str(sheet.cell(row=i,column=3).value )+"\","
timedat="["+s1+"]"
for i in range(1,sheet.max_row+1):
print(str(sheet.cell(row=i,column=2).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=3).value).rjust(12),end="")
print(str(sheet.cell(row=i,column=1).value).rjust(12),end="") print(str(sheet.cell(row=i,column=4).value).rjust(12))
del wb time.sleep(2)
(二)其他注意事项
1、在程序运行过程中,为避免弹窗出现影响键盘按键操作,需关闭杀毒软件,删除或关闭弹窗软件。
2、需将系统日期与网上校对,并显示秒数,方便推流查看。
3、当日推流完毕后,需将下一日推流内容在OBS studio网络推流软件中排好,若播放中途机器重启,需将当前节目重新打开。
4、一周节目表可在program.xlsx工作簿中提前输入。
5、zb.bat批处理,将其添加到开机启动文件夹下,实现开机加载控制推流程序,内容如下:
@echo off
cd\
C:
cd "Users\HTZX\AppData\Local\Programs\Python\Python38"
python c:\Users\HTZX\AppData\Local\Programs\Python\
Python38\tuiliu.py
pause
@cmd.exe
四、结语
该程序笔者在直播期间应用6周以上,稳定、可靠,切换精准,节目播放流畅,提高了工作效率,发挥了Python编程的优势,实现了疫情期间OBS studio网络推流自动化,惠及广大师生。
参考文献:
[1]美AlSweigart.Python编程快速上手[M].人民邮电出版社,2016
[2]李永华.PYTHON算法指南[M].人清华大学出版社,2019