File size: 5,338 Bytes
9c94c47
ed41184
 
9c94c47
91b987a
ed41184
 
9c94c47
ed41184
1f596d8
fc7755f
 
 
 
 
ed41184
 
beae951
fc7755f
1f596d8
7371a9e
9ed77ee
 
91b987a
9ed77ee
 
7371a9e
 
1f596d8
beae951
 
fc7755f
beae951
 
 
1f596d8
beae951
91b987a
beae951
 
91b987a
67a18a1
1f596d8
91b987a
9ed77ee
7371a9e
 
91b987a
7371a9e
 
1f596d8
ed41184
91b987a
ed41184
 
 
 
91b987a
 
 
 
 
 
 
 
 
 
 
 
 
 
7371a9e
91b987a
fc7755f
1f596d8
beae951
1f596d8
 
91b987a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ed41184
 
1f596d8
 
7371a9e
 
1f596d8
ed41184
 
 
 
 
 
1f596d8
fc7755f
1f596d8
7371a9e
 
1f596d8
ed41184
 
67a18a1
beae951
 
ed41184
beae951
 
91b987a
 
 
beae951
 
 
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import whisper
from transformers import MarianMTModel, MarianTokenizer, AutoTokenizer, AutoModelForSeq2SeqLM
import os
import tempfile
import subprocess

# Load Whisper model
model = whisper.load_model("base")

<<<<<<< HEAD
def process_video(video_path, language):
    # Create a temporary directory
    temp_dir = tempfile.gettempdir()
    output_video_path = os.path.join(temp_dir, "converted_video.mp4")
    srt_path = os.path.join(temp_dir, "subtitles.srt")

    try:
        # Convert video to MP4 using ffmpeg
        print(f"Converting video: {video_path} to MP4...")
=======
def process_video(video_path, language, progress=None):
    output_video_path = os.path.join(tempfile.gettempdir(), "converted_video.mp4")
    srt_path = os.path.join(tempfile.gettempdir(), "subtitles.srt")

    try:
        # Convert video to MP4 using ffmpeg
        if progress:
            progress(0.2, desc="πŸ”„ Converting video to MP4...")
>>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
        subprocess.run(
            ["ffmpeg", "-i", video_path, "-c:v", "libx264", "-preset", "fast", output_video_path],
            check=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE
        )
<<<<<<< HEAD
        print("Video converted successfully!")

        # Transcribe video
        print("Transcribing video...")
        result = model.transcribe(output_video_path, language="en")
        print("Transcription completed!")
=======

        # Transcribe video
        if progress:
            progress(0.4, desc="πŸ“ Transcribing audio...")
        result = model.transcribe(output_video_path, language="en")
        if progress:
            progress(0.6, desc="🌐 Translating subtitles...")
>>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47

        # Translation logic
        segments = []
        if language == "English":
            segments = result["segments"]
        else:
            model_map = {
                "Hindi": "Helsinki-NLP/opus-mt-en-hi",
                "Spanish": "Helsinki-NLP/opus-mt-en-es",
                "French": "Helsinki-NLP/opus-mt-en-fr",
                "German": "Helsinki-NLP/opus-mt-en-de",
                "Telugu": "facebook/nllb-200-distilled-600M",
                "Portuguese": "Helsinki-NLP/opus-mt-en-pt",
                "Russian": "Helsinki-NLP/opus-mt-en-ru",
                "Chinese": "Helsinki-NLP/opus-mt-en-zh",
                "Arabic": "Helsinki-NLP/opus-mt-en-ar",
                "Japanese": "Helsinki-NLP/opus-mt-en-jap"
            }
            model_name = model_map.get(language)
            if not model_name:
                return None

            # Load translation model
<<<<<<< HEAD
            print(f"Loading translation model: {model_name}")
=======
>>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
            if language == "Telugu":
                tokenizer = AutoTokenizer.from_pretrained(model_name)
                translation_model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
                tgt_lang = "tel_Telu"
                for segment in result["segments"]:
                    inputs = tokenizer(segment["text"], return_tensors="pt", padding=True)
                    translated_tokens = translation_model.generate(
                        **inputs, forced_bos_token_id=tokenizer.convert_tokens_to_ids(tgt_lang)
                    )
                    translated_text = tokenizer.batch_decode(translated_tokens, skip_special_tokens=True)[0]
                    segments.append({"text": translated_text, "start": segment["start"], "end": segment["end"]})
            else:
                tokenizer = MarianTokenizer.from_pretrained(model_name)
                translation_model = MarianMTModel.from_pretrained(model_name)
                for segment in result["segments"]:
                    inputs = tokenizer(segment["text"], return_tensors="pt", padding=True)
                    translated = translation_model.generate(**inputs)
                    translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)
                    segments.append({"text": translated_text, "start": segment["start"], "end": segment["end"]})

        # Create SRT file
<<<<<<< HEAD
=======
        if progress:
            progress(0.8, desc="πŸ“ Generating SRT file...")
>>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
        with open(srt_path, "w", encoding="utf-8") as f:
            for i, segment in enumerate(segments, 1):
                start = f"{segment['start']:.3f}".replace(".", ",")
                end = f"{segment['end']:.3f}".replace(".", ",")
                text = segment["text"].strip()
                f.write(f"{i}\n00:00:{start} --> 00:00:{end}\n{text}\n\n")
<<<<<<< HEAD
        print(f"SRT file saved to {srt_path}")
=======
        if progress:
            progress(1.0, desc="βœ… Done!")
>>>>>>> e219dd283e6bfab4f30d250a687e17c1cc380d47
        return srt_path

    except subprocess.CalledProcessError as e:
        print(f"FFmpeg Error: {e.stderr.decode()}")
        return None
    except Exception as e:
        print(f"Unexpected Error: {str(e)}")
        return None
    finally:
        # Clean up temporary files
        if os.path.exists(output_video_path):
            os.remove(output_video_path)
        if os.path.exists(video_path):
            os.remove(video_path)