File size: 3,307 Bytes
858c126
 
 
0886646
 
858c126
0886646
858c126
 
 
 
 
 
 
 
 
 
64b7129
858c126
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0886646
 
858c126
 
0886646
858c126
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0886646
858c126
64b7129
858c126
 
0886646
858c126
 
 
 
 
 
0886646
858c126
 
 
0886646
858c126
0886646
 
858c126
 
 
 
 
 
 
 
 
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
"""
主程序入口点 - 用于 Hugging Face Spaces
"""
import os
import sys
import gradio as gr

# 确保能找到 install_pysrt 包
current_dir = os.path.dirname(os.path.abspath(__file__))
if current_dir not in sys.path:
    sys.path.append(current_dir)

# 尝试导入并安装 pysrt
try:
    import install_pysrt
    installed = install_pysrt.is_pysrt_installed()
    version = install_pysrt.get_pysrt_version() if installed else "未安装"
    
    if not installed:
        print("尝试安装 pysrt...")
        success = install_pysrt.installer.install_pysrt()
        if success:
            version = install_pysrt.get_pysrt_version()
            print(f"pysrt {version} 已成功安装")
        else:
            print("安装 pysrt 失败")
    else:
        print(f"pysrt {version} 已安装")
        
    import_success = True
except Exception as e:
    print(f"导入或安装 install_pysrt 时出错: {e}")
    import_success = False
    version = "错误"


def create_subtitle(start_time, end_time, text):
    """创建字幕并返回结果"""
    try:
        import pysrt
        from pysrt import SubRipFile, SubRipItem, SubRipTime
        
        # 解析时间
        start_parts = [int(x) for x in start_time.split(':')]
        end_parts = [int(x) for x in end_time.split(':')]
        
        if len(start_parts) == 3:
            start = SubRipTime(hours=start_parts[0], minutes=start_parts[1], seconds=start_parts[2])
        else:
            start = SubRipTime(minutes=start_parts[0], seconds=start_parts[1])
            
        if len(end_parts) == 3:
            end = SubRipTime(hours=end_parts[0], minutes=end_parts[1], seconds=end_parts[2])
        else:
            end = SubRipTime(minutes=end_parts[0], seconds=end_parts[1])
        
        # 创建字幕文件
        subs = SubRipFile()
        item = SubRipItem(index=1, start=start, end=end, text=text)
        subs.append(item)
        
        # 转换为字符串
        return str(subs), f"字幕已成功创建! pysrt 版本: {install_pysrt.get_pysrt_version()}"
    except Exception as e:
        return "", f"创建字幕时出错: {e}"

# 创建 UI
with gr.Blocks(title="pysrt 演示") as demo:
    gr.Markdown(f"""
    # pysrt 字幕演示程序
    
    当前 pysrt 状态: {"已安装 ✅" if import_success else "未安装 ❌"}
    
    版本: {version}
    """)
    
    with gr.Row():
        with gr.Column():
            start_time = gr.Textbox(label="开始时间 (分:秒 或 时:分:秒)", value="00:00")
            end_time = gr.Textbox(label="结束时间 (分:秒 或 时:分:秒)", value="00:10")
            text = gr.Textbox(label="字幕文本", value="这是一个测试字幕")
            create_btn = gr.Button("创建字幕")
        
        with gr.Column():
            result = gr.Textbox(label="生成的 SRT 内容", lines=10)
            status = gr.Textbox(label="状态")
    
    create_btn.click(fn=create_subtitle, inputs=[start_time, end_time, text], outputs=[result, status])

if __name__ == "__main__":
    # 显示 pysrt 安装状态
    print("-" * 50)
    print(f"pysrt 安装状态: {'成功' if import_success else '失败'}")
    if import_success:
        print(f"pysrt 版本: {version}")
    print("-" * 50)
    
    # 启动 UI
    demo.launch()