Spaces:
Build error
Build error
import os | |
import uuid | |
from flask import Flask, request, render_template, redirect, url_for | |
from gtts import gTTS | |
from moviepy.editor import VideoFileClip, AudioFileClip | |
from tqdm import tqdm | |
import requests | |
app = Flask(__name__) | |
app.secret_key = os.environ.get('SECRET_KEY') or str(uuid.uuid4()) | |
def index(): | |
if request.method == 'POST': | |
if 'video_file' in request.files: | |
video_file = request.files['video_file'] | |
elif 'video_url' in request.form: | |
video_url = request.form['video_url'] | |
response = requests.get(video_url) | |
video_file = response.content | |
language = request.form['language'] | |
dubbed_video_file = generate_dubbed_video(video_file, language) | |
return redirect(url_for('download', video_id=dubbed_video_file)) | |
return render_template('index.html') | |
def download(video_id): | |
return render_template('download.html', video_id=video_id) | |
def generate_dubbed_video(video_file, language): | |
video_id = str(uuid.uuid4()) | |
video = VideoFileClip(video_file) | |
audio = video.audio | |
text = audio.to_soundarray().tobytes() | |
try: | |
tts = gTTS(text=text.decode(), lang=language) | |
except UnicodeDecodeError: | |
tts = gTTS(text=text.decode(errors='ignore'), lang=language) | |
tts.save(f'{video_id}.mp3') | |
audio_clip = AudioFileClip(f'{video_id}.mp3') | |
with tqdm(total=100, desc="Dubbing Progress", unit="%") as progress_bar: | |
for i, frame in enumerate(video.iter_frames()): | |
video.set_frame(i) | |
audio_frame = audio_clip.get_frame(i / video.fps) | |
video.audio = audio_frame | |
progress_bar.update(i / len(video.iter_frames()) * 100) | |
video.write_videofile(f'{video_id}.mp4', fps=video.fps) | |
return video_id | |
if __name__ == '__main__': | |
app.run(host="0.0.0.0",port=7860,debug=True) |