File size: 4,875 Bytes
2a3df7f
 
 
 
6aa29cc
2a3df7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6aa29cc
 
2a3df7f
 
6aa29cc
2a3df7f
6aa29cc
 
 
 
2a3df7f
 
6aa29cc
 
 
 
 
 
 
2a3df7f
 
 
6aa29cc
 
2a3df7f
 
 
 
 
 
 
 
 
 
 
 
6aa29cc
2a3df7f
6aa29cc
2a3df7f
 
 
6aa29cc
2a3df7f
6aa29cc
2a3df7f
6aa29cc
 
 
 
 
 
2a3df7f
6aa29cc
2a3df7f
caa238e
6aa29cc
 
 
 
 
 
2a3df7f
6aa29cc
c121fb0
6aa29cc
 
 
 
 
 
ea3304c
6aa29cc
 
 
bf327cd
c121fb0
2a3df7f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from moviepy import VideoFileClip
import gradio as gr
import requests
import os
from gradio_client import Client, handle_file

def extract_audio(input_video_name):
    # Define the input video file and output audio file
    mp3_file = "audio.mp3"
    # Load the video clip
    video_clip = VideoFileClip(input_video_name)

    # Extract the audio from the video clip
    audio_clip = video_clip.audio
    duration = audio_clip.duration
    print(f"Audio duration: {duration}")
    # Write the audio to a separate file
    audio_clip.write_audiofile(mp3_file)

    # Close the video and audio clips
    audio_clip.close()
    video_clip.close()

    print("Audio extraction successful!")
    return mp3_file, duration


def download_video(url):
    response = requests.get(url, stream=True)
    response.raise_for_status()
    video_file = "video.mp4"
    with open(video_file, 'wb') as file:
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:
                file.write(chunk)
    print("Video downloaded successfully!")
    return video_file


def main(url, clip_type, parameters, progress=gr.Progress()):
    """
    This function reports progress by yielding intermediate updates. 
    Gradio watches these yields to update the progress bar.
    """
    if clip_type == "dub":
        progress(0, desc="پردازش شروع شد")
        yield "پردازش شروع شد", None
        time.sleep(2)
        
        progress(5, desc="در حال دریافت ویدئو")
        yield "در حال دریافت ویدئو", None
        video = download_video(url)

        #progress(10, desc="استخراج صوت")
        #yield "استخراج صوت", None
        #mp3_file, duration = extract_audio(video)
        
        progress(35, desc="تبدیل متن به صوت")
        yield "تبدیل متن به صوت", None
        client = Client("rayesh/transcribe")
        srt_file = client.predict(
        		mp3_file=handle_file(video),
        		api_name="/transcribe"
        )
        client.close()
        

        progress(55, desc="در حال ترجمه")
        yield "در حال ترجمه", None
        subtitle_file = translate(srt_file)


        output_video_file = dub(subtitle_file, video)
        progress(100, desc="Dubbing complete")
        yield "درحال پردازش ویدئو", output_video_file
        os.remove(subtitle_file)

    else:
        # Assume parameters is a comma-separated string: "color,font"
        color, font = parameters.split(",")
        progress(0, desc="پردازش شروع شد")
        yield "پردازش شروع شد", None

        progress(0.05, desc="در حال دریافت ویدئو")
        yield "در حال دریافت ویدئو", None
        video = download_video(url)

        progress(10, desc="استخراج صوت")
        yield "استخراج صوت", None
        mp3_file, duration = extract_audio(video)

        progress(0.35, desc="تبدیل متن به صوت")
        yield "تبدیل متن به صوت", None
        client = Client("rayesh/transcribe")
        srt_file = client.predict(
        		mp3_file=handle_file(mp3_file),
        		api_name="/transcribe"
        )
        client.close()

        progress(0.55, desc="در حال ترجمه")
        yield "در حال ترجمه", None
        client = Client("rayesh/translate")
        subtitle_file = client.predict(
        		file=handle_file(srt_file),
                max_chars=3000,
        		api_name="/translate"
        )
        client.close()

        progress(1.0, desc="Video editing complete")
        yield "درحال پردازش ویدئو", None
        client = Client("SPACERUNNER99/video_edite")
        output_video_file = client.predict(
        		srt=handle_file(subtitle_file),
        		input_video={"video":handle_file(video)},
        		color=color,
        		font=font,
                input_audio=handle_file(mp3_file),
        		api_name="/video_edit"
        )
        client.close()
        output_video_file = output_video_file['video']
        yield "درحال پردازش ویدئو", output_video_file
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")
        clip_type = gr.Dropdown(["dub", "sub"], label="Clip Type")
        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, clip_type, parameters],
            outputs=[progress_output, video_file_output],
        )

demo.launch(debug=True)