Spaces:
Runtime error
Runtime error
File size: 2,154 Bytes
625fdcb cb7c94c 625fdcb cb7c94c cae88b4 cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cae88b4 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb 4e97e44 cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c 625fdcb cb7c94c |
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 |
from flask import Flask, request, render_template, send_file
import moviepy.editor as mp
import os
import cv2
import tempfile
from gtts import gTTS
import numpy as np
from progress.bar import Bar
import requests
app = Flask(__name__)
app.config["TEMP_FOLDER"] = "temp"
@app.route("/")
def index():
return render_template("index.html")
@app.route("/dub", methods=["POST"])
def dub():
# Check if a video was uploaded
if "video" in request.files:
video = request.files["video"]
filename = tempfile.NamedTemporaryFile(dir=app.config["TEMP_FOLDER"], delete=False).name
video.save(filename)
#filename = video.filename
#video.save(os.path.join(app.config["TEMP_FOLDER"], filename))
else:
# Get video from URL
url = request.form["url"]
filename = url.split("/")[-1]
response = requests.get(url)
with open(os.path.join(app.config["TEMP_FOLDER"], filename), "wb") as f:
f.write(response.content)
# Load video
clip = mp.VideoFileClip(os.path.join(app.config["TEMP_FOLDER"], filename))
# Get audio
audio = clip.audio
if isinstance(audio.fps, int):
n = audio.fps
else:
n = len(audio.fps)
bar = Bar("Dubbing", max=n)
text = ""
for i in range(n):
bar.next()
frame = audio.get_frame(i/audio.fps)
gray = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
text += " ".join([str(x) for x in gray.flatten()]) + " "
bar.finish()
# Convert audio to text-to-speech in Hindi
tts = gTTS(text, lang="hi")
tts.save("temp/dubbed_audio.mp3")
# Add dubbed audio to video
dubbed_audio = mp.AudioFileClip("temp/dubbed_audio.mp3")
dubbed_video = clip.set_audio(dubbed_audio)
dubbed_video.write_videofile(os.path.join(app.config["TEMP_FOLDER"], "dubbed_" + filename))
return render_template("dub.html", filename="dubbed_" + filename)
@app.route("/download/<filename>")
def download(filename):
return send_file(os.path.join(app.config["TEMP_FOLDER"], filename), as_attachment=True)
if __name__ == "__main__":
app.run(host="0.0.0.0",port=7860,debug=True) |