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)