File size: 3,453 Bytes
736d327
 
 
3c163a9
6903bca
3c163a9
85175e3
736d327
85175e3
 
 
3eba90e
e89f57c
 
 
576929d
a88794e
369ad25
e89f57c
576929d
a88794e
e58ef3a
a88794e
369ad25
3c163a9
e89f57c
369ad25
115a03f
 
 
 
 
 
3c163a9
 
 
369ad25
e89f57c
576929d
a88794e
e58ef3a
a88794e
369ad25
 
 
 
 
3c163a9
369ad25
 
3c163a9
 
3eba90e
369ad25
e89f57c
576929d
a88794e
e58ef3a
a88794e
3c163a9
369ad25
 
 
3c163a9
 
369ad25
 
3c163a9
 
e89f57c
369ad25
115a03f
4f894e0
ae57c03
a88794e
 
e89f57c
ae57c03
3eba90e
e89f57c
 
736d327
 
3c163a9
736d327
3c163a9
 
 
 
1bd792b
ae57c03
576929d
 
 
3c163a9
576929d
 
1bd792b
ae57c03
3c163a9
ae57c03
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
100
101
102
import requests
import os
import time
import tempfile
from gradio_client import Client, handle_file
import gradio as gr
from pathlib import Path

def download_file():
    return  gr.DownloadButton(visible=False)
    
def main(url, parameters, progress=gr.Progress()):
    try:
        font_type, font_size, font_color, service, target, style, subject = parameters.split(',')
        progress(0, desc="پردازش شروع شد")
        yield "پردازش شروع شد", None

        # Transcription Stage
        progress(0.35, desc="تبدیل صوت به متن")
        yield "تبدیل صوت به متن", None
        
        transcribe_client = Client("rayesh/transcribe")
        try:
            job = transcribe_client.submit(url, api_name="/transcribe")
            while not job.done():
                time.sleep(0.5)
                
            results = job.outputs()[0]
            print(results)
            if len(results) != 3:
                raise ValueError(f"Expected 3 outputs, got {len(results)}")
                
            srt_file, video, mp3_file = results
        finally:
            transcribe_client.close()

        # Translation Stage
        progress(0.55, desc="در حال ترجمه")
        yield "در حال ترجمه", None
        
        translate_client = Client("rayesh/translate")
        try:
            job = translate_client.submit(
                handle_file(srt_file),
                3000,
                api_name="/translate"
            )
            while not job.done():
                time.sleep(0.3)
            subtitle_file = job.outputs()[0]
        finally:
            translate_client.close()

        # Video Processing Stage
        progress(0.75, desc="پردازش ویدئو")
        yield "درحال پردازش ویدئو", None
        
        video_client = Client("SPACERUNNER99/video_edite")
        try:
            job = video_client.submit(
                handle_file(subtitle_file),
                {"video": handle_file(video["video"])},
                font_color,
                font_type,
                font_size,
                handle_file(mp3_file),
                api_name="/video_edit"
            )
            while not job.done():
                time.sleep(0.5)
                
            output_video = job.outputs()[0]['video']
            
                
        finally:
            video_client.close()

        yield "پردازش کامل شد", output_video

    except Exception as e:
        raise gr.Error(f"خطا در پردازش: {str(e)}")

with gr.Blocks() as demo:
    gr.Markdown("ویدئو خود را آپلود کنید و پارامترها را تنظیم نمایید")
    with gr.Column():
        progress_output = gr.Textbox(label="وضعیت پردازش", visible=False)
        video_file_input = gr.Text(label="لینک ویدئو")
        parameters = gr.Text(label="پارامترهای زیرنویس (قلم، اندازه، رنگ)")
        btn = gr.Button("ایجاد ویدئو جدید")
        download_link = gr.Text(label="لینک دانلود")
        
        btn.click(
            fn=main,
            inputs=[video_file_input, parameters],
            outputs=[progress_output, download_link],
            concurrency_limit=4,
        )
        d = gr.DownloadButton(value=download_link.value, visible=True)
        d.click(download_file, None, d)
demo.launch(debug=True)