Spaces:
Sleeping
Sleeping
File size: 4,107 Bytes
0835fb6 a3cd4b3 0835fb6 e7124c9 e129053 e8d7638 2fcdb31 cb1ba7f 23d4cfa 8bec4e8 0835fb6 a3cd4b3 8bec4e8 de207be 8bec4e8 0835fb6 c980ffd 47db964 a3cd4b3 47db964 a3cd4b3 47db964 a3cd4b3 0835fb6 a3cd4b3 0835fb6 a3cd4b3 7090097 a3cd4b3 | 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 | from transcribe import transcribe
from moviepy import VideoFileClip
from translate import translate
from edite_video import video_edit
import gradio as gr
import requests
import os
from dub import dub
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
video = download_video(url)
progress(5, desc="در حال دریافت ویدئو")
yield "در حال دریافت ویدئو", None
mp3_file, duration = extract_audio(video)
progress(10, desc="استخراج صوت")
yield "استخراج صوت", None
srt_list = transcribe(mp3_file)
progress(35, desc="تبدیل متن به صوت")
yield "تبدیل متن به صوت", None
subtitle_file = translate(srt_list)
progress(55, desc="در حال ترجمه")
yield "در حال ترجمه", None
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
video = download_video(url)
progress(5, desc="در حال دریافت ویدئو")
yield "در حال دریافت ویدئو", None
mp3_file, duration = extract_audio(video)
progress(10, desc="استخراج صوت")
yield "استخراج صوت", None
srt_list = transcribe(mp3_file)
progress(35, desc="تبدیل متن به صوت")
yield "تبدیل متن به صوت", None
subtitle_file = translate(srt_list)
progress(55, desc="در حال ترجمه")
yield "در حال ترجمه", None
output_video_file = video_edit(subtitle_file, video, color, font, input_audio="audio.mp3")
progress(100, desc="Video editing complete")
yield "درحال پردازش ویدئو", output_video_file
os.remove(subtitle_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)
|