File size: 2,003 Bytes
aadc20b
 
 
 
 
9f63b34
24e57b1
 
aadc20b
 
 
 
 
 
 
 
24e57b1
aadc20b
24e57b1
 
 
 
aadc20b
24e57b1
 
aadc20b
 
 
 
 
24e57b1
aadc20b
24e57b1
 
aadc20b
 
24e57b1
 
 
 
 
 
aadc20b
 
24e57b1
aadc20b
24e57b1
aadc20b
 
 
24e57b1
aadc20b
 
 
24e57b1
 
 
aadc20b
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
import gradio as gr
from pytube import YouTube
import whisper
from transformers import pipeline
from bark import generate_audio, preload_models
from moviepy import VideoFileClip
import os
import tempfile

# Load models
asr_model = whisper.load_model("base")
translator = pipeline("translation", model="Helsinki-NLP/opus-mt-en-hi")
preload_models()

def process_video(link):
    try:
        # Download audio from YouTube
        yt = YouTube(link)
        audio_stream = yt.streams.filter(only_audio=True).first()
        temp_dir = tempfile.mkdtemp()
        audio_path = os.path.join(temp_dir, "audio.mp4")
        audio_stream.download(filename=audio_path)

        # Step 2: Transcribe using Whisper
        result = asr_model.transcribe(audio_path)
        english_text = result["text"]

        # Step 3: Translate to Hindi
        hindi_text = translator(english_text)[0]['translation_text']

        # Step 4: Generate Hindi audio using Bark
        hindi_audio = generate_audio(hindi_text)
        hindi_audio_path = os.path.join(temp_dir, "hindi.wav")
        with open(hindi_audio_path, "wb") as f:
            f.write(hindi_audio)

        # Step 5: Merge audio with video
        audio_clip = mp.AudioFileClip(hindi_audio_path)
        video_clip = mp.ColorClip(size=(1280, 720), color=(0, 0, 0), duration=audio_clip.duration)
        final_video = video_clip.set_audio(audio_clip)
        output_path = os.path.join(temp_dir, "final_output.mp4")
        final_video.write_videofile(output_path, fps=24)

        return hindi_text, output_path

    except Exception as e:
        return f"Error: {str(e)}", None

gr.Interface(
    fn=process_video,
    inputs=gr.Textbox(label="YouTube Video Link"),
    outputs=[
        gr.Textbox(label="Hindi Translation"),
        gr.Video(label="Dubbed Hindi Video")
    ],
    title="πŸŽ™οΈ YouTube Hindi Dubber AI",
    description="Paste a YouTube video link. This app transcribes it, translates it to Hindi, and dubs it using Bark AI."
).launch()