Spaces:
Running
Running
File size: 4,363 Bytes
736d327 6903bca 23e8597 736d327 23e8597 3eba90e e89f57c 23e8597 a88794e e89f57c 23e8597 a88794e e89f57c a88794e 770992d e89f57c a88794e e89f57c a88794e 3eba90e a88794e e89f57c 23e8597 a88794e e89f57c a88794e e89f57c a88794e 3eba90e a88794e e89f57c 23e8597 a88794e e89f57c a88794e e89f57c 23e8597 a88794e e89f57c 23e8597 3eba90e e89f57c 736d327 23e8597 736d327 23e8597 736d327 23e8597 736d327 b0d56ee |
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 |
from moviepy import VideoFileClip
import gradio as gr
import requests
import os
import time
from gradio_client import Client, handle_file
from pathlib import Path
# Store processed videos temporarily
PROCESSED_DIR = "processed_videos"
Path(PROCESSED_DIR).mkdir(exist_ok=True)
def main(url, parameters, progress=gr.Progress()):
try:
font_type, font_size, font_color, service, target, style, subject = parameters.split(',')
progress(0, desc="پردازش شروع شد")
yield "پردازش شروع شد", gr.DownloadButton.update(visible=False)
# Transcription Stage
progress(0.35, desc="تبدیل صوت به متن")
yield "تبدیل صوت به متن", gr.DownloadButton.update(visible=False)
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]
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 "در حال ترجمه", gr.DownloadButton.update(visible=False)
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 "درحال پردازش ویدئو", gr.DownloadButton.update(visible=False)
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']
# Save to processed directory with unique name
final_path = str(Path(PROCESSED_DIR) / f"output_{int(time.time())}.mp4")
Path(output_video).rename(final_path)
finally:
video_client.close()
yield "پردازش کامل شد", gr.DownloadButton.update(value=final_path, visible=True)
except Exception as e:
raise gr.Error(f"خطا در پردازش: {str(e)}")
def after_download():
return [gr.DownloadButton.update(visible=False), gr.Button.update(visible=True)]
with gr.Blocks() as demo:
gr.Markdown("## ویدئو خود را آپلود کنید یا لینک وارد نمایید")
with gr.Column():
progress_output = gr.Textbox(label="وضعیت پردازش", visible=False)
with gr.Row():
video_file_input = gr.Text(label="لینک ویدئو")
upload_btn = gr.UploadButton("فایل ویدئویی", file_types=["video/*"])
parameters = gr.Text(label="تنظیمات زیرنویس (فونت,اندازه,رنگ)")
create_btn = gr.Button("شروع پردازش")
download_btn = gr.DownloadButton("دانلود ویدئو نهایی", visible=False)
# Handle file upload
upload_btn.upload(
lambda f: [gr.Textbox.update(value=f.name), gr.DownloadButton.update(visible=False)],
upload_btn,
[video_file_input, download_btn]
)
# Processing handler
create_btn.click(
fn=main,
inputs=[video_file_input, parameters],
outputs=[progress_output, download_btn],
concurrency_limit=4,
)
# Download completion handler
download_btn.click(
fn=after_download,
inputs=None,
outputs=[download_btn, create_btn]
)
demo.launch(debug=True) |