File size: 1,625 Bytes
d8d694f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from pathlib import Path
import streamlit as st
from utils.digital_human.realtime_inference import gen_digital_human_video
from utils.model_loader import DIGITAL_HUMAN_HANDLER
from utils.web_configs import WEB_CONFIGS

def show_video(video_path, autoplay=True, loop=False, muted=False):
    # 需要 fp25 才能显示
    with open(video_path, "rb") as f_wav:
        video_bytes = f_wav.read()

    print(f"Show video: {video_path}")
    st.video(video_bytes, format="video/mp4", autoplay=autoplay, loop=loop, muted=muted)


def gen_digital_human_video_in_spinner(audio_path):
    save_path = None
    if st.session_state.gen_digital_human_checkbox and DIGITAL_HUMAN_HANDLER is not None:
        with st.spinner(
            "正在生成数字人,请稍等... 如果觉得生成时间太久,可以将侧边栏的【生成数字人】按钮取消选中,下次则不会生成"
        ):
            # save_tag = datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + ".wav"

            st.session_state.digital_human_video_path = gen_digital_human_video(
                DIGITAL_HUMAN_HANDLER,
                audio_path,
                work_dir=str(Path(WEB_CONFIGS.DIGITAL_HUMAN_GEN_PATH).absolute()),
                video_path=st.session_state.digital_human_video_path,
                fps=DIGITAL_HUMAN_HANDLER.model_handler.fps,
            )

            st.session_state.video_placeholder.empty()  # 清空
            with st.session_state.video_placeholder.container():
                show_video(st.session_state.digital_human_video_path)
            st.toast("生成数字人视频成功!")
    return save_path