File size: 3,426 Bytes
736d327
 
 
 
 
 
 
 
 
3eba90e
e89f57c
 
 
 
a88794e
 
e89f57c
 
a88794e
 
 
 
e89f57c
 
a88794e
 
e89f57c
a88794e
 
e89f57c
 
 
a88794e
e89f57c
a88794e
 
3eba90e
a88794e
e89f57c
 
a88794e
 
 
 
e89f57c
 
 
 
 
a88794e
 
 
e89f57c
a88794e
 
3eba90e
a88794e
e89f57c
 
a88794e
 
 
 
e89f57c
 
 
 
 
 
 
 
 
 
a88794e
 
e89f57c
a88794e
 
e89f57c
 
3eba90e
e89f57c
 
736d327
 
 
 
 
 
 
 
 
 
 
cc72f06
736d327
 
 
 
 
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
from moviepy import VideoFileClip
import gradio as gr
import requests
import os
import time
from gradio_client import Client, handle_file



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)
                progress(0.35 + (job.status().progress * 0.15))
            
            if job.failed():
                raise gr.Error("Transcription API failed!")
                
            results = job.outputs()
            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)
                progress(0.55 + (job.status().progress * 0.15))
                
            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)
                progress(0.75 + (job.status().progress * 0.25))
                
            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("Start typing below and then click **Run** to see the progress and final output.")
    with gr.Column():
        progress_output = gr.Textbox(label="Progress", visible=False)
        video_file_input = gr.Text(label="Video URL")
        parameters = gr.Text(label="Additional Parameters (for subtitles: color,font)")
        btn = gr.Button("Create")
        video_file_output = gr.Video(label="Result Video")
        btn.click(
            fn=main,
            inputs=[video_file_input, parameters],
            outputs=[progress_output, video_file_output],
            concurrency_limit=4,
        )

demo.launch(debug=True)