File size: 3,754 Bytes
736d327
 
 
3c163a9
6903bca
3c163a9
736d327
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
3c163a9
 
 
 
 
 
 
4f894e0
3c163a9
 
115a03f
3c163a9
a88794e
 
e89f57c
3c163a9
3eba90e
e89f57c
 
736d327
 
3c163a9
736d327
3c163a9
 
 
 
 
576929d
 
 
3c163a9
576929d
 
3c163a9
 
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
103
104
105
106
import requests
import os
import time
import tempfile
from gradio_client import Client, handle_file
import gradio as gr

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']
            
            
            # Create temporary file
            with tempfile.NamedTemporaryFile(delete=False, suffix=".mp4") as tmp_file:
                response = requests.get(output_video)
                tmp_file.write(response.content)
                tmp_file_path = tmp_file.name
            
            # Generate direct download link
            base_url = os.environ.get('GRADIO_SERVER_NAME', 'http://localhost:7860')
            download_url = f"{base_url}/file/{tmp_file_path}"
            print(download_url)
            
        finally:
            video_client.close()

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

    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.HTML(label="لینک دانلود")
        btn.click(
            fn=main,
            inputs=[video_file_input, parameters],
            outputs=[progress_output, download_link],
            concurrency_limit=4,
        )

demo.launch(debug=True)