网站制作多少钱方案,叮当快药网上商城,网站建设企业网站,上海公司买房需要什么条件前言
最近一直在研究孪生数字人wav2lip。目前成果可直接输入高清嘴型#xff0c;2070显卡1分钟音频2.6分钟输出。在直播逻辑上可以做到1比1.3这样#xff0c;所以现在开始研究直播。在逻辑上涉及到了无缝切换#xff0c;看到csdn上有一篇文章还要vip解锁。。。那自己研究吧…前言
最近一直在研究孪生数字人wav2lip。目前成果可直接输入高清嘴型2070显卡1分钟音频2.6分钟输出。在直播逻辑上可以做到1比1.3这样所以现在开始研究直播。在逻辑上涉及到了无缝切换看到csdn上有一篇文章还要vip解锁。。。那自己研究吧在这里我们以我现在的逻辑来实现一下无缝切换
举一个例子
来梳理一下我的逻辑通过obs推场景1中的一个视频循环播放一个不说话闭嘴的视频。当生成好说话的视频后控制obs修改场景2的来源视频路径然后自动切换场景2进行播放然后监听场景2视频播放完毕自动切回场景1不说话的视频~
来吧说干就干
obs-api文档https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#getmediainputstatus 不要问我为什么因为百度出来的相关现成轮子太少了最好看文档来选择和实现自己的业务很简单的
一、创建obs-ws服务端 二、创建两个场景和每个场景各添加一个视频来源 SceneName场景添加一个MediaSourceNameA来源添加视频A SceneName1场景添加一个MediaSourceNameB来源添加视频A【当数字人视频生成好通过py替换掉这个路径的】
SceneName场景的MediaSourceNameA的视频A设置循环播放。 目的是默认播放推流SceneName场景MediaSourceNameA的视频A也就是不说话时的视频。
三、python控制obs无缝切换场景
安装依赖
pip install obs-websocket-py 连接obs
# 连接OBS
ws obsws(192.168.31.73, 4455, YqShGFfdYaGxG7DG)
ws.connect()
这里地址来自这里 工具-》obs-websocket 设置 点击显示连接信息可以看到ip和密码。 当数字人视频生成好后执行下面代码 # 修改MediaSourceNameB来源的视频路径ws.call(requests.SetInputSettings(inputNameMediaSourceNameB, inputSettings{local_file: os.path.abspath(video_path)}))# 激活SceneName1场景播放视频ws.call(requests.SetCurrentProgramScene(sceneNameSceneName1)) 可以监听MediaSourceNameB场景的视频是否播放完毕当播放完毕切换回SceneName场景的循环播放视频。 while True:time.sleep(0.1)# 监听MediaSourceNameB视频播放状态status ws.call(requests.GetMediaInputStatus(inputNameMediaSourceNameB)).datainprint(status)# 播放完毕则切换回激活循环播放的SceneName场景视频if status[mediaState] OBS_MEDIA_STATE_ENDED:ws.call(requests.SetCurrentProgramScene(sceneNameSceneName))break 关闭websocket连接
# 断开连接
ws.disconnect()
四、实现自定义逻辑
什么一头雾水不难我教你ya
打开文档
https://github.com/obsproject/obs-websocket/blob/master/docs/generated/protocol.md#getmediainputstatus
比如查询视频播放状态
ws.call(requests.GetMediaInputStatus(inputNameMediaSourceNameB)).datain 搜索GetMediaInputStatus你可以在文档里看到名称一样的同时他有使用介绍。不会英文就翻译一下
会告诉你它是干什么的传什么参数会得到什么响应
也就是说这个文档里你想用哪个方法那就如下
requests.XXX
对于传参名文档里有在方法里对应写就行
requests.XXX(XXX???,XXX???)
必须由ws.call()包裹
默认返回对象.datain就是返回数据了 注意
对于修改的方法会让传对象文档里没有详细说对象里的参数名和格式这个比较坑不过它对应有个查询的方法根据查询得出结果的内容格式去写就行啦
好了整体就是这些啦根据我的方法自己去摸索一下就行了对于怎么推流这个是obs基础自行百度下就行了