Spaces:
Sleeping
Sleeping
| 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) | |