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)