项目名:洛曦 数字人视频播放器
功能:可以通过HTTP API传入需要播放的视频,并排队在web页面自动播放
目前支持的项目:
- Easy-Wav2Lip(gradio API,使用的B站:眠NEON 提供的整合包:视频传送门)
- Sadtalker(gradio API,整合包:夸克网盘, 迅雷云盘)
- GeneFacePlusPlus(gradio API,使用的B站:眠NEON 提供的整合包:视频传送门)
- MuseTalk(gradio API,整合包:)
- AniTalker(gradio API,使用的B站:刘悦的技术博客 提供的整合包:下载, 视频传送门)
python:3.10.10
pip install -r requirements.txt
自行根据需求修改config.json
python api_server.py
运行后,可以查看API文档:http://127.0.0.1:8091/docs
- 请求地址:
/show
- 请求类型: POST
- 描述: 传入视频进行播放,可以选择插入索引。
参数名 | 类型 | 是否必需 | 描述 |
---|---|---|---|
type | string | 是 | 使用的视频合成技术类型(easy_wav2lip / sadtalker / genefaceplusplus / musetalk / local) |
video_path | string | 是 | 视频文件的绝对路径(在local模式下必填) |
audio_path | string | 是 | 音频文件的绝对路径 |
captions_printer | dict | 否 | 字幕打印机相关参数,不传则不发送。content显示文本内容 start_delay显示文本内容的延时显示时间(毫秒) keep_time字幕保持时间(毫秒) 例如:{"content": "你好", "start_delay": 1000, "keep_time": 3000} |
insert_index | int | 是 | 插入索引值,队尾插入:-1,队首插入:0,其他自定义 |
move_file | bool | 否 | 是否移动合成或指定的视频文件到项目路径内。默认True |
参数名 | 类型 | 描述 |
---|---|---|
code | int | 状态码,200为成功,小于0为错误代码,大于0为部分成功代码 |
msg | string | 响应消息,描述请求的处理结果 |
- 请求地址:
/stop_current_video
- 请求类型: POST
- 描述: 跳过当前播放的视频,播放下一个视频。
参数名 | 类型 | 是否必需 | 描述 |
---|
参数名 | 类型 | 描述 |
---|---|---|
code | int | 状态码,200为成功,小于0为错误代码,大于0为部分成功代码 |
msg | string | 响应消息,描述请求的处理结果 |
- 请求地址:
/get_non_default_video_count
- 请求类型: POST
- 描述: 获取队列中非默认视频的个数
参数名 | 类型 | 是否必需 | 描述 |
---|
参数名 | 类型 | 描述 |
---|---|---|
code | int | 状态码,200为成功,小于0为错误代码,大于0为部分成功代码 |
count | int | 队列中非默认视频的个数 |
msg | string | 响应消息,描述请求的处理结果 |
- 请求地址:
/get_video_queue
- 请求类型: POST
- 描述: 获取视频播放列表数据。
参数名 | 类型 | 是否必需 | 描述 |
---|
参数名 | 类型 | 描述 |
---|---|---|
code | int | 状态码,200为成功,小于0为错误代码,大于0为部分成功代码 |
data | list | 存储视频信息的数据列表 |
message | string | 响应消息,描述请求的处理结果 |
- 请求地址:
/del_video_with_index
- 请求类型: POST
- 描述: 删除视频播放列表中指定索引的视频数据,返回删除后的视频列表数据
参数名 | 类型 | 是否必需 | 描述 |
---|---|---|---|
index | int | 是 | 删除索引值,从0开始,0就是首个待播放视频 |
参数名 | 类型 | 描述 |
---|---|---|
code | int | 状态码,200为成功,小于0为错误代码,大于0为部分成功代码 |
data | list | 存储视频信息的数据列表 |
message | string | 响应消息,描述请求的处理结果 |
- 请求地址:
/set_config
- 请求类型: POST
- 描述: 用于设置相关配置
参数名 | 类型 | 是否必需 | 描述 |
---|---|---|---|
captions_printer_api_url | string | 否 | 前端 字幕打印机API请求地址,例如:http://127.0.0.1:5500/send_message |
参数名 | 类型 | 描述 |
---|---|---|
code | int | 状态码,200为成功,小于0为错误代码,大于0为部分成功代码 |
data | list | list数据,存储着转换为url路径的视频地址 |
msg | string | 响应消息,描述请求的处理结果 |
提交issues前请先阅读以下内容
https://lug.ustc.edu.cn/wiki/doc/smart-questions
可以使用 GitHub Codespaces 进行在线开发:
-
v0.4.0
- 视频列表 视频数据改为播放后才删除,意味着你可以通过get_video_queue 获取视频列表的接口 得到当前播放视频的信息(第一个数据就是)
-
v0.3.4
- 新增接口 del_video_with_index,可以删除指定索引的视频
-
v0.3.3
- 后端允许跨域
-
v0.3.2
- show接口 captions_printer参数改为dict类型,直接传入相关的json数据,新增 keep_time键值,用于控制字幕显示时长(毫秒)
-
v0.3.1
- 新增接口 set_config,用于设置相关配置,暂时仅提供前端 字幕打印机API地址设置功能
- 页面自适应拉伸
-
v0.3.0
- show接口 新增参数 captions_printer 控制字幕打印机显示文本内容,不传则不发送
- show接口 新增参数 captions_printer_start_delay 字幕打印机显示文本内容的延时显示时间,不传则不发送
-
v0.2.3
- 新增接口 get_video_queue,获取获取视频播放列表数据。
- 修复 move_file传参不能关闭的bug
- 配置文件新增参数 auto_del_video,支持控制是否在播放完视频后删除视频
-
v0.2.2
- 对接 AniTalker gradio API(gradio_client版本要求1.2.0及以上)
- 删除旧版quart库实现的版本
-
v0.2.1
- 规范化API实现
-
v0.2.0
- 更换Quart为FastAPI
- 针对 gradio视频合成卡播放问题的解决(gradio同步请求阻塞了server的其他请求,而前端的视频加载是通过server的URL加载的,server被阻塞后无法处理URL请求,导致前端被卡视频加载导致卡顿。目前将请求通过线程池(10个)单独托管,避免阻塞)
-
v0.1.9
- easy_wav2lip文件传参改用gradio_client传递,可以支持本地文件传递到云API
- 提高httpx日志等级到WARNING
- 针对linux系统请求win的gradio时,路径解析不正常问题进行针对性修正
-
v0.1.8
- 支持接口 stop_current_video,跳过当前播放的视频,播放下一个视频
- 支持接口 get_non_default_video_count,获取队列中非默认视频的个数
- show接口新增参数 move_file,可以控制是否移动合成或指定的视频文件到项目路径内。默认True
-
v0.1.7
- 支持local类型,直接播放本地视频
- 支持 MuseTalk 对接
-
v0.1.6
- 新增默认配置
default_video
,可以在配置文件定义默认视频,不需要改源码了
- 新增默认配置
-
v0.1.5
- 生成的视频将在播放完毕后直接删除,节省存储
-
v0.1.4
- 支持local类型,可以直接传入本地视频进行播放
-
v0.1.3
- sadtalker新增参数
gradio_api_type
用于适配不同的接口传参(api_name/fn_index) - 补充测试图和视频
- sadtalker新增参数
-
v0.1.2
- 对接GeneFacePlusPlus(未测试)
-
v0.1.1
- 对接sadtalker
- API新增参数type
- 优化视频播放逻辑,尝试解决视频过渡时的无效等待问题
-
v0.1.0
- 初版发布